سی ام اس نویسسی ام اس نویسیاد بگیر، سیستم خودتو بنویس
مجلهتماس با ما
سی ام اس نویسسی ام اس نویس

CMS نویس مرجعی برای آموزش برنامه نویسی وب و PHP، توسعه افزونه‌های اختصاصی وردپرس، طراحی ورک‌فلو و اتوماسیون با n8n و توسعه CMS های اختصاصی است. هدف ما ارائه آموزش‌های کاربردی و راهکارهای حرفه‌ای برای توسعه‌دهندگان، کسب‌وکارها و علاقه‌مندان به دنیای برنامه‌نویسی است.

پیوندهای سریع
محصولات فیزیکیمحصولات دیجیتالدوره‌های آموزشی
سی ام اس نویس
مجله سی ام اس نویستماس با ماپنل کاربری
سی ام اس نویس — تمامی حقوق برای سی ام اس نویس محفوظ است. © 1406 تماس با ما09307711941
نصب n8n با Docker Compose؛ آموزش کامل راه‌اندازی و مدیریت سرویس

نصب n8n با Docker Compose؛ آموزش کامل راه‌اندازی و مدیریت سرویس

ممدیر کل سیستم ۱۲ آبان ۱۴۰۵ ۲۰ دقیقه مطالعه ۱ بازدید
نصب n8n با Docker Compose؛ آموزش کامل راه‌اندازی و مدیریت سرویس

اگر می‌خواهید n8n را روی سرور خود اجرا کنید و کنترل کاملی روی تنظیمات، دیتابیس، اطلاعات و نحوه اجرای آن داشته باشید، استفاده از Docker Compose یکی از بهترین روش‌های راه‌اندازی این ابزار است.

با Docker Compose می‌توانید n8n و سرویس‌های وابسته مانند PostgreSQL را در یک فایل تعریف کنید، آن‌ها را به یکدیگر متصل کنید و با چند دستور ساده مدیریت کنید.

در این مقاله قصد داریم نصب n8n با Docker Compose را به‌صورت کاملاً عملی آموزش دهیم. از ساخت پوشه پروژه و فایل تنظیمات شروع می‌کنیم، سپس PostgreSQL را به n8n متصل می‌کنیم و در نهایت نحوه اجرا، مدیریت، بکاپ و به‌روزرسانی سرویس‌ها را بررسی خواهیم کرد.

این آموزش برای سرورهای لینوکسی مانند Ubuntu و Debian مناسب است. همچنین می‌توانید با تغییرات جزئی از آن روی سیستم شخصی خود استفاده کنید.

Docker Compose چیست و چه کاربردی دارد؟

Docker Compose ابزاری برای تعریف و مدیریت برنامه‌هایی است که از یک یا چند کانتینر Docker تشکیل شده‌اند.

فرض کنید می‌خواهید n8n را روی سرور اجرا کنید. در یک ساختار ساده ممکن است فقط به یک کانتینر n8n نیاز داشته باشید، اما در پروژه‌های جدی‌تر معمولاً سرویس‌های دیگری نیز وجود دارند.

برای مثال:

  • کانتینر n8n برای اجرای Workflowها
  • کانتینر PostgreSQL برای نگهداری اطلاعات
  • یک Reverse Proxy برای مدیریت دامنه و HTTPS
  • در معماری Queue Mode، سرویس Redis و کانتینرهای Worker

بدون Docker Compose باید این سرویس‌ها را جداگانه ایجاد و مدیریت کنید.

اما با Docker Compose می‌توانید تمام تنظیمات را در یک فایل YAML قرار دهید.

برای مثال:


services:

  app:

    image: nginx:alpine

این فایل یک سرویس ساده Nginx را تعریف می‌کند.

با اجرای دستور زیر Docker Compose سرویس را ایجاد و اجرا می‌کند:


docker compose up -d

در ادامه همین روش را برای اجرای n8n و PostgreSQL استفاده خواهیم کرد.

چرا برای نصب n8n از Docker Compose استفاده کنیم؟

استفاده از Docker Compose چند مزیت مهم دارد.

مدیریت ساده سرویس‌ها

می‌توانید تمام کانتینرهای مربوط به یک پروژه را با یک دستور اجرا یا متوقف کنید.

نگهداری تنظیمات در فایل

