# Guia de Migração para Produção Este guia descreve o procedimento seguro para atualizar o ambiente de produção para a nova arquitetura de persistência local, garantindo que nenhum dado seja perdido. ## Pré-requisitos 1. Acesso SSH ao servidor de produção. 2. Permissões de `sudo` ou docker. ## Procedimento Passo-a-Passo ### 1. Preparação e Backup Antes de atualizar qualquer código, faça o backup do banco de dados atual (que está rodando no volume Docker antigo). Se você já baixou o novo `Makefile`, pode usar o comando abaixo. Caso contrário, copie o `Makefile` para o servidor ou execute o comando manual. **Opção A: Usando Makefile (Recomendado)** ```bash make backup ``` *Isso criará um arquivo `.sql` na pasta `backups/`.* **Opção B: Manual** ```bash mkdir -p backups docker exec dnsblock-db mysqldump -u root -p --all-databases > backups/backup_pre_migration.sql ``` ### 2. Atualização do Código Baixe a versão mais recente do código que contém a nova configuração do `docker-compose.yml` (com volume `./mysql_data`) e o `.env` seguro. ```bash git pull origin main # Ou copie os arquivos manualmente se não usar git ``` ### 3. Configuração do Ambiente 1. Certifique-se de que o arquivo `.env` está configurado corretamente com as novas variáveis seguras (caso tenha mudado). 2. Garanta que o `.env` **NÃO** está versionado no git. ### 4. Reinicialização dos Serviços Agora vamos trocar a infraestrutura. Ao rodar este comando, o container do banco será recriado apontando para a nova pasta `./mysql_data` (que estará vazia inicialmente). ```bash make down make up ``` *Ou `docker-compose down && docker-compose up -d`* ### 5. Restauração dos Dados Agora que o banco novo está vazio, vamos importar o backup que fizemos no Passo 1. Identifique o nome do arquivo gerado em `backups/` (ex: `backups/backup_20241217_100000.sql`). ```bash make restore FILE=backups/backup_YYYYMMDD_HHMMSS.sql ``` **Manual:** ```bash docker exec -i dnsblock-db mysql -u root -p < backups/backup_pre_migration.sql ``` ### 6. Verificação Verifique se os dados foram restaurados corretamente acessando a aplicação ou consultando o banco: ```bash # Verifica se o cliente "IPv0 Soluções" está correto docker exec -i dnsblock-db mysql -u root -p dnsblock -e "SELECT name FROM clients WHERE id=1;" ``` ### 7. Limpeza (Opcional) Após confirmar que tudo está funcionando, você pode listar e remover o volume antigo do Docker, se desejar liberar espaço. ```bash docker volume ls # Remova o volume 'dnsblock_dbdata' se ele existir e não for mais usado # docker volume rm dnsblock_dbdata ```