<نصب n8n روی سرور شخصی با داکر
نسخهٔ آمادهٔ n8n Cloud برای شروع خوب است، اما وقتی گردشکارها به داده و اعتبارنامهٔ حساس وصل میشوند، ترجیح میدهم همهچیز روی سرور خودم باشد. این لاگ همان راهاندازی است که روی سرورهای مشتریها استفاده میکنم: n8n پشت یک پایگاهدادهٔ Postgres، با دادهٔ ماندگار و قابلبکاپ — نه SQLite که با یک ریاستارت اشتباه از دست برود.
پیشنیازها
- سروری با
dockerوdocker compose(هر VPS لینوکسی کافی است) - یک دامنه یا زیردامنه که به IP سرور اشاره کند
- یک ریورسپروکسی برای TLS (در انتها اشاره میکنم)
فایل docker-compose
این فایل را کنار خودت در یک پوشهٔ خالی بساز. دو سرویس دارد: postgres برای
نگهداری داده و n8n برای خودِ اپلیکیشن. مقدارهای داخل <...> را با مقادیر خودت
عوض کن.
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: <یک-رمز-قوی>
POSTGRES_DB: n8n
volumes:
- ./data/postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n"]
interval: 10s
timeout: 5s
retries: 5
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
ports:
- "5678:5678"
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: <یک-رمز-قوی>
N8N_HOST: n8n.example.com
N8N_PROTOCOL: https
WEBHOOK_URL: https://n8n.example.com/
GENERIC_TIMEZONE: Asia/Tehran
N8N_ENCRYPTION_KEY: <کلید-رمزنگاری-ثابت>
volumes:
- ./data/n8n:/home/node/.n8nنکتهٔ مهم: N8N_ENCRYPTION_KEY را یکبار بساز و ثابت نگهدار. اعتبارنامههای
ذخیرهشده با همین کلید رمز میشوند؛ اگر عوضش کنی، همهٔ کانکشنهای قبلی از کار
میافتند.
بالا آوردن سرویس
docker compose up -d
docker compose logs -f n8nخط دوم لاگ زندهٔ n8n را نشان میدهد تا مطمئن شوی به Postgres وصل شده و مهاجرت
جدولها انجام شده است. حالا http://<ip-سرور>:5678 را باز کن؛ صفحهٔ ساخت
حساب مدیر را میبینی.
پشت ریورسپروکسی
پورت 5678 را مستقیم روی اینترنت باز نکن. یک ریورسپروکسی (Caddy یا Nginx)
جلوی آن بگذار تا TLS را مدیریت کند و ترافیک را به 127.0.0.1:5678 بفرستد.
همان دامنهای که در N8N_HOST و WEBHOOK_URL گذاشتی باید به این پروکسی
اشاره کند — وگرنه لینکهای وبهوک اشتباه ساخته میشوند.
بکاپ هم ساده است: کل پوشهٔ ./data را نگهدار. هم دادههای Postgres آنجاست،
هم پروندهٔ رمزنگاری n8n. همین.