تمام تنظیمات اصلی مانند تصویر Docker، شبکه، Volumeها و متغیرهای محیطی در فایل Compose قرار می‌گیرند.

این موضوع باعث می‌شود مدیریت و انتقال پروژه آسان‌تر شود.

اتصال ساده به PostgreSQL

می‌توانید PostgreSQL و n8n را در یک شبکه داخلی قرار دهید تا بدون نیاز به انتشار پورت دیتابیس در اینترنت با یکدیگر ارتباط برقرار کنند.

پشتیبانی از Volumeهای پایدار

اطلاعات n8n و PostgreSQL در Volumeهای Docker نگهداری می‌شوند.

در نتیجه، حذف و ایجاد مجدد کانتینرها لزوماً باعث حذف اطلاعات نخواهد شد.

مناسب برای توسعه زیرساخت

در آینده می‌توانید سرویس‌هایی مانند Redis، Reverse Proxy یا ابزارهای مانیتورینگ را به ساختار خود اضافه کنید.

پیش‌نیازهای نصب n8n با Docker Compose

قبل از شروع باید چند مورد آماده باشند.

سیستم‌عامل

در این آموزش فرض می‌کنیم از یکی از سیستم‌عامل‌های زیر استفاده می‌کنید:

  • Ubuntu 22.04
  • Ubuntu 24.04
  • Debian 12 یا نسخه پشتیبانی‌شده جدیدتر

Docker و Docker Compose

ابتدا مطمئن شوید Docker نصب شده است:


docker --version

سپس نسخه Docker Compose را بررسی کنید:


docker compose version

اگر هر دو دستور اطلاعات نسخه را نمایش دهند، می‌توانید مراحل بعدی را دنبال کنید.

در این آموزش دستورات Docker را با sudo اجرا می‌کنیم. اگر کاربر شما مجوز اجرای Docker را دارد، می‌توانید sudo را حذف کنید.

منابع سرور

منابع موردنیاز به تعداد Workflowها و حجم پردازش بستگی دارد.

برای یک نمونه کوچک، منابع محدود ممکن است کافی باشند، اما برای محیط عملیاتی بهتر است مصرف RAM، CPU و فضای ذخیره‌سازی را بررسی کنید.

به‌خصوص اگر از PostgreSQL، پردازش‌های سنگین یا تعداد زیادی اجرای هم‌زمان استفاده می‌کنید، باید منابع بیشتری در نظر بگیرید.

مرحله اول: ایجاد پوشه پروژه

ابتدا به سرور متصل شوید.

سپس پوشه‌ای برای پروژه ایجاد کنید:


sudo mkdir -p /opt/n8n

مالکیت پوشه را به کاربر فعلی اختصاص دهید:


sudo chown -R "$USER:$USER" /opt/n8n

اکنون وارد پوشه شوید:


cd /opt/n8n

تمام فایل‌های تنظیمات پروژه را در همین مسیر ایجاد خواهیم کرد.

ساختار نهایی به این شکل خواهد بود:


/opt/n8n/

├── .env

└── compose.yaml

مرحله دوم: تولید رمزهای امن

برای راه‌اندازی n8n با PostgreSQL به دو مقدار حساس نیاز داریم:

  1. رمز عبور دیتابیس PostgreSQL
  2. کلید رمزنگاری اطلاعات n8n

برای تولید رمز تصادفی PostgreSQL دستور زیر را اجرا کنید:


openssl rand -hex 24

خروجی این دستور را در محل امنی نگهداری کنید.

سپس برای تولید کلید رمزنگاری n8n اجرا کنید:


openssl rand -hex 32

کلید دوم برای رمزنگاری اطلاعات حساس و Credentialهای n8n استفاده می‌شود.

نکته امنیتی: کلید N8N_ENCRYPTION_KEY را پس از راه‌اندازی بدون فرایند مناسب تغییر ندهید. در صورت از دست رفتن این کلید ممکن است اطلاعات اعتبارنامه‌های ذخیره‌شده دیگر قابل رمزگشایی نباشند.

مرحله سوم: ساخت فایل .env

فایل .env برای نگهداری متغیرهای محیطی استفاده می‌شود.

داخل پوشه پروژه دستور زیر را اجرا کنید:


nano .env

محتوای زیر را در فایل قرار دهید:


POSTGRES_DB=n8n

POSTGRES_USER=n8n_user

