commit f3df17aaa4216d1f2d82af08267c0185da970d96 Author: wander Date: Wed Jun 3 15:42:50 2026 -0300 Enviar arquivos para "/" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..58dd97b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM php:8.2-apache + +# Utilitários + extensões PHP +RUN apt-get update && apt-get install -y unzip \ + && docker-php-ext-install pdo pdo_mysql \ + && a2enmod rewrite \ + && sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +# Copia e extrai o zip na raiz do Apache +COPY app.zip /tmp/app.zip +RUN unzip /tmp/app.zip -d /var/www/html/ \ + && rm /tmp/app.zip + +# Permissões +RUN mkdir -p /var/www/html/uploads \ + && chown -R www-data:www-data /var/www/html \ + && chmod 755 /var/www/html/uploads + +EXPOSE 80 diff --git a/Leiame.txt b/Leiame.txt new file mode 100644 index 0000000..ccb0f1f --- /dev/null +++ b/Leiame.txt @@ -0,0 +1,19 @@ +1. PHP 8.2 + Apache (imagem base) +2. apt install unzip (para extrair o zip) +3. pdo + pdo_mysql (já resolvido antes) +4. mod_rewrite (Apache) +5. COPY app.zip → /tmp/app.zip +6. unzip → /var/www/html/ +7. rm app.zip (limpa o temporário) +8. cria uploads/ + permissões www-data +///////////////////////// +Como usar no Coolify +O repositório/contexto de build precisa ter dois arquivos na raiz: + +Dockerfile +app.zip ← zip com todas as pastas da aplicação +⚠️ Atenção com a estrutura do zip — ao criar o app.zip, zipar o conteúdo da pasta, não a pasta em si. Exemplo correto no terminal: + +# Dentro da pasta do projeto: +zip -r app.zip assets includes pages index.php login.php logout.php .env.example +Se o zip criar uma subpasta interna (ex: app/index.php), o unzip extrai para /var/www/html/app/ em vez de /var/www/html/ — e o site não abre. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..92284a5 --- /dev/null +++ b/README.md @@ -0,0 +1,100 @@ +# Catálogo Pessoal de Vídeos & Dicas + +Sistema PHP puro + MySQL para catalogar vídeos, artigos e anotações pessoais. + +## Requisitos + +- PHP 8.0+ +- MySQL 5.7+ / MariaDB 10.3+ +- Extensão PDO + pdo_mysql habilitada + +## Instalação + +### 1. Banco de dados + +```bash +mysql -u root -p -e "CREATE DATABASE catalogo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" +mysql -u root -p catalogo < catalogo_schema.sql +``` + +### 2. Configurar conexão + +Edite `includes/db.php` com suas credenciais: + +```php +define('DB_HOST', 'localhost'); +define('DB_NAME', 'catalogo'); +define('DB_USER', 'root'); +define('DB_PASS', 'sua_senha'); +``` + +### 3. Permissão de upload + +```bash +chmod 755 uploads/ +``` + +### 4. Servidor de desenvolvimento + +```bash +# Na raiz do projeto: +php -S localhost:8000 +``` + +Acesse: http://localhost:8000 + +### 5. Login padrão + +- **E-mail:** admin@local.dev +- **Senha:** admin123 + +> ⚠️ Troque a senha em produção! Use `password_hash('nova_senha', PASSWORD_BCRYPT)` e atualize na tabela `usuario`. + +--- + +## Estrutura de arquivos + +``` +/ +├── index.php # Dashboard +├── login.php # Tela de login +├── logout.php +├── assets/ +│ ├── css/style.css # Estilos (tema claro/escuro) +│ └── js/theme.js # Toggle de tema +├── includes/ +│ ├── db.php # Conexão PDO +│ ├── auth.php # Sessão e autenticação +│ ├── helpers.php # Utilitários (upload, tags, CSRF...) +│ └── layout.php # Header, sidebar, footer +├── pages/ +│ ├── conteudo/ # CRUD de conteúdos +│ │ ├── list.php +│ │ ├── form.php # Criar + Editar +│ │ ├── view.php +│ │ └── delete.php +│ ├── nota/ # CRUD de notas + upload +│ │ ├── list.php +│ │ ├── form.php +│ │ ├── view.php +│ │ └── delete.php +│ └── lookup/ # CRUD genérico: Tipo, Fonte, Tag +│ ├── _crud.php # Motor reutilizável +│ ├── tipo.php +│ ├── fonte.php +│ └── tag.php +└── uploads/ # Arquivos enviados (gitignore!) +``` + +## Funcionalidades + +- ✅ Login com sessão PHP + bcrypt +- ✅ CSRF em todos os formulários POST +- ✅ Dashboard com estatísticas +- ✅ Catálogo de conteúdos com filtros (tipo, fonte, ranking, busca) +- ✅ Notas com upload de arquivo (qualquer tipo, máx. 20MB) +- ✅ Tags N:N para conteúdos e notas +- ✅ Ranking de 1 a 5 estrelas (interativo) +- ✅ CRUD completo: Tipos, Fontes, Tags +- ✅ Tema claro/escuro persistido em localStorage +- ✅ Escape de output (XSS protection) diff --git a/app.zip b/app.zip new file mode 100644 index 0000000..58ff42b Binary files /dev/null and b/app.zip differ