Stack profissional para produção contendo todas as ferramentas necessárias para automação, atendimento ao cliente e integração WhatsApp Business.
- Portainer - Gerenciamento visual Docker Swarm
- Traefik v3 - Reverse proxy com SSL automático
- PostgreSQL 16 - Banco principal com pgvector (IA)
- Redis 7 - Cache e message broker
- MinIO - Object storage S3-compatible
- N8N - Automação workflows (4 serviços)
- Chatwoot - Plataforma de atendimento
- Evolution API - Integração WhatsApp Business
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh# Substituir pelo IP do seu servidor
docker swarm init --advertise-addr=SEU_IP_AQUI# Rede pública (Traefik)
docker network create --driver=overlay traefik_public
# Rede interna (aplicações)
docker network create --driver=overlay app_networksudo mkdir -p /var/data/minio
sudo chown -R $USER:docker /var/data/minio# 1. Portainer (gerenciamento)
docker stack deploy -c portainer.yml portainer
# 2. Traefik (reverse proxy)
docker stack deploy -c traefik.yml traefik# 3. PostgreSQL
docker stack deploy -c postgres.yml postgres
# 4. Redis
docker stack deploy -c redis.yml redis# 5. MinIO
docker stack deploy -c minio.yml minio# 6. N8N (4 serviços)
docker stack deploy -c n8n_editor.yml n8n-editor
docker stack deploy -c n8n_webhook.yml n8n-webhook
docker stack deploy -c n8n_worker.yml n8n-worker
docker stack deploy -c n8n_mcp.yml n8n-mcp
# 7. Evolution API
docker stack deploy -c evolution.yml evolution
# 8. Chatwoot (requer migração primeiro)
# Ver seção "Migração Chatwoot" abaixodocker service create --name chatwoot-migrate \
--network app_network \
--restart-condition none \
-e NODE_ENV=production \
-e RAILS_ENV=production \
-e SECRET_KEY_BASE=194F83A5E420E2908213782FE1E64C2E7C07B5C3F7409BA90138E2D1E658BD77 \
-e POSTGRES_HOST=postgres \
-e POSTGRES_USERNAME=app_user \
-e POSTGRES_PASSWORD="4hwM-An0+14dC=z" \
-e POSTGRES_DATABASE=chatwoot_database \
-e POSTGRES_PORT=5432 \
-e REDIS_URL=redis://:J40geW0tC8VoaUqoZ@redis:6379 \
chatwoot/chatwoot:v4.2.0 \
bundle exec rails db:chatwoot_prepare# Acompanhar logs
docker service logs -f chatwoot-migrate# Remover serviço temporário
docker service rm chatwoot-migrate
# Verificar tabelas criadas
docker exec $(docker ps -q -f name=postgres) psql -U app_user -d chatwoot_database -c "\dt"docker stack deploy -c chatwoot.yml chatwootAjuste os domínios nos arquivos YML conforme sua necessidade:
- Portainer:
painel.seudominio.com.br - Traefik:
traefik.seudominio.com.br(opcional) - MinIO API:
files.seudominio.com.br - MinIO Console:
minio.seudominio.com.br - N8N Editor:
editor.seudominio.com.br - N8N Webhook:
workflow.seudominio.com.br - Chatwoot:
chat.seudominio.com.br - Evolution API:
evo.seudominio.com.br
Antes do deploy, altere estas variáveis nos arquivos:
POSTGRES_PASSWORD: "SUA_SENHA_POSTGRES"--requirepass "SUA_SENHA_REDIS"MINIO_ROOT_USER: SEU_USUARIO_MINIO
MINIO_ROOT_PASSWORD: SUA_SENHA_MINIOSECRET_KEY_BASE: SUA_CHAVE_SECRETA_64_CHARSN8N_ENCRYPTION_KEY: SUA_CHAVE_N8N_32_CHARSAUTHENTICATION_API_KEY: SUA_CHAVE_EVOLUTION# SECRET_KEY_BASE (64 chars)
openssl rand -hex 32
# N8N_ENCRYPTION_KEY (32 chars)
openssl rand -hex 16
# Senhas seguras
openssl rand -base64 32# Listar todos os serviços
docker service ls
# Ver logs específicos
docker service logs -f NOME_DO_SERVICO
# Ver detalhes do serviço
docker service inspect NOME_DO_SERVICO# Containers rodando
docker ps
# Uso de recursos
docker stats
# Espaço em disco
docker system df- Certificados automáticos via Let's Encrypt
- Redirecionamento HTTP → HTTPS
- Headers de segurança configurados
- PostgreSQL: Apenas rede interna
- Redis: Apenas rede interna + senha
- MinIO: CORS configurado
- Todas aplicações: Atrás do Traefik
# Ver logs de erro
docker service logs NOME_SERVICO
# Ver eventos do swarm
docker events
# Verificar constraints
docker service inspect NOME_SERVICO --format '{{.Spec.TaskTemplate.Placement}}'# Ver logs do Traefik
docker service logs traefik
# Verificar DNS
nslookup seudominio.com
# Testar portas
curl -I http://seudominio.com# Testar PostgreSQL
docker exec CONTAINER_POSTGRES psql -U app_user -d app_database -c "SELECT 1"
# Testar Redis
docker exec CONTAINER_REDIS redis-cli ping# PostgreSQL
docker exec postgres pg_dump -U app_user app_database > backup.sql
# MinIO
mc mirror minio/bucket /backup/minio/
# Volumes Docker
docker run --rm -v volume_name:/data -v /backup:/backup alpine tar czf /backup/volume.tar.gz -C /data .- GitHub: https://github.com/andersonlemesc/stacks_producao
- Issues: Reporte problemas na seção Issues do GitHub
- Documentação: Wiki do repositório
- CPU: 4 vCPUs (mínimo 2)
- RAM: 8GB (mínimo 6GB)
- Storage: 80GB SSD
- OS: Ubuntu 22.04 LTS
Este projeto está sob licença MIT. Veja o arquivo LICENSE para mais detalhes.
Contribuições são bem-vindas! Por favor:
- Fork o projeto
- Crie uma branch para sua feature
- Commit suas mudanças
- Push para a branch
- Abra um Pull Request
🚀 Desenvolvido por Anderson Lemes
📺 YouTube: AndersonLemes
💼 LinkedIn: AndersonLemes