POSTGRES_PASSWORD=REPLACE_WITH_SECURE_PASSWORD



N8N_ENCRYPTION_KEY=REPLACE_WITH_SECURE_ENCRYPTION_KEY



GENERIC_TIMEZONE=Asia/Tehran

TZ=Asia/Tehran



N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true

N8N_DIAGNOSTICS_ENABLED=false

به‌جای مقادیر نمونه، رمز عبور و کلید تولیدشده در مرحله قبل را وارد کنید.

توضیح متغیرها:

متغیرکاربرد
POSTGRES_DBنام دیتابیس
POSTGRES_USERنام کاربری PostgreSQL
POSTGRES_PASSWORDرمز عبور دیتابیس
N8N_ENCRYPTION_KEYکلید رمزنگاری Credentialها
GENERIC_TIMEZONEمنطقه زمانی Workflowها
TZمنطقه زمانی محیط کانتینر
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONSبررسی و اعمال مجوزهای فایل تنظیمات n8n
N8N_DIAGNOSTICS_ENABLEDکنترل ارسال داده‌های تشخیصی

پس از ذخیره فایل، مجوز دسترسی آن را محدود کنید:


chmod 600 .env

فایل .env نباید در مخازن عمومی Git قرار بگیرد.

مرحله چهارم: ساخت فایل Docker Compose

اکنون باید سرویس‌های PostgreSQL و n8n را تعریف کنیم.

دستور زیر را اجرا کنید:


nano compose.yaml

محتوای زیر را داخل فایل قرار دهید:


services:



  postgres:

    image: postgres:16

    restart: unless-stopped



    environment:

      POSTGRES_DB: ${POSTGRES_DB}

      POSTGRES_USER: ${POSTGRES_USER}

      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}



    volumes:

      - postgres_data:/var/lib/postgresql/data



    healthcheck:

      test:

        - CMD-SHELL

        - pg_isready -U "$$POSTGRES_USER" -d "$$POSTGRES_DB"

      interval: 10s

      timeout: 5s

      retries: 10



    networks:

      - n8n_network



  n8n:

    image: docker.n8n.io/n8nio/n8n:latest

    restart: unless-stopped



    ports:

      - "127.0.0.1:5678:5678"



    environment:

      DB_TYPE: postgresdb

      DB_POSTGRESDB_HOST: postgres

      DB_POSTGRESDB_PORT: 5432

      DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}

      DB_POSTGRESDB_USER: ${POSTGRES_USER}

      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}



      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}



      GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}

      TZ: ${TZ}



      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: ${N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS}

      N8N_DIAGNOSTICS_ENABLED: ${N8N_DIAGNOSTICS_ENABLED}



    volumes:

      - n8n_data:/home/node/.n8n



    depends_on:

      postgres:

        condition: service_healthy



    networks:

      - n8n_network



volumes:

  postgres_data:

  n8n_data:



networks:

  n8n_network:

    driver: bridge

این فایل یک نمونه n8n و یک دیتابیس PostgreSQL ایجاد می‌کند.

توجه: این تنظیمات برای یک نصب جدید و مستقل طراحی شده‌اند. اگر از قبل یک نمونه n8n فعال دارید، نباید بدون برنامه مهاجرت دیتابیس و بکاپ، فایل Compose فعلی آن را با این نمونه جایگزین کنید.

همچنین در محیط عملیاتی بهتر است به‌جای latest، نسخه مشخص و آزمایش‌شده n8n را انتخاب کنید.

مرحله پنجم: بررسی ساختار فایل Compose

قبل از اجرای سرویس‌ها، بهتر است قسمت‌های مختلف فایل را بشناسیم.

سرویس PostgreSQL

بخش زیر دیتابیس را تعریف می‌کند:


postgres:

  image: postgres:16

در این مثال از PostgreSQL نسخه 16 استفاده کرده‌ایم.

اطلاعات اتصال از فایل .env دریافت می‌شوند.

Volume مربوط به PostgreSQL

این قسمت برای نگهداری دائمی اطلاعات دیتابیس است:


volumes:

  - postgres_data:/var/lib/postgresql/data

اطلاعات دیتابیس داخل Volume نگهداری می‌شوند و با ایجاد مجدد کانتینر، تا زمانی که Volume حذف نشده باشد، باقی می‌مانند.

Health Check دیتابیس

