ورود به پنل ثبت‌ نام

آموزش نصب n8n روی Debian 13 با داکر و Nginx

نصب گام‌به‌گام n8n روی سرور ابری با Debian 13؛ داکر، پراکسی معکوس Nginx، فایروال UFW، گواهی SSL رایگان و بک‌آپ.

تیم ابر سپهر 8 دقیقه مطالعه
آموزش نصب n8n روی Debian 13 با داکر و Nginx
در این مقاله

اگر به دنبال راه‌اندازی اتوماسیون گردش کار و مدیریت فرآیندها به صورت خودکار هستید، n8n یکی از بهترین ابزارهای متن‌باز در این زمینه است. با n8n می‌توانید سرویس‌های مختلف را بدون نوشتن کد به هم وصل کنید؛ از ارسال خودکار پیامک و ایمیل گرفته تا همگام‌سازی پایگاه داده، فراخوانی وب‌سرویس‌ها و ساخت وب‌هوک.

مزیت نصب n8n روی سرور خودتان این است که داده‌ها و اعتبارنامه‌های سرویس‌هایتان (توکن‌ها، رمزها، کلیدهای API) روی زیرساخت خودتان می‌مانند و محدودیت تعداد اجرا هم ندارید. در این مقاله n8n را روی Debian 13 با داکر نصب می‌کنیم، پشت پراکسی معکوس Nginx قرار می‌دهیم و با گواهی رایگان Let's Encrypt امن می‌کنیم.

پیش‌نیازها

  • یک سرور ابری با Debian 13 و دسترسی root.
  • یک سابدامین (مثلاً n8n.domain.com) که با یک رکورد A به آی‌پی سرور اشاره کند. پیش از رفتن سراغ گواهی SSL، این رکورد باید منتشر شده باشد؛ در غیر این صورت صدور گواهی شکست می‌خورد.
  • برای شروع، یک سرور با ۱ هسته پردازنده و ۲ گیگابایت حافظه کافی است. اگر گردش کارهای سنگین یا اجرای هم‌زمان زیاد دارید، حافظه را بالاتر ببرید.

تمام دستورهای این راهنما با کاربر root اجرا می‌شوند. اگر با کاربر عادی کار می‌کنید، پیش از هر دستور sudo بگذارید.

گام ۱: به‌روزرسانی سیستم و نصب بسته‌های پایه

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

apt update && apt upgrade -y

سپس بسته‌های پیش‌نیاز را نصب می‌کنیم:

apt install -y ca-certificates curl gnupg nano

گام ۲: نصب داکر

کلید GPG مخزن رسمی داکر را اضافه می‌کنیم:

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | \
  gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

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

echo \
  "deb [arch=$(dpkg --print-architecture) \
  signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

حالا داکر را نصب و سرویس آن را فعال می‌کنیم:

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker

برای اطمینان از نصب درست:

docker --version

گام ۳: اجرای n8n

پیش از اجرای کانتینر، یک والیوم داکر می‌سازیم. این والیوم محل نگهداری پایگاه داده، گردش کارها و اعتبارنامه‌های n8n است و باعث می‌شود با حذف یا به‌روزرسانی کانتینر، داده‌های شما از بین نروند:

docker volume create n8n_data

حالا کانتینر n8n را اجرا می‌کنیم. به جای n8n.domain.com سابدامین خودتان را بگذارید:

docker run -d --name n8n --restart unless-stopped \
  -p 127.0.0.1:5678:5678 \
  -v n8n_data:/home/node/.n8n \
  -e N8N_HOST=n8n.domain.com \
  -e N8N_PROTOCOL=https \
  -e WEBHOOK_URL=https://n8n.domain.com/ \
  -e GENERIC_TIMEZONE=Asia/Tehran \
  docker.n8n.io/n8nio/n8n

چند نکته درباره این دستور:

  • -p 127.0.0.1:5678:5678 پورت را فقط روی خودِ سرور باز می‌کند، نه روی اینترنت. تنها راه رسیدن به n8n، عبور از Nginx و در نتیجه از HTTPS خواهد بود. اگر پورت را به صورت -p 5678:5678 باز کنید، پنل شما بدون رمزنگاری و مستقیم از روی اینترنت در دسترس قرار می‌گیرد.
  • --restart unless-stopped باعث می‌شود بعد از ریبوت سرور، n8n خودکار بالا بیاید.
  • WEBHOOK_URL را حتماً تنظیم کنید. n8n آدرس وب‌هوک‌هایی را که به سرویس‌های بیرونی می‌دهد از روی همین متغیر می‌سازد؛ بدون آن، آدرس‌های تولیدشده به localhost:5678 اشاره می‌کنند و از بیرون کار نمی‌کنند.

