infra/n8n.compose.yml

79 lines
2.5 KiB
YAML

# n8n — automate.manohargupta.com
# Visual workflow automation. Postgres-backed (SQLite locks under concurrent runs).
# v2: Added deploy.labels for Traefik swarm provider (Dokploy uses swarm stack deploy).
services:
n8n-db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: n8n
POSTGRES_USER: n8n
POSTGRES_PASSWORD: ${N8N_DB_PASSWORD}
volumes:
- n8n_db_data:/var/lib/postgresql/data
networks:
- n8n_internal
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n -d n8n"]
interval: 10s
timeout: 5s
retries: 5
n8n:
image: docker.n8n.io/n8nio/n8n:1.83.0
restart: unless-stopped
depends_on:
n8n-db:
condition: service_healthy
environment:
N8N_HOST: automate.manohargupta.com
N8N_PORT: "5678"
N8N_PROTOCOL: https
WEBHOOK_URL: https://automate.manohargupta.com/
N8N_EDITOR_BASE_URL: https://automate.manohargupta.com/
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: n8n-db
DB_POSTGRESDB_PORT: "5432"
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: ${N8N_DB_PASSWORD}
# NEVER lose this key -- all stored credentials are encrypted with it
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
GENERIC_TIMEZONE: Asia/Kolkata
TZ: Asia/Kolkata
N8N_DIAGNOSTICS_ENABLED: "false"
N8N_VERSION_NOTIFICATIONS_ENABLED: "false"
volumes:
- n8n_data:/home/node/.n8n
networks:
- dokploy-network
- n8n_internal
# Container-level labels (docker provider)
labels:
- "traefik.enable=true"
- "traefik.docker.network=dokploy-network"
- "traefik.http.routers.n8n.rule=Host(`automate.manohargupta.com`)"
- "traefik.http.routers.n8n.entrypoints=websecure"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
# Service-level labels (swarm provider) -- Dokploy deploys as swarm stack
deploy:
labels:
- "traefik.enable=true"
- "traefik.docker.network=dokploy-network"
- "traefik.http.routers.n8n.rule=Host(`automate.manohargupta.com`)"
- "traefik.http.routers.n8n.entrypoints=websecure"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
volumes:
n8n_data:
n8n_db_data:
networks:
dokploy-network:
external: true
n8n_internal:
driver: bridge