در فایل Compose از pg_isready برای بررسی آماده بودن PostgreSQL استفاده کردیم.

این بررسی به Docker Compose کمک می‌کند اجرای n8n را تا زمان آماده شدن سرویس دیتابیس به تعویق بیندازد.

البته آماده بودن PostgreSQL به‌تنهایی تضمین نمی‌کند که تمام تنظیمات اتصال n8n صحیح هستند.

اتصال n8n به PostgreSQL

مهم‌ترین متغیرهای اتصال عبارت‌اند از:


DB_TYPE: postgresdb

DB_POSTGRESDB_HOST: postgres

DB_POSTGRESDB_PORT: 5432

مقدار postgres نام سرویس دیتابیس در فایل Compose است.

Docker Compose امکان شناسایی سرویس‌ها از طریق نام آن‌ها در شبکه داخلی را فراهم می‌کند.

بنابراین نیازی نیست برای اتصال n8n به دیتابیس از IP عمومی سرور استفاده کنید.

Volume مربوط به n8n

این قسمت اطلاعات پایدار n8n را نگهداری می‌کند:


volumes:

  - n8n_data:/home/node/.n8n

حتی هنگام استفاده از PostgreSQL نیز باید این Volume را حفظ کنید؛ زیرا ممکن است اطلاعات و فایل‌های مهمی خارج از دیتابیس در آن نگهداری شوند.

تنظیم پورت n8n

در فایل Compose از این تنظیم استفاده کرده‌ایم:


ports:

  - "127.0.0.1:5678:5678"

این تنظیم باعث می‌شود پورت n8n فقط از داخل خود سرور قابل دسترسی باشد.

بنابراین پورت 5678 مستقیماً در اینترنت منتشر نمی‌شود.

برای دسترسی عمومی باید در ادامه یک Reverse Proxy و HTTPS تنظیم کنید.

مرحله ششم: اعتبارسنجی فایل Docker Compose

قبل از اجرای کانتینرها، بهتر است ساختار فایل Compose را بررسی کنید.

دستور زیر را اجرا کنید:


sudo docker compose config --quiet

اگر فایل معتبر باشد، معمولاً خروجی خاصی نمایش داده نمی‌شود.

اگر مشکلی در ساختار YAML یا متغیرهای محیطی وجود داشته باشد، Docker Compose پیام خطا نمایش می‌دهد.

این مرحله به شما کمک می‌کند قبل از اجرای سرویس‌ها مشکلات اولیه را شناسایی کنید.

مرحله هفتم: اجرای n8n و PostgreSQL

اکنون می‌توانیم سرویس‌ها را اجرا کنیم.

داخل پوشه پروژه دستور زیر را اجرا کنید:


sudo docker compose up -d

Docker تصاویر موردنیاز را دریافت می‌کند و کانتینرهای PostgreSQL و n8n را ایجاد خواهد کرد.

برای مشاهده وضعیت سرویس‌ها اجرا کنید:


sudo docker compose ps

در صورت اجرای صحیح باید دو سرویس را مشاهده کنید:

  • postgres
  • n8n

برای بررسی لاگ‌ها نیز می‌توانید اجرا کنید:


sudo docker compose logs -f

اگر فقط می‌خواهید لاگ n8n را مشاهده کنید:


sudo docker compose logs -f n8n

برای خروج از نمایش زنده لاگ‌ها، Ctrl + C را فشار دهید.

مرحله هشتم: بررسی اتصال PostgreSQL

برای اطمینان از اینکه PostgreSQL به‌درستی اجرا شده است، دستور زیر را وارد کنید:


sudo docker compose exec postgres sh -c 'pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB"'

اگر دیتابیس آماده پذیرش اتصال باشد، پیام مناسبی نمایش داده می‌شود.

سپس لاگ n8n را بررسی کنید:


sudo docker compose logs --tail=100 n8n

اگر اطلاعات اتصال صحیح باشند، n8n باید بتواند دیتابیس خود را آماده کند و مراحل راه‌اندازی را ادامه دهد.

در اولین اجرای n8n ممکن است فرایند Migration دیتابیس انجام شود.

به همین دلیل اولین راه‌اندازی گاهی بیشتر از اجراهای بعدی زمان می‌برد.

مرحله نهم: ورود به پنل n8n

در این آموزش پورت n8n فقط روی localhost سرور باز شده است.

