اگر قصد دارید اتوماسیونهای خود را با n8n اجرا کنید و به سرویسهای بینالمللی مانند Google Sheets، Telegram، GitHub یا APIهای مختلف متصل شوید، استفاده از یک سرور خارجی میتواند گزینه مناسبی باشد.
با نصب n8n روی VPS خارجی میتوانید Workflowهای خود را بهصورت شبانهروزی اجرا کنید، Webhook دریافت کنید و بدون نیاز به روشن نگه داشتن کامپیوتر شخصی، فرایندهای خودکار را مدیریت کنید.
اما انتخاب سرور خارجی تنها اولین مرحله است. برای راهاندازی یک سرویس پایدار باید مواردی مانند موقعیت دیتاسنتر، کیفیت شبکه، منابع سختافزاری، امنیت SSH، دیتابیس PostgreSQL، دامنه، SSL و بکاپگیری را نیز در نظر بگیرید.
در این مقاله، نصب n8n روی سرور خارج را بهصورت قدمبهقدم آموزش میدهیم و بررسی میکنیم چگونه یک VPS خارجی را برای اجرای دائمی n8n آماده کنید.
چرا n8n را روی سرور خارج نصب کنیم؟
n8n یک پلتفرم اتوماسیون Workflow است که میتوانید نسخه Self-hosted آن را روی زیرساخت شخصی خود اجرا کنید.
این زیرساخت میتواند یک سرور داخل ایران، سرور خارجی، کامپیوتر شخصی یا محیط ابری باشد.
انتخاب سرور خارجی معمولاً زمانی مطرح میشود که Workflowهای شما وابستگی زیادی به سرویسهای بینالمللی دارند.
دسترسی به APIهای بینالمللی
بسیاری از Workflowهای n8n با APIهای خارجی ارتباط برقرار میکنند.
برای مثال:
- Google Sheets API برای مدیریت اطلاعات صفحات گسترده
- GitHub API برای مدیریت مخازن و رویدادهای توسعه نرمافزار
- Telegram Bot API برای ارسال و دریافت پیام
- سرویسهای ایمیل برای ارسال اعلانها
- APIهای هوش مصنوعی برای پردازش متن و داده
- سرویسهای مدیریت پروژه و CRM
استفاده از سرور خارجی ممکن است دسترسی شبکهای به برخی از این سرویسها را سادهتر کند.
البته باید توجه داشته باشید که سرور خارجی به معنی دسترسی تضمینشده به تمام APIها نیست. هر سرویس ممکن است محدودیتهای منطقهای، سیاستهای احراز هویت یا شرایط استفاده خاص خود را داشته باشد.
اجرای دائمی Workflowها
اگر n8n روی کامپیوتر شخصی اجرا شود، خاموش شدن کامپیوتر یا قطع اینترنت میتواند اجرای Workflowها را متوقف کند.
اما یک VPS با زیرساخت مناسب امکان اجرای مداوم سرویس را فراهم میکند.
البته پایداری نهایی به کیفیت ارائهدهنده، منابع سرور، تنظیمات Docker و مانیتورینگ نیز وابسته است.
دریافت Webhook از سرویسهای خارجی
بسیاری از سرویسها برای اطلاعرسانی رویدادها از Webhook استفاده میکنند.
برای مثال، ممکن است بخواهید با ثبت یک سفارش جدید یا دریافت یک پیام، Workflow مشخصی اجرا شود.
با اتصال دامنه و فعالسازی HTTPS میتوانید آدرس عمومی Webhook را در اختیار سرویسهای خارجی قرار دهید.
بهترین کشور برای نصب n8n کدام است؟
انتخاب کشور سرور یکی از تصمیمهای مهم هنگام راهاندازی n8n است.
کشور مناسب به موقعیت کاربران، سرویسهای مورد استفاده، قوانین نگهداری داده و کیفیت شبکه بستگی دارد.
سرور آلمان
آلمان یکی از گزینههای رایج برای میزبانی سرویسهای وب است.
مزایای احتمالی آن عبارتاند از:
- تنوع ارائهدهندگان VPS
- وجود دیتاسنترهای متعدد
- امکان انتخاب منابع سختافزاری مختلف
- مناسب بودن موقعیت جغرافیایی برای ارتباط با بسیاری از سرویسهای اروپایی
البته کیفیت واقعی سرور به ارائهدهنده و دیتاسنتر بستگی دارد.
سرور هلند
هلند نیز یکی از موقعیتهای شناختهشده میزبانی در اروپا است.
اگر Workflowهای شما با سرویسهای اروپایی ارتباط دارند، میتوانید سرورهای این کشور را بررسی کنید.
سرور فنلاند
فنلاند نیز میتواند گزینهای برای میزبانی n8n باشد.
هنگام انتخاب باید قیمت، کیفیت شبکه، سیاستهای دیتاسنتر و موقعیت سرویسهای مقصد را بررسی کنید.
سرور آمریکا
اگر بخش زیادی از APIهای مورد استفاده شما در زیرساختهای آمریکا میزبانی میشوند، یک VPS در آمریکا ممکن است تأخیر کمتری در ارتباط با آنها داشته باشد.
با این حال، باید محدودیتهای دسترسی، قوانین مرتبط و موقعیت کاربران خود را نیز بررسی کنید.
مقایسه موقعیتهای مختلف
| موقعیت سرور | مزیت احتمالی | نکته قابل بررسی |
|---|---|---|
| آلمان | تنوع زیرساخت و ارائهدهنده | کیفیت شبکه و قیمت |
| هلند | ارتباطات بینالمللی | شرایط دیتاسنتر |
| فنلاند | گزینههای میزبانی اروپایی | تأخیر تا سرویس مقصد |
| آمریکا | نزدیکی به برخی سرویسهای آمریکایی | محدودیتهای منطقهای و تأخیر کاربران |
هیچ کشوری برای تمام پروژههای n8n بهترین گزینه نیست.
بهترین روش انتخاب، آزمایش واقعی ارتباط با APIهای موردنیاز از همان موقعیت سرور است.
چه مشخصاتی برای VPS خارجی n8n مناسب است؟
منابع موردنیاز n8n به نوع Workflowها، تعداد اجرای همزمان و حجم دادهها بستگی دارد.
جدول زیر صرفاً پیشنهاد اولیه برای انتخاب سرور است و حداقل رسمی یا تضمین ظرفیت محسوب نمیشود.
| نوع استفاده | CPU | RAM | فضای SSD |
|---|---|---|---|
| یادگیری و آزمایش | 1 vCPU | 2 GB | 20 GB |
| استفاده سبک | 2 vCPU | 4 GB | 30 GB |
| استفاده متوسط | 2 تا 4 vCPU | 8 GB | 40 GB |
| پردازش سنگین | 4+ vCPU | 16+ GB | متناسب با دادهها |
اگر از PostgreSQL، Redis یا چند Worker استفاده میکنید، مصرف منابع سرویسهای جانبی را نیز محاسبه کنید.
همچنین Workflowهایی که فایلهای حجیم، تصاویر یا دادههای زیاد را پردازش میکنند ممکن است به حافظه بیشتری نیاز داشته باشند.
مرحله اول: تهیه VPS خارجی
ابتدا یک VPS با سیستمعامل Linux تهیه کنید.
برای این آموزش از Ubuntu 24.04 LTS استفاده میکنیم.
پس از فعالسازی VPS معمولاً اطلاعات زیر را دریافت خواهید کرد:
- IP عمومی سرور
- نام کاربری اولیه
- رمز عبور یا کلید SSH
- مشخصات CPU و RAM
- سیستمعامل
- دسترسی به پنل مدیریت سرور
در این مقاله از آدرس فرضی زیر استفاده میکنیم:
203.0.113.20
این IP صرفاً برای مثال است و باید با IP واقعی سرور خود جایگزین شود.
مرحله دوم: اتصال SSH به سرور خارجی
برای اتصال به VPS میتوانید از PowerShell، Windows Terminal یا ترمینال لینوکس استفاده کنید.
دستور زیر را اجرا کنید:
ssh root@203.0.113.20
اگر نام کاربری اولیه شما ubuntu است، دستور را متناسب با آن تغییر دهید.
پس از ورود، نسخه سیستمعامل را بررسی کنید:
cat /etc/os-release
سپس منابع سرور را مشاهده کنید:
free -h
و:
df -h
با این دستورات میتوانید وضعیت حافظه و فضای دیسک را بررسی کنید.
مرحله سوم: آمادهسازی اولیه Ubuntu
قبل از نصب n8n، سیستمعامل را بهروزرسانی کنید.
sudo apt update
سپس:
sudo apt upgrade -y
در صورت نیاز به راهاندازی مجدد:
sudo reboot
پس از راهاندازی مجدد، دوباره از طریق SSH متصل شوید.
ایجاد کاربر مدیریتی
برای مدیریت روزمره بهتر است از یک کاربر مستقل بهجای root استفاده کنید.
کاربر deploy را ایجاد کنید:
sudo adduser deploy
سپس دسترسی sudo را فعال کنید:
sudo usermod -aG sudo deploy
کلید عمومی SSH خود را نیز برای این کاربر تنظیم کنید.
از کامپیوتر شخصی، در صورت پشتیبانی محیط، میتوانید اجرا کنید:
ssh-copy-id deploy@203.0.113.20
قبل از محدود کردن ورود root یا ورود با رمز عبور، حتماً اتصال کاربر جدید را در یک نشست SSH جداگانه آزمایش کنید.
مرحله چهارم: تنظیم فایروال VPS
برای کنترل پورتهای ورودی از UFW استفاده میکنیم.
ابتدا آن را نصب کنید:
sudo apt install ufw -y
پورت SSH را مجاز کنید:
sudo ufw allow 22/tcp
اگر SSH روی پورت دیگری اجرا میشود، پورت واقعی را جایگزین کنید.
سپس پورتهای وب را مجاز کنید:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
اکنون فایروال را فعال کنید:
sudo ufw enable
برای مشاهده وضعیت:
sudo ufw status verbose
اگر ارائهدهنده VPS دارای Cloud Firewall مستقل است، تنظیمات آن را نیز بررسی کنید.
در ادامه پورت n8n را فقط روی localhost منتشر میکنیم تا مستقیماً از اینترنت قابل دسترسی نباشد.
مرحله پنجم: نصب Docker روی سرور خارجی
برای اجرای 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
در پایان یک کانتینر آزمایشی اجرا کنید:
sudo docker run hello-world
اگر پیام موفقیتآمیز Docker نمایش داده شد، نصب صحیح انجام شده است.
مرحله ششم: بررسی کیفیت شبکه VPS خارجی
قبل از نصب n8n بهتر است اتصال شبکه سرور را آزمایش کنید.
بررسی DNS
resolvectl status
برای بررسی Resolve شدن دامنه:
getent ahostsv4 docker.n8n.io
بررسی اتصال HTTPS
curl -I --connect-timeout 10 https://docker.n8n.io
بررسی تأخیر شبکه
برای بررسی اولیه میتوانید از Ping استفاده کنید:
ping -c 4 1.1.1.1
البته پاسخ Ping بهتنهایی معیار کاملی برای کیفیت ارتباط نیست.
بعضی سرویسها ICMP را مسدود میکنند، درحالیکه ارتباط HTTPS آنها بهدرستی برقرار است.
برای بررسی دقیقتر باید Endpointهای واقعی موردنیاز Workflowها را آزمایش کنید.
بررسی مسیر شبکه
در صورت نیاز میتوانید از ابزارهایی مانند traceroute یا mtr استفاده کنید.
برای نصب:
sudo apt install mtr-tiny -y
سپس:
mtr -rw -c 10 1.1.1.1
نتایج این ابزارها باید با احتیاط تفسیر شوند؛ زیرا برخی روترها به بستههای تشخیصی پاسخ نمیدهند.
مرحله هفتم: ایجاد پوشه پروژه 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_ENCRYPTION_KEY باید در طول عمر نمونه n8n ثابت باقی بماند و همراه با بکاپها بهشکل امن نگهداری شود.
مرحله نهم: ایجاد فایل تنظیمات محیطی
فایل .env را ایجاد کنید:
nano /opt/n8n/.env
محتوای زیر را قرار دهید:
POSTGRES_DB=n8n
POSTGRES_USER=n8n_user
POSTGRES_PASSWORD=YOUR_DATABASE_PASSWORD
N8N_ENCRYPTION_KEY=YOUR_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
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168
مقادیر نمونه را با اطلاعات واقعی جایگزین کنید.
در این مثال:
- اطلاعات اتصال PostgreSQL در فایل
.envنگهداری میشوند. - کلید رمزنگاری n8n بهصورت ثابت تنظیم میشود.
- دامنه عمومی n8n مشخص شده است.
- منطقه زمانی روی تهران قرار دارد.
- پاکسازی دادههای Execution فعال است.
- مقدار 168 برای نگهداری زمانی Executionها برحسب ساعت تنظیم شده است.
توجه کنید که پاکسازی Executionها ممکن است براساس تنظیمات دیگر و زمانبندی داخلی n8n انجام شود و حذف آنی تمام دادههای قدیمی را تضمین نمیکند.
پس از ذخیره فایل:
chmod 600 /opt/n8n/.env
مرحله دهم: ساخت Docker Compose برای n8n و PostgreSQL
فایل Compose را ایجاد کنید:
nano /opt/n8n/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}
EXECUTIONS_DATA_PRUNE: ${EXECUTIONS_DATA_PRUNE}
EXECUTIONS_DATA_MAX_AGE: ${EXECUTIONS_DATA_MAX_AGE}
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ها، کاربران، Credentialهای رمزنگاریشده و دادههای اجرایی.
n8n: برای مدیریت و اجرای Workflowها.
برای حفظ اطلاعات نیز از دو Volume پایدار استفاده شده است.
نکته مهم درباره نسخه n8n
در مثال بالا از برچسب latest استفاده کردهایم تا ساختار نصب ساده باشد.
اما در محیط عملیاتی بهتر است پس از بررسی سازگاری، یک نسخه مشخص و آزمایششده n8n را در فایل Compose ثبت کنید.
بهروزرسانی بدون بررسی تغییرات نسخه میتواند روی Workflowها یا دیتابیس تأثیر بگذارد.
مرحله یازدهم: اجرای n8n روی سرور خارجی
ابتدا وارد پوشه پروژه شوید:
cd /opt/n8n
ساختار Compose را بررسی کنید:
sudo docker compose config --quiet
سپس سرویسها را اجرا کنید:
sudo docker compose up -d
برای مشاهده وضعیت:
sudo docker compose ps
برای مشاهده لاگها:
sudo docker compose logs -f n8n
در اولین اجرا ممکن است Docker برای دریافت تصاویر و آمادهسازی دیتابیس به زمان نیاز داشته باشد.
بررسی سلامت n8n
از داخل سرور اجرا کنید:
curl -i http://127.0.0.1:5678/healthz
اگر پاسخ موفقیتآمیز دریافت کردید، n8n در حال پاسخگویی است.
بررسی PostgreSQL
sudo docker compose exec postgres sh -c \
'pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB"'
این دستور آماده بودن PostgreSQL برای پذیرش اتصال را بررسی میکند.
مرحله دوازدهم: اتصال دامنه به سرور خارجی
برای استفاده عمومی از n8n بهتر است یک زیردامنه اختصاصی داشته باشید.
برای مثال:
n8n.example.com
در پنل DNS دامنه یک رکورد A ایجاد کنید.
| نوع رکورد | نام | مقدار |
|---|---|---|
| A | n8n | IP سرور خارجی |
برای بررسی اتصال دامنه:
dig +short n8n.example.com
اگر IP صحیح نمایش داده شد، میتوانید تنظیمات Reverse Proxy را ادامه دهید.
اگر از Cloudflare استفاده میکنید، وضعیت Proxy و تنظیمات SSL آن را نیز باید متناسب با معماری خود بررسی کنید.
مرحله سیزدهم: نصب Nginx بهعنوان Reverse Proxy
برای انتقال درخواستهای HTTPS به n8n از Nginx استفاده میکنیم.
ابتدا نصب کنید:
sudo apt install nginx -y
سپس فایل تنظیمات دامنه را ایجاد کنید:
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
اگر خطایی وجود نداشت:
sudo systemctl reload nginx
در این مرحله Nginx درخواستهای HTTP را به سرویس n8n منتقل میکند.
مرحله چهاردهم: نصب SSL رایگان برای n8n
برای فعالسازی HTTPS از Certbot و Let's Encrypt استفاده میکنیم.
ابتدا بستههای موردنیاز را نصب کنید:
sudo apt install certbot python3-certbot-nginx -y
سپس دستور زیر را اجرا کنید:
sudo certbot --nginx -d n8n.example.com
برای صدور موفق گواهی، دامنه باید به IP صحیح اشاره کند و پورت 80 از اینترنت در دسترس باشد.
پس از صدور گواهی، آدرس زیر را باز کنید:
https://n8n.example.com
در صورت تنظیم صحیح، صفحه n8n از طریق HTTPS نمایش داده میشود.
بررسی تمدید خودکار SSL
برای آزمایش تمدید گواهی:
sudo certbot renew --dry-run
این دستور فرایند تمدید را بهصورت آزمایشی بررسی میکند.
مرحله پانزدهم: ایجاد حساب کاربری n8n
پس از باز کردن دامنه، صفحه راهاندازی اولیه n8n نمایش داده میشود.
در این مرحله باید حساب مالک اولیه را ایجاد کنید.
از یک رمز عبور قوی استفاده کنید و اطلاعات ورود را در محل امن نگهداری کنید.
پس از ورود، میتوانید اولین Workflow خود را ایجاد کنید.
مرحله شانزدهم: بررسی اتصال به APIهای خارجی
یکی از مهمترین دلایل انتخاب سرور خارجی، استفاده از APIهای بینالمللی است.
اما قبل از ساخت Workflowهای اصلی بهتر است اتصال به سرویسهای موردنیاز را بررسی کنید.
آزمایش Telegram Bot API
curl -I --connect-timeout 10 https://api.telegram.org
آزمایش GitHub API
curl -I --connect-timeout 10 https://api.github.com
آزمایش OpenAI API
curl -I --connect-timeout 10 https://api.openai.com
دریافت پاسخ HTTP مانند 401 یا 403 لزوماً به معنی خرابی شبکه نیست.
ممکن است Endpoint به احراز هویت نیاز داشته باشد یا دسترسی حساب و موقعیت سرور محدود شده باشد.
برای اطمینان از عملکرد واقعی باید درخواست معتبر و مجاز به API ارسال کنید.
آزمایش اتصال از داخل کانتینر n8n
گاهی اوقات اتصال از خود سرور برقرار است، اما کانتینر با مشکل DNS یا شبکه مواجه میشود.
برای آزمایش:
sudo docker compose exec n8n node -e \
"fetch('https://api.github.com').then(r=>console.log(r.status)).catch(e=>console.error(e.message))"
اگر پاسخ HTTP دریافت شود، حداقل ارتباط HTTPS از داخل کانتینر برقرار شده است.
مرحله هفدهم: آزمایش Webhook روی سرور خارجی
برای آزمایش Webhook یک Workflow جدید ایجاد کنید.
سپس Webhook Node را اضافه کنید.
برای مثال مسیر زیر را در نظر بگیرید:
test-foreign-vps
متد درخواست را روی GET قرار دهید.
در حالت تست، آدرس Webhook معمولاً مشابه زیر است:
https://n8n.example.com/webhook-test/test-foreign-vps
اکنون روی گزینه Listen for Test Event کلیک کنید.
سپس از مرورگر یا ابزار ارسال درخواست، آدرس Webhook را فراخوانی کنید.
اگر درخواست به n8n برسد، اجرای Workflow آغاز خواهد شد.
تفاوت Test Webhook و Production Webhook
آدرس Test Webhook برای آزمایش در محیط ویرایشگر استفاده میشود.
اما برای استفاده دائمی باید Workflow را فعال یا منتشر کنید و از Production Webhook استفاده کنید.
آدرس Production معمولاً به شکل زیر خواهد بود:
https://n8n.example.com/webhook/test-foreign-vps
برای سرویسهای واقعی، حتماً آدرس Production را در تنظیمات سرویس خارجی ثبت کنید.
مرحله هجدهم: تنظیم اجرای دائمی n8n
در فایل Compose از گزینه زیر استفاده کردهایم:
restart: unless-stopped
این تنظیم باعث میشود Docker در شرایط معمول، پس از راهاندازی مجدد سرور یا توقف غیرمنتظره کانتینر، سرویس را دوباره اجرا کند.
برای اطمینان از فعال بودن Docker هنگام روشن شدن سرور:
sudo systemctl enable docker
سپس:
sudo systemctl is-enabled docker
اگر خروجی enabled باشد، Docker برای اجرا هنگام راهاندازی سیستم تنظیم شده است.
توجه داشته باشید که اجرای دائمی به معنی تضمین عدم قطعی نیست. برای سرویسهای حساس باید مانیتورینگ و برنامه بازیابی نیز داشته باشید.
مرحله نوزدهم: مانیتورینگ منابع سرور خارجی
برای جلوگیری از مشکلات ناشی از کمبود منابع، وضعیت سرور را بهصورت منظم بررسی کنید.
مصرف RAM
free -h
فضای دیسک
df -h
مصرف CPU و RAM کانتینرها
sudo docker stats
وضعیت کانتینرها
sudo docker compose ps
لاگهای n8n
sudo docker compose logs --tail=100 n8n
اگر مصرف منابع بهصورت مداوم افزایش پیدا میکند، باید نوع Workflowها، حجم دادههای Execution و تنظیمات نگهداری اطلاعات را بررسی کنید.
مرحله بیستم: بکاپ گرفتن از n8n روی سرور خارج
برای جلوگیری از دست رفتن اطلاعات، باید از PostgreSQL، Volume مربوط به n8n و فایلهای تنظیمات بکاپ تهیه کنید.
بکاپ 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
بهتر است سلامت فایل و امکان بازیابی آن را در یک محیط آزمایشی بررسی کنید.
بکاپ فایلهای تنظیمات
فایلهای زیر نیز باید نگهداری شوند:
/opt/n8n/.env
/opt/n8n/compose.yaml
بهخصوص فایل .env حاوی کلید رمزنگاری است و باید بهصورت امن ذخیره شود.
بکاپ Volume مربوط به n8n
حتی اگر از PostgreSQL استفاده میکنید، Volume مربوط به /home/node/.n8n همچنان اهمیت دارد.
برای بکاپ سازگار، بهتر است در یک بازه نگهداری سرویس n8n را متوقف کنید و پس از شناسایی نام واقعی Volume از محتوای آن نسخه پشتیبان تهیه کنید.
بکاپها را فقط روی همان VPS نگهداری نکنید. بهتر است یک نسخه رمزنگاریشده در فضای ذخیرهسازی مستقل نیز داشته باشید.
مرحله بیستویکم: بهروزرسانی n8n روی VPS خارجی
برای بهروزرسانی ابتدا باید نسخه فعلی و نسخه مقصد را بررسی کنید.
قبل از هر تغییری از اطلاعات بکاپ بگیرید.
سپس تصویر نسخه جدید را دریافت کنید:
sudo docker compose pull n8n
برای ایجاد مجدد کانتینر:
sudo docker compose up -d n8n
در پایان لاگها را بررسی کنید:
sudo docker compose logs --tail=100 n8n
نکته مهم: این دستورات زمانی نسخه جدید را اعمال میکنند که برچسب تصویر در Compose به نسخه مقصد اشاره کند یا تصویر مرتبط با همان برچسب تغییر کرده باشد.
برای محیط عملیاتی بهتر است نسخه n8n را بهصورت مشخص ثبت کنید و قبل از ارتقا، Release Notes را بررسی کنید.
مشکلات رایج نصب n8n روی سرور خارج
خطای 502 Bad Gateway
اگر دامنه خطای 502 نمایش میدهد، ابتدا وضعیت n8n را بررسی کنید:
sudo docker compose ps
سپس:
curl -i http://127.0.0.1:5678/healthz
اگر سرویس پاسخ نمیدهد، لاگهای n8n را بررسی کنید.
اگر سرویس پاسخ میدهد، تنظیمات Nginx را بررسی کنید:
sudo tail -n 100 /var/log/nginx/error.log
خطای اتصال PostgreSQL
برای مشاهده لاگ دیتابیس:
sudo docker compose logs --tail=100 postgres
همچنین اطلاعات اتصال را در فایل .env بررسی کنید.
اگر دیتابیس قبلاً ایجاد شده باشد، تغییر رمز عبور در .env لزوماً رمز کاربر موجود PostgreSQL را تغییر نمیدهد.
مشکل صدور SSL
اگر Certbot نتواند گواهی صادر کند، ابتدا DNS و دسترسی به پورت 80 را بررسی کنید.
همچنین مطمئن شوید Nginx برای دامنه صحیح تنظیم شده است.
خطای اتصال API
اگر اتصال به API خارجی ناموفق است، وضعیت DNS، TLS، دسترسی منطقهای، احراز هویت و محدودیتهای حساب کاربری را بررسی کنید.
کمبود RAM
اگر کانتینر به دلیل کمبود حافظه متوقف میشود، مصرف منابع را بررسی کنید:
sudo docker stats
همچنین میتوانید رخدادهای OOM را در لاگهای سیستم مشاهده کنید.
مشکل اجرای Workflowهای زمانبندیشده
اگر Workflowهای زمانبندیشده اجرا نمیشوند، فعال بودن Workflow، منطقه زمانی و وضعیت سرویس n8n را بررسی کنید.
سرور ایران بهتر است یا سرور خارج؟
انتخاب بین سرور ایران و خارج باید براساس نیاز واقعی پروژه انجام شود.
| معیار | سرور ایران | سرور خارج |
|---|---|---|
| اتصال به سرویسهای داخلی | ممکن است مناسبتر باشد | وابسته به مسیر شبکه |
| اتصال به APIهای بینالمللی | ممکن است محدودیت داشته باشد | وابسته به کشور و سرویس |
| تأخیر برای کاربران ایرانی | ممکن است کمتر باشد | وابسته به موقعیت |
| دریافت Docker Image | احتمال مشکلات دسترسی | وابسته به Registry و شبکه |
| نگهداری داده در ایران | امکانپذیر | نیازمند بررسی محل ذخیره |
| هزینه | وابسته به ارائهدهنده | وابسته به کشور و منابع |
| مدیریت و توسعه | امکانپذیر | امکانپذیر |
اگر Workflowهای شما عمدتاً با APIهای خارجی کار میکنند، VPS خارجی ممکن است انتخاب مناسبتری باشد.
اما اگر سرویسهای داخلی بخش اصلی پروژه هستند، باید کیفیت ارتباط از سرور خارجی به آن سرویسها را نیز آزمایش کنید.
نکات امنیتی مهم برای n8n روی سرور خارجی
پس از راهاندازی، امنیت سرویس را جدی بگیرید.
محافظت از SSH
از کلید SSH استفاده کنید و دسترسی مدیریتی را محدود نگه دارید.
انتشار ندادن پورت PostgreSQL
دیتابیس نباید بدون ضرورت در اینترنت قابل دسترسی باشد.
استفاده از HTTPS
برای پنل مدیریت و Webhookهای عمومی از HTTPS استفاده کنید.
محافظت از کلید رمزنگاری
کلید N8N_ENCRYPTION_KEY را در مخازن عمومی یا فایلهای قابل مشاهده برای دیگران قرار ندهید.
کنترل دسترسی کاربران
فقط به افراد موردنیاز دسترسی مدیریتی بدهید و از حسابهای مشترک غیرضروری خودداری کنید.
بررسی Community Nodeها
قبل از نصب Nodeهای شخص ثالث، اعتبار منبع و سطح دسترسی آنها را بررسی کنید.
بکاپ و تست بازیابی
از اطلاعات بکاپ منظم تهیه کنید و بازیابی آنها را نیز آزمایش کنید.
جمعبندی
در این مقاله یاد گرفتیم چگونه n8n را روی سرور خارج نصب و راهاندازی کنیم.
ابتدا معیارهای انتخاب VPS خارجی و موقعیت دیتاسنتر را بررسی کردیم. سپس Ubuntu را آماده کردیم، Docker و Docker Compose را نصب کردیم و سرویسهای n8n و PostgreSQL را راهاندازی کردیم.
در ادامه دامنه را به سرور متصل کردیم، با Nginx و Let's Encrypt دسترسی HTTPS ایجاد کردیم و نحوه آزمایش Webhook و APIهای خارجی را بررسی کردیم.
همچنین روش مانیتورینگ منابع، بکاپگیری، بهروزرسانی و رفع خطاهای رایج را آموزش دادیم.
با اجرای این مراحل میتوانید یک نمونه مستقل n8n روی VPS خارجی داشته باشید و Workflowهای خود را بهصورت دائمی مدیریت کنید.
برای پروژههای بزرگتر نیز میتوانید در آینده از معماری Queue Mode، Redis، Workerهای مستقل و مانیتورینگ پیشرفته استفاده کنید.
سوالات متداول
آیا نصب n8n روی سرور خارج رایگان است؟
نسخه Community Edition را میتوانید مطابق شرایط مجوز n8n بدون پرداخت اشتراک نرمافزار اجرا کنید؛ اما هزینه VPS، دامنه و نگهداری جداگانه است.
بهترین کشور برای نصب n8n کدام است؟
بهترین کشور به موقعیت کاربران، APIهای مورد استفاده، کیفیت شبکه و الزامات نگهداری دادهها بستگی دارد. آلمان، هلند، فنلاند و آمریکا از گزینههایی هستند که میتوان بررسی کرد.
آیا میتوان n8n را روی VPS آلمان نصب کرد؟
بله. اگر VPS دارای سیستمعامل و منابع سازگار باشد، میتوانید n8n را با Docker اجرا کنید.
آیا برای نصب n8n روی سرور خارجی به دامنه نیاز داریم؟
برای اجرای اولیه خیر؛ اما برای دسترسی عمومی و استفاده از Webhook بهتر است دامنه و HTTPS داشته باشید.
آیا سرور خارجی دسترسی به تمام APIها را تضمین میکند؟
خیر. دسترسی به APIها به کشور سرور، سیاست سرویس مقصد، شرایط حساب کاربری و وضعیت شبکه بستگی دارد.
آیا PostgreSQL برای n8n ضروری است؟
خیر. n8n از SQLite نیز پشتیبانی میکند، اما PostgreSQL برای بسیاری از محیطهای عملیاتی انتخاب مناسبتری است.
آیا میتوان چند نمونه n8n را روی یک VPS خارجی اجرا کرد؟
بله. میتوانید چند نمونه مستقل اجرا کنید، اما باید منابع، دیتابیسها، Volumeها، شبکهها و کلیدهای رمزنگاری آنها را بهدرستی مدیریت کنید.
آیا n8n پس از ریاستارت VPS دوباره اجرا میشود؟
اگر Docker فعال باشد و سیاست Restart مناسب تنظیم شده باشد، کانتینر میتواند پس از راهاندازی مجدد سرور دوباره اجرا شود.
آیا برای اجرای Workflowهای زمانبندیشده به Cron نیاز داریم؟
معمولاً خیر. n8n دارای Triggerهای زمانبندی داخلی است.
آیا میتوان بعداً n8n را از سرور ایران به خارج منتقل کرد؟
بله. با تهیه بکاپ سازگار از دیتابیس، فایلهای تنظیمات، کلید رمزنگاری و Volumeهای موردنیاز میتوانید برای مهاجرت برنامهریزی کنید. پس از انتقال نیز باید دامنه، Webhookها و اتصال سرویسهای خارجی را آزمایش کنید.





