Nesta aula vamos instalar a Evolution Go do zero na sua VPS, usando Portainer, Docker Swarm e Traefik, com persistência em PostgreSQL. Diferente de tutoriais genéricos, aqui cada passo existe para evitar que o serviço fique em crash loop por não conseguir criar os bancos de autenticação e usuários. Siga estritamente na ordem.
Pré-requisitos
Antes de começar, seu ambiente já precisa ter rodando:
- Portainer (gerenciador do Docker Swarm).
- Traefik (proxy reverso, com rede
traefik_publice resolver de SSLleconfigurado). - PostgreSQL (acessível na rede
digital_networkpelo hostnamepostgres). - DNS configurado: aponte o subdomínio da API (ex:
evolution-go.seudominio.com.br) para o IP do seu servidor.
Link das aulas pré-requisitas abaixo:
Passo a Passo
Passo 1: Autenticar no Docker Hub (evita erro toomanyrequests)
Faça login no Docker Hub direto no terminal do servidor:
docker login
Passo 2: Baixar a imagem manualmente antes do deploy
Baixe a imagem oficial da Evolution Go:
docker pull evoapicloud/evolution-go:latest
Passo 3: Criar os bancos de dados no PostgreSQL
A Evolution Go usa dois bancos separados: um para autenticação e outro para usuários. Acesse o container do seu Postgres:
PG=$(docker ps -qf name=postgres) docker exec -i $PG psql -U postgres -c "CREATE DATABASE evogo_auth;" docker exec -i $PG psql -U postgres -c "CREATE DATABASE evogo_users;"
Passo 4: Criar os volumes externos
A Evolution Go guarda dados de autenticação e logs em volumes próprios:
docker volume create evolution_go_data docker volume create evolution_go_logs
Passo 5: Preparar as variáveis de ambiente
Gere uma chave forte para a API:
openssl rand -hex 32
Monte o bloco de Environment Variables com domínio, chave da API, senha do Postgres e os nomes dos dois bancos:
# ========================================== # DOMÍNIO # ========================================== EVOLUTION_GO_DOMAIN=evolution-go.seudominio.com.br # ========================================== # SEGURANÇA # ========================================== GLOBAL_API_KEY=gere_uma_chave_segura_aqui # ========================================== # BANCO DE DADOS (POSTGRESQL) # ========================================== POSTGRES_PASSWORD=sua_senha_do_banco_aqui POSTGRES_DATABASE_AUTH=evogo_auth POSTGRES_DATABASE_USERS=evogo_users
Passo 6: Ajustar e colar a stack no Portainer
Vá em Stacks → Add stack, dê o nome de evolution-go e cole o código docker-compose.yml da stack. Abaixo do editor, ative Environment variables, clique em Advanced mode e cole o bloco do Passo 5. Clique em Deploy the stack.
⬇️ Ver e copiar a stack completa
Passo 7: Acompanhar o boot
Acompanhe os logs do serviço para confirmar que ele conectou nos dois bancos sem erro:
docker service logs evolution-go_evolution_go --tail 50 -f
Passo 8: Primeiro acesso
Quando o serviço estiver com status Running (em verde) no Portainer:
- A API estará disponível em
https://evolution-go.seudominio.com.br. - Use o header
Authorization(ou o header exigido pela versão instalada) com o valor daGLOBAL_API_KEYdefinida no Passo 5 para autenticar suas primeiras requisições.
Resolução de Problemas Comuns na Evolution Go
| Sintoma | Causa | Solução |
|---|---|---|
| Serviço em crash loop reiniciando | Bancos evogo_auth ou evogo_users não existem ou senha do Postgres incorreta | Confirme se os dois bancos foram criados no Passo 3 e revise POSTGRES_PASSWORD nas variáveis de ambiente |
| Gateway retornando 502 Bad Gateway | Traefik não encontra a rota ou o serviço não está na rede digital_network | Confirme se ambas as redes (traefik_public e digital_network) estão atribuídas ao serviço |
| Requisições retornando erro de autenticação | GLOBAL_API_KEY divergente entre a stack e a chamada à API | Revise se o valor enviado na requisição é exatamente o mesmo definido nas variáveis de ambiente |
| Logs não persistem após reiniciar o container | Volumes evolution_go_data/evolution_go_logs não foram criados como externos | Execute o Passo 4 antes do deploy da stack, criando os volumes manualmente |
Stack Completa – Evolution Go
Copie o código abaixo e cole direto no editor da sua stack no Portainer.
version: '3.8'
services:
evolution_go:
image: evoapicloud/evolution-go:latest
networks:
- traefik_public
- digital_network
environment:
- SERVER_PORT=4000
- CLIENT_NAME=evolution
- GLOBAL_API_KEY=${GLOBAL_API_KEY}
- POSTGRES_AUTH_DB=postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DATABASE_AUTH}?sslmode=disable
- POSTGRES_USERS_DB=postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DATABASE_USERS}?sslmode=disable
- DATABASE_SAVE_MESSAGES=false
- WADEBUG=INFO
- LOGTYPE=console
- LOG_DIRECTORY=/app/logs
- LOG_MAX_SIZE=100
- LOG_MAX_BACKUPS=5
- LOG_MAX_AGE=30
- LOG_COMPRESS=true
- CONNECT_ON_STARTUP=true
- WEBHOOKFILES=true
- OS_NAME=Linux
- MINIO_ENABLED=false
volumes:
- evolution_go_data:/app/dbdata
- evolution_go_logs:/app/logs
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
labels:
- "traefik.enable=true"
- "traefik.http.routers.evolution_go.rule=Host(`${EVOLUTION_GO_DOMAIN}`)"
- "traefik.http.routers.evolution_go.entrypoints=websecure"
- "traefik.http.routers.evolution_go.tls.certresolver=le"
- "traefik.http.routers.evolution_go.service=evolution_go"
- "traefik.http.services.evolution_go.loadbalancer.server.port=4000"
volumes:
evolution_go_data:
external: true
evolution_go_logs:
external: true
networks:
traefik_public:
external: true
digital_network:
external: true