برای دسترسی موقت و امن از کامپیوتر شخصی، می‌توانید از SSH Tunnel استفاده کنید.

روی کامپیوتر خود دستور زیر را اجرا کنید:


ssh -L 5678:127.0.0.1:5678 username@SERVER_IP

به‌جای username و SERVER_IP اطلاعات سرور را قرار دهید.

پس از اتصال، مرورگر خود را باز کنید و آدرس زیر را وارد کنید:


http://localhost:5678

در اولین ورود، صفحه ساخت حساب مالک اولیه نمایش داده می‌شود.

اطلاعات حساب را وارد کنید و وارد محیط مدیریت n8n شوید.

برای دسترسی دائمی از طریق دامنه باید تنظیمات Reverse Proxy، SSL و آدرس Webhookها را نیز انجام دهید.

مرحله دهم: مدیریت سرویس‌ها با Docker Compose

یکی از مهم‌ترین مزایای Docker Compose مدیریت ساده کانتینرهاست.

در ادامه دستورات کاربردی را بررسی می‌کنیم.

مشاهده وضعیت سرویس‌ها


sudo docker compose ps

مشاهده تمام کانتینرهای پروژه


sudo docker compose ps -a

راه‌اندازی مجدد n8n


sudo docker compose restart n8n

راه‌اندازی مجدد PostgreSQL


sudo docker compose restart postgres

توجه کنید که راه‌اندازی مجدد دیتابیس می‌تواند اجرای Workflowهای فعال را مختل کند.

متوقف کردن سرویس‌ها


sudo docker compose stop

اجرای مجدد سرویس‌های متوقف‌شده


sudo docker compose start

حذف کانتینرها بدون حذف Volumeها


sudo docker compose down

این دستور کانتینرها و شبکه پیش‌فرض پروژه را حذف می‌کند، اما Volumeهای نام‌گذاری‌شده را به‌صورت پیش‌فرض حذف نمی‌کند.

مشاهده مصرف منابع


sudo docker stats

با این دستور می‌توانید مصرف CPU و RAM کانتینرها را مشاهده کنید.

مرحله یازدهم: اتصال دامنه به n8n

اگر قصد دارید از n8n برای اجرای Workflowهای واقعی و دریافت Webhook از سرویس‌های خارجی استفاده کنید، بهتر است یک دامنه اختصاصی برای آن تنظیم کنید.

برای مثال:


n8n.example.com

معمولاً ساختار ارتباط به شکل زیر خواهد بود:


Internet

    |

    v

HTTPS Reverse Proxy

    |

    v

n8n:5678

    |

    v

PostgreSQL

در این معماری، Reverse Proxy درخواست‌های HTTPS را دریافت می‌کند و آن‌ها را به سرویس n8n ارسال می‌کند.

پس از راه‌اندازی Reverse Proxy باید متغیرهای مرتبط با آدرس عمومی را نیز متناسب با محیط خود تنظیم کنید.

برای مثال:


N8N_HOST=n8n.example.com

N8N_PROTOCOL=https

N8N_EDITOR_BASE_URL=https://n8n.example.com/

WEBHOOK_URL=https://n8n.example.com/

N8N_PROXY_HOPS=1

در این مثال مقدار N8N_PROXY_HOPS برای ساختاری در نظر گرفته شده که یک Reverse Proxy قابل اعتماد جلوی n8n قرار دارد. اگر تعداد Proxyها متفاوت باشد، باید تنظیمات را متناسب با معماری واقعی بررسی کنید.

این مقادیر باید در بخش environment سرویس n8n نیز تعریف شوند تا به کانتینر منتقل شوند.

نکته: صرفاً اضافه کردن این متغیرها باعث فعال شدن HTTPS نمی‌شود. باید Reverse Proxy، گواهی SSL، DNS و مسیر ارتباطی نیز به‌درستی پیکربندی شده باشند.

مرحله دوازدهم: بکاپ گرفتن از n8n و PostgreSQL

یکی از مهم‌ترین اقدامات پس از راه‌اندازی n8n، تهیه نسخه پشتیبان است.

در این معماری باید حداقل از سه بخش محافظت کنید:

  1. دیتابیس PostgreSQL
  2. Volume اطلاعات n8n
  3. فایل‌های تنظیمات و کلید رمزنگاری

بکاپ گرفتن از PostgreSQL

