هر بار که دادهای را دستی از یک سرویس کپی میکنید و در سرویس دیگری میچسبانید، کاری را انجام میدهید که یک ماشین باید انجامش دهد. n8n دقیقاً برای همین ساخته شده: اتوماسیون بدون کد، اما اینبار روی سرور خودتان، با دادههایی که هیچوقت از دستتان خارج نمیشوند. در این راهنما نصب n8n روی سرور مجازی را از صفر تا اولین ورکفلوی واقعی — یک اعلان تلگرامی — قدمبهقدم جلو میرویم.
n8n چیست و چرا خودتان میزبانش باشید؟
اگر میپرسید n8n چیست، کوتاهترین پاسخ این است: جایگزین سلفهاست Zapier. یک ابزار متنباز که با آن ورکفلو میسازید — «وقتی فلان اتفاق افتاد، این کارها را به ترتیب انجام بده» — و همهچیز را با کشیدن و وصلکردن گرهها (Node) در یک رابط گرافیکی طراحی میکنید. بیش از ۴۰۰ سرویس آماده دارد: تلگرام، جیمیل، گوگلشیت، دیتابیسها، وبهوک، هوش مصنوعی و هر API دلخواهی از طریق گره HTTP Request.
اما چرا بهجای سرویسهای ابری آماده، n8n را روی سرور خودتان نصب کنید؟ سه دلیل جدی وجود دارد:
- مالکیت داده: در Zapier و مشابههایش، دادهی مشتریها و توکنهای API شما از سرورهای یک شرکت خارجی عبور میکند. در نسخهی سلفهاست، همهچیز روی دیسک خود شماست.
- بدون هزینهی پلهای: سرویسهای ابری به ازای هر «تسک» پول میگیرند؛ ورکفلویی که هر پنج دقیقه اجرا شود، ماهانه سر به فلک میکشد. روی سرور خودتان، ده اجرا و دههزار اجرا هزینهی یکسانی دارد: هزینهی همان سرور.
- دسترسی به سرویسهای داخلی: ابزار ابری خارجی به دیتابیس داخل شبکهی شما یا سرویسی که فقط از ایران در دسترس است راه ندارد. n8n نصبشده روی سرور ایران، هم به سرویسهای داخلی میرسد و هم بدون دردسر تحریم به APIهای بینالمللی.
یک نکتهی صادقانه: رابط کاربری n8n فارسی نیست و منابع آموزشی n8n فارسی هم هنوز کماند — اما خود رابط آنقدر بصری است که بعد از ساخت اولین ورکفلو، زبان دیگر مانع نیست.
نصب n8n روی سرور با Docker Compose
تمیزترین روش نصب n8n روی سرور، داکر است: نه وابستگی Node.js لازم دارید، نه نگرانی آپدیت. اگر داکر روی سرورتان نیست، اول راهنمای نصب داکر را ببینید — دو دقیقه کار است. سپس یک پوشه بسازید و فایل compose.yaml را داخلش ایجاد کنید:
services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=n8n.example.com
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.example.com/
- GENERIC_TIMEZONE=Asia/Tehran
- TZ=Asia/Tehran
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
و بالا بیاورید:
docker compose up -d
docker compose logs -f n8n
دو تصمیم مهم در همین فایل گرفتهایم: پورت ۵۶۷۸ فقط روی 127.0.0.1 باز شده تا از اینترنت مستقیم قابل دسترسی نباشد (جلوتر Nginx را جلویش میگذاریم)، و همهی دادهها — ورکفلوها، credentialها، تاریخچهی اجراها — در volume به نام n8n_data ذخیره میشوند تا با هر آپدیت کانتینر از بین نروند.
احراز هویت و متغیرهای مهم
در اولین ورود به رابط وب، n8n از شما میخواهد حساب مالک (Owner) بسازید — نسخههای جدید مدیریت کاربر داخلی دارند و متغیرهای قدیمی N8N_BASIC_AUTH_* از نسخهی ۱ حذف شدهاند؛ اگر آموزشی آنها را توصیه کرد، بدانید قدیمی است. رمز حساب مالک را قوی انتخاب کنید؛ هرکس وارد شود، به همهی توکنها و ورکفلوهایتان دسترسی دارد.
docker compose exec n8n cat /home/node/.n8n/config آن را ببینید و جایی امن یادداشت کنید — بدون این کلید، بکاپهایتان قابل بازگردانی نیستند.اتصال دامنه: Nginx و گواهی SSL
یک سابدامین مثل n8n.example.com را با رکورد A به IP سرور وصل کنید (اگر با رکوردها راحت نیستید، آموزش رکوردهای DNS را ببینید). سپس در Nginx یک reverse proxy تعریف کنید:
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 Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
}
}
دو خط Upgrade و Connection حیاتیاند: رابط n8n از WebSocket استفاده میکند و بدون آنها صفحه لود میشود ولی وضعیت اجراها زنده بهروز نمیشود. حالا گواهی رایگان بگیرید:
certbot --nginx -d n8n.example.com
اگر Nginx برایتان تازگی دارد، راهنمای راهاندازی سایت با Nginx همین مسیر را با جزئیات رفته است. بعد از SSL، فایروال را هم مرتب کنید — فقط پورتهای ۲۲، ۸۰ و ۴۴۳ باز باشند (چکلیست کامل در امنیت سرور لینوکس).
اولین اتوماسیون: اعلان تلگرام
هیچچیز به اندازهی اولین ورکفلوی کارکرده، اتوماسیون n8n را ملموس نمیکند. بیایید کلاسیکترینش را بسازیم: هر روز صبح، وضعیت دیسک سرور در تلگرامتان.
- ربات بسازید: در تلگرام به BotFather پیام بدهید، با
/newbotیک ربات بسازید و توکن را کپی کنید. یک پیام به ربات بدهید و از آدرسapi.telegram.org/bot<TOKEN>/getUpdatesعددchat_idخودتان را بردارید. - Credential تعریف کنید: در n8n از منوی Credentials، یک Telegram API جدید بسازید و توکن را بچسبانید.
- ورکفلو بسازید: گره اول Schedule Trigger با ساعت اجرا (مثلاً ۸ صبح — چون
GENERIC_TIMEZONEرا تهران گذاشتیم، ساعتها محلیاند). گره دوم Execute Command با دستورdf -h /. گره سوم Telegram → Send Message که خروجی گره قبلی را باchat_idشما میفرستد. - تست و فعالسازی: دکمهی Execute Workflow را بزنید؛ اگر پیام رسید، کلید Active را روشن کنید. تمام — از فردا صبح گزارش خودش میآید.
همین الگوی سهگرهای (تریگر ← پردازش ← اقدام) اسکلت ۹۰٪ ورکفلوهاست: فرم سایت به گوگلشیت، مانیتورینگ قیمت ارز، خلاصهسازی ایمیلها با هوش مصنوعی، بکاپ خودکار دیتابیس. اتوماسیون بدون کد یعنی همین: منطق را شما طراحی میکنید، دستوپنجهنرمکردن با APIها را n8n.
سرور چقدر قوی باشد؟
خبر خوب: n8n سبک است. برای شروع و ورکفلوهای شخصی، ۱ هسته CPU و ۱ گیگابایت RAM کافی است؛ برای استفادهی تیمی و چند ورکفلوی همزمان، ۲ گیگابایت خیالتان را راحت میکند. دیتابیس پیشفرض SQLite است که تا دهها هزار اجرا مشکلی ندارد — مخصوصاً روی دیسک NVMe که سرعت خواندن/نوشتن SQLite را چند برابر میکند. سراغ PostgreSQL فقط وقتی بروید که حجم اجراها واقعاً بالا رفت.
اگر هنوز مطمئن نیستید n8n به کارتان میآید، اینجا صورتحساب ساعتی معنا پیدا میکند: روی مهران هاست یک سرور ساعتی بسازید، نصب n8n روی سرور را با همین راهنما در نیم ساعت انجام دهید، یکیدو روز ورکفلو بسازید و اگر نپسندیدید سرور را حذف کنید — کل هزینهی آزمایش، چند هزار تومان است. (سازوکارش را در سرور ابری ساعتی چیست توضیح دادهایم.)
EXECUTIONS_DATA_PRUNE=true و EXECUTIONS_DATA_MAX_AGE=168 را به compose اضافه کنید تا اجراهای قدیمیتر از یک هفته خودکار پاک شوند و دیسک پر نشود.قدم بعدی
نصب n8n روی سرور مجازی همین بود: یک فایل compose، یک بلوک Nginx، یک گواهی SSL — و از اینجا به بعد فقط خلاقیت شماست که تعیین میکند چه کارهای تکراریای برای همیشه از زندگیتان حذف شوند. همین حالا یک سرور ساعتی بسازید و اولین ورکفلویتان را امروز فعال کنید. و چون n8n خانهی توکنها و دادههای شماست، حتماً چکلیست امنیت سرور لینوکس را هم اجرا کنید.