services:
  n8n:
    image: 'n8nio/n8n:1.108.1'
    command: start
    restart: always
    environment:
      - SERVICE_FQDN_N8N_5678
      - 'N8N_EDITOR_BASE_URL=${SERVICE_FQDN_N8N}'
      - 'WEBHOOK_URL=${SERVICE_FQDN_N8N}'
      - 'N8N_HOST=${SERVICE_URL_N8N}'
      - 'GENERIC_TIMEZONE=${GENERIC_TIMEZONE:-America/Sao_Paulo}'
      - 'TZ=${TZ:-America/Sao_Paulo}'
      - DB_TYPE=postgresdb
      - 'DB_POSTGRESDB_DATABASE=${POSTGRES_DB:-n8n}'
      - DB_POSTGRESDB_HOST=postgresql
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_USER=$SERVICE_USER_POSTGRES
      - DB_POSTGRESDB_PASSWORD=$SERVICE_PASSWORD_POSTGRES
      - DB_POSTGRESDB_SCHEMA=public
      - EXECUTIONS_MODE=queue
      - QUEUE_BULL_REDIS_HOST=redis
      - QUEUE_BULL_REDIS_PORT=6379
      - QUEUE_BULL_REDIS_DB=0
      - 'QUEUE_BULL_REDIS_PASSWORD=${REDIS_PASSWORD}'
      - N8N_LOG_LEVEL=info
      - N8N_ENCRYPTION_KEY=$SERVICE_BASE64_N8N
      - N8N_RUNNERS_ENABLED=true
      - OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
      - 'NODE_FUNCTION_ALLOW_EXTERNAL=*'
      - N8N_PROXY_HOPS=1
    volumes:
      - 'n8n-data:/home/node/.n8n'
    depends_on:
      - postgresql
      - redis
    healthcheck:
      test:
        - CMD-SHELL
        - 'wget -qO- <http://127.0.0.1:5678/> || exit 1'
      interval: 5s
      timeout: 20s
      retries: 10
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 1000M
  n8n_worker:
    image: 'n8nio/n8n:1.108.1'
    command: worker
    restart: always
    environment:
      - 'GENERIC_TIMEZONE=${GENERIC_TIMEZONE:-America/Sao_Paulo}'
      - 'TZ=${TZ:-America/Sao_Paulo}'
      - DB_TYPE=postgresdb
      - 'DB_POSTGRESDB_DATABASE=${POSTGRES_DB:-n8n}'
      - DB_POSTGRESDB_HOST=postgresql
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_USER=$SERVICE_USER_POSTGRES
      - DB_POSTGRESDB_PASSWORD=$SERVICE_PASSWORD_POSTGRES
      - DB_POSTGRESDB_SCHEMA=public
      - EXECUTIONS_MODE=queue
      - QUEUE_BULL_REDIS_HOST=redis
      - QUEUE_BULL_REDIS_PORT=6379
      - QUEUE_BULL_REDIS_DB=0
      - 'QUEUE_BULL_REDIS_PASSWORD=${REDIS_PASSWORD}'
      - N8N_LOG_LEVEL=info
      - N8N_ENCRYPTION_KEY=$SERVICE_BASE64_N8N
      - N8N_RUNNERS_ENABLED=true
      - OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
      - 'NODE_FUNCTION_ALLOW_EXTERNAL=*'
      - N8N_PROXY_HOPS=1
    volumes:
      - 'n8n-data:/home/node/.n8n'
    depends_on:
      - redis
      - postgresql
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
  n8n_webhook:
    image: 'n8nio/n8n:1.108.1'
    command: webhook
    restart: always
    environment:
      - 'GENERIC_TIMEZONE=${GENERIC_TIMEZONE:-America/Sao_Paulo}'
      - 'TZ=${TZ:-America/Sao_Paulo}'
      - DB_TYPE=postgresdb
      - 'DB_POSTGRESDB_DATABASE=${POSTGRES_DB:-n8n}'
      - DB_POSTGRESDB_HOST=postgresql
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_USER=$SERVICE_USER_POSTGRES
      - DB_POSTGRESDB_PASSWORD=$SERVICE_PASSWORD_POSTGRES
      - DB_POSTGRESDB_SCHEMA=public
      - EXECUTIONS_MODE=queue
      - QUEUE_BULL_REDIS_HOST=redis
      - QUEUE_BULL_REDIS_PORT=6379
      - QUEUE_BULL_REDIS_DB=0
      - 'QUEUE_BULL_REDIS_PASSWORD=${REDIS_PASSWORD}'
      - N8N_LOG_LEVEL=info
      - N8N_ENCRYPTION_KEY=$SERVICE_BASE64_N8N
      - N8N_RUNNERS_ENABLED=true
      - OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
      - 'NODE_FUNCTION_ALLOW_EXTERNAL=*'
      - N8N_PROXY_HOPS=1
    volumes:
      - 'n8n-data:/home/node/.n8n'
    depends_on:
      - redis
      - postgresql
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
  postgresql:
    image: ankane/pgvector
    restart: always
    volumes:
      - 'postgresql-data:/var/lib/postgresql/data'
    environment:
      - POSTGRES_USER=$SERVICE_USER_POSTGRES
      - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES
      - 'POSTGRES_DB=${POSTGRES_DB:-n8n}'
    healthcheck:
      test:
        - CMD-SHELL
        - 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'
      interval: 5s
      timeout: 20s
      retries: 10
  redis:
    image: 'redis:alpine'
    restart: always
    command:
      - redis-server
      - '--requirepass'
      - '${REDIS_PASSWORD}'
    volumes:
      - 'redis-data:/data'
    healthcheck:
      test:
        - CMD
        - redis-cli
        - '-a'
        - $SERVICE_PASSWORD_REDIS
        - PING
      interval: 30s
      timeout: 10s
      retries: 5
  evolution-api:
    image: 'atendai/evolution-api:latest'
    volumes:
      - 'evolution-data:/lab_evolution/instances'
    environment:
      - SERVICE_FQDN_EVOLUTION_8080
      - 'SERVER_URL=${SERVICE_FQDN_EVOLUTION}'
      - AUTHENTICATION_API_KEY=$SERVICE_PASSWORD_EVOLUTION
      - DATABASE_ENABLED=true
      - DATABASE_PROVIDER=postgresql
      - 'DATABASE_CONNECTION_URI=postgresql://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgresql:5432/${POSTGRES_DB:-evolution}?schema=public'
      - DATABASE_CONNECTION_CLIENT_NAME=evolution_exchange
      - 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
      - 'CONFIG_SESSION_PHONE_VERSION=${CONFIG_SESSION_PHONE_VERSION:-2.3000.1026231250}'
      - CACHE_REDIS_ENABLED=true
      - 'CACHE_REDIS_URI=redis://redis:6379/6'
      - CACHE_REDIS_PREFIX_KEY=evolution
      - CACHE_REDIS_SAVE_INSTANCES=false
      - CACHE_LOCAL_ENABLED=false
volumes:
  n8n-data: null
  postgresql-data: null
  redis-data: null
  evolution-data: null