ابتدا یک پوشه برای بکاپ ایجاد کنید:


mkdir -p /opt/n8n/backups

سپس از دیتابیس خروجی بگیرید:


sudo docker compose exec -T postgres sh -c \

'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" -Fc' \

> /opt/n8n/backups/n8n_database.dump

این دستور یک بکاپ با فرمت Custom از PostgreSQL ایجاد می‌کند.

برای بررسی فایل خروجی:


ls -lh /opt/n8n/backups/n8n_database.dump

وجود فایل به‌تنهایی تضمین‌کننده سالم بودن بکاپ نیست. بهتر است بازیابی آن را نیز در یک محیط آزمایشی بررسی کنید.

بکاپ گرفتن از فایل تنظیمات

برای محافظت از فایل .env می‌توانید یک کپی امن از آن تهیه کنید:


cp /opt/n8n/.env /opt/n8n/backups/env.backup

سپس مجوز دسترسی فایل بکاپ را محدود کنید:


chmod 600 /opt/n8n/backups/env.backup

بکاپ گرفتن از Volume مربوط به n8n

برای بکاپ سازگار از Volume، بهتر است ابتدا سرویس n8n را متوقف کنید:


sudo docker compose stop n8n

سپس نام واقعی Volume را مشاهده کنید:


sudo docker volume ls

نام Volume معمولاً شامل نام پروژه و عبارت n8n_data است.

برای نمونه، اگر نام Volume برابر n8n_n8n_data باشد، می‌توانید از دستور زیر استفاده کنید:


sudo docker run --rm \

  -v n8n_n8n_data:/source:ro \

  -v /opt/n8n/backups:/backup \

  alpine \

  tar -czf /backup/n8n_data.tar.gz -C /source .

پس از پایان بکاپ، n8n را دوباره اجرا کنید:


sudo docker compose start n8n

در محیط عملیاتی بهتر است بکاپ‌ها را به یک محل ذخیره‌سازی مستقل از سرور اصلی نیز منتقل کنید.

همچنین فایل .env و بکاپ دیتابیس حاوی اطلاعات حساس هستند و باید رمزنگاری و محافظت شوند.

مرحله سیزدهم: به‌روزرسانی n8n با Docker Compose

به‌روزرسانی n8n باید با دقت انجام شود؛ زیرا بعضی نسخه‌ها ممکن است تغییرات مهمی در ساختار دیتابیس، متغیرهای محیطی یا رفتار Workflowها داشته باشند.

قدم اول: تهیه بکاپ

قبل از هر به‌روزرسانی، از دیتابیس، Volumeها و تنظیمات نسخه پشتیبان تهیه کنید.

قدم دوم: بررسی تغییرات نسخه

Release Notes نسخه مقصد را بررسی کنید و مطمئن شوید تغییرات ناسازگار روی Workflowهای فعلی شما تأثیر نمی‌گذارند.

قدم سوم: انتخاب نسخه

در محیط عملیاتی بهتر است به‌جای latest، از یک نسخه مشخص استفاده کنید.

برای مثال:


image: docker.n8n.io/n8nio/n8n:VERSION

به‌جای VERSION شماره نسخه واقعی و آزمایش‌شده را وارد کنید.

قدم چهارم: دریافت تصویر جدید


sudo docker compose pull n8n

قدم پنجم: ایجاد مجدد کانتینر


sudo docker compose up -d n8n

قدم ششم: بررسی لاگ‌ها


sudo docker compose logs --tail=100 n8n

پس از به‌روزرسانی باید ورود به پنل، اجرای Workflowها، اتصال Credentialها و عملکرد Webhookها را بررسی کنید.

توجه داشته باشید که بازگرداندن تصویر Docker به نسخه قبلی لزوماً برای بازگشت از Migration دیتابیس کافی نیست. در بعضی شرایط برای Rollback باید دیتابیس را نیز از بکاپ سازگار بازیابی کنید.

مرحله چهاردهم: نکات امنیتی مهم

برای راه‌اندازی n8n در محیط عملیاتی باید امنیت را جدی بگیرید.

انتشار ندادن پورت PostgreSQL

در فایل Compose این آموزش، برای PostgreSQL هیچ پورتی در بخش ports تعریف نکردیم.

بنابراین دیتابیس از طریق پورت منتشرشده Docker مستقیماً در دسترس اینترنت قرار نمی‌گیرد.

