version: "3.7" services: # --------------------------- DATABASE (PostgreSQL) --------------------------- # # Serviço de banco de dados relacional utilizado por Odoo e Evolution para persistência de dados. db: image: postgres:16 user: root environment: - POSTGRES_USER= # Usuário do banco de dados (ex: admin) - POSTGRES_PASSWORD= # Senha do banco de dados - POSTGRES_DB= # Nome do banco de dados (ex: postgres) volumes: - db_data:/var/lib/postgresql/data networks: - netpevo deploy: mode: replicated replicas: 1 placement: constraints: - node.role == manager resources: limits: cpus: "1" memory: 1024M logging: driver: "json-file" options: max-size: "10m" max-file: "3" # Remova a porta abaixo se for usar Traefik para expor o serviço #ports: # - 5432:5432 # --------------------------- ODOO (DiscussHub) --------------------------- # # ERP Odoo customizado com DiscussHub, plataforma de gestão empresarial e comunicação integrada. odoo: image: discusshub/discuss_hub:latest depends_on: - db tty: true command: odoo -d odoo -i discuss_hub -u discuss_hub environment: - ODOO_RC=/etc/odoo/odoo.conf - HOST=db - USER= # Usuário do banco de dados (ex: admin) - PASSWORD= # Senha do banco de dados - ADMIN_PASSWORD= # Senha do usuário admin do Odoo - SMTP_SERVER=mailpit - SMTP_PORT=1025 - EVOLUTION_URL=http://evolution:8080 - EVOLUTION_API_KEY= # Chave de API do Evolution - EVOLUTION_ODOO_URL=http://odoo:8069 volumes: - odoo_conf:/etc/odoo - odoo_data:/var/lib/odoo networks: - netpevo deploy: mode: replicated replicas: 1 placement: constraints: - node.role == manager resources: limits: cpus: "2" memory: 2048M labels: - traefik.enable=true - traefik.http.routers.odoo.rule=Host(`odoo.seudominio.com.br`) # Altere para seu domínio - traefik.http.services.odoo.loadbalancer.server.port=8069 - traefik.http.routers.odoo.service=odoo - traefik.http.routers.odoo.tls.certresolver=letsencryptresolver - traefik.http.routers.odoo.entrypoints=websecure - traefik.http.routers.odoo.tls=true logging: driver: "json-file" options: max-size: "10m" max-file: "3" # Remova a porta abaixo se for usar Traefik para expor o serviço #ports: # - "8069:8069" # --------------------------- EVOLUTION API --------------------------- # # API Evolution: plataforma de automação, integração e comunicação multicanal (WhatsApp, etc). evolution: image: evoapicloud/evolution-api:v2.3.0 depends_on: - redis - db volumes: - evolution_instances:/evolution/instances networks: - netpevo deploy: mode: replicated replicas: 1 placement: constraints: - node.role == manager resources: limits: cpus: "1" memory: 1024M labels: - traefik.enable=true - traefik.http.routers.evolution.rule=Host(`evolution.seudominio.com.br`) # Altere para seu domínio - traefik.http.services.evolution.loadbalancer.server.port=8080 - traefik.http.routers.evolution.service=evolution - traefik.http.routers.evolution.tls.certresolver=letsencryptresolver - traefik.http.routers.evolution.entrypoints=websecure - traefik.http.routers.evolution.tls=true environment: - SERVER_URL=http://localhost:8080 - DATABASE_PROVIDER=postgresql - DATABASE_CONNECTION_URI= # URI de conexão do banco (ex: postgresql://usuario:senha@db:5432/nome_db?schema=public) - DATABASE_SAVE_DATA_INSTANCE=true - DATABASE_SAVE_DATA_NEW_MESSAGE=true - DATABASE_SAVE_MESSAGE_UPDATE=true - DATABASE_SAVE_DATA_CONTACTS=true - DATABASE_SAVE_DATA_CHATS=true - DATABASE_SAVE_DATA_LABELS=true - DATABASE_SAVE_DATA_HISTORIC=true - DATABASE_SAVE_IS_ON_WHATSAPP=true - DATABASE_SAVE_IS_ON_WHATSAPP_DAYS=14 - DATABASE_DELETE_MESSAGE=true - CACHE_REDIS_ENABLED=true - CACHE_REDIS_URI=redis://redis:6379/6 - CACHE_REDIS_TTL=604800 - CACHE_REDIS_PREFIX_KEY=evolution - CACHE_REDIS_SAVE_INSTANCES=false - CACHE_LOCAL_ENABLED=false - CONFIG_SESSION_PHONE_CLIENT=Conexao Azul - CONFIG_SESSION_PHONE_NAME=Chrome - CONFIG_SESSION_PHONE_VERSION=2.3000.1020885143 - AUTHENTICATION_API_KEY= # Chave de API de autenticação - WA_BUSINESS_TOKEN_WEBHOOK=evolution - WA_BUSINESS_URL=https://graph.facebook.com - WA_BUSINESS_VERSION=v21.0 - WA_BUSINESS_LANGUAGE=pt_BR - OPENAI_ENABLED=true logging: driver: "json-file" options: max-size: "10m" max-file: "3" # Remova a porta abaixo se for usar Traefik para expor o serviço #ports: # - 8080:8080 # --------------------------- REDIS --------------------------- # # Redis: banco de dados em memória utilizado como cache e para filas de mensagens pela Evolution API. redis: image: redis:latest command: redis-server --port 6379 --appendonly yes volumes: - redis_data:/data networks: - netpevo deploy: mode: replicated replicas: 1 placement: constraints: - node.role == manager resources: limits: cpus: "0.5" memory: 512M logging: driver: "json-file" options: max-size: "10m" max-file: "3" # Remova a porta abaixo se for usar Traefik para expor o serviço #ports: # - 6379:6379 # --------------------------- MAILPIT --------------------------- # # Mailpit: servidor SMTP fake para testes de envio de e-mails em ambiente de desenvolvimento. mailpit: image: docker.io/axllent/mailpit:latest networks: - netpevo deploy: mode: replicated replicas: 1 placement: constraints: - node.role == manager resources: limits: cpus: "0.5" memory: 512M # Remova as portas abaixo se for usar Traefik para expor o serviço #ports: # - "8025:8025" # - "1025:1025" # --------------------------- VOLUMES EXTERNOS --------------------------- # # Volumes externos para persistência dos dados dos serviços. Devem ser criados previamente no cluster Swarm. volumes: db_data: external: true name: db_data odoo_data: external: true name: odoo_data odoo_conf: external: true name: odoo_conf evolution_instances: external: true name: evolution_instances redis_data: external: true name: redis_data # --------------------------- REDE OVERLAY EXTERNA --------------------------- # # Rede overlay compartilhada entre todos os serviços da stack, permitindo comunicação interna segura e isolada no cluster Swarm. networks: netpevo: external: true name: netpevo # Rede overlay para comunicação interna entre os serviços da stack (ajuste conforme sua infraestrutura)