نصب n8n روی سرور شخصی به صورت Self-Hosted راهنمای کامل و مرحله‌به‌مرحله

n8n یا همان node everywhere node یک پلتفرم متن‌باز برای Workflow اتومیشن است که به توسعه‌دهندگان امکان می‌دهد کنترل کاملی بر یکپارچه‌سازی‌ها و Workflowها داشته باشند. در مقایسه با سرویس‌های SaaS مانند Zapier، این ابزار قابلیت اجرا روی سرور شخصی را فراهم می‌کند که مزایایی همچون افزایش انعطاف‌پذیری، ارتقای سطح حریم خصوصی و بهبود مقیاس‌پذیری را به همراه دارد.

در این مقاله، گام‌به‌گام فرآیند نصب و پیکربندی n8n بر روی Ubuntu server با استفاده از Docker Compose را ارائه می‌دهیم. همچنین به بررسی روش‌های رفع خطاهای متداول در زمان نصب، ایمن‌سازی سرویس با بهره‌گیری از HTTPS و نکات کلیدی جهت جلوگیری از بروز مشکلات احتمالی در مرحله‌ی production deployment می‌پردازیم.

n8n چیست و چرا باید از آن استفاده کنیم؟

n8n یک پلتفرم open-source برای Workflow اتومیشن است که به شما امکان می‌دهد سرویس‌ها را به هم متصل کنید و فرایندها را از طریق یک رابط کاربری بصری مدیریت کنید. شما می‌توانید APIها، دیتابیس‌ها، اپلیکیشن‌های ابری و حتی منطق اختصاصی خودتان را با JavaScript در یک جریان منظم پیاده‌سازی کنید.

قابلیت‌های اصلی n8n

  • Visual Workflow Editor: طراحی و مدیریت Workflowها به‌صورت Drag & Drop. امکان ویرایش Nodeها، تعریف شرط‌ها (Conditional Logic) و مشاهده روند اجرای Workflow در همان محیط، بدون نیاز به کدنویسی.
  • بیش از 300 Integration آماده: اتصال مستقیم به سرویس‌هایی مثل گیت هالب، گوگل شیتز، اسک، MySQL، دیسکورد، ترلو و ده‌ها ابزار دیگر.
  • پشتیبانی از Self-Hosting: اجرای n8n روی زیرساخت شخصی با داکر، داکر کامپوز یا bare-metal servers با کنترل کامل روی داده‌ها، امنیت و تنظیمات.
  • Native JavaScript Functionality: اضافه کردن کدهای اختصاصی جاوااسکریپت با استفاده از Nodeهای Function و Function Item برای تغییر داده‌ها، پیاده‌سازی Business Logic یا ارتباط پیشرفته با APIها.
  • Event-Driven Execution: فعال شدن Workflowها بر اساس Webhook، Cron Jobs، تغییرات در اپلیکیشن‌های متصل یا اجرای دستی.
  • Modular و Extensible Architecture: اضافه کردن Nodeهای سفارشی، ساخت Sub-workflowهای قابل استفاده مجدد و توسعه قابلیت‌ها با پلاگین‌های جامعه یا کد اختصاصی.
  • امنیت و Access Control: پشتیبانی از Authentication، HTTPS و سطح دسترسی کاربران برای محافظت از Workflowها و داده‌های حساس.

چرا n8n انتخاب مناسبی است؟

n8n می‌تواند بخشی کلیدی از هر Backend Stack مدرنی باشد. از مدیریت تسک‌های زمان‌بندی‌شده گرفته تا همگام‌سازی داده‌ها، اتومیشن DevOps، توسعه ابزارهای داخلی و Workflowهای پیچیده سازمانی.

انعطاف‌پذیری و طراحی ماژولار آن باعث می‌شود چه برای اتومیشن‌های ساده و چه برای Workflowهای سازمانی یک گزینه مطمئن باشد.

پیش‌نیازها (Prerequisites)

قبل از شروع مراحل نصب، باید مطمئن شویم که موارد زیر را در اختیار داریم:

  • یک Ubuntu 22.04 server یا نسخه جدیدتر
  • یک دامنه ثبت‌شده که به سرور شما متصل باشد
  • دسترسی Root یا دسترسی با sudo privileges
  • نصب بودن Docker و Docker Compose
  • (اختیاری) یک حساب ایمیل برای استفاده از Let’s Encrypt SSL

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

sudo apt update
sudo apt install docker.io docker-compose -y

مرحله ۱ — ایجاد فایل Docker Compose Configuration

ابتدا یک دایرکتوری برای n8n stack ایجاد کرده و وارد آن شوید:

mkdir ~/n8n && cd ~/n8n
nano docker-compose.yml

سپس محتوای زیر را به‌عنوان حداقل پیکربندی (شامل PostgreSQL و n8n) در فایل docker-compose.yml قرار دهید:

