version: "3.7" services: main: image: ${N8N_IMAGE} command: start restart: unless-stopped user: ${N8N_UID} ports: - "5678:5678" environment: # Database - DB_TYPE=postgresdb - DB_POSTGRESDB_USER=${N8N_POSTGRESDB_DATABASE} - DB_POSTGRESDB_HOST=db - DB_POSTGRESDB_PORT=5432 - DB_POSTGRESDB_USER=${N8N_POSTGRESDB_USER} - DB_POSTGRESDB_PASSWORD=${N8N_POSTGRESDB_PASSWORD} # Redis - QUEUE_BULL_REDIS_HOST=redis - QUEUE_BULL_REDIS_PORT=6379 - QUEUE_BULL_REDIS_DB=0 - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} - N8N_HOST=${N8N_HOST} - N8N_PORT=5678 - N8N_EDITOR_BASE_URL=${N8N_EDITOR_URL} - N8N_PROTOCOL=https - NODE_ENV=production - N8N_LOG_LEVEL=debug - WEBHOOK_URL=${N8N_WEBHOOK_URL} - EXECUTIONS_MODE=queue - N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true - NODE_FUNCTION_ALLOW_EXTERNAL=${NODE_FUNCTION_ALLOW_EXTERNAL} #- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales - EXECUTIONS_DATA_PRUNE=true - EXECUTIONS_DATA_MAX_AGE=168 - GENERIC_TIMEZONE=${N8N_TZ} - TZ=${N8N_TZ} volumes: - /mnt:/mnt deploy: mode: replicated replicas: 1 labels: - homepage.group=Management - homepage.name=n8n - homepage.icon=sh-n8n-light - homepage.href=${N8N_EDITOR_URL} - homepage.description=n8n is a workflow automation platform that gives technical teams the flexibility of code with the speed of no-code. worker: image: ${N8N_IMAGE} command: worker --concurrency=10 restart: unless-stopped user: ${N8N_UID} environment: # Database - DB_TYPE=postgresdb - DB_POSTGRESDB_USER=${N8N_POSTGRESDB_DATABASE} - DB_POSTGRESDB_HOST=db - DB_POSTGRESDB_PORT=5432 - DB_POSTGRESDB_USER=${N8N_POSTGRESDB_USER} - DB_POSTGRESDB_PASSWORD=${N8N_POSTGRESDB_PASSWORD} # Redis - QUEUE_BULL_REDIS_HOST=redis - QUEUE_BULL_REDIS_PORT=6379 - QUEUE_BULL_REDIS_DB=0 - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} - N8N_HOST=${N8N_HOST} - N8N_PORT=5678 - N8N_EDITOR_BASE_URL=${N8N_EDITOR_URL} - N8N_PROTOCOL=https - NODE_ENV=production - N8N_LOG_LEVEL=debug - WEBHOOK_URL=${N8N_WEBHOOK_URL} - EXECUTIONS_MODE=queue - N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true - NODE_FUNCTION_ALLOW_EXTERNAL=${NODE_FUNCTION_ALLOW_EXTERNAL} #- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales - EXECUTIONS_DATA_PRUNE=true - EXECUTIONS_DATA_MAX_AGE=168 - GENERIC_TIMEZONE=${N8N_TZ} - TZ=${N8N_TZ} volumes: - /mnt:/mnt deploy: mode: global webhook: image: ${N8N_IMAGE} command: webhook restart: unless-stopped user: ${N8N_UID} ports: - "5679:5678" environment: # Database - DB_TYPE=postgresdb - DB_POSTGRESDB_USER=${N8N_POSTGRESDB_DATABASE} - DB_POSTGRESDB_HOST=db - DB_POSTGRESDB_PORT=5432 - DB_POSTGRESDB_USER=${N8N_POSTGRESDB_USER} - DB_POSTGRESDB_PASSWORD=${N8N_POSTGRESDB_PASSWORD} # Redis - QUEUE_BULL_REDIS_HOST=redis - QUEUE_BULL_REDIS_PORT=6379 - QUEUE_BULL_REDIS_DB=0 - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} - N8N_HOST=${N8N_HOST} - N8N_PORT=5678 - N8N_EDITOR_BASE_URL=${N8N_EDITOR_URL} - N8N_PROTOCOL=https - NODE_ENV=production - N8N_LOG_LEVEL=debug - WEBHOOK_URL=${N8N_WEBHOOK_URL} - EXECUTIONS_MODE=queue - N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true - NODE_FUNCTION_ALLOW_EXTERNAL=${NODE_FUNCTION_ALLOW_EXTERNAL} #- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales - EXECUTIONS_DATA_PRUNE=true - EXECUTIONS_DATA_MAX_AGE=168 - GENERIC_TIMEZONE=${N8N_TZ} - TZ=${N8N_TZ} volumes: - /mnt:/mnt deploy: mode: replicated replicas: 1 redis: image: redis:alpine restart: unless-stopped user: ${N8N_UID} db: image: postgres:16 restart: unless-stopped user: ${N8N_UID} volumes: - /mnt/docker-storage/n8n:/var/lib/postgresql/data environment: - TZ=${N8N_TZ} - POSTGRES_DB=${N8N_POSTGRESDB_DATABASE} - POSTGRES_USER=${N8N_POSTGRESDB_USER} - POSTGRES_PASSWORD=${N8N_POSTGRESDB_PASSWORD}