# 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: #--- N8N SERVICE ---# 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_USER=${POSTGRES_USER} - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD} - 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 depends_on: postgres: condition: service_healthy 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: # Las variables se cargarán desde la UI de Coolify # FQDN - SERVER_URL=${SERVICE_FQDN_EVO} - AUTHENTICATION_API_KEY=${EVOLUTION_API_KEY} # 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 depends_on: - 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: n8n_data: driver: local evolution_instances: driver: local postgres_data: driver: local evolution_redis: driver: local