<محمدعلی محمدیمهندس اتوماسیون و سیستم‌های هوش مصنوعی
online10:38:44

بازگشت به لاگ

<نصب n8n روی سرور شخصی با داکر

نسخهٔ آمادهٔ n8n Cloud برای شروع خوب است، اما وقتی گردش‌کارها به داده و اعتبارنامهٔ حساس وصل می‌شوند، ترجیح می‌دهم همه‌چیز روی سرور خودم باشد. این لاگ همان راه‌اندازی است که روی سرورهای مشتری‌ها استفاده می‌کنم: n8n پشت یک پایگاه‌دادهٔ Postgres، با دادهٔ ماندگار و قابل‌بکاپ — نه SQLite که با یک ری‌استارت اشتباه از دست برود.

پیش‌نیازها

  • سروری با docker و docker compose (هر VPS لینوکسی کافی است)
  • یک دامنه یا زیردامنه که به IP سرور اشاره کند
  • یک ریورس‌پروکسی برای TLS (در انتها اشاره می‌کنم)

فایل docker-compose

این فایل را کنار خودت در یک پوشهٔ خالی بساز. دو سرویس دارد: postgres برای نگه‌داری داده و n8n برای خودِ اپلیکیشن. مقدارهای داخل <...> را با مقادیر خودت عوض کن.

docker-compose.yml
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 را یک‌بار بساز و ثابت نگه‌دار. اعتبارنامه‌های ذخیره‌شده با همین کلید رمز می‌شوند؛ اگر عوضش کنی، همهٔ کانکشن‌های قبلی از کار می‌افتند.

بالا آوردن سرویس

terminal
docker compose up -d
docker compose logs -f n8n

خط دوم لاگ زندهٔ n8n را نشان می‌دهد تا مطمئن شوی به Postgres وصل شده و مهاجرت جدول‌ها انجام شده است. حالا http://<ip-سرور>:5678 را باز کن؛ صفحهٔ ساخت حساب مدیر را می‌بینی.

اولین اجرا: n8n صفحهٔ ساخت اکانت صاحب (owner) را نشان می‌دهد.

پشت ریورس‌پروکسی

پورت 5678 را مستقیم روی اینترنت باز نکن. یک ریورس‌پروکسی (Caddy یا Nginx) جلوی آن بگذار تا TLS را مدیریت کند و ترافیک را به 127.0.0.1:5678 بفرستد. همان دامنه‌ای که در N8N_HOST و WEBHOOK_URL گذاشتی باید به این پروکسی اشاره کند — وگرنه لینک‌های وبهوک اشتباه ساخته می‌شوند.

بکاپ هم ساده است: کل پوشهٔ ./data را نگه‌دار. هم داده‌های Postgres آنجاست، هم پروندهٔ رمزنگاری n8n. همین.