محافظت از کلید رمزنگاری

کلید N8N_ENCRYPTION_KEY باید ثابت و محرمانه باقی بماند.

این کلید را در فایل‌های عمومی، مخازن Git یا لاگ‌های قابل مشاهده برای دیگران قرار ندهید.

محدودسازی دسترسی به پنل

برای دسترسی عمومی از HTTPS استفاده کنید و در صورت امکان دسترسی مدیریتی را از طریق VPN یا لایه‌های کنترل دسترسی محدود کنید.

به‌روزرسانی منظم

نسخه‌های قدیمی ممکن است دارای مشکلات امنیتی شناخته‌شده باشند.

بنابراین نسخه n8n، PostgreSQL و Docker را به‌صورت برنامه‌ریزی‌شده به‌روزرسانی کنید.

بررسی Workflowها و Nodeهای نصب‌شده

نصب Community Nodeهای ناشناس یا اجرای کدهای غیرقابل اعتماد می‌تواند خطرات امنیتی ایجاد کند.

فقط از منابع معتبر استفاده کنید و سطح دسترسی Workflowها را متناسب با نیاز تنظیم کنید.

خطاهای رایج نصب n8n با Docker Compose

خطای اتصال به PostgreSQL

اگر n8n نتواند به دیتابیس متصل شود، ابتدا وضعیت PostgreSQL را بررسی کنید:


sudo docker compose ps

سپس لاگ دیتابیس را مشاهده کنید:


sudo docker compose logs --tail=100 postgres

اطلاعات اتصال داخل فایل .env و متغیرهای محیطی سرویس n8n را بررسی کنید.

اگر Volume دیتابیس قبلاً ایجاد شده باشد، تغییر POSTGRES_USER یا POSTGRES_PASSWORD در فایل .env لزوماً کاربر یا رمز دیتابیس موجود را تغییر نمی‌دهد.

خطای Permission Denied

اگر با خطای دسترسی به فایل‌ها مواجه شدید، ابتدا مجوز پوشه‌ها و فایل‌های پروژه را بررسی کنید.

از دادن مجوز عمومی مانند 777 به فایل‌های حساس خودداری کنید.

خطای اشغال بودن پورت 5678

برای بررسی برنامه‌ای که از پورت استفاده می‌کند:


sudo ss -lntp | grep 5678

اگر پورت اشغال باشد، باید سرویس متداخل را شناسایی کنید یا پورت سمت میزبان را تغییر دهید.

خطای YAML

برای بررسی ساختار فایل Compose:


sudo docker compose config --quiet

فایل YAML به فاصله‌گذاری حساس است؛ بنابراین از Tab به‌جای Space استفاده نکنید.

از دست رفتن اطلاعات پس از اجرای Docker Compose

یکی از خطرناک‌ترین دستورات هنگام مدیریت سرویس‌ها عبارت است از:


sudo docker compose down -v

این دستور علاوه بر حذف کانتینرها، Volumeهای نام‌گذاری‌شده تعریف‌شده در Compose را نیز حذف می‌کند.

هشدار: روی سروری که اطلاعات واقعی دارد، بدون اطمینان از بکاپ و هدف عملیات از این دستور استفاده نکنید.

آیا برای n8n به Redis نیاز داریم؟

در معماری ساده‌ای که در این مقاله ساختیم، Redis ضروری نیست.

n8n می‌تواند Workflowها را در حالت معمول و بدون Queue Mode اجرا کند.

اما اگر قصد دارید پردازش‌ها را بین چند Worker توزیع کنید یا زیرساخت خود را برای بار کاری بیشتر توسعه دهید، می‌توانید از Queue Mode استفاده کنید.

در Queue Mode، Redis برای مدیریت صف وظایف استفاده می‌شود و Workerها اجرای Workflowها را انجام می‌دهند.

این معماری تنظیمات بیشتری دارد و باید با توجه به منابع سرور و تعداد اجراهای هم‌زمان طراحی شود.

جمع‌بندی

در این مقاله یاد گرفتیم چگونه n8n را با Docker Compose و PostgreSQL راه‌اندازی کنیم.

ابتدا فایل .env را برای نگهداری تنظیمات ایجاد کردیم، سپس سرویس‌های PostgreSQL و n8n را در فایل compose.yaml تعریف کردیم و با دستور docker compose up -d آن‌ها را اجرا کردیم.