version: '3.8'
services:
  db:
    image: postgres:14
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=n8npass
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
  n8n:
    image: n8nio/n8n
    ports:
      - "5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=db
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=n8npass
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=strongpass
      - N8N_HOST=n8n.yourdomain.com
      - WEBHOOK_TUNNEL_URL=https://n8n.yourdomain.com
    depends_on:
      - db
    volumes:
      - n8n_data:/home/node/.n8n
volumes:
  postgres_data:
  n8n_data:

در این تنظیمات:

  • سرویس db یک دیتابیس PostgreSQL نسخه ۱۴ ایجاد می‌کند.
  • سرویس n8n روی پورت 5678 در دسترس خواهد بود.
  • مقادیر مربوط به Basic Auth (یوزرنیم و پسورد) و همچنین دامنه اختصاصی شما (n8n.yourdomain.com) باید با مقادیر واقعی جایگزین شوند.
  • داده‌های هر دو سرویس در Volumeهای جداگانه ذخیره می‌شوند تا در صورت ری‌استارت یا بروزرسانی از بین نروند.

مرحله ۲ — اجرای n8n و بررسی نصب

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

docker-compose up -d

اجرای n8n و بررسی نصب

این دستور فایل docker-compose.yml را خوانده و سرویس‌های n8n و PostgreSQL را در پس‌زمینه (detached mode) اجرا می‌کند.

دسترسی به n8n

پس از اجرای موفق کانتینرها، می‌توانید مرورگر خود را باز کرده و آدرس زیر را وارد کنید:

http://your_server_ip:5678

در صورتی که دامنه و Reverse Proxy پیکربندی شده باشد، می‌توانید به جای IP از دامنه خود استفاده کنید:

http://n8n.yourdomain.com

دسترسی به n8n

نکته مهم

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

مرحله ۳ — ایمن‌سازی n8n با HTTPS

برای دسترسی امن به n8n، از Nginx و Let’s Encrypt استفاده می‌کنیم تا سرویس از طریق HTTPS در دسترس باشد.

نصب Nginx و Certbot

ابتدا پکیج‌های موردنیاز را نصب می‌کنیم:

sudo apt install nginx certbot python3-certbot-nginx -y

پیکربندی Nginx

بسته به محیط، می‌توانید از یکی از دو گزینه زیر استفاده کنید:

گزینه ۱: Proxy فقط با HTTP (برای تست)

توصیه نمی‌شود برای محیط Production از این روش استفاده کنید.

server {
  listen 80;
  server_name n8n.yourdomain.com;
  location / {
    proxy_pass http://localhost:5678;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}
گزینه ۲: Proxy با HTTPS (توصیه‌شده برای Production)
server {
  listen 443 ssl;
  server_name n8n.yourdomain.com;

  ssl_certificate /etc/letsencrypt/live/n8n.yourdomain.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/n8n.yourdomain.com/privkey.pem;

  location / {
    proxy_pass http://localhost:5678;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

فایل بالا را در مسیر /etc/nginx/sites-available/n8n ذخیره کرده و سپس فعال کنید:

sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

صدور گواهی SSL

در نهایت، با استفاده از Certbot یک گواهی SSL معتبر برای دامنه صادر می‌کنیم:

sudo certbot --nginx -d n8n.yourdomain.com​

صدور گواهی SSL

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

تنظیمات اولیه رابط وب n8n

بعد از اینکه n8n با موفقیت روی دامنه شما (مثلاً https://n8n.yourdomain.com) اجرا شد، در اولین ورود چند مرحله تنظیمات اولیه نمایش داده می‌شود تا پیش از رسیدن به داشبورد اصلی Workflow، محیط شما آماده‌سازی شود. مراحل به این صورت هستند:

۱. ساخت Owner Account

در اولین صفحه باید یک حساب کاربری مالک (Owner) ایجاد کنید. اطلاعات موردنیاز:

  • Email Address
  • First و Last Name
  • Password (حداقل ۸ کاراکتر شامل یک عدد و یک حرف بزرگ)

ساخت Owner Account

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

۲. شخصی‌سازی Instance

پس از ساخت حساب، n8n چند پرسش اختیاری برای شخصی‌سازی تجربه کاربری نمایش می‌دهد، مانند:

  • حوزه فعالیت شرکت شما
  • نقش شما در سازمان
  • کاربر اصلی اتومیشن‌ها چه کسی خواهد بود
  • اندازه شرکت
  • نحوه آشنایی شما با n8n

شخصی‌سازی Instance

پاسخ به این پرسش‌ها اختیاری است و روی عملکرد اصلی سیستم تأثیری ندارد.

۳. فعال‌سازی قابلیت‌های رایگان (Free Features)

در این مرحله، n8n امکان دریافت برخی قابلیت‌های پولی را به‌صورت رایگان برای کاربران Community ارائه می‌دهد؛ مانند:

  • تاریخچه اجرا (Execution History)
  • ابزارهای پیشرفته Debugging
  • ساختار پوشه‌ها (Folder Structure)

فعال‌سازی قابلیت‌های رایگان

برای فعال‌سازی کافی است ایمیل خود را وارد کنید تا یک License Key رایگان دریافت نمایید.

۴. فعال‌سازی License Key

پس از ثبت ایمیل، یک کد فعال‌سازی (Activation Key) به صندوق شما ارسال می‌شود. برای وارد کردن آن:

  • وارد مسیر Settings → Usage and Plan → Enter Activation Key شوید.
  • کد دریافتی را وارد کرده و ثبت کنید.

license key

با این کار، Instance شما به‌عنوان Registered نمایش داده خواهد شد و قابلیت‌های پیشرفته برای همیشه در دسترس خواهند بود.

این مراحل، فرآیند تنظیمات اولیه رابط وب n8n را تکمیل کرده و امکانات لازم برای استفاده در محیط Production را در اختیار شما قرار می‌دهد.

مرحله ۴ — ساخت اولین Workflow در n8n

پس از راه‌اندازی موفق سرویس در آدرس https://n8n.yourdomain.com، می‌توانید تنها در چند دقیقه اولین Workflow خود را ایجاد و تست کنید. مراحل به این شکل است:

گام ۱: ورود و ساخت Owner Account

با ورود به دامنه، سیستم از شما می‌خواهد حساب مالک (Owner) ایجاد کنید. این کار جایگزین تعریف Credentialها به‌صورت hardcoded در Docker می‌شود.

صفحه ورود

گام ۲: ایجاد یک Workflow جدید

پس از ورود به داشبورد، روی گزینه New Workflow در نوار بالایی کلیک کنید. با این کار Visual Editor باز می‌شود تا بتوانید اتومیشن خود را طراحی کنید.

گام ۳: اضافه کردن Webhook Trigger

  • از نوار کناری سمت چپ، یک Webhook node به محیط بکشید.
  • مقدار HTTP Method را روی POST قرار دهید.
  • مسیر (Path) را روی test-webhook تنظیم کنید.
  • تغییرات را ذخیره کنید.

گام ۴: اضافه کردن Response Node

  • یک Set node به محیط اضافه کنید و آن را به Webhook node متصل نمایید.
  • در Set node روی Add Value → String کلیک کنید.
  • به‌عنوان نام، message و به‌عنوان مقدار، "Hello from n8n!" وارد کنید.

گام ۵: فعال‌سازی Workflow

در گوشه سمت راست بالای صفحه، دکمه Active را روشن کنید تا Workflow شما فعال شود.

گام ۶: تست Workflow

با استفاده از دستور زیر Workflow را اجرا کنید:

curl -X POST https://n8n.yourdomain.com/webhook/test-webhook

اگر همه چیز درست پیکربندی شده باشد، در خروجی پیام زیر نمایش داده می‌شود:

Hello from n8n!

همچنین می‌توانید نتیجه اجرای Workflow را در داشبورد n8n مشاهده کنید.

تبریک! شما موفق شدید اولین Workflow اتوماتیک خود را در n8n بسازید و اجرا کنید.

یک نمونه Workflow ریکاوری و اطلاع‌رسانی در زمان Downtime سرور

برای اینکه ببینیم n8n در دنیای واقعی چطور می‌تواند به کمک تیم‌ها بیاید، یک Workflow نمونه طراحی می‌کنیم که وظیفه‌اش مدیریت Downtime سرور یا دامنه است. این Workflow با استفاده از مانیتورینگ UptimeRobot، در صورت بروز مشکل به‌طور خودکار سرویس‌ها را ری‌استارت می‌کند، تنظیمات Cloudflare را در صورت نیاز به‌روز می‌سازد و همزمان تیم‌ها را از طریق پیام‌رسان‌ها مطلع می‌کند.

کاربردها

  • مانیتور کردن دامنه یا سرور با UptimeRobot
  • ری‌استارت خودکار سرویس‌هایی مثل Nginx در صورت قطعی
  • به‌روزرسانی تنظیمات Cloudflare (مثلاً SSL یا Cache Purge) در مواقع نیاز
  • ارسال اعلان فوری به تیم از طریق WhatsApp و Slack
  • دریافت تأیید یا بازخورد از طریق Discord
  • تکرار فرایند برای چندین سرور یا دامنه در یک چرخه

Breakdown مراحل Workflow

۱. Schedule Trigger

این Node وظیفه دارد Workflow را در بازه‌های زمانی مشخص (مثلاً هر ۵ یا ۱۰ دقیقه) به‌طور خودکار اجرا کند. با این کار، بررسی وضعیت سرویس‌ها بدون نیاز به دخالت دستی و به‌صورت منظم انجام می‌شود. این رویکرد پیشگیرانه کمک می‌کند مشکلات در همان ابتدا شناسایی شوند و Downtime به حداقل برسد.

۲. Get Monitor (UptimeRobot)

در این مرحله، Workflow با API سرویس UptimeRobot ارتباط می‌گیرد و وضعیت مانیتورها را بررسی می‌کند. داده‌های زنده شامل Uptime، Response Time و خطاهای احتمالی استخراج می‌شوند. اگر UptimeRobot گزارشی از قطعی بدهد، Workflow به مرحله بعد (اقدامات ریکاوری) هدایت می‌شود.

۳. Execute Command

این Node امکان اجرای مستقیم Shell Command روی سرور را فراهم می‌کند. به‌محض تشخیص مشکل، می‌تواند سرویس‌هایی مثل Nginx را ری‌استارت کند، اسکریپت‌های ریکاوری اختصاصی را اجرا کند یا هر دستور مدیریتی دیگری که برای بازگرداندن سرویس نیاز باشد. این اتومیشن زمان واکنش را کاهش داده و خطای انسانی را از بین می‌برد.

۴. Cloudflare Integration

با اتصال به API کلودفلر، Workflow می‌تواند کارهایی مثل تغییر وضعیت SSL، بروزرسانی DNS یا پاک کردن Cache را به‌صورت خودکار انجام دهد. این موضوع مخصوصاً در مواردی که مشکل ناشی از پیکربندی یا propagation باشد بسیار حیاتی است.

۵. Send Notifications

در این مرحله، Workflow از طریق Nodeهای موازی به تیم‌ها در Slack و WhatsApp نوتیفیکیشن لحظه‌ای ارسال می‌کند. پیام شامل جزئیات Incident، اقداماتی که انجام شده و گام‌های بعدی است. این شفافیت باعث می‌شود همه افراد در لحظه در جریان وضعیت باشند.

۶. Approval Step (Discord)

Workflow در این نقطه متوقف شده و یک پیام در کانال مشخص‌شده Discord ارسال می‌کند تا مدیر سیستم تأیید کند. این بخش، human-in-the-loop را وارد فرایند می‌کند؛ مخصوصاً زمانی که اقدامات حساس نیاز به تصمیم‌گیری انسانی دارند.

۷. Loop Over Items

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

 نتیجه: با چنین Workflowای در n8n، تیم شما می‌تواند زمان Downtime را کاهش دهد، عملیات ریکاوری را سریع‌تر انجام دهد و از طریق اطلاع‌رسانی فوری، هماهنگی بهتری در زمان بحران داشته باشد.

ورکفلو عملیات ریکاوری

این مثال نشان می‌دهد که چگونه n8n می‌تواند فرآیند ریکاوری و اطلاع‌رسانی در زمان Incident را به‌صورت پیشگیرانه و خودکار انجام دهد؛ بدون نیاز به دخالت انسانی، مگر در مواقعی که تصمیم‌گیری دستی ضروری باشد. طراحی ماژولار n8n این امکان را فراهم می‌کند که این منطق را به بخش‌های دیگر هم گسترش دهید؛ مثل افزودن لاگینگ پیشرفته، Workflowهای Escalation یا اتصال به سیستم‌های تیکتینگ خارجی.

به‌طور کلی، این Workflow نشان می‌دهد که n8n چگونه می‌تواند به‌عنوان یک راهکار قدرتمند Incident Automation در محیط‌های Self-Hosted عمل کند، مقاومت عملیاتی (Operational Resilience) را افزایش دهد و پاسخ‌های دقیق، سریع و ماژولار به اختلال‌های سرویس ارائه کند.

نتیجه‌گیری

n8n یک پلتفرم قدرتمند و قابل توسعه برای توسعه‌دهندگان است که امکان اتومیشن Workflowها را از ساده‌ترین وظایف (مثل ارسال اعلان ایمیل) تا اورکستریشن کامل Backend فراهم می‌کند. با اجرای n8n به‌صورت Self-Hosted روی Ubuntu و Docker، هم کنترل کامل روی زیرساخت خواهید داشت و هم از نظر هزینه صرفه‌جویی می‌کنید.

تنها یک‌بار راه‌اندازی کافی است تا بتوانید ده‌ها کاربرد مختلف را در پروژه‌های خود پیاده‌سازی کنید؛ از اجرای خودکار وظایف CI/CD گرفته تا مانیتورینگ Webhookها یا اتصال به سرویس‌های هوش مصنوعی.

مجتبی پاکزاد

مجتبی پاکزاد

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

دیدگاه‌ها


ثبت دیدگاه