5.7 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)
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 comodb(nome do serviço no docker-compose)DB_ROOT_PASSWORD: Defina uma senha forte para o root do MySQLDB_PASSWORD: Defina uma senha forte para o usuário da aplicaçãoAPP_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
Execute o Docker Compose para construir e iniciar os serviços em segundo plano:
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.
Copie o arquivo de esquema para dentro do container e execute a importação:
# Aguarde alguns segundos para o banco de dados inicializar completamente
# Importar o esquema
docker exec -i dnsblock-db mysql -u root -p<SUA_SENHA_ROOT> dnsblock < database/schema.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: Importar dados de exemplo (Seeds)
Isso criará um usuário admin@dnsblock.com.br com senha admin123.
docker exec -i dnsblock-db mysql -u root -p<SUA_SENHA_ROOT> dnsblock < database/seeds.sql
Opção B: Criar usuário manualmente Se preferir criar um usuário específico:
- Acesse o banco de dados:
docker exec -it dnsblock-db mysql -u root -p<SUA_SENHA_ROOT> dnsblock - 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:
- A pasta
agent/e outros arquivos de desenvolvimento NÃO estarão rodando dentro do container. - O container de produção será leve e seguro.
- 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 é:
- Build Local: Construa a imagem Docker na sua máquina ou CI/CD.
docker build -t seu-usuario/dnsblock-app:latest . - Push: Envie a imagem para um registro (Docker Hub, AWS ECR, etc.).
docker push seu-usuario/dnsblock-app:latest - Deploy: No servidor, copie apenas o
docker-compose.ymle 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