diff --git a/.dockerignore b/.dockerignore index a0137ef..5ca6afd 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,15 +1,4 @@ +mysql_data +node_modules +agent .git -.gitignore -.env -.env.example -docker-compose.yml -Dockerfile -README.md -DEPLOY.md -agent/ -database/ -.idea/ -.vscode/ -vendor/ -node_modules/ -storage/ diff --git a/.gitignore b/.gitignore index 3bb36c2..0ddea9e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ agent/dist/* .DS_Store mysql_data/ storage/ + diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index da9f383..b7ab026 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,6 +18,9 @@ RUN apt-get clean && rm -rf /var/lib/apt/lists/* # Install PHP extensions RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd curl +# Configure PHP upload limits +RUN echo "upload_max_filesize = 40M\npost_max_size = 50M" > /usr/local/etc/php/conf.d/uploads.ini + # Enable Apache mod_rewrite RUN a2enmod rewrite diff --git a/app/Controllers/OrderController.php b/app/Controllers/OrderController.php index c3b1197..4e54cd5 100644 --- a/app/Controllers/OrderController.php +++ b/app/Controllers/OrderController.php @@ -80,7 +80,12 @@ class OrderController } if (!isset($_FILES['csv_file']) || $_FILES['csv_file']['error'] !== UPLOAD_ERR_OK) { - $_SESSION['flash_error'] = "Erro no upload do arquivo CSV."; + $csvError = $_FILES['csv_file']['error'] ?? 'desconhecido'; + if ($csvError === UPLOAD_ERR_INI_SIZE || $csvError === UPLOAD_ERR_FORM_SIZE) { + $_SESSION['flash_error'] = "O arquivo CSV/TXT excede o limite de tamanho permitido pelo servidor."; + } else { + $_SESSION['flash_error'] = "Erro no upload do arquivo CSV. (código " . $csvError . ")"; + } View::redirect('/admin/orders/create'); return; } diff --git a/doc/ATUALIZACAO.md b/doc/ATUALIZACAO.md new file mode 100644 index 0000000..4516205 --- /dev/null +++ b/doc/ATUALIZACAO.md @@ -0,0 +1,84 @@ +# Procedimento de Atualização + +Este documento descreve os passos necessários para atualizar a aplicação DNSBlock para a nova versão, incluindo a aplicação de migrações no banco de dados. + +## 1. Backup do Banco de Dados (Recomendado) + +Antes de qualquer atualização, é altamente recomendável fazer um backup do banco de dados atual para evitar perda de dados em caso de falhas. + +```bash +make backup +# O backup será salvo na pasta backups/ +``` + +## 2. Atualização do Código-Fonte + +Baixe as atualizações mais recentes do repositório (se estiver usando git) ou substitua os arquivos da aplicação pela nova versão. + +```bash +git pull origin main +``` + +## 3. Reconstrução e Reinício dos Containers + +Após atualizar o código, é fundamental reconstruir a imagem Docker da aplicação e reiniciar os containers. Isso garante que as novas configurações de ambiente (como aumento do limite de upload do PHP) sejam aplicadas corretamente. + +```bash +docker compose up -d --build +``` + +*(Nota: O comando `make restart` do Makefile apenas reinicia os containers, mas não força a reconstrução da imagem. Portanto, para atualizações de versão, utilize o comando acima).* + +## 4. Aplicação das Migrações de Banco de Dados (SQL) + +As atualizações que alteram a estrutura do banco de dados incluem arquivos `.sql` na pasta `database/migrations/`. Para aplicá-los, utilize o comando `docker exec` direcionando o arquivo para o container do MySQL. + +Para aplicar a migração mais recente referente ao suporte a anexos nas ordens judiciais, execute na raiz do projeto: + +```bash +docker exec -i dnsblock-db mysql -u root -p"$(grep DB_ROOT_PASSWORD .env | cut -d '=' -f2 | tr -d '\r')" dnsblock < database/migrations/2026_03_12_create_order_attachments.sql +``` + +**Regra Geral para Migrações:** +Caso existam múltiplas migrações que ainda não foram aplicadas em seu ambiente de produção, aplique-as uma a uma, respeitando a ordem cronológica dos prefixos dos arquivos (ex: `2025_...`, `2026_...`). Exemplo genérico: +```bash +docker exec -i dnsblock-db mysql -u root -p"$(grep DB_ROOT_PASSWORD .env | cut -d '=' -f2 | tr -d '\r')" dnsblock < database/migrations/ARQUIVO_DE_MIGRACAO.sql +``` + +## 5. Permissões de Diretório (Armazenamento Persistente) + +Para garantir que a aplicação consiga salvar arquivos enviados (como os PDFs de anexos) no diretório mapeado para o hospedeiro, é obrigatório ajustar as permissões do diretório `storage`. + +Após os containers estarem em execução, rode o seguinte comando na raiz do projeto para conceder a posse e permissão correta ao usuário do container web (`www-data`): + +```bash +docker exec dnsblock-app chown -R www-data:www-data /var/www/html/storage +docker exec dnsblock-app chmod -R 775 /var/www/html/storage +``` + +## 6. Validação da Atualização + +1. Acesse o sistema pelo navegador. +2. Limpe o cache do navegador (CTRL + F5) para garantir o carregamento de novos scripts, se houver. +3. Valide o funcionamento das novas entregas (ex: anexe um arquivo grande na página de Ordens Judiciais). +4. Verifique os logs se encontrar algum problema de comunicação: + ```bash + make logs + ``` + +## 7. Limpeza e Otimização (Opcional) + +Após a atualização bem-sucedida, é recomendado realizar uma limpeza no ambiente Docker para remover compilações antigas (imagens) e dados que não são mais utilizados, liberando espaço em disco no servidor. + +**Atenção:** Os comandos abaixo não afetarão conteinêres em execução nem os volumes que estão associados a eles (seus dados estarão seguros). + +Para remover **imagens antigas**, containers parados e redes não utilizadas: +```bash +docker system prune -f +``` + +Se você mudou volumes recentemente (como na migração do banco de dados) e tem certeza de que os **volumes antigos não são mais necessários**: +```bash +docker volume prune -f +``` +*(Nota: O comando de volumes remove TODOS os volumes Docker na máquina que não estejam atrelados a um container ativo. Use com cautela se houver outras aplicações no mesmo servidor).* diff --git a/resources/views/admin/orders/create.php b/resources/views/admin/orders/create.php index 361ba91..e4159e8 100644 --- a/resources/views/admin/orders/create.php +++ b/resources/views/admin/orders/create.php @@ -5,7 +5,7 @@ if ($hasError) { unset($_SESSION['flash_error']); // Prevent toast from showing } ?> -