services: storyforge-n8n: image: ${STORYFORGE_N8N_IMAGE:-docker.m.daocloud.io/n8nio/n8n:latest} container_name: storyforge-n8n restart: unless-stopped ports: - "${STORYFORGE_N8N_PORT:-127.0.0.1:25670:5678}" environment: N8N_HOST: ${N8N_HOST:-0.0.0.0} N8N_PORT: 5678 N8N_PROTOCOL: ${N8N_PROTOCOL:-https} WEBHOOK_URL: ${WEBHOOK_URL:-https://storyforge.hyzq.net/} STORYFORGE_INTERNAL_BASE_URL: ${STORYFORGE_INTERNAL_BASE_URL:-http://127.0.0.1:8081} STORYFORGE_ORCHESTRATOR_SECRET: ${ORCHESTRATOR_SHARED_SECRET:-storyforge-local-secret} GENERIC_TIMEZONE: ${GENERIC_TIMEZONE:-Asia/Shanghai} TZ: ${TZ:-Asia/Shanghai} N8N_SECURE_COOKIE: ${N8N_SECURE_COOKIE:-false} N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: ${N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS:-false} volumes: - "${STORYFORGE_N8N_STATE_ROOT:-/home/ubuntu/storyforge/data/n8n}:/home/node/.n8n" - "${STORYFORGE_N8N_WORKFLOW_ROOT:-/home/ubuntu/storyforge/n8n}:/workspace/n8n:ro" healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5678/healthz"] interval: 30s timeout: 5s retries: 3 start_period: 20s