اگر قصد دارید Workflowهای خود را در n8n بهصورت شبانهروزی اجرا کنید، استفاده از یک سرور مجازی یا VPS یکی از راهکارهای مناسب است.
با نصب n8n روی VPS میتوانید بدون نیاز به روشن نگه داشتن کامپیوتر شخصی، فرایندهای خودکار را اجرا کنید، از Webhookها استفاده کنید و سرویسهای مختلف مانند تلگرام، وردپرس، ووکامرس، Google Sheets و APIهای هوش مصنوعی را به یکدیگر متصل کنید.
اما راهاندازی n8n روی سرور مجازی فقط به نصب برنامه محدود نمیشود. برای داشتن یک سرویس پایدار باید تنظیمات شبکه، امنیت، دیتابیس، دامنه، SSL و بکاپ را نیز در نظر بگیرید.
در این آموزش، تمام مراحل نصب n8n روی VPS را بهصورت عملی بررسی میکنیم؛ از انتخاب مشخصات سرور تا راهاندازی n8n با Docker و PostgreSQL و دسترسی امن از طریق HTTPS.
VPS چیست و چرا برای اجرای n8n مناسب است؟
VPS مخفف Virtual Private Server و به معنی سرور مجازی خصوصی است.
در این روش، منابع یک سرور فیزیکی با استفاده از فناوری مجازیسازی میان چند سرور مجازی تقسیم میشوند. هر VPS معمولاً سیستمعامل، منابع تخصیصیافته و محیط مدیریتی مستقل خود را دارد.
برای مثال، میتوانید یک VPS با سیستمعامل Ubuntu تهیه کنید و برنامههایی مانند n8n، PostgreSQL و Docker را روی آن اجرا کنید.
مزایای اجرای n8n روی VPS
استفاده از VPS برای n8n مزایای مختلفی دارد:
- اجرای شبانهروزی: Workflowها بدون وابستگی به روشن بودن کامپیوتر شخصی اجرا میشوند.
- کنترل زیرساخت: امکان مدیریت سیستمعامل، دیتابیس، تنظیمات شبکه و منابع وجود دارد.
- استفاده از دامنه اختصاصی: میتوانید n8n را روی زیردامنه دلخواه اجرا کنید.
- دسترسی به Webhookها: سرویسهای خارجی میتوانند درخواستهای خود را به آدرس عمومی n8n ارسال کنند.
- امکان توسعه: در صورت افزایش حجم پردازش، میتوانید منابع سرور را ارتقا دهید یا معماری خود را توسعه دهید.
- مدیریت دادهها: کنترل بیشتری بر محل نگهداری و سیاست پشتیبانگیری اطلاعات خواهید داشت.
البته در روش Self-hosted مسئولیت امنیت، نگهداری، مانیتورینگ و بهروزرسانی سرویس نیز بر عهده شما خواهد بود.
چه VPS برای n8n مناسب است؟
یکی از سوالات رایج هنگام راهاندازی n8n این است که چه مقدار RAM و CPU برای اجرای آن نیاز داریم.
پاسخ به این سوال به نوع Workflowها بستگی دارد.
برای مثال، Workflow سادهای که هر چند دقیقه یک درخواست HTTP ارسال میکند، منابع بسیار کمتری نسبت به Workflow پردازش فایلهای حجیم یا اجرای تعداد زیادی درخواست همزمان نیاز دارد.
مشخصات پیشنهادی VPS
جدول زیر یک پیشنهاد اولیه برای انتخاب سرور است، نه حداقل رسمی یا تضمین ظرفیت n8n.
| نوع استفاده | CPU | RAM | فضای ذخیرهسازی |
|---|---|---|---|
| یادگیری و آزمایش | 1 vCPU | 2 GB | 20 GB SSD |
| پروژههای سبک | 2 vCPU | 4 GB | 30 GB SSD |
| استفاده متوسط | 2 تا 4 vCPU | 8 GB | 40 GB SSD |
| پردازشهای سنگین | 4+ vCPU | 16+ GB | متناسب با دادهها |
این اعداد صرفاً نقطه شروع هستند. تعداد اجرای همزمان، حجم دادهها، استفاده از Code Node، پردازش فایلها و سرویسهای جانبی میتوانند مصرف منابع را بهشدت تغییر دهند.
برای پروژههای واقعی بهتر است مصرف منابع را مانیتور کنید و براساس دادههای واقعی تصمیم بگیرید.
انتخاب سیستمعامل VPS
برای این آموزش از Ubuntu 24.04 LTS استفاده میکنیم.
همچنین میتوانید مراحل مشابه را روی Ubuntu 22.04 اجرا کنید.
این سیستمعاملها برای نصب Docker و مدیریت سرویسهای لینوکسی مناسب هستند.
مرحله اول: تهیه VPS و دریافت اطلاعات اتصال
پس از خرید سرور مجازی، معمولاً شرکت ارائهدهنده اطلاعات زیر را در اختیار شما قرار میدهد:
- آدرس IP عمومی سرور
- نام کاربری اولیه
- رمز عبور یا کلید SSH
- سیستمعامل نصبشده
- اطلاعات پنل مدیریت VPS
برای مثال فرض میکنیم IP سرور به شکل زیر است:
203.0.113.10
این IP صرفاً نمونه آموزشی است و باید آن را با آدرس واقعی سرور خود جایگزین کنید.
در ادامه از دامنه فرضی زیر نیز استفاده خواهیم کرد:
n8n.example.com
مرحله دوم: اتصال به VPS از طریق SSH
برای مدیریت سرور باید از SSH استفاده کنید.
اگر از ویندوز استفاده میکنید، PowerShell یا Windows Terminal را باز کنید.
سپس دستور زیر را اجرا کنید:
ssh root@203.0.113.10
در این دستور، root نام کاربری اولیه و IP نیز آدرس سرور است.
اگر شرکت ارائهدهنده نام کاربری دیگری مانند ubuntu در اختیار شما قرار داده، باید همان نام کاربری را وارد کنید.
پس از اتصال موفق، ترمینال سرور نمایش داده میشود.
مرحله سوم: بهروزرسانی سیستمعامل
قبل از نصب نرمافزارها بهتر است بستههای Ubuntu را بهروزرسانی کنید.
ابتدا اجرا کنید:
sudo apt update
سپس:
sudo apt upgrade -y
در صورت نیاز به راهاندازی مجدد، میتوانید دستور زیر را اجرا کنید:
sudo reboot
اگر سرور مجدداً راهاندازی شد، باید دوباره از طریق SSH متصل شوید.
مرحله چهارم: ایجاد کاربر مدیریتی
برای مدیریت روزمره سرور بهتر است بهجای استفاده مستقیم از root، یک کاربر مدیریتی مستقل داشته باشید.
ابتدا کاربری با نام deploy ایجاد کنید:
sudo adduser deploy
سپس آن را به گروه sudo اضافه کنید:
sudo usermod -aG sudo deploy
اگر از SSH Key استفاده میکنید، کلید عمومی خود را برای کاربر جدید نیز تنظیم کنید.
برای مثال، از کامپیوتر شخصی میتوانید اجرا کنید:
ssh-copy-id deploy@203.0.113.10
در ویندوز، اگر ssh-copy-id در دسترس نیست، میتوانید کلید عمومی را بهصورت دستی در فایل زیر قرار دهید:
/home/deploy/.ssh/authorized_keys
قبل از غیرفعال کردن ورود root یا ورود با رمز عبور، حتماً در یک نشست SSH جدید بررسی کنید که کاربر deploy میتواند وارد سرور شود و دستورات sudo را اجرا کند.
پس از اطمینان از عملکرد صحیح کلید SSH، میتوانید ورود مستقیم root و ورود مبتنی بر رمز عبور را مطابق سیاست امنیتی سرور محدود کنید.
مرحله پنجم: تنظیم فایروال VPS
یکی از مهمترین اقدامات امنیتی، محدودسازی پورتهای ورودی است.
در این آموزش از UFW استفاده میکنیم.
ابتدا UFW را نصب کنید:
sudo apt install ufw -y
قبل از فعال کردن فایروال، دسترسی SSH را مجاز کنید.
اگر SSH روی پورت پیشفرض 22 اجرا میشود:
sudo ufw allow 22/tcp
اگر پورت SSH را تغییر دادهاید، باید پورت واقعی خود را مجاز کنید.
سپس پورتهای HTTP و HTTPS را باز کنید:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
اکنون فایروال را فعال کنید:
sudo ufw enable
برای بررسی وضعیت:
sudo ufw status verbose
در این مرحله باید پورت SSH و پورتهای 80 و 443 در فهرست دسترسیهای مجاز قرار داشته باشند.
نکته مهم درباره Docker: پورتهایی که Docker مستقیماً روی IP عمومی منتشر میکند ممکن است از قوانین معمول UFW عبور کنند. بنابراین برای n8n از اتصال پورت به 127.0.0.1 استفاده میکنیم و پورت PostgreSQL را نیز منتشر نخواهیم کرد.
همچنین اگر ارائهدهنده VPS دارای فایروال شبکهای مستقل است، باید قوانین آن را نیز بررسی کنید.
مرحله ششم: نصب Docker روی VPS
برای نصب n8n از Docker استفاده میکنیم.
ابتدا بستههای ضروری را نصب کنید:
sudo apt install ca-certificates curl -y
پوشه کلیدهای مخازن را ایجاد کنید:
sudo install -m 0755 -d /etc/apt/keyrings
کلید رسمی Docker را دریافت کنید:
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
مجوز خواندن آن را تنظیم کنید:
sudo chmod a+r /etc/apt/keyrings/docker.asc
اکنون مخزن رسمی Docker را اضافه کنید:
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
فهرست بستهها را بهروزرسانی کنید:
sudo apt update
سپس Docker و Docker Compose را نصب کنید:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
برای بررسی نصب:
sudo docker --version
و:
sudo docker compose version
همچنین وضعیت سرویس Docker را بررسی کنید:
sudo systemctl status docker
اگر Docker فعال باشد، میتوانید مراحل بعدی را دنبال کنید.
مرحله هفتم: ایجاد پوشه پروژه n8n
اکنون یک مسیر اختصاصی برای فایلهای n8n ایجاد میکنیم.
دستور زیر را اجرا کنید:
sudo mkdir -p /opt/n8n
سپس مالکیت پوشه را به کاربر مدیریتی اختصاص دهید:
sudo chown deploy:deploy /opt/n8n
با کاربر deploy وارد سرور شوید و به پوشه پروژه بروید:
cd /opt/n8n
در این مسیر فایلهای زیر را ایجاد خواهیم کرد:
/opt/n8n/
├── .env
└── compose.yaml
مرحله هشتم: تولید رمزهای امن
برای راهاندازی PostgreSQL و n8n باید دو مقدار حساس تولید کنیم.
ابتدا یک رمز تصادفی برای دیتابیس بسازید:
openssl rand -hex 24
سپس کلید رمزنگاری n8n را تولید کنید:
openssl rand -hex 32
هر دو مقدار را در محل امنی نگهداری کنید.
کلید رمزنگاری n8n اهمیت ویژهای دارد؛ زیرا برای رمزنگاری اطلاعات حساس Credentialها استفاده میشود.
از دست رفتن این کلید ممکن است بازیابی Credentialهای قبلی را غیرممکن کند.
مرحله نهم: ساخت فایل تنظیمات n8n
داخل پوشه پروژه، فایل .env را ایجاد کنید:
nano .env
محتوای زیر را وارد کنید:
POSTGRES_DB=n8n
POSTGRES_USER=n8n_user
POSTGRES_PASSWORD=YOUR_SECURE_DATABASE_PASSWORD
N8N_ENCRYPTION_KEY=YOUR_SECURE_ENCRYPTION_KEY
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
GENERIC_TIMEZONE=Asia/Tehran
TZ=Asia/Tehran
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
مقادیر زیر را با اطلاعات واقعی جایگزین کنید:
YOUR_SECURE_DATABASE_PASSWORD: رمز PostgreSQLYOUR_SECURE_ENCRYPTION_KEY: کلید رمزنگاری n8nn8n.example.com: زیردامنه واقعی شما
در این ساختار، n8n پشت یک Reverse Proxy قرار میگیرد و N8N_PROXY_HOPS=1 برای یک لایه Proxy قابل اعتماد در نظر گرفته شده است.
پس از ذخیره فایل، دسترسی آن را محدود کنید:
chmod 600 .env
مرحله دهم: ساخت فایل 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}
N8N_HOST: ${N8N_HOST}
N8N_PROTOCOL: ${N8N_PROTOCOL}
N8N_EDITOR_BASE_URL: ${N8N_EDITOR_BASE_URL}
WEBHOOK_URL: ${WEBHOOK_URL}
N8N_PROXY_HOPS: ${N8N_PROXY_HOPS}
GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
TZ: ${TZ}
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: ${N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS}
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
این فایل دو سرویس اصلی ایجاد میکند.
PostgreSQL: اطلاعات Workflowها، اجراها، کاربران و تنظیمات مرتبط را نگهداری میکند.
n8n: محیط مدیریت و اجرای اتوماسیونها را فراهم میکند.
برای حفظ اطلاعات از دو Volume مستقل استفاده کردهایم.
در این آموزش برای سادهتر شدن نصب اولیه از برچسب latest استفاده شده است. در محیط عملیاتی بهتر است پس از بررسی سازگاری، نسخه مشخص n8n را جایگزین کنید.
مرحله یازدهم: اجرای n8n روی VPS
ابتدا ساختار فایل Compose را بررسی کنید:
sudo docker compose config --quiet
اگر خطایی وجود نداشت، سرویسها را اجرا کنید:
sudo docker compose up -d
برای مشاهده وضعیت:
sudo docker compose ps
برای مشاهده لاگهای n8n:
sudo docker compose logs -f n8n
در اولین اجرا ممکن است چند دقیقه برای دریافت تصاویر و آمادهسازی دیتابیس زمان لازم باشد.
برای بررسی پاسخگویی سرویس از داخل VPS:
curl -i http://127.0.0.1:5678/healthz
اگر پاسخ HTTP موفق دریافت کردید، سرویس در حال پاسخگویی است.
مرحله دوازدهم: اتصال دامنه به VPS
اکنون باید زیردامنه موردنظر را به IP سرور متصل کنید.
فرض کنیم میخواهید از آدرس زیر استفاده کنید:
n8n.example.com
و IP سرور شما برابر است با:
203.0.113.10
وارد پنل DNS دامنه شوید و یک رکورد A ایجاد کنید.
| نوع رکورد | نام | مقدار |
|---|---|---|
| A | n8n | 203.0.113.10 |
اگر دامنه شما از DNS Provider دیگری مانند Cloudflare استفاده میکند، رکورد را در همان سرویس مدیریت کنید.
اگر سرور شما IPv6 عمومی دارد و میخواهید از آن استفاده کنید، باید رکورد AAAA و تنظیمات شبکه مربوط به آن را نیز بهدرستی انجام دهید.
برای بررسی DNS میتوانید اجرا کنید:
dig +short n8n.example.com
اگر IP صحیح نمایش داده شد، میتوانید تنظیمات وبسرور را ادامه دهید.
مرحله سیزدهم: نصب Nginx بهعنوان Reverse Proxy
در این آموزش از Nginx برای دریافت درخواستهای عمومی و انتقال آنها به n8n استفاده میکنیم.
ابتدا Nginx را نصب کنید:
sudo apt install nginx -y
سپس وضعیت آن را بررسی کنید:
sudo systemctl status nginx
اکنون فایل تنظیمات سایت را ایجاد کنید:
sudo nano /etc/nginx/sites-available/n8n
محتوای زیر را قرار دهید:
server {
listen 80;
server_name n8n.example.com;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
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-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
بهجای n8n.example.com دامنه واقعی خود را قرار دهید.
سپس تنظیمات را فعال کنید:
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/n8n
در صورت وجود لینک قبلی با همین نام، ابتدا آن را بررسی کنید و از ایجاد تنظیمات تکراری خودداری کنید.
برای بررسی صحت فایل:
sudo nginx -t
اگر پیام موفقیتآمیز نمایش داده شد، Nginx را مجدداً بارگذاری کنید:
sudo systemctl reload nginx
در این مرحله باید درخواستهای HTTP دامنه به سرویس n8n منتقل شوند.
با این حال، هنوز HTTPS فعال نشده است.
مرحله چهاردهم: نصب SSL رایگان برای n8n
برای فعالسازی HTTPS از Let's Encrypt و Certbot استفاده میکنیم.
ابتدا Certbot را نصب کنید:
sudo apt install certbot python3-certbot-nginx -y
سپس دستور زیر را اجرا کنید:
sudo certbot --nginx -d n8n.example.com
Certbot تلاش میکند مالکیت دامنه را تأیید کند و گواهی SSL صادر کند.
برای موفقیت این مرحله باید دامنه به IP صحیح اشاره کند و پورت 80 از اینترنت قابل دسترسی باشد.
پس از صدور موفق گواهی، تنظیمات HTTPS در Nginx اعمال میشوند.
اکنون میتوانید آدرس زیر را در مرورگر باز کنید:
https://n8n.example.com
اگر همه مراحل صحیح انجام شده باشند، صفحه اولیه n8n نمایش داده میشود.
بررسی تمدید خودکار SSL
گواهیهای Let's Encrypt باید پیش از انقضا تمدید شوند.
برای آزمایش فرایند تمدید:
sudo certbot renew --dry-run
این دستور فرایند تمدید را بهصورت آزمایشی بررسی میکند.
همچنین میتوانید زمانبندی تمدید Certbot را بررسی کنید:
systemctl list-timers | grep certbot
بسته به روش نصب، ممکن است تمدید از طریق سرویس یا زمانبندی دیگری مدیریت شود.
مرحله پانزدهم: ایجاد حساب کاربری n8n
پس از فعالسازی HTTPS، آدرس دامنه را باز کنید.
در اولین ورود باید حساب مالک اولیه n8n را ایجاد کنید.
اطلاعات موردنیاز را وارد کنید و یک رمز عبور قوی انتخاب کنید.
پس از ورود، محیط اصلی n8n نمایش داده میشود.
اکنون میتوانید اولین Workflow خود را ایجاد کنید.
مرحله شانزدهم: ساخت اولین Workflow آزمایشی
برای اطمینان از عملکرد صحیح n8n، بهتر است یک Workflow ساده بسازید.
ایجاد Workflow
در پنل n8n یک Workflow جدید ایجاد کنید.
سپس Node مربوط به Manual Trigger را اضافه کنید.
این Node اجازه میدهد Workflow را بهصورت دستی اجرا کنید.
اضافه کردن Node دوم
یک Node از نوع Edit Fields (Set) اضافه کنید.
یک فیلد متنی با نام زیر ایجاد کنید:
message
مقدار آن را قرار دهید:
Hello from n8n VPS
اکنون Workflow را اجرا کنید.
اگر خروجی Node دوم حاوی متن موردنظر بود، اجرای اولیه n8n موفق بوده است.
البته این آزمایش فقط عملکرد پایه Workflow را بررسی میکند. برای اطمینان از عملکرد واقعی Webhookها، Credentialها و سرویسهای خارجی باید آزمایشهای جداگانه انجام دهید.
مرحله هفدهم: تست Webhook روی VPS
یکی از مهمترین دلایل استفاده از VPS، امکان دریافت Webhook از سرویسهای خارجی است.
برای آزمایش، یک Workflow جدید ایجاد کنید.
سپس یک Webhook Node به آن اضافه کنید.
برای مثال مسیر زیر را در نظر بگیرید:
test-vps
متد درخواست را روی GET قرار دهید.
پس از فعال کردن حالت آزمایش Webhook، n8n آدرس تست را نمایش میدهد.
آدرس معمولاً ساختاری مشابه زیر دارد:
https://n8n.example.com/webhook-test/test-vps
این آدرس را در مرورگر یا ابزار ارسال درخواست باز کنید.
در صورتی که Workflow در حالت انتظار برای درخواست تست باشد، اجرای آن آغاز میشود.
تفاوت مهم: آدرسهای /webhook-test/ برای آزمایش در محیط ویرایشگر هستند. برای استفاده عملیاتی باید Workflow را منتشر یا فعال کنید و از آدرس Production Webhook استفاده کنید.
مرحله هجدهم: فعالسازی اجرای دائمی n8n
در فایل Compose از تنظیم زیر استفاده کردیم:
restart: unless-stopped
این گزینه باعث میشود Docker در بسیاری از شرایط، مانند راهاندازی مجدد سرور، کانتینر را دوباره اجرا کند؛ مگر اینکه کانتینر بهصورت دستی متوقف شده باشد.
برای اطمینان از فعال بودن Docker هنگام روشن شدن سرور:
sudo systemctl enable docker
سپس وضعیت سرویس را بررسی کنید:
sudo systemctl is-enabled docker
اگر خروجی enabled باشد، Docker برای اجرا هنگام راهاندازی سیستم تنظیم شده است.
آیا n8n به Cron نیاز دارد؟
برای اجرای Workflowهای زمانبندیشده معمولاً نیازی به ایجاد Cron Job جداگانه در سیستمعامل ندارید.
n8n دارای Triggerهای زمانبندی داخلی است.
کافی است Workflow مربوطه فعال باشد و سرویس n8n نیز در حال اجرا باقی بماند.
البته اگر سرور خاموش شود یا کانتینر متوقف شود، اجرای Workflowها نیز تحت تأثیر قرار میگیرد.
مرحله نوزدهم: مانیتورینگ منابع VPS
برای جلوگیری از مشکلات ناشی از کمبود منابع، بهتر است وضعیت سرور را بررسی کنید.
مشاهده مصرف RAM
free -h
مشاهده فضای دیسک
df -h
مشاهده مصرف کانتینرها
sudo docker stats
بررسی وضعیت سرویسها
sudo docker compose ps
مشاهده آخرین لاگهای n8n
sudo docker compose logs --tail=100 n8n
اگر متوجه افزایش مداوم مصرف RAM یا فضای دیسک شدید، باید تنظیمات ذخیره Executionها، تعداد اجراهای همزمان، نوع Workflowها و سرویسهای جانبی را بررسی کنید.
مرحله بیستم: بکاپ گرفتن از n8n روی VPS
اطلاعات n8n ممکن است شامل Workflowها، Credentialها، تنظیمات و تاریخچه اجراها باشد.
برای جلوگیری از دست رفتن این اطلاعات، باید از دیتابیس و فایلهای ضروری نسخه پشتیبان تهیه کنید.
بکاپ PostgreSQL
ابتدا پوشه بکاپ ایجاد کنید:
sudo mkdir -p /var/backups/n8n
سپس از دیتابیس خروجی بگیرید:
cd /opt/n8n
sudo docker compose exec -T postgres sh -c \
'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" -Fc' \
| sudo tee /var/backups/n8n/database.dump > /dev/null
برای بررسی فایل:
sudo ls -lh /var/backups/n8n/database.dump
بهتر است علاوه بر بررسی وجود فایل، امکان بازیابی آن را نیز در یک محیط آزمایشی بررسی کنید.
بکاپ تنظیمات
فایلهای .env و compose.yaml نیز اهمیت زیادی دارند.
برای بکاپ آنها:
sudo cp /opt/n8n/.env /var/backups/n8n/env.backup
sudo cp /opt/n8n/compose.yaml /var/backups/n8n/compose.backup.yaml
فایلهای بکاپ را فقط در اختیار کاربران مجاز قرار دهید.
بکاپ Volume مربوط به n8n
علاوه بر PostgreSQL، باید از Volume مربوط به n8n نیز محافظت کنید.
این Volume میتواند شامل فایلهای تنظیمات و دادههای دیگری باشد که خارج از PostgreSQL نگهداری میشوند.
برای تهیه بکاپ سازگار از آن، سرویس n8n را در یک بازه نگهداری متوقف کنید و پس از شناسایی نام واقعی Volume، از محتوای آن نسخه پشتیبان تهیه کنید.
بهتر است نسخههای پشتیبان را در فضای ذخیرهسازی جداگانهای نیز نگهداری کنید تا خرابی کامل VPS باعث از دست رفتن همزمان اطلاعات اصلی و بکاپها نشود.
خطاهای رایج نصب n8n روی VPS
خطای 502 Bad Gateway
اگر هنگام باز کردن دامنه با خطای 502 مواجه شدید، احتمالاً Nginx نمیتواند به سرویس n8n متصل شود.
ابتدا بررسی کنید کانتینر فعال است:
sudo docker compose ps
سپس پاسخ داخلی n8n را آزمایش کنید:
curl -i http://127.0.0.1:5678/healthz
اگر پاسخ دریافت نشد، لاگهای n8n را بررسی کنید.
اگر n8n پاسخ میدهد اما دامنه همچنان خطای 502 دارد، تنظیمات proxy_pass و لاگهای Nginx را بررسی کنید:
sudo tail -n 100 /var/log/nginx/error.log
خطای اتصال PostgreSQL
اگر n8n نتواند به دیتابیس متصل شود، وضعیت سرویس را بررسی کنید:
sudo docker compose logs --tail=100 postgres
سپس مطمئن شوید متغیرهای اتصال دیتابیس صحیح هستند.
توجه داشته باشید که اگر Volume دیتابیس از قبل ایجاد شده باشد، تغییر رمز عبور در فایل .env لزوماً رمز کاربر موجود PostgreSQL را تغییر نمیدهد.
باز نشدن دامنه
اگر دامنه باز نمیشود، موارد زیر را بررسی کنید:
- رکورد DNS به IP صحیح اشاره کند.
- پورتهای 80 و 443 در دسترس باشند.
- سرویس Nginx فعال باشد.
- گواهی SSL معتبر باشد.
- فایروال ارائهدهنده VPS دسترسی را مسدود نکرده باشد.
خطای SSL
اگر Certbot نتواند گواهی صادر کند، ابتدا مطمئن شوید دامنه به سرور متصل است.
سپس بررسی کنید پورت 80 از اینترنت قابل دسترسی باشد و تنظیمات Nginx برای دامنه صحیح باشند.
اجرای ناموفق Workflowهای زمانبندیشده
اگر Workflowهای زمانبندیشده اجرا نمیشوند، ابتدا فعال بودن Workflow را بررسی کنید.
سپس مطمئن شوید سرویس n8n در حال اجراست و منطقه زمانی درست تنظیم شده است.
کمبود RAM
اگر سرور با کمبود حافظه مواجه شود، ممکن است اجرای Workflowها با خطا مواجه شود یا فرایند n8n متوقف شود.
برای بررسی وضعیت حافظه:
free -h
برای بررسی مصرف کانتینرها:
sudo docker stats
همچنین میتوانید رخدادهای مرتبط با OOM را در لاگهای سیستم بررسی کنید.
نکات امنیتی مهم برای n8n روی VPS
پس از نصب، چند اقدام امنیتی اهمیت زیادی دارند.
محافظت از SSH
از کلید SSH استفاده کنید و دسترسی مدیریتی را فقط برای کاربران موردنیاز فعال نگه دارید.
محدودسازی پورتها
پورت PostgreSQL را در اینترنت منتشر نکنید و پورت n8n را پشت Reverse Proxy نگه دارید.
استفاده از HTTPS
پنل n8n را از طریق HTTPS در اختیار کاربران قرار دهید.
نگهداری امن Credentialها
کلید رمزنگاری، رمز دیتابیس و اطلاعات اتصال سرویسهای خارجی را در مخازن عمومی یا فایلهای قابل دسترس دیگران قرار ندهید.
بهروزرسانی برنامهریزیشده
قبل از بهروزرسانی n8n از اطلاعات نسخه پشتیبان تهیه کنید و تغییرات نسخه مقصد را بررسی کنید.
بکاپ منظم
برای دیتابیس، Volumeها و فایلهای تنظیمات برنامه بکاپ منظم داشته باشید.
بررسی Nodeهای شخص ثالث
Community Nodeها و کدهای اجراشده در Workflowها میتوانند به منابع و دادههای حساس دسترسی پیدا کنند. بنابراین فقط از منابع معتبر استفاده کنید.
جمعبندی
در این مقاله یاد گرفتیم چگونه n8n را روی VPS راهاندازی کنیم.
ابتدا مشخصات سرور مجازی مناسب را بررسی کردیم، سپس Ubuntu را آماده کردیم و تنظیمات اولیه امنیت SSH و فایروال را انجام دادیم.
در ادامه Docker و Docker Compose را نصب کردیم، سرویسهای n8n و PostgreSQL را اجرا کردیم و با استفاده از Nginx و Let's Encrypt دسترسی امن از طریق دامنه و HTTPS را فراهم کردیم.
همچنین روش ساخت Workflow آزمایشی، بررسی Webhook، مانیتورینگ منابع، بکاپگیری و رفع خطاهای رایج را بررسی کردیم.
با این ساختار میتوانید یک نمونه مستقل n8n را روی VPS خود اجرا کنید و بهتدریج آن را برای نیازهای واقعی کسبوکار توسعه دهید.
البته برای محیطهای حساس و پرترافیک، مواردی مانند مانیتورینگ پیشرفته، تست بازیابی بکاپ، مدیریت Secrets، سیاست نگهداری Executionها و معماری Queue Mode نیز باید بررسی شوند.
سوالات متداول
آیا میتوان n8n را روی VPS ارزان نصب کرد؟
بله. برای یادگیری و Workflowهای سبک ممکن است یک VPS کوچک کافی باشد. اما منابع موردنیاز به نوع پردازشها و تعداد اجراهای همزمان بستگی دارد.
آیا برای نصب n8n روی VPS به دامنه نیاز داریم؟
برای اجرای اولیه خیر؛ اما برای استفاده عمومی و دریافت Webhook از سرویسهای خارجی بهتر است دامنه و HTTPS داشته باشید.
آیا n8n روی VPS بهصورت دائمی اجرا میشود؟
بله، تا زمانی که سرور و سرویسهای مربوطه فعال باشند. با استفاده از سیاست Restart در Docker میتوانید اجرای مجدد کانتینر پس از راهاندازی سرور را مدیریت کنید.
آیا نصب n8n روی VPS رایگان است؟
نسخه Community Edition را میتوان مطابق شرایط مجوز n8n بدون پرداخت اشتراک نرمافزار اجرا کرد؛ اما هزینه VPS، دامنه و نگهداری جداگانه است.
آیا میتوان n8n را روی VPS ایران نصب کرد؟
بله. اما دسترسی به مخازن Docker، APIهای خارجی و سرویسهای موردنیاز Workflowها باید بررسی شود. بعضی سرویسها ممکن است از شبکه سرور ایران در دسترس نباشند.
آیا VPS خارج برای n8n بهتر است؟
پاسخ به این سوال به سرویسهای مورد استفاده، موقعیت کاربران، کیفیت شبکه و الزامات نگهداری دادهها بستگی دارد. برای Workflowهایی که به APIهای بینالمللی وابسته هستند، سرور خارج ممکن است انتخاب مناسبتری باشد.
آیا برای n8n روی VPS باید PostgreSQL نصب کنیم؟
الزامی نیست؛ n8n از SQLite نیز پشتیبانی میکند. با این حال PostgreSQL برای بسیاری از محیطهای عملیاتی انتخاب مناسبتری است.
آیا میتوان چند نمونه n8n را روی یک VPS اجرا کرد؟
بله. میتوانید چند نمونه مستقل n8n را با Docker اجرا کنید. در این حالت باید منابع سرور، شبکهها، دیتابیسها، Volumeها، کلیدهای رمزنگاری و دامنههای هر نمونه را بهدرستی مدیریت کنید.
آیا برای اجرای Workflowهای n8n به Cron سیستمعامل نیاز داریم؟
معمولاً خیر. n8n دارای Triggerهای زمانبندی داخلی است و میتواند Workflowهای فعال را براساس تنظیمات زمانی اجرا کند.





