services: n8n: image: 'n8nio/n8n:2.10.4' environment: - SERVICE_URL_N8N_5678 - 'N8N_EDITOR_BASE_URL=${SERVICE_URL_N8N}' - 'WEBHOOK_URL=${SERVICE_URL_N8N}' - 'N8N_HOST=${SERVICE_URL_N8N}' - 'N8N_PROTOCOL=${N8N_PROTOCOL:-https}' - 'GENERIC_TIMEZONE=${GENERIC_TIMEZONE:-UTC}' - 'TZ=${TZ:-UTC}' - 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_SCHEMA=public - DB_POSTGRESDB_PASSWORD=$SERVICE_PASSWORD_POSTGRES - EXECUTIONS_MODE=queue - QUEUE_BULL_REDIS_HOST=redis - QUEUE_HEALTH_CHECK_ACTIVE=true - 'N8N_ENCRYPTION_KEY=${SERVICE_PASSWORD_ENCRYPTION}' - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=external - 'N8N_RUNNERS_BROKER_LISTEN_ADDRESS=${N8N_RUNNERS_BROKER_LISTEN_ADDRESS:-0.0.0.0}' - 'N8N_RUNNERS_BROKER_PORT=${N8N_RUNNERS_BROKER_PORT:-5679}' - N8N_RUNNERS_AUTH_TOKEN=$SERVICE_PASSWORD_N8N - 'N8N_NATIVE_PYTHON_RUNNER=${N8N_NATIVE_PYTHON_RUNNER:-true}' - 'N8N_RUNNERS_MAX_CONCURRENCY=${N8N_RUNNERS_MAX_CONCURRENCY:-5}' - OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true - 'N8N_BLOCK_ENV_ACCESS_IN_NODE=${N8N_BLOCK_ENV_ACCESS_IN_NODE:-true}' - 'N8N_GIT_NODE_DISABLE_BARE_REPOS=${N8N_GIT_NODE_DISABLE_BARE_REPOS:-true}' - 'N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=${N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS:-true}' - 'N8N_PROXY_HOPS=${N8N_PROXY_HOPS:-1}' - 'N8N_SKIP_AUTH_ON_OAUTH_CALLBACK=${N8N_SKIP_AUTH_ON_OAUTH_CALLBACK:-false}' volumes: - '/data/lail-apps/lail-n8n/n8n-data:/home/node/.n8n' depends_on: postgresql: condition: service_healthy redis: condition: service_healthy healthcheck: test: - CMD-SHELL - 'wget -qO- http://127.0.0.1:5678/' interval: 5s timeout: 20s retries: 10 n8n-worker: image: 'n8nio/n8n:2.10.4' command: worker environment: - 'GENERIC_TIMEZONE=${GENERIC_TIMEZONE:-UTC}' - 'TZ=${TZ:-UTC}' - 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_SCHEMA=public - DB_POSTGRESDB_PASSWORD=$SERVICE_PASSWORD_POSTGRES - EXECUTIONS_MODE=queue - QUEUE_BULL_REDIS_HOST=redis - QUEUE_HEALTH_CHECK_ACTIVE=true - 'N8N_ENCRYPTION_KEY=${SERVICE_PASSWORD_ENCRYPTION}' - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=external - 'N8N_RUNNERS_BROKER_LISTEN_ADDRESS=${N8N_RUNNERS_BROKER_LISTEN_ADDRESS:-0.0.0.0}' - 'N8N_RUNNERS_BROKER_PORT=${N8N_RUNNERS_BROKER_PORT:-5679}' - N8N_RUNNERS_AUTH_TOKEN=$SERVICE_PASSWORD_N8N - 'N8N_NATIVE_PYTHON_RUNNER=${N8N_NATIVE_PYTHON_RUNNER:-true}' - 'N8N_RUNNERS_MAX_CONCURRENCY=${N8N_RUNNERS_MAX_CONCURRENCY:-5}' - 'N8N_BLOCK_ENV_ACCESS_IN_NODE=${N8N_BLOCK_ENV_ACCESS_IN_NODE:-true}' - 'N8N_GIT_NODE_DISABLE_BARE_REPOS=${N8N_GIT_NODE_DISABLE_BARE_REPOS:-true}' - 'N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=${N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS:-true}' - 'N8N_PROXY_HOPS=${N8N_PROXY_HOPS:-1}' - 'N8N_SKIP_AUTH_ON_OAUTH_CALLBACK=${N8N_SKIP_AUTH_ON_OAUTH_CALLBACK:-false}' volumes: - '/data/lail-apps/lail-n8n/n8n-data:/home/node/.n8n' healthcheck: test: - CMD-SHELL - 'wget -qO- http://127.0.0.1:5678/healthz' interval: 5s timeout: 20s retries: 10 depends_on: n8n: condition: service_healthy postgresql: condition: service_healthy redis: condition: service_healthy postgresql: image: 'postgres:16-alpine' 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:6-alpine' volumes: - 'redis-data:/data' healthcheck: test: - CMD - redis-cli - ping interval: 5s timeout: 5s retries: 10 task-runners: image: 'n8nio/runners:2.10.4' environment: - 'N8N_RUNNERS_TASK_BROKER_URI=${N8N_RUNNERS_TASK_BROKER_URI:-http://n8n-worker:5679}' - N8N_RUNNERS_AUTH_TOKEN=$SERVICE_PASSWORD_N8N - 'N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=${N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT:-15}' - 'N8N_RUNNERS_MAX_CONCURRENCY=${N8N_RUNNERS_MAX_CONCURRENCY:-5}' depends_on: - n8n healthcheck: test: - CMD-SHELL - 'wget -qO- http://127.0.0.1:5680/' interval: 5s timeout: 20s retries: 10