# 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<SUA_SENHA_ATUAL> --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<NOVA_SENHA_ENV> < 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<NOVA_SENHA_ENV> 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
```
