From e856ecabc3c84514d1aaf6d17aa1b55fe9102cf3 Mon Sep 17 00:00:00 2001 From: Marco Gallegos Date: Wed, 2 Jul 2025 10:12:11 -0600 Subject: [PATCH] Update docker-compose.yml --- docker-compose.yml | 174 ++++++++++++++++++++++++++++----------------- 1 file changed, 109 insertions(+), 65 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 39bee99..68f5306 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,86 +1,130 @@ -version: '3.9' +# Archivo: docker-compose.yml +# Version: unificada-1.0 +# Descripción: Stack completo para n8n y Evolution API con servicios compartidos de PostgreSQL y Redis. +# Diseñado para despliegue en Coolify a través de un repositorio Git. + +version: '3.8' + services: - postgres: - image: postgres:15-alpine - container_name: postgres_bots - restart: always - environment: - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - N8N_DB_NAME: ${N8N_DB_NAME} - EVOLUTION_DB_NAME: ${EVOLUTION_DB_NAME} - volumes: - - postgres_data:/var/lib/postgresql/data - - ./init-db.sh:/docker-entrypoint-initdb.d/init-db.sh - networks: - - app_network - healthcheck: - test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] - interval: 5s - timeout: 5s - retries: 5 - redis: - image: 'redis:7' - container_name: mi_stack_redis - restart: always - command: - - redis-server - - '--requirepass' - - '${REDIS_PASSWORD}' - volumes: - - 'redis_data:/data' - networks: - - app_network + #--- N8N SERVICE ---# n8n: - image: docker.n8n.io/n8nio/n8n - container_name: mi_stack_n8n + image: docker.n8n.io/n8nio/n8n:latest + container_name: n8n_service restart: always environment: + # Las variables se cargarán desde la UI de Coolify + # FQDN y Webhook + - N8N_HOST=${N8N_HOST} + - N8N_EDITOR_BASE_URL=${SERVICE_FQDN_N8N} + - WEBHOOK_URL=${SERVICE_FQDN_N8N} + - GENERIC_TIMEZONE=${TZ} + - TZ=${TZ} + + # Conexión a la base de datos PostgreSQL compartida - DB_TYPE=postgresdb - DB_POSTGRESDB_HOST=postgres - DB_POSTGRESDB_PORT=5432 - - DB_POSTGRESDB_DATABASE=${N8N_DB_NAME} - DB_POSTGRESDB_USER=${POSTGRES_USER} - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD} - - N8N_HOST=${N8N_SUBDOMAIN}.${DOMAIN_NAME} - - N8N_PORT=5678 - - N8N_PROTOCOL=https - - WEBHOOK_URL=https://${N8N_SUBDOMAIN}.${DOMAIN_NAME}/ - - NODE_ENV=production - - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} + - DB_POSTGRESDB_DATABASE=${N8N_DB_NAME} # Base de datos específica para n8n + - DB_POSTGRESDB_SCHEMA=public + + # Configuración SMTP + - N8N_EMAIL_MODE=${N8N_EMAIL_MODE} + - N8N_SMTP_HOST=${N8N_SMTP_HOST} + - N8N_SMTP_PORT=${N8N_SMTP_PORT} + - N8N_SMTP_USER=${N8N_SMTP_USER} + - N8N_SMTP_PASS=${N8N_SMTP_PASS} + - N8N_SMTP_SENDER=${N8N_SMTP_SENDER} + - N8N_SMTP_SSL=${N8N_SMTP_SSL} + ports: + # El proxy inverso de Coolify se encargará de esto, pero es bueno declararlo. + - "5678:5678" volumes: - - 'n8n_data:/home/node/.n8n' - networks: - - app_network + - n8n_data:/home/node/.n8n depends_on: postgres: condition: service_healthy - evolution-api: - image: 'atendai/evolution-api:v2.1.1' - container_name: mi_stack_evolution_api + healthcheck: + test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:5678/healthz || exit 1"] + interval: 30s + timeout: 10s + retries: 5 + + #--- EVOLUTION API SERVICE ---# + api: + image: atendai/evolution-api:latest + container_name: evolution_api_service restart: always environment: - - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${EVOLUTION_DB_NAME} - - DATABASE_PROVIDER=postgresql - - CACHE_REDIS_ENABLED=true - - CACHE_REDIS_URI=redis://:${REDIS_PASSWORD}@redis:6379 + # Las variables se cargarán desde la UI de Coolify + # FQDN + - SERVER_URL=${SERVICE_FQDN_EVO} - AUTHENTICATION_API_KEY=${EVOLUTION_API_KEY} - - SERVER_URL=https://${EVOLUTION_SUBDOMAIN}.${DOMAIN_NAME} - - DATABASE_SAVE_DATA_INSTANCE=true + + # Conexión a la base de datos PostgreSQL compartida + - DB_TYPE=postgresdb + - DB_POSTGRESDB_HOST=postgres + - DB_POSTGRESDB_PORT=5432 + - DB_POSTGRESDB_USER=${POSTGRES_USER} + - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD} + - DB_POSTGRESDB_DATABASE=${EVOLUTION_DB_NAME} # Base de datos específica para Evolution + - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${EVOLUTION_DB_NAME} + - DATABASE_CONNECTION_URI=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${EVOLUTION_DB_NAME} + - CHATWOOT_IMPORT_DATABASE_CONNECTION_URI=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${EVOLUTION_DB_NAME} + + # Conexión al servicio Redis compartido + - CACHE_REDIS_ENABLED=true + - CACHE_REDIS_URI=redis://redis:6379/6 + + # El resto de variables de Evolution se gestionarán en la UI de Coolify + # Por ejemplo: WEBHOOK_EVENTS_MESSAGES_UPSERT, etc. + ports: + # El proxy inverso de Coolify se encargará de esto. + - "8080:8080" volumes: - - 'evolution_instances:/evolution/instances' - networks: - - app_network + - evolution_instances:/evolution/instances depends_on: - postgres: - condition: service_healthy - redis: - condition: service_started -networks: - app_network: - name: mi_stack_network + - redis + - postgres + + #--- SHARED POSTGRESQL DATABASE ---# + postgres: + image: postgres:16-alpine + container_name: shared_postgres_db + restart: always + environment: + # Credenciales para el superusuario y la base de datos inicial (n8n) + - POSTGRES_USER=${POSTGRES_USER} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - POSTGRES_DB=${N8N_DB_NAME} + volumes: + - postgres_data:/var/lib/postgresql/data + # Este script se ejecuta al iniciar el contenedor por primera vez para crear la DB de Evolution + - ./init-db.sh:/docker-entrypoint-initdb.d/init-db.sh + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 10s + timeout: 5s + retries: 5 + + #--- SHARED REDIS CACHE ---# + redis: + image: redis:7-alpine + container_name: shared_redis_cache + restart: always + command: "redis-server --save 60 1 --loglevel warning" + volumes: + - evolution_redis:/data + +#--- VOLUMES DEFINITION ---# +# Docker gestionará estos volúmenes para persistir los datos. volumes: - postgres_data: - redis_data: n8n_data: + driver: local evolution_instances: + driver: local + postgres_data: + driver: local + evolution_redis: + driver: local