Files
OdooHub/stack-odoohub/odoo-stack.yml

227 lines
7.1 KiB
YAML

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)