Skip to content

Commit a3901fd

Browse files
committed
Added: n8n compose file
1 parent df37bb3 commit a3901fd

6 files changed

Lines changed: 332 additions & 0 deletions

File tree

projects/n8n/.env-example

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Database Configuration
2+
POSTGRES_DB=n8n
3+
POSTGRES_USER=postgres
4+
POSTGRES_PASSWORD=your_strong_postgres_password
5+
POSTGRES_NON_ROOT_USER=n8n
6+
POSTGRES_NON_ROOT_PASSWORD=your_strong_n8n_db_password
7+
8+
# Redis Configuration
9+
REDIS_PASSWORD=your_strong_redis_password
10+
11+
# n8n Configuration
12+
N8N_HOST=your-domain.com
13+
N8N_PORT=5678
14+
N8N_PROTOCOL=https
15+
WEBHOOK_URL=https://your-domain.com
16+
17+
# Security - Generate strong keys
18+
N8N_ENCRYPTION_KEY=your_32_character_encryption_key_here
19+
N8N_BASIC_AUTH_ACTIVE=false
20+
N8N_BASIC_AUTH_USER=admin
21+
N8N_BASIC_AUTH_PASSWORD=your_basic_auth_password
22+
N8N_JWT_AUTH_ACTIVE=true
23+
24+
# Performance
25+
N8N_WORKER_REPLICAS=2
26+
N8N_METRICS=true
27+
28+
# Logging
29+
N8N_LOG_LEVEL=info
30+
N8N_LOG_OUTPUT=console
31+
32+
# Email Configuration (Optional)
33+
N8N_EMAIL_MODE=smtp
34+
N8N_SMTP_HOST=smtp.gmail.com
35+
N8N_SMTP_PORT=587
36+
37+
N8N_SMTP_PASS=your-app-password
38+
39+
40+
# Timezone
41+
TIMEZONE=UTC

projects/n8n/.env-sqlite

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
WEBHOOK_URL=https://n8n.example.com
2+
N8N_PUBLIC_API_SWAGGERUI_DISABLED=false
3+
N8N_PUBLIC_API_DISABLED=false
4+
TIMEZONE=Asia/Dhaka
5+
N8N_SECURE_COOKIE=true
6+
N8N_ENCRYPTION_KEY=amiktmikrajakarrajakar
7+
DB_TYPE=sqlite
8+
DB_SQLITE_DATABASE=/home/node/.n8n/database.sqlite
9+
N8N_TRUST_PROXY=true
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
services:
2+
postgres:
3+
image: postgres:15
4+
container_name: n8n_postgres
5+
restart: unless-stopped
6+
environment:
7+
- POSTGRES_USER=n8n
8+
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
9+
- POSTGRES_DB=n8n
10+
volumes:
11+
- postgres_data:/var/lib/postgresql/data
12+
networks:
13+
- n8n_network
14+
healthcheck:
15+
test: ['CMD-SHELL', 'pg_isready -U n8n -d n8n']
16+
interval: 5s
17+
timeout: 5s
18+
retries: 10
19+
20+
n8n:
21+
container_name: n8n
22+
image: n8nio/n8n
23+
restart: unless-stopped
24+
ports:
25+
- "5678:5678"
26+
environment:
27+
- WEBHOOK_URL=${WEBHOOK_URL}
28+
- N8N_PUBLIC_API_SWAGGERUI_DISABLED=${N8N_PUBLIC_API_SWAGGERUI_DISABLED:-true}
29+
- N8N_PUBLIC_API_DISABLED=${N8N_PUBLIC_API_DISABLED:-false}
30+
- GENERIC_TIMEZONE=${TIMEZONE:-UTC}
31+
- N8N_SECURE_COOKIE=${N8N_SECURE_COOKIE:-false}
32+
- DB_TYPE=postgresdb
33+
- DB_POSTGRESDB_HOST=postgres
34+
- DB_POSTGRESDB_PORT=5432
35+
- DB_POSTGRESDB_DATABASE=n8n
36+
- DB_POSTGRESDB_USER=n8n
37+
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
38+
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
39+
volumes:
40+
- n8n_data:/home/node/.n8n
41+
networks:
42+
- n8n_network
43+
depends_on:
44+
postgres:
45+
condition: service_healthy
46+
healthcheck:
47+
test: ['CMD-SHELL', 'wget --no-verbose --tries=1 --spider http://localhost:5678/healthz || exit 1']
48+
interval: 30s
49+
timeout: 10s
50+
retries: 3
51+
52+
networks:
53+
n8n_network:
54+
driver: bridge
55+
56+
volumes:
57+
n8n_data:
58+
name: n8n_data
59+
postgres_data:
60+
name: n8n_postgres_data

projects/n8n/n8n-prod.yml

Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
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
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
services:
2+
n8n:
3+
container_name: n8n
4+
image: n8nio/n8n
5+
restart: unless-stopped
6+
ports:
7+
- "5678:5678"
8+
environment:
9+
- WEBHOOK_URL=${WEBHOOK_URL}
10+
- N8N_PUBLIC_API_SWAGGERUI_DISABLED=${N8N_PUBLIC_API_SWAGGERUI_DISABLED:-true}
11+
- N8N_PUBLIC_API_DISABLED=${N8N_PUBLIC_API_DISABLED:-false}
12+
- GENERIC_TIMEZONE=${TIMEZONE:-UTC}
13+
- N8N_SECURE_COOKIE=${N8N_SECURE_COOKIE:-false}
14+
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
15+
- DB_TYPE=sqlite
16+
- DB_SQLITE_DATABASE=/home/node/.n8n/database.sqlite
17+
volumes:
18+
- n8n_data:/home/node/.n8n
19+
healthcheck:
20+
test: ['CMD-SHELL', 'wget --no-verbose --tries=1 --spider http://localhost:5678/healthz || exit 1']
21+
interval: 30s
22+
timeout: 10s
23+
retries: 3
24+
25+
volumes:
26+
n8n_data:
27+
name: n8n_data

projects/terraform/Problems.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Terraform Action at AWS
2+

0 commit comments

Comments
 (0)