گام ۴: پیکربندی Nginx به‌عنوان پراکسی معکوس

Nginx را نصب و فعال می‌کنیم:

apt install -y nginx
systemctl enable --now nginx

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

nano /etc/nginx/sites-available/n8n.domain.com

و محتوای زیر را در آن قرار می‌دهیم:

server {
    listen 80;
    server_name n8n.domain.com;

    location / {
        proxy_pass http://127.0.0.1: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;

        # n8n برای اجرای زنده و لاگ‌ها از WebSocket استفاده می‌کند
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # گردش کارهای طولانی نباید با تایم‌اوت قطع شوند
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}

دقت کنید که proxy_pass با http نوشته شده است، نه https؛ ارتباط بین Nginx و کانتینر روی خود سرور و بدون رمزنگاری است و رمزنگاری در لبه (بین کاربر و Nginx) انجام می‌شود.

دو تنظیم Upgrade/Connection هم لازم‌اند: بدون آن‌ها رابط کاربری بالا می‌آید ولی نتیجه اجرای گردش کارها به صورت زنده نمایش داده نمی‌شود.

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

ln -s /etc/nginx/sites-available/n8n.domain.com /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

گام ۵: تنظیم فایروال

فایروال UFW را نصب و قواعد آن را تعریف می‌کنیم:

apt install -y ufw
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable

Nginx Full هر دو پورت ۸۰ و ۴۴۳ را باز می‌کند. پورت ۵۶۷۸ را باز نمی‌کنیم، چون در گام سوم کانتینر را فقط روی 127.0.0.1 منتشر کردیم و دسترسی به آن باید حتماً از مسیر Nginx باشد.

پیش از اجرای ufw enable مطمئن شوید قاعده OpenSSH را اضافه کرده‌اید، وگرنه ارتباط SSH فعلی شما قطع می‌شود. اگر این اتفاق افتاد، از کنسول تحت وب کنترل پنل ابر سپهر وارد سرور شوید و قاعده را اضافه کنید.

گام ۶: فعال‌سازی SSL با Let's Encrypt

Certbot را نصب و گواهی را صادر می‌کنیم:

apt install -y certbot python3-certbot-nginx
certbot --nginx -d n8n.domain.com

Certbot ایمیل و پذیرش شرایط را می‌پرسد، گواهی را صادر می‌کند و خودش فایل Nginx را برای HTTPS و ریدایرکت پورت ۸۰ به ۴۴۳ ویرایش می‌کند. تمدید خودکار هم با یک تایمر systemd انجام می‌شود؛ برای آزمودن آن:

certbot renew --dry-run

حالا باید بتوانید از طریق مرورگر با آدرس https://n8n.domain.com به n8n دسترسی داشته باشید. در نخستین ورود، n8n از شما می‌خواهد حساب مدیر (ایمیل و رمز عبور) بسازید. این کار را بلافاصله انجام دهید؛ تا وقتی این حساب ساخته نشده، هر کسی که آدرس را بداند می‌تواند مالک نمونه‌ی شما شود.

نگهداری: به‌روزرسانی و بک‌آپ

به‌روزرسانی n8n یعنی گرفتن ایمیج جدید و ساختن دوباره‌ی کانتینر. چون داده‌ها در والیوم n8n_data هستند، چیزی از دست نمی‌رود:

docker pull docker.n8n.io/n8nio/n8n
docker stop n8n && docker rm n8n
# سپس همان دستور docker run گام سوم را دوباره اجرا کنید

بک‌آپ هم به معنی نگه‌داشتن یک نسخه از همین والیوم است:

docker run --rm -v n8n_data:/data -v /root:/backup busybox \
  tar czf /backup/n8n-backup.tar.gz -C /data .

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

کار دستور / ابزار چه زمانی
مشاهده لاگ docker logs -f n8n هنگام عیب‌یابی
راه‌اندازی مجدد docker restart n8n پس از تغییر تنظیمات
به‌روزرسانی docker pull و اجرای دوباره کانتینر ماهانه
بک‌آپ کامل اسنپ‌شات کنترل پنل پیش از هر تغییر پرخطر

جمع‌بندی

n8n روی یک سرور ابری کوچک هم به‌خوبی کار می‌کند و با ترکیب داکر، پراکسی معکوس Nginx و گواهی رایگان Let's Encrypt، در کمتر از نیم‌ساعت یک نمونه‌ی امن و پایدار خواهید داشت. سه نکته‌ای که بیشترین تفاوت را می‌سازند: انتشار کانتینر فقط روی 127.0.0.1، تنظیم WEBHOOK_URL و گرفتن اسنپ‌شات پیش از به‌روزرسانی.

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

مقالات مرتبط