Files
server/DEPLOY.md
2025-12-17 12:33:42 -03:00

5.9 KiB

Guia de Implantação - DNSBlock

Este guia descreve os passos para implantar a aplicação DNSBlock em um ambiente de produção.

Pré-requisitos

  • Docker instalado
  • Docker Compose instalado
  • Git instalado (para clonar o repositório)
  • Make (opcional, para usar os comandos facilitadores)

Passos para Instalação

1. Clonar o Repositório

Clone o repositório da aplicação para o diretório desejado no servidor:

git clone <URL_DO_SEU_REPOSITORIO> dnsblock
cd dnsblock

2. Configurar Variáveis de Ambiente

Crie o arquivo .env a partir do exemplo fornecido:

cp .env.example .env

Edite o arquivo .env e ajuste as configurações para o ambiente de produção, especialmente as senhas e a URL da aplicação:

nano .env

Configurações Importantes:

  • DB_HOST: Mantenha como db (nome do serviço no docker-compose)
  • DB_ROOT_PASSWORD: Defina uma senha forte para o root do MySQL
  • DB_PASSWORD: Defina uma senha forte para o usuário da aplicação
  • APP_URL: A URL pública onde a aplicação será acessada (ex: https://painel.seudominio.com)
  • JWT_SECRET: Gere uma string aleatória e segura para assinar os tokens JWT

3. Inicializar os Containers

Você pode usar o comando make para facilitar o processo:

make up

Ou usar o comando manual:

docker-compose up -d --build

4. Inicializar o Banco de Dados

A primeira vez que o container do banco de dados sobe, ele pode estar vazio. Você precisa importar o esquema do banco de dados.

Recomendado (Corrige Encoding):

make import

Manual:

Se preferir fazer manualmente, certifique-se de usar a flag de charset para evitar problemas de codificação:

# Copiar esquema e seeds
docker exec -i dnsblock-db mysql -u root -p<SUA_SENHA_ROOT> dnsblock --default-character-set=utf8mb4 < database/schema.sql
docker exec -i dnsblock-db mysql -u root -p<SUA_SENHA_ROOT> dnsblock --default-character-set=utf8mb4 < database/seeds.sql

Nota: Substitua <SUA_SENHA_ROOT> pela senha definida no .env.

5. Criar Usuário Administrativo

O banco de dados inicia vazio. Você tem duas opções para criar o primeiro usuário:

Opção A: Usuário Padrão Se você executou o make import (ou importou o seeds.sql manualmente), o usuário padrão já foi criado:

  • Email: admin@dnsblock.com.br
  • Senha: admin123

Opção B: Criar usuário manualmente Se preferir criar um usuário específico:

  1. Acesse o banco de dados:
    docker exec -it dnsblock-db mysql -u root -p<SUA_SENHA_ROOT> dnsblock
    
  2. Execute o comando SQL (substitua os valores):
    -- A senha deve ser um hash Bcrypt. 
    -- Para 'admin123', o hash é: $2y$10$MKGTx67.xKf55GJ98R2AoOZPJX/p.3xEeBywIbvJ4nM5lCZazzCly
    
    INSERT INTO users (name, email, password, role) VALUES 
    ('Seu Nome', 'seu@email.com', '$2y$10$MKGTx67.xKf55GJ98R2AoOZPJX/p.3xEeBywIbvJ4nM5lCZazzCly', 'admin');
    

6. Configurar Permissões (Se necessário)

Certifique-se de que o servidor web tem permissão de escrita nos diretórios de log ou cache, se houver. No contexto do Docker, isso geralmente é tratado dentro do container, mas verifique se há volumes mapeados que precisam de permissão no host.

7. Acessar a Aplicação

A aplicação estará rodando na porta definida no docker-compose.yml (padrão: 8001).

  • Acesse: http://<IP_DO_SERVIDOR>:8001

8. (Recomendado) Configurar Proxy Reverso com SSL

Para produção, é altamente recomendado usar um proxy reverso (como Nginx ou Traefik) na frente da aplicação para gerenciar o SSL (HTTPS).

Exemplo de configuração básica do Nginx (no host):

server {
    listen 80;
    server_name painel.seudominio.com;

    location / {
        proxy_pass http://localhost:8001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Comandos Úteis

  • Parar aplicação: docker-compose down
  • Ver logs: docker-compose logs -f
  • Reiniciar aplicação: docker-compose restart

Otimização e Segurança

Arquivos Desnecessários (Agent, Código Fonte, etc.)

Ao clonar o repositório completo (git clone), você baixa todo o histórico e arquivos de desenvolvimento (como a pasta agent/). Isso é normal e esperado neste método de deploy simples.

No entanto, criamos um arquivo .dockerignore que garante que apenas os arquivos necessários para a aplicação web sejam copiados para dentro do container Docker.

Isso significa que:

  1. A pasta agent/ e outros arquivos de desenvolvimento NÃO estarão rodando dentro do container.
  2. O container de produção será leve e seguro.
  3. Os arquivos "extras" ficarão apenas na pasta do host, sem afetar a aplicação.

Método Avançado (Sem git clone no servidor)

Se você quiser evitar ter o código fonte no servidor de produção, a abordagem recomendada é:

  1. Build Local: Construa a imagem Docker na sua máquina ou CI/CD.
    docker build -t seu-usuario/dnsblock-app:latest .
    
  2. Push: Envie a imagem para um registro (Docker Hub, AWS ECR, etc.).
    docker push seu-usuario/dnsblock-app:latest
    
  3. Deploy: No servidor, copie apenas o docker-compose.yml e o .env, e ajuste a imagem para usar a versão do registro.
    # docker-compose.yml
    services:
      app:
        image: seu-usuario/dnsblock-app:latest
        # ... resto da configuração
    

Solução de Problemas

Senhas com Caracteres Especiais ($)

Se sua senha contiver o caractere $ (cifrão), o Docker Compose tentará interpretar o que vem a seguir como uma variável. Para evitar isso, você deve escapar o $ usando $$.

Exemplo:

  • Senha original: Minha$Senha
  • No arquivo .env: DB_PASS=Minha$$Senha