Nesta aula vamos instalar o Evo CRM (Evolution) do zero na sua VPS, usando Portainer, Docker Swarm e Traefik. Diferente de tutoriais genéricos, aqui cada passo existe para evitar que os microsserviços do Evo falhem na comunicação ou entrem em crash loop. 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: Você precisará apontar o seu domínio principal (ex:
crm.zappronto.com.br) e o subdomínio da API (api-crm.zappronto.com.br) para o IP do seu servidor.
Link das Aulas Pré-requisitas abaixo:
Passo 1: Autenticar no Docker Hub (Evita erro toomanyrequests)
A stack do Evo CRM possui 7 imagens diferentes. Se você tentar baixar todas de uma vez sem estar logado, o Docker Hub vai bloquear seu IP por excesso de requisições.
Faça login no Docker Hub direto no terminal do servidor:
docker login
Por que esse passo existe: Evita que os serviços fiquem travados em rejected logo no início do deploy.
Passo 2: Baixar as imagens manualmente antes do deploy
O Docker Swarm pode se perder ao tentar fazer o pull simultâneo de tantas imagens pesadas. Baixe as imagens da versão 1.0.0-rc6 uma a uma:
docker pull evoapicloud/evo-auth-service-community:1.0.0
docker pull evoapicloud/evo-ai-crm-community:1.0.0
docker pull evoapicloud/evo-ai-frontend-community:1.0.0
docker pull evoapicloud/evo-ai-processor-community:1.0.0
docker pull evoapicloud/evo-ai-core-service-community:1.0.0
docker pull evoapicloud/evo-bot-runtime:1.0.0
docker pull evoapicloud/evo-crm-gateway:1.0.0
Passo 3: Criar o banco de dados no PostgreSQL
O Evo CRM precisa de um banco de dados dedicado. Acesse o container do seu Postgres (substitua o comando se usar banco externo):
PG=$(docker ps -qf name=postgres)
docker exec -i $PG psql -U postgres -c "CREATE DATABASE evo_community;"
Passo 4: Criar os volumes externos
Os serviços do Evo (Redis, Processor e CRM) guardam dados estáticos, mídias e logs em volumes. Crie-os previamente no servidor:
docker volume create evo_redis_data
docker volume create evo_processor_logs
docker volume create evo_crm_storage
Por que esse passo existe: Impede que o Swarm crie volumes efêmeros atrelados a um nó específico, garantindo a persistência dos arquivos mesmo se o container reiniciar.
Passo 5: Gerar as chaves de segurança
O Evo CRM usa várias chaves secretas para comunicação interna (Gateways, JWTs, Rails e Processor). Gere 6 chaves fortes diferentes executando este comando 6 vezes e anotando os resultados:
openssl rand -hex 32
Agora, prepare o seu bloco de Environment Variables (você vai colar isso no Portainer na hora do deploy). Preencha com as chaves geradas e os dados do seu banco/SMTP:
# ==========================================
# BANCO DE DADOS (POSTGRESQL)
# ==========================================
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_USERNAME=postgres
POSTGRES_PASSWORD=sua_senha_do_banco_aqui
POSTGRES_DATABASE=evo_community
POSTGRES_SSLMODE=disable
# ==========================================
# SEGURANÇA E CHAVES SECRETAS
# ==========================================
SECRET_KEY_BASE=cole_a_chave_1_aqui
JWT_SECRET_KEY=cole_a_chave_2_aqui
DOORKEEPER_JWT_SECRET_KEY=cole_a_chave_3_aqui
EVOAI_CRM_API_TOKEN=cole_a_chave_4_aqui
ENCRYPTION_KEY=cole_a_chave_5_aqui
# ==========================================
# COMUNICAÇÃO INTERNA DOS SERVIÇOS
# ==========================================
BOT_RUNTIME_SECRET=cole_a_chave_6_aqui
PROCESSOR_PASSWORD=senha_segura_para_o_processor
# ==========================================
# CONFIGURAÇÃO DE DISPARO DE E-MAIL (SMTP)
# ==========================================
MAILER_SENDER_EMAIL=contato@zappronto.com.br
SMTP_ADDRESS=smtp.seuprovedor.com
SMTP_PORT=587
SMTP_DOMAIN=zappronto.com.br
SMTP_AUTHENTICATION=plain
SMTP_ENABLE_STARTTLS_AUTO=true
SMTP_USERNAME=seu_usuario_smtp
SMTP_PASSWORD=sua_senha_smtp
# ==========================================
# GERAIS E PERFORMANCE
# ==========================================
ORGANIZATION_NAME=Zappronto
MFA_ISSUER=Zappronto CRM
SIDEKIQ_CONCURRENCY=5
Passo 6: Ajustar e colar a stack no Portainer
Vá em Stacks → Add stack, dê o nome de evo-crm e cole o código docker-compose.yml da aplicação.
Atenção aos ajustes manuais direto no código da stack:
Domínios: Use a lupa/pesquisa (
Ctrl+FouCmd+F) e substitua TODAS as ocorrências deSEU.SUBDOMINIO.com.brpelo seu domínio real (ex:crm.zappronto.com.br). Cuidado para não apagar o prefixoapi-onde ele existir.Facebook App (Opcional): Nas sessões
evo_crmeevo_core, há variáveis comoSEU_ID_FACEe chaves do Facebook. Se não for usar agora, pode deixar como está, mas lembre-se de configurar depois.Variáveis de Ambiente: Abaixo do editor de código web do Portainer, ative a opção Environment variables, clique em Advanced mode e cole todo o bloco de texto do Passo 5 configurado.
Clique em Deploy the stack.
version: "3.8"
services:
# ---------------------------------------------------------------------------
# Redis dedicado do Evo CRM
# ---------------------------------------------------------------------------
evo_redis:
image: redis:7-alpine
command: redis-server --appendonly yes --appendfsync everysec --maxmemory-policy noeviction
volumes:
- evo_redis_data:/data
networks:
- digital_network
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: any
delay: 10s
max_attempts: 10
window: 180s
# =============================================================================
# Evo CRM Gateway — API pública via Traefik
# =============================================================================
evo_gateway:
image: evoapicloud/evo-crm-gateway:1.0.0
environment:
AUTH_UPSTREAM: evo_auth:3001
CRM_UPSTREAM: evo_crm:3000
CORE_UPSTREAM: evo_core:5555
PROCESSOR_UPSTREAM: evo_processor:8000
BOT_RUNTIME_UPSTREAM: evo_bot_runtime:8080
STORAGE_UPSTREAM: evo_crm:3000
PROCESSOR_PASSWORD: ${PROCESSOR_PASSWORD}
networks:
- traefik_public
- digital_network
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: any
labels:
- traefik.enable=true
- traefik.docker.network=traefik_public
- traefik.http.routers.evo_gateway.rule=Host(`api-crm.zappronto.com.br`)
- traefik.http.routers.evo_gateway.entrypoints=websecure
- traefik.http.routers.evo_gateway.tls.certresolver=le
- traefik.http.routers.evo_gateway.service=evo_gateway
- traefik.http.middlewares.evo-crm-limit-body.buffering.maxRequestBodyBytes=52428800
- traefik.http.routers.evo_gateway.middlewares=evo-crm-limit-body
- traefik.http.services.evo_gateway.loadbalancer.server.port=3030
- traefik.http.services.evo_gateway.loadbalancer.passHostHeader=true
# =============================================================================
# Evo Auth Service — Rails
# =============================================================================
evo_auth:
image: evoapicloud/evo-auth-service-community:1.0.0
command: >
sh -c "bundle exec rails db:migrate 2>&1 || echo 'Migration had errors, continuing...';
bundle exec rails s -p 3001 -b 0.0.0.0"
environment:
RAILS_ENV: production
RAILS_MAX_THREADS: 10
SECRET_KEY_BASE: ${SECRET_KEY_BASE}
JWT_SECRET_KEY: ${JWT_SECRET_KEY}
DOORKEEPER_JWT_SECRET_KEY: ${DOORKEEPER_JWT_SECRET_KEY}
EVOAI_CRM_API_TOKEN: ${EVOAI_CRM_API_TOKEN}
POSTGRES_HOST: ${POSTGRES_HOST}
POSTGRES_PORT: ${POSTGRES_PORT}
POSTGRES_USERNAME: ${POSTGRES_USERNAME}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DATABASE: ${POSTGRES_DATABASE}
POSTGRES_SSLMODE: ${POSTGRES_SSLMODE}
REDIS_URL: redis://evo_redis:6379/0
FRONTEND_URL: https://crm.zappronto.com.br
BACKEND_URL: https://api-crm.zappronto.com.br
CORS_ORIGINS: https://crm.zappronto.com.br,https://api-crm.zappronto.com.br
MAILER_SENDER_EMAIL: ${MAILER_SENDER_EMAIL}
SMTP_ADDRESS: ${SMTP_ADDRESS}
SMTP_PORT: ${SMTP_PORT}
SMTP_DOMAIN: ${SMTP_DOMAIN}
SMTP_AUTHENTICATION: ${SMTP_AUTHENTICATION}
SMTP_ENABLE_STARTTLS_AUTO: ${SMTP_ENABLE_STARTTLS_AUTO}
SMTP_USERNAME: ${SMTP_USERNAME}
SMTP_PASSWORD: ${SMTP_PASSWORD}
DOORKEEPER_JWT_ALGORITHM: hs256
DOORKEEPER_JWT_ISS: evo-auth-service
MFA_ISSUER: ${MFA_ISSUER}
SIDEKIQ_CONCURRENCY: ${SIDEKIQ_CONCURRENCY}
ACTIVE_STORAGE_SERVICE: local
ACTIVE_STORAGE_URL: https://api-crm.zappronto.com.br
volumes:
- evo_auth_storage:/app/storage
networks:
- digital_network
stop_grace_period: 300s
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: any
# =============================================================================
# Evo Auth Sidekiq — mantido em 0 por enquanto
# =============================================================================
evo_auth_sidekiq:
image: evoapicloud/evo-auth-service-community:1.0.0
command: ["bundle", "exec", "sidekiq", "-C", "config/sidekiq.yml"]
environment:
RAILS_ENV: production
SECRET_KEY_BASE: ${SECRET_KEY_BASE}
JWT_SECRET_KEY: ${JWT_SECRET_KEY}
DOORKEEPER_JWT_SECRET_KEY: ${DOORKEEPER_JWT_SECRET_KEY}
EVOAI_CRM_API_TOKEN: ${EVOAI_CRM_API_TOKEN}
POSTGRES_HOST: ${POSTGRES_HOST}
POSTGRES_PORT: ${POSTGRES_PORT}
POSTGRES_USERNAME: ${POSTGRES_USERNAME}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DATABASE: ${POSTGRES_DATABASE}
POSTGRES_SSLMODE: ${POSTGRES_SSLMODE}
REDIS_URL: redis://evo_redis:6379/0
FRONTEND_URL: https://crm.zappronto.com.br
BACKEND_URL: https://api-crm.zappronto.com.br
CORS_ORIGINS: https://crm.zappronto.com.br,https://api-crm.zappronto.com.br
MAILER_SENDER_EMAIL: ${MAILER_SENDER_EMAIL}
SMTP_ADDRESS: ${SMTP_ADDRESS}
SMTP_PORT: ${SMTP_PORT}
SMTP_DOMAIN: ${SMTP_DOMAIN}
SMTP_AUTHENTICATION: ${SMTP_AUTHENTICATION}
SMTP_ENABLE_STARTTLS_AUTO: ${SMTP_ENABLE_STARTTLS_AUTO}
SMTP_USERNAME: ${SMTP_USERNAME}
SMTP_PASSWORD: ${SMTP_PASSWORD}
DOORKEEPER_JWT_ALGORITHM: hs256
DOORKEEPER_JWT_ISS: evo-auth-service
MFA_ISSUER: ${MFA_ISSUER}
SIDEKIQ_CONCURRENCY: ${SIDEKIQ_CONCURRENCY}
ACTIVE_STORAGE_SERVICE: local
ACTIVE_STORAGE_URL: https://api-crm.zappronto.com.br
volumes:
- evo_auth_storage:/app/storage
networks:
- digital_network
stop_grace_period: 300s
deploy:
replicas: 0
placement:
constraints:
- node.role == manager
restart_policy:
condition: any
# =============================================================================
# Evo CRM Service — Rails
# =============================================================================
evo_crm:
image: evoapicloud/evo-ai-crm-community:1.0.0
command: >
sh -c "until wget -qO- http://evo_auth:3001/health >/dev/null 2>&1;
do echo 'Waiting for auth...'; sleep 5; done;
bundle exec rails db:migrate 2>&1 || echo 'Migration had errors, continuing...';
bundle exec rails s -p 3000 -b 0.0.0.0"
environment:
RAILS_ENV: production
RAILS_MAX_THREADS: 10
RAILS_SERVE_STATIC_FILES: "true"
RAILS_LOG_TO_STDOUT: "true"
SECRET_KEY_BASE: ${SECRET_KEY_BASE}
JWT_SECRET_KEY: ${JWT_SECRET_KEY}
EVOAI_CRM_API_TOKEN: ${EVOAI_CRM_API_TOKEN}
POSTGRES_HOST: ${POSTGRES_HOST}
POSTGRES_PORT: ${POSTGRES_PORT}
POSTGRES_USERNAME: ${POSTGRES_USERNAME}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DATABASE: ${POSTGRES_DATABASE}
POSTGRES_SSLMODE: ${POSTGRES_SSLMODE}
REDIS_URL: redis://evo_redis:6379/0
EVO_AUTH_SERVICE_URL: http://evo_auth:3001
EVO_AI_CORE_SERVICE_URL: http://evo_core:5555
BACKEND_URL: https://api-crm.zappronto.com.br
FRONTEND_URL: https://crm.zappronto.com.br
CORS_ORIGINS: https://crm.zappronto.com.br,https://api-crm.zappronto.com.br
DISABLE_TELEMETRY: "true"
LOG_LEVEL: info
ENABLE_ACCOUNT_SIGNUP: "true"
ENABLE_PUSH_RELAY_SERVER: "true"
ENABLE_INBOX_EVENTS: "true"
BOT_RUNTIME_URL: http://evo_bot_runtime:8080
BOT_RUNTIME_SECRET: ${BOT_RUNTIME_SECRET}
BOT_RUNTIME_POSTBACK_BASE_URL: http://evo_crm:3000
ACTIVE_STORAGE_SERVICE: local
ACTIVE_STORAGE_URL: https://api-crm.zappronto.com.br
FACEBOOK_APP_ID: 869446355727984
FACEBOOK_CLIENT_SECRET: 32f3a1a03fb44484e153fb344ad57ad7
FACEBOOK_CALLBACK_URL: https://api-crm.zappronto.com.br/facebook/callback
volumes:
- evo_crm_storage:/app/storage
networks:
- digital_network
stop_grace_period: 300s
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: any
# =============================================================================
# Evo CRM Sidekiq — processa mensagens, webhooks, realtime e mídia
# =============================================================================
evo_crm_sidekiq:
image: evoapicloud/evo-ai-crm-community:1.0.0
command: ["bundle", "exec", "sidekiq", "-C", "config/sidekiq.yml", "-q", "critical", "-q", "high", "-q", "default", "-q", "low", "-q", "mailers", "-q", "realtime"]
environment:
RAILS_ENV: production
RAILS_MAX_THREADS: 10
RAILS_LOG_TO_STDOUT: "true"
SECRET_KEY_BASE: ${SECRET_KEY_BASE}
JWT_SECRET_KEY: ${JWT_SECRET_KEY}
EVOAI_CRM_API_TOKEN: ${EVOAI_CRM_API_TOKEN}
POSTGRES_HOST: ${POSTGRES_HOST}
POSTGRES_PORT: ${POSTGRES_PORT}
POSTGRES_USERNAME: ${POSTGRES_USERNAME}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DATABASE: ${POSTGRES_DATABASE}
POSTGRES_SSLMODE: ${POSTGRES_SSLMODE}
REDIS_URL: redis://evo_redis:6379/0
EVO_AUTH_SERVICE_URL: http://evo_auth:3001
EVO_AI_CORE_SERVICE_URL: http://evo_core:5555
BACKEND_URL: https://api-crm.zappronto.com.br
FRONTEND_URL: https://crm.zappronto.com.br
CORS_ORIGINS: https://crm.zappronto.com.br,https://api-crm.zappronto.com.br
BOT_RUNTIME_URL: http://evo_bot_runtime:8080
BOT_RUNTIME_SECRET: ${BOT_RUNTIME_SECRET}
BOT_RUNTIME_POSTBACK_BASE_URL: http://evo_crm:3000
ACTIVE_STORAGE_SERVICE: local
ACTIVE_STORAGE_URL: https://api-crm.zappronto.com.br
volumes:
- evo_crm_storage:/app/storage
networks:
- digital_network
stop_grace_period: 300s
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: any
# =============================================================================
# Evo Core Service — Go
# =============================================================================
evo_core:
image: evoapicloud/evo-ai-core-service-community:1.0.0
environment:
DB_HOST: ${POSTGRES_HOST}
DB_PORT: ${POSTGRES_PORT}
DB_USER: ${POSTGRES_USERNAME}
DB_PASSWORD: ${POSTGRES_PASSWORD}
DB_NAME: ${POSTGRES_DATABASE}
DB_SSLMODE: ${POSTGRES_SSLMODE}
DB_MAX_IDLE_CONNS: 10
DB_MAX_OPEN_CONNS: 100
DB_CONN_MAX_LIFETIME: 1h
DB_CONN_MAX_IDLE_TIME: 30m
PORT: "5555"
SECRET_KEY_BASE: ${SECRET_KEY_BASE}
JWT_SECRET_KEY: ${JWT_SECRET_KEY}
JWT_ALGORITHM: HS256
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
EVOLUTION_BASE_URL: http://evo_crm:3000
EVO_AUTH_BASE_URL: http://evo_auth:3001
AI_PROCESSOR_URL: http://evo_processor:8000
AI_PROCESSOR_VERSION: v1
FACEBOOK_APP_ID: 869446355727984
FACEBOOK_CLIENT_SECRET: 32f3a1a03fb44484e153fb344ad57ad7
FACEBOOK_CALLBACK_URL: https://api-crm.zappronto.com.br/facebook/callback
networks:
- digital_network
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: any
# =============================================================================
# Evo Processor — Python / FastAPI (CORRIGIDO)
# =============================================================================
evo_processor:
image: evoapicloud/evo-ai-processor-community:1.0.0
command: >
sh -c "alembic upgrade head 2>&1 || echo 'Alembic migration had errors, continuing...';
python -m scripts.run_seeders;
uvicorn src.main:app --host 0.0.0.0 --port 8000"
environment:
POSTGRES_CONNECTION_STRING: postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DATABASE}?sslmode=disable
EVO_AUTH_BASE_URL: http://evo_auth:3001
EVOLUTION_BASE_URL: http://evo_crm:3000
EVO_AI_CRM_URL: http://evo_crm:3000
CORE_SERVICE_URL: http://evo_core:5555/api/v1
REDIS_HOST: evo_redis
REDIS_PORT: 6379
REDIS_PASSWORD: ""
REDIS_SSL: "false"
REDIS_DB: 0
REDIS_KEY_PREFIX: "a2a:"
REDIS_TTL: 3600
HOST: 0.0.0.0
PORT: "8000"
DEBUG: "false"
SECRET_KEY_BASE: ${SECRET_KEY_BASE}
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
EVOAI_CRM_API_TOKEN: ${EVOAI_CRM_API_TOKEN}
PROCESSOR_PASSWORD: ${PROCESSOR_PASSWORD}
APP_URL: https://api-crm.zappronto.com.br
API_TITLE: Agent Processor Community
API_DESCRIPTION: Agent Processor Community for Evo AI
API_VERSION: 1.0.0
API_URL: https://api-crm.zappronto.com.br
ORGANIZATION_NAME: ${ORGANIZATION_NAME}
TOOLS_CACHE_ENABLED: "true"
TOOLS_CACHE_TTL: 3600
volumes:
- evo_processor_logs:/app/logs
networks:
- digital_network
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: any
# =============================================================================
# Evo Bot Runtime — Go
# =============================================================================
evo_bot_runtime:
image: evoapicloud/evo-bot-runtime:1.0.0
environment:
LISTEN_ADDR: 0.0.0.0:8080
REDIS_URL: redis://evo_redis:6379/0
AI_PROCESSOR_URL: http://evo_processor:8000
BOT_RUNTIME_SECRET: ${BOT_RUNTIME_SECRET}
AI_CALL_TIMEOUT_SECONDS: 30
networks:
- digital_network
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: any
# =============================================================================
# Evo Frontend — React / Nginx
# =============================================================================
evo_frontend:
image: evoapicloud/evo-ai-frontend-community:1.0.0
environment:
VITE_APP_ENV: production
VITE_API_URL: https://api-crm.zappronto.com.br
VITE_AUTH_API_URL: https://api-crm.zappronto.com.br
VITE_WS_URL: wss://api-crm.zappronto.com.br
VITE_EVOAI_API_URL: https://api-crm.zappronto.com.br
VITE_AGENT_PROCESSOR_URL: https://api-crm.zappronto.com.br
VITE_EVOFLOW_API_URL: https://api-crm.zappronto.com.br
networks:
- traefik_public
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: any
labels:
- traefik.enable=true
- traefik.docker.network=traefik_public
- traefik.http.routers.evo_frontend.rule=Host(`crm.zappronto.com.br`)
- traefik.http.routers.evo_frontend.entrypoints=websecure
- traefik.http.routers.evo_frontend.tls.certresolver=le
- traefik.http.routers.evo_frontend.service=evo_frontend
- traefik.http.services.evo_frontend.loadbalancer.server.port=80
- traefik.http.services.evo_frontend.loadbalancer.passHostHeader=true
networks:
traefik_public:
external: true
name: traefik_public
digital_network:
external: true
name: digital_network
volumes:
evo_redis_data:
evo_processor_logs:
evo_crm_storage:
evo_auth_storage:
Passo 7: Acompanhar o Boot e as Migrations (Ordem de Inicialização)
O Evo CRM é uma arquitetura complexa. Os serviços dependem uns dos outros.
Acompanhe os logs do Auth Service primeiro, pois ele roda as migrações do banco:
docker service logs evo-crm_evo_auth --tail 50 -f
Você deverá ver as tabelas sendo criadas no Rails. O serviço evo_crm possui um comando until wget ... waiting for auth..., ou seja, ele só vai iniciar o boot dele próprio depois que o evo_auth estiver 100% online (rodando na porta 3001).
Faça o mesmo para o Processor, que usa Alembic para criar as tabelas de IA:
docker service logs evo-crm_evo_auth --tail 50 -f
Passo 8: Primeiro Acesso
Quando todos os serviços estiverem com status Running (em verde) no Portainer, e as migrações tiverem concluído:
Acesse o domínio do frontend:
[https://crm.zappronto.com.br](https://crm.zappronto.com.br).Como habilitamos
ENABLE_ACCOUNT_SIGNUP: "true"na stack, você verá a tela de registro/login.Crie sua conta de administrador.
Resolução de Problemas Comuns no Evo CRM
| Sintoma | Causa | Solução |
| Gateway retornando 502 Bad Gateway | Traefik não encontra a rota ou Gateway não acessa os upstreams internos. | Confirme se a rede digital_network está no serviço e se os microsserviços internos iniciaram sem erro. |
| Frontend quebrado (Tela Branca) | Falta de variável do EvoFlow na RC6 (Bug EVO-1906). | A stack fornecida já corrige isso adicionando VITE_EVOFLOW_API_URL apontando para a API no serviço evo_frontend. |
| Serviços param e reiniciam sem parar | Banco de dados inacessível ou senha incorreta nas variáveis de ambiente. | Revise o bloco de variáveis no Portainer (especialmente POSTGRES_PASSWORD). |
| E-mails não chegam | SMTP mal configurado ou bloqueio de porta 587 no provedor VPS. | Verifique logs do serviço evo_crm_sidekiq que processa a fila mailers. |
