1+ version : ' 3.8'
2+
3+ services :
4+ # PostgreSQL Database
5+ postgres :
6+ image : postgres:15-alpine
7+ container_name : n8n_postgres
8+ restart : unless-stopped
9+ environment :
10+ POSTGRES_DB : ${POSTGRES_DB:-n8n}
11+ POSTGRES_USER : ${POSTGRES_USER:-n8n}
12+ POSTGRES_PASSWORD : ${POSTGRES_PASSWORD}
13+ POSTGRES_NON_ROOT_USER : ${POSTGRES_NON_ROOT_USER:-n8n}
14+ POSTGRES_NON_ROOT_PASSWORD : ${POSTGRES_NON_ROOT_PASSWORD}
15+ volumes :
16+ - postgres_data:/var/lib/postgresql/data
17+ - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
18+ networks :
19+ - n8n_network
20+ healthcheck :
21+ test : ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-n8n} -d ${POSTGRES_DB:-n8n}"]
22+ interval : 10s
23+ timeout : 5s
24+ retries : 5
25+
26+ # Redis for Queue and Cache
27+ redis :
28+ image : redis:7-alpine
29+ container_name : n8n_redis
30+ restart : unless-stopped
31+ command : redis-server --requirepass ${REDIS_PASSWORD}
32+ volumes :
33+ - redis_data:/data
34+ networks :
35+ - n8n_network
36+ healthcheck :
37+ test : ["CMD", "redis-cli", "--raw", "incr", "ping"]
38+ interval : 10s
39+ timeout : 5s
40+ retries : 5
41+
42+ # n8n Main Application
43+ n8n :
44+ image : n8nio/n8n:latest
45+ container_name : n8n_main
46+ restart : unless-stopped
47+ depends_on :
48+ postgres :
49+ condition : service_healthy
50+ redis :
51+ condition : service_healthy
52+ environment :
53+ # Database Configuration
54+ DB_TYPE : postgresdb
55+ DB_POSTGRESDB_HOST : postgres
56+ DB_POSTGRESDB_PORT : 5432
57+ DB_POSTGRESDB_DATABASE : ${POSTGRES_DB:-n8n}
58+ DB_POSTGRESDB_USER : ${POSTGRES_NON_ROOT_USER:-n8n}
59+ DB_POSTGRESDB_PASSWORD : ${POSTGRES_NON_ROOT_PASSWORD}
60+
61+ # Redis Configuration
62+ QUEUE_BULL_REDIS_HOST : redis
63+ QUEUE_BULL_REDIS_PORT : 6379
64+ QUEUE_BULL_REDIS_PASSWORD : ${REDIS_PASSWORD}
65+
66+ # n8n Configuration
67+ N8N_HOST : ${N8N_HOST:-localhost}
68+ N8N_PORT : 5678
69+ N8N_PROTOCOL : ${N8N_PROTOCOL:-https}
70+ WEBHOOK_URL : ${WEBHOOK_URL:-https://your-domain.com}
71+
72+ # Security
73+ N8N_BASIC_AUTH_ACTIVE : ${N8N_BASIC_AUTH_ACTIVE:-false}
74+ N8N_BASIC_AUTH_USER : ${N8N_BASIC_AUTH_USER}
75+ N8N_BASIC_AUTH_PASSWORD : ${N8N_BASIC_AUTH_PASSWORD}
76+ N8N_JWT_AUTH_ACTIVE : ${N8N_JWT_AUTH_ACTIVE:-true}
77+ N8N_ENCRYPTION_KEY : ${N8N_ENCRYPTION_KEY}
78+
79+ # Performance
80+ EXECUTIONS_PROCESS : main
81+ EXECUTIONS_MODE : queue
82+ QUEUE_BULL_REDIS_DB : 2
83+ N8N_METRICS : ${N8N_METRICS:-true}
84+
85+ # Logging
86+ N8N_LOG_LEVEL : ${N8N_LOG_LEVEL:-info}
87+ N8N_LOG_OUTPUT : ${N8N_LOG_OUTPUT:-console}
88+
89+ # Email Configuration (Optional)
90+ N8N_EMAIL_MODE : ${N8N_EMAIL_MODE:-smtp}
91+ N8N_SMTP_HOST : ${N8N_SMTP_HOST}
92+ N8N_SMTP_PORT : ${N8N_SMTP_PORT:-587}
93+ N8N_SMTP_USER : ${N8N_SMTP_USER}
94+ N8N_SMTP_PASS : ${N8N_SMTP_PASS}
95+ N8N_SMTP_SENDER : ${N8N_SMTP_SENDER}
96+
97+ # Timezone
98+ GENERIC_TIMEZONE : ${TIMEZONE:-UTC}
99+ TZ : ${TIMEZONE:-UTC}
100+ ports :
101+ - " ${N8N_PORT:-5678}:5678"
102+ volumes :
103+ - n8n_data:/home/node/.n8n
104+ - /var/run/docker.sock:/var/run/docker.sock:ro
105+ networks :
106+ - n8n_network
107+ healthcheck :
108+ test : ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5678/healthz"]
109+ interval : 30s
110+ timeout : 10s
111+ retries : 3
112+
113+ # n8n Worker (for queue processing)
114+ n8n-worker :
115+ image : n8nio/n8n:latest
116+ container_name : n8n_worker
117+ restart : unless-stopped
118+ depends_on :
119+ postgres :
120+ condition : service_healthy
121+ redis :
122+ condition : service_healthy
123+ command : worker
124+ environment :
125+ # Database Configuration
126+ DB_TYPE : postgresdb
127+ DB_POSTGRESDB_HOST : postgres
128+ DB_POSTGRESDB_PORT : 5432
129+ DB_POSTGRESDB_DATABASE : ${POSTGRES_DB:-n8n}
130+ DB_POSTGRESDB_USER : ${POSTGRES_NON_ROOT_USER:-n8n}
131+ DB_POSTGRESDB_PASSWORD : ${POSTGRES_NON_ROOT_PASSWORD}
132+
133+ # Redis Configuration
134+ QUEUE_BULL_REDIS_HOST : redis
135+ QUEUE_BULL_REDIS_PORT : 6379
136+ QUEUE_BULL_REDIS_PASSWORD : ${REDIS_PASSWORD}
137+ QUEUE_BULL_REDIS_DB : 2
138+
139+ # Worker Configuration
140+ EXECUTIONS_PROCESS : own
141+ EXECUTIONS_MODE : queue
142+ N8N_ENCRYPTION_KEY : ${N8N_ENCRYPTION_KEY}
143+
144+ # Logging
145+ N8N_LOG_LEVEL : ${N8N_LOG_LEVEL:-info}
146+ N8N_LOG_OUTPUT : ${N8N_LOG_OUTPUT:-console}
147+
148+ # Timezone
149+ GENERIC_TIMEZONE : ${TIMEZONE:-UTC}
150+ TZ : ${TIMEZONE:-UTC}
151+ volumes :
152+ - n8n_data:/home/node/.n8n
153+ - /var/run/docker.sock:/var/run/docker.sock:ro
154+ networks :
155+ - n8n_network
156+ deploy :
157+ replicas : ${N8N_WORKER_REPLICAS:-2}
158+
159+ # Nginx Reverse Proxy (Optional)
160+ nginx :
161+ image : nginx:alpine
162+ container_name : n8n_nginx
163+ restart : unless-stopped
164+ depends_on :
165+ - n8n
166+ ports :
167+ - " 80:80"
168+ - " 443:443"
169+ volumes :
170+ - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
171+ - ./nginx/ssl:/etc/nginx/ssl:ro
172+ - nginx_logs:/var/log/nginx
173+ networks :
174+ - n8n_network
175+ healthcheck :
176+ test : ["CMD", "nginx", "-t"]
177+ interval : 30s
178+ timeout : 10s
179+ retries : 3
180+
181+ volumes :
182+ postgres_data :
183+ driver : local
184+ redis_data :
185+ driver : local
186+ n8n_data :
187+ driver : local
188+ nginx_logs :
189+ driver : local
190+
191+ networks :
192+ n8n_network :
193+ driver : bridge
0 commit comments