Language: fa
n8n روی VPS: پلتفرم اتوماسیون اختصاصی شما بدون کار دستی تکراری
درخواستی از وبسایت دریافت میشود. n8n دادهها را اعتبارسنجی میکند، موارد تکراری را بررسی میکند، یک معامله میسازد، با کمک AI پیشنویس پاسخ آماده میکند و به مدیر در Telegram اطلاع میدهد. انسان فقط زمانی وارد فرایند میشود که تصمیمی لازم باشد، نه برای جابهجایی داده بین زبانههای مرورگر.
در ادامه میبینیم n8n چگونه کار میکند و چگونه آن را با Docker Compose، PostgreSQL، HTTPS و اجرای ایزولهٔ کد روی VPS نصب کنیم.
راهاندازی n8n در هفت مرحله
برنامهٔ حداقلی راهاندازی:
- یک VPS بسازید و یک زیردامنه را به آن متصل کنید؛ برای مثال
n8n.example.com. - Docker و Docker Compose را نصب کنید.
- n8n را همراه PostgreSQL، اجراکنندهٔ وظیفهٔ خارجی و Caddy اجرا کنید.
- رابط کاربری را با HTTPS باز کنید و حساب مالک را بسازید.
- Telegram، یک CRM، ایمیل یا هر API خارجی را متصل کنید.
- مدیریت خطا و مدت نگهداری دادههای اجرا را تنظیم کنید.
- تهیهٔ نسخهٔ پشتیبان از پایگاه داده، دادهها و کلید رمزنگاری را خودکار کنید.
برای یک نصب تولیدی کوچک، شروع با 2 vCPU و 4 GB RAM منطقی است. برای آزمایش معمولاً 2 GB کافی است، اما PostgreSQL، Docker و فرایندهای همزمان خیلی زود منابع باقیمانده را مصرف میکنند.
n8n چیست و چگونه کار میکند
n8n یک پلتفرم اتوماسیون گردشکار است. گردشکار از گرهها ساخته میشود: یکی فرایند را آغاز میکند، گرههای بعدی داده را دریافت و تبدیل میکنند و گرهٔ پایانی یک عمل را انجام میدهد.
یک گردشکار ساده چنین شکلی دارد:
Webhook → data validation → CRM → Telegram → website response
یک زنجیره میتواند با webhook، زمانبندی، ایمیل، پیام یا رویدادی در یک سرویس خارجی آغاز شود. بین گرهها شرطها، حلقهها، فیلترها، انتظار و مدیریت خطا در دسترس است.
یکی از نقاط قوت n8n این است که اتوماسیون به یکپارچهسازیهای آماده محدود نمیشود. با HTTP Request میتوانید هر سرویس دارای API را فراخوانی کنید و در گرهٔ Code با JavaScript یا Python منطق سفارشی بنویسید. به همین دلیل n8n بین یک سازندهٔ سادهٔ no-code و کد سفارشی سمت سرور قرار میگیرد.
چرا n8n چیزی بیشتر از انتقال داده است
n8n زمانی مفید است که یک فرایند چند سامانه را دربر بگیرد و به تصمیم نیاز داشته باشد:
form → validation → duplicate search → AI assessment → manager approval → CRM
میتوان انسان را فقط در نقطهٔ کنترل نگه داشت. برای نمونه، AI پاسخ را آماده میکند، اما پیام تنها پس از تأیید کارمند برای مشتری ارسال میشود.
موارد استفادهٔ معمول:
- فروش و پشتیبانی: جمعآوری درخواستها، تخصیص سرنخها و ایجاد معاملات؛
- محتوا و AI: تهیهٔ پیشنویس، دستهبندی درخواستها و انتشار پس از تأیید؛
- DevOps: اعلان قطعی، webhookهای Git و بررسی API؛
- عملیات داخلی: همگامسازی صفحهگستردهها، ایمیل، تقویمها و سامانههای سازمانی.
نصب self-hosted کنترل فرایند و پایگاه داده را در اختیار شما میگذارد، اما سرویسهای خارجی را محلی نمیکند. دادهای که به Telegram، CRM یا مدل AI ابری فرستاده میشود از VPS خارج خواهد شد.
n8n Cloud یا سرور اختصاصی شما
| پارامتر | n8n Cloud | n8n روی VPS |
|---|---|---|
| راهاندازی | نیازی به تنظیم سرور نیست | دامنه، Docker و HTTPS لازم است |
| بهروزرسانیها | توسط n8n انجام میشود | توسط مالک انجام میشود |
| پایگاه داده و فایلها | در زیرساخت سرویس | روی سرور انتخابشده |
| مقیاسپذیری | مطابق طرح ابری | مستقل تنظیم میشود |
| مسئولیت | مدیریت کمتر | پشتیبانگیری، امنیت و نظارت بر عهدهٔ مالک است |
| مناسب برای | شروع سریع بدون DevOps | کنترل، سفارشیسازی و فرایندهای همیشهفعال |
Community Edition را میتوان برای فرایندهای شخصی و داخلی کسبوکار بهصورت self-hosted و رایگان روی سرور خود اجرا کرد. بااینحال n8n تحت مجوز سنتی open-source توزیع نمیشود، بلکه از fair-code Sustainable Use License استفاده میکند. این مجوز استفاده و تغییر داخلی را اجازه میدهد، اما اجازه نمیدهد n8n را صرفاً مستقر کنید، لوگوی خود را اضافه کنید و دسترسی را بهعنوان یک SaaS مستقل بفروشید. برای چنین محصولی باید شرایط مجوز جداگانه بررسی شود.
نیازمندیهای سرور n8n
بار کاری به حجم داده، همزمانی و نوع عملیات بستگی دارد. فایلها، فهرستهای طولانی، گرههای Code و گردشکارهای AI نسبت به انتقال بستههای کوچک JSON بین APIها به حافظهٔ بیشتری نیاز دارند.
| سناریو | پیکربندی شروع |
|---|---|
| آزمایش و گردشکارهای متنی شخصی | 1 vCPU، 2 GB RAM، 20 GB NVMe |
| نصب تولیدی کوچک | 2 vCPU، 4 GB RAM، 25–40 GB NVMe |
| فرایندهای همزمان، AI یا فایلها | 4 vCPU، 8 GB RAM یا بیشتر |
| چند فرایند worker در queue mode | اندازهگذاری مطابق حجم اجرا |
SQLite برای یادگیری و نصب کوچک تکنمونهای مناسب است. PostgreSQL برای محیط تولید راحتتر است: پشتیبانگیری سادهتر میشود و مهاجرت بعدی به queue mode نیز آسانتر خواهد بود.
نصب n8n روی VPS
این مثال از Ubuntu 24.04، PostgreSQL، Caddy و یک اجراکنندهٔ وظیفهٔ خارجی استفاده میکند. n8n.example.com و منطقهٔ زمانی را با مقادیر خودتان جایگزین کنید.
۱. تنظیم DNS و آمادهسازی سرور
یک رکورد DNS از نوع A بسازید که به آدرس IPv4 سرور VPS اشاره کند، سپس از طریق SSH متصل شوید:
ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curl ufw opensslDocker Engine و افزونهٔ Compose را از مخزن رسمی نصب کنید:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
cat > /etc/apt/sources.list.d/docker.sources <<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
apt update
apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
docker compose versionفقط دسترسی SSH، HTTP و HTTPS را مجاز کنید:
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enableتا وقتی از کارکرد اتصال جدید مطمئن نشدهاید، نشست SSH فعلی را نبندید.
۲. ایجاد متغیرهای محیطی
پوشه را آماده کنید:
mkdir -p /opt/n8n
cd /opt/n8nفایل .env را بسازید. دستورهای زیر برای PostgreSQL، رمزنگاری n8n و اجراکنندهٔ وظیفه، بلافاصله اسرار تصادفی جداگانه تولید میکنند:
cat > .env <<EOF
N8N_VERSION=stable
N8N_HOST=n8n.example.com
GENERIC_TIMEZONE=Europe/Berlin
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=$(openssl rand -hex 32)
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
RUNNERS_AUTH_TOKEN=$(openssl rand -hex 32)
EOF
chmod 600 .envبرچسب stable برای اولین راهاندازی راحت است. پس از بررسی نصب، بهتر است نسخهٔ مشخصی از n8n را ثابت کنید تا بهروزرسانی image بعدی ناگهانی انجام نشود.
نباید N8N_ENCRYPTION_KEY را از دست بدهید. n8n از این کلید برای رمزنگاری گذرواژهها، توکنها و اعتبارنامههای ذخیرهشده استفاده میکند. اگر فقط PostgreSQL را بدون کلید بازیابی کنید، رکوردها در پایگاه داده میمانند، اما n8n نمیتواند آنها را بخواند.
۳. ایجاد فایل Docker Compose
فایل compose.yaml را ایجاد کنید:
services:
postgres:
image: postgres:18-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
PGDATA: /var/lib/postgresql/data
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
restart: unless-stopped
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_HOST: ${N8N_HOST}
N8N_PORT: "5678"
N8N_PROTOCOL: https
N8N_EDITOR_BASE_URL: https://${N8N_HOST}
N8N_WEBHOOK_URL: https://${N8N_HOST}/
N8N_PROXY_HOPS: "1"
GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
TZ: ${GENERIC_TIMEZONE}
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
N8N_BLOCK_ENV_ACCESS_IN_NODE: "true"
N8N_RUNNERS_MODE: external
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0
EXECUTIONS_DATA_PRUNE: "true"
EXECUTIONS_DATA_MAX_AGE: "168"
EXECUTIONS_DATA_PRUNE_MAX_COUNT: "10000"
volumes:
- n8n_data:/home/node/.n8n
expose:
- "5678"
depends_on:
postgres:
condition: service_healthy
n8n-runner:
image: n8nio/runners:${N8N_VERSION}
restart: unless-stopped
environment:
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_TASK_BROKER_URI: http://n8n:5679
depends_on:
- n8n
caddy:
image: caddy:2-alpine
restart: unless-stopped
environment:
N8N_HOST: ${N8N_HOST}
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
depends_on:
- n8n
volumes:
postgres_data:
name: n8n_postgres_data
n8n_data:
name: n8n_data
caddy_data:
name: n8n_caddy_data
caddy_config:
name: n8n_caddy_configاجراکنندهٔ وظیفهٔ خارجی کد را جدا از فرایند اصلی n8n اجرا میکند. این روش از حالت داخلی امنتر است و احتمال اثرگذاری خطای گرهٔ Code بر ویرایشگر و پردازش webhook را کاهش میدهد.
۴. فعالسازی HTTPS
فایل Caddyfile را بسازید:
{$N8N_HOST} {
reverse_proxy n8n:5678
}اگر DNS از قبل به VPS اشاره کند و پورتهای 80 و 443 در دسترس باشند، Caddy گواهی TLS را خودکار دریافت میکند. پورت داخلی 5678 در اینترنت منتشر نمیشود: از بیرون فقط پورتهای 80 و 443 در دسترساند و Caddy از طریق شبکهٔ Docker به n8n دسترسی دارد.
متغیرهای N8N_WEBHOOK_URL و N8N_PROXY_HOPS لازماند تا ویرایشگر آدرسهای عمومی درست برای webhook تولید کند و به سربرگهای یک reverse proxy اعتماد داشته باشد.
۵. اجرای n8n
پیکربندی نهایی را اعتبارسنجی کنید و کانتینرها را راهاندازی کنید:
docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=100 n8n caddyباز کنید:
https://n8n.example.comحساب مالک را بسازید. گذرواژهٔ آن را با همکاران به اشتراک نگذارید: برای کار تیمی حسابهای جداگانه بسازید و به هر فرد فقط دسترسی موردنیازش را بدهید.
اولین گردشکار کاربردی شما
یک آزمایش مناسب، پردازش درخواستی از یک وبسایت است:
- یک گرهٔ
Webhookبا روشPOSTاضافه کنید. - با
Edit Fieldsفقط نام، نشانی ایمیل و منبع را نگه دارید. - برای رد کردن درخواست فاقد دادههای ضروری از گرهٔ
Ifاستفاده کنید. - در CRM یک معامله بسازید یا با
HTTP Requestدرخواست بفرستید. - اعلان Telegram را اضافه کنید.
- زنجیره را با گرهٔ
Respond to Webhookتمام کنید. - پس از آزمایش، گردشکار را فعال کنید و webhook آزمایشی را با URL تولیدی جایگزین کنید.
این مثال دامنه، HTTPS، درخواستهای ورودی، اعتبارنامهها و یکپارچهسازی خارجی را فوراً بررسی میکند. سپس یک Error Workflow جدا اضافه کنید تا هنگام شکست زنجیرهٔ اصلی به شما اطلاع دهد.
ایمنسازی n8n پس از نصب
یک نمونهٔ نصبشدهٔ n8n خودکار به سامانهای قابلاعتماد تبدیل نمیشود. پس از راهاندازی مطمئن شوید که:
- ویرایشگر فقط از طریق HTTPS در دسترس است؛
.envمجوزهای600دارد و در Git قرار نمیگیرد؛- کلیدهای API خارجی حداقل مجوزهای موردنیاز را دارند؛
- هر webhook امضا یا راز منبع را بررسی میکند؛
- تاریخچهٔ اجرا بهصورت خودکار حذف میشود؛
- خطاهای گردشکارهای مهم برای مدیر ارسال میشوند.
گرههای Community بهصورت بسته نصب میشوند و ممکن است به دادههای گردشکار و سرور دسترسی پیدا کنند. گرههای ناشناس را بدون بررسی اضافه نکنید. اگر به آنها نیاز ندارید، با N8N_COMMUNITY_PACKAGES_ENABLED=false غیرفعالشان کنید.
ممیزی داخلی را اجرا کنید:
docker compose exec n8n n8n auditاین کار به شناسایی webhookهای محافظتنشده، گرههای پرخطر و مشکلات اعتبارنامه کمک میکند، اما جای بررسی دستی را نمیگیرد.
تاریخچهٔ اجرا و دادههای شخصی
n8n دادههای ورودی و خروجی را برای رفع اشکال ذخیره میکند. همراه با آنها ممکن است پیامهای ایمیل، شمارههای تلفن، اسناد و پاسخهای API نیز در پایگاه داده باقی بمانند.
در پیکربندی بالا، اجراها پس از هفت روز حذف میشوند و تعدادشان به ۱۰٬۰۰۰ محدود است. برای فرایندهای حساس مدت نگهداری را مطابق سیاست نگهداری داده انتخاب کنید و پیش از پایان گردشکار، فیلدهای غیرضروری را حذف کنید.
نسخههای پشتیبان و بهروزرسانیها
بازیابی به یک dump از PostgreSQL، volume با نام n8n_data، فایلهای پیکربندی و فایل .env حاوی N8N_ENCRYPTION_KEY نیاز دارد. پیش از کپی، پردازشگرها را متوقف کنید و PostgreSQL را روشن نگه دارید. این کار وقفهای کوتاه در اجرای گردشکار ایجاد میکند:
cd /opt/n8n
mkdir -p backup
docker compose stop n8n n8n-runner
docker compose exec -T postgres sh -c \
'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' \
| gzip > "backup/n8n-db-$(date +%F).sql.gz"
docker run --rm \
-v n8n_data:/source:ro \
-v "$PWD/backup":/backup \
alpine sh -c \
'tar -czf /backup/n8n-data-$(date +%F).tar.gz -C /source .'
tar -czf "backup/n8n-config-$(date +%F).tar.gz" \
.env compose.yaml Caddyfile
docker compose start n8n n8n-runnerآرشیوی که .env را دربر دارد حاوی اسرار است: آن را رمزنگاری کنید و خارج از VPS نگه دارید. با انجام یک بازیابی آزمایشی، نسخهٔ پشتیبان را بهصورت دورهای بررسی کنید.
پیش از بهروزرسانی نسخهٔ پشتیبان بگیرید و یادداشتهای انتشار را بخوانید:
cd /opt/n8n
docker compose pull
docker compose up -d
docker compose psاجراکنندهٔ وظیفه و کانتینر اصلی باید از یک برچسب نسخه استفاده کنند.
چه زمانی مقیاسپذیری لازم میشود
پیش از وجود بار واقعی با Redis و چند worker شروع نکنید. نگهداری یک نمونه با PostgreSQL سادهتر است و معمولاً برای فرایندهای داخلی کوچک کافی خواهد بود.
Queue mode زمانی لازم میشود که وظایف طولانی webhookها را به تأخیر بیندازند، گردشکارهای زیادی همزمان شروع شوند یا پردازش فایل مرتباً تمام حافظهٔ موجود را مصرف کند. در این ساختار نمونهٔ اصلی رویدادها را دریافت میکند، Redis کارها را توزیع میکند و workerها آنها را موازی اجرا میکنند. همهٔ اجزا باید به یک پایگاه دادهٔ PostgreSQL متصل شوند و از همان N8N_ENCRYPTION_KEY استفاده کنند.
کدام VPS را برای n8n انتخاب کنیم
برای اجرای همزمان n8n، PostgreSQL، Caddy و اجراکنندهٔ وظیفه، شروع با 2 vCPU، 4 GB RAM و دیسک NVMe منطقی است. در tropic.host، طرح Light با این پیکربندی مطابقت دارد: 2 vCPU، 4 GB RAM و 25 GB NVMe. این مقدار برای نخستین گردشکارهای تولیدی بدون پردازش سنگین فایل کافی است.
برای اسناد، مجموعهدادههای بزرگ و گردشکارهای متعدد AI که همزمان اجرا میشوند، 8 GB RAM انتخاب بهتری است. شبکهٔ پایدار نیز مهم است: webhookها، callbackهای OAuth و وظایف زمانبندیشده باید پیوسته در دسترس بمانند.
جمعبندی
n8n عملیات تکراری را به جریانهای بصری روشن تبدیل میکند: گرههای آماده راهاندازی را سریعتر میکنند، HTTP Request تقریباً هر API را متصل میکند و گرهٔ Code امکان افزودن منطق اختصاصی را میدهد.
نسخهٔ self-hosted کنترل سرور و پایگاه داده را در اختیار شما میگذارد، اما به HTTPS، کلیدهای محدود، پاکسازی تاریخچه و نسخههای پشتیبان آزمایششده نیاز دارد. N8N_ENCRYPTION_KEY را همراه PostgreSQL نگه دارید؛ بدون آن اعتبارنامههای بازیابیشده قابل رمزگشایی نیستند.
FAQ
آیا n8n رایگان است؟
بله. Community Edition را میتوان برای فرایندهای شخصی و داخلی، رایگان روی سرور خود میزبانی کرد. فروش مجدد hosted n8n بهعنوان SaaS مستقل، طبق مجوز fair-code محدود است.
آیا نصب n8n بدون دامنه ممکن است؟
برای آزمایش محلی بله. برای webhookهای عمومی و OAuth بهتر است از دامنه و HTTPS استفاده کنید.
n8n به چه مقدار RAM نیاز دارد؟
گردشکارهای شخصی ساده اغلب با 2 GB RAM اجرا میشوند. برای n8n همراه PostgreSQL، Caddy و اجراکنندهٔ وظیفه، 4 GB منطقیتر است؛ فایلها و اجراهای همزمان ممکن است به 8 GB یا بیشتر نیاز داشته باشند.
آیا همهٔ دادهها داخل VPS باقی میمانند؟
فقط دادهای که گردشکار به جای دیگری ارسال نمیکند در VPS میماند. پایگاه داده و تاریخچهٔ اجرا روی VPS ذخیره میشوند، اما گرههای Telegram، CRM یا مدل AI خارجی دادههای انتخابشده را به سرویس مربوطه میفرستند.
نسخهٔ پشتیبان n8n باید شامل چه چیزهایی باشد؟
یک dump از PostgreSQL، volume با نام n8n_data، فایلهای compose.yaml و Caddyfile و فایل .env حاوی N8N_ENCRYPTION_KEY. نسخهٔ پشتیبان را خارج از VPS و بهصورت رمزنگاریشده نگه دارید و با بازیابی آن را بررسی کنید.