همچنین روش بررسی وضعیت سرویس‌ها، مشاهده لاگ‌ها، اتصال به پنل، تهیه بکاپ، به‌روزرسانی و رفع خطاهای رایج را بررسی کردیم.

این ساختار می‌تواند نقطه شروع مناسبی برای راه‌اندازی n8n روی سرور شخصی باشد.

برای استفاده عملیاتی، توصیه می‌شود تنظیمات HTTPS، Reverse Proxy، بکاپ خودکار، مانیتورینگ و سیاست به‌روزرسانی را نیز تکمیل کنید.

سوالات متداول

آیا نصب n8n با Docker Compose رایگان است؟

نسخه Community Edition را می‌توانید مطابق شرایط مجوز n8n بدون پرداخت اشتراک نرم‌افزار به‌صورت Self-hosted اجرا کنید. هزینه سرور و نگهداری جداگانه است.

آیا برای نصب n8n با Docker Compose باید PostgreSQL نصب کنیم؟

خیر. n8n می‌تواند از SQLite نیز استفاده کند. اما PostgreSQL برای بسیاری از سناریوهای عملیاتی انتخاب مناسب‌تری است.

آیا PostgreSQL باید روی همان سرور n8n باشد؟

خیر. می‌توانید PostgreSQL را روی سرور جداگانه یا به‌صورت یک سرویس مدیریت‌شده اجرا کنید. در این حالت باید تنظیمات شبکه، امنیت و اتصال دیتابیس را متناسب با معماری خود انجام دهید.

آیا حذف کانتینر n8n باعث حذف Workflowها می‌شود؟

اگر اطلاعات در دیتابیس و Volumeهای پایدار ذخیره شده باشند، حذف و ایجاد مجدد کانتینر به‌تنهایی باعث حذف Workflowها نمی‌شود.

اما حذف Volumeها یا دیتابیس می‌تواند باعث از دست رفتن اطلاعات شود.

آیا می‌توان چند نمونه n8n را با Docker Compose اجرا کرد؟

بله. می‌توانید چند پروژه Compose مستقل ایجاد کنید. بهتر است هر نمونه دیتابیس، تنظیمات، کلید رمزنگاری و Volumeهای مستقل داشته باشد.

آیا برای اجرای n8n باید پورت 5678 را در فایروال باز کنیم؟

اگر n8n پشت Reverse Proxy اجرا می‌شود، معمولاً نیازی به باز کردن مستقیم پورت 5678 برای اینترنت نیست.

تفاوت Docker و Docker Compose در نصب n8n چیست؟

Docker مسئول اجرای کانتینرهاست؛ اما Docker Compose به شما اجازه می‌دهد چند سرویس مرتبط، شبکه‌ها و Volumeهای آن‌ها را در یک فایل تعریف و مدیریت کنید.

آیا می‌توان بعداً Redis را به این ساختار اضافه کرد؟

بله. می‌توانید سرویس Redis و Workerهای n8n را به ساختار اضافه کنید؛ اما برای فعال‌سازی Queue Mode باید تنظیمات مربوط به حالت اجرا، صف، دیتابیس و Workerها را به‌درستی پیکربندی کنید.

نظرات (0)

نظرات پس از تأیید مدیر نمایش داده می‌شوند

هنوز نظری ثبت نشده است؛ اولین نفر باشید!

مقالات مرتبط

اتصال دامنه به n8n؛ آموزش کامل تنظیم DNS و Reverse Proxy

اتصال دامنه به n8n؛ آموزش کامل تنظیم DNS و Reverse Proxy

۲۳ دقیقه
نصب n8n روی سرور خارج؛ آموزش کامل راه‌اندازی روی VPS خارجی

نصب n8n روی سرور خارج؛ آموزش کامل راه‌اندازی روی VPS خارجی

۲۴ دقیقه
نصب n8n روی سرور ایران؛ آموزش کامل راه‌اندازی و رفع مشکلات اتصال

نصب n8n روی سرور ایران؛ آموزش کامل راه‌اندازی و رفع مشکلات اتصال

۲۰ دقیقه
نصب n8n روی VPS؛ آموزش کامل راه‌اندازی n8n روی سرور مجازی

نصب n8n روی VPS؛ آموزش کامل راه‌اندازی n8n روی سرور مجازی

۲۲ دقیقه