اگر قصد دارید ابزار اتوماسیون n8n را روی یک سرور داخل ایران راهاندازی کنید، احتمالاً با سوالات مختلفی مواجه شدهاید. آیا n8n روی VPS ایران اجرا میشود؟ برای نصب آن به چه منابعی نیاز داریم؟ اگر دانلود Docker Image با خطا مواجه شد چه کاری باید انجام دهیم؟ آیا اتصال n8n به سرویسهایی مانند تلگرام، OpenAI و Google Sheets از سرور ایران امکانپذیر است؟
پاسخ این سوالات به زیرساخت شبکه، تنظیمات سرور و سرویسهایی بستگی دارد که میخواهید به n8n متصل کنید.
از نظر فنی، n8n روی سرور ایران نیز مانند سایر سرورهای لینوکسی قابل اجراست. با این حال، محدودیتهای احتمالی دسترسی به مخازن نرمافزاری، APIهای خارجی و مسیرهای شبکه ممکن است مراحل نصب و استفاده از آن را تحت تأثیر قرار دهند.
در این مقاله قصد داریم نصب n8n روی سرور ایران را از صفر تا اجرا آموزش دهیم. همچنین روش شناسایی مشکلات Docker، DNS، اتصال به APIها، Webhookها و راهکارهای افزایش پایداری سرویس را بررسی خواهیم کرد.
آیا نصب n8n روی سرور ایران امکانپذیر است؟
بله. n8n یک پلتفرم اتوماسیون است که میتوانید نسخه Self-hosted آن را روی سرور لینوکسی اجرا کنید.
محل جغرافیایی سرور بهتنهایی مانع نصب n8n نمیشود. آنچه اهمیت دارد، دسترسی به وابستگیهای موردنیاز و ارتباط شبکهای مناسب است.
برای مثال، اگر یک سرور Ubuntu در ایران داشته باشید و Docker روی آن نصب باشد، میتوانید کانتینر n8n را اجرا کنید.
اما هنگام استفاده ممکن است با مشکلاتی مواجه شوید:
- دسترسی ناموفق به Docker Registry
- کندی یا قطعی دانلود Docker Image
- اختلال در DNS Resolution
- محدودیت دسترسی به برخی APIهای خارجی
- مشکل دریافت Webhook از سرویسهای بینالمللی
- تأخیر در ارتباط با سرویسهای خارج از ایران
- مشکل بهروزرسانی کانتینرها
بنابراین قبل از انتخاب سرور ایران باید بررسی کنید Workflowهای شما به چه سرویسهایی متصل خواهند شد.
مزایای نصب n8n روی سرور ایران
اجرای n8n روی سرور داخلی میتواند برای بعضی پروژهها مزایایی داشته باشد.
۱. ارتباط مناسب با سرویسهای داخلی
اگر Workflowهای شما عمدتاً با سرویسهای ایرانی کار میکنند، استفاده از سرور داخل ایران ممکن است باعث کاهش تأخیر شبکه شود.
برای مثال:
- اتصال به API فروشگاه اینترنتی ایرانی
- دریافت اطلاعات از نرمافزار حسابداری داخلی
- اتصال به سرویسهای پیامکی ایرانی
- ارتباط با دیتابیسهای مستقر در ایران
- اجرای اتوماسیون برای سامانههای سازمانی داخلی
البته سرعت واقعی ارتباط به مسیر شبکه و کیفیت سرویسدهنده بستگی دارد.
۲. امکان استفاده از زیرساخت داخلی
اگر دیتابیس یا نرمافزارهای اصلی کسبوکار شما داخل ایران میزبانی میشوند، قرار دادن n8n در همان شبکه یا دیتاسنتر میتواند معماری ارتباطی را سادهتر کند.
۳. مدیریت مستقل اطلاعات
در روش Self-hosted کنترل بیشتری روی دیتابیس، فایلها، تنظیمات و محل ذخیره اطلاعات خواهید داشت.
با این حال، برای دادههای حساس باید سیاستهای امنیتی و الزامات قانونی مرتبط را نیز بررسی کنید.
معایب و محدودیتهای سرور ایران برای n8n
در کنار مزایا، باید محدودیتهای احتمالی را نیز بشناسید.
دسترسی به APIهای خارجی
برخی APIها ممکن است از IPهای ایران قابل دسترسی نباشند یا در بعضی شرایط با خطا مواجه شوند.
برای مثال، هنگام اتصال به سرویسهای بینالمللی باید محدودیتهای دسترسی و شرایط استفاده همان سرویس را بررسی کنید.
مشکلات دریافت Docker Image
ممکن است سرور نتواند تصویر n8n یا PostgreSQL را از Registry مربوطه دریافت کند.
این مشکل میتواند ناشی از DNS، محدودیت شبکه، خطای TLS، اختلال مسیر یا محدودیت سرویس مقصد باشد.
مشکلات ارتباط دوطرفه
بعضی Workflowها فقط درخواست خروجی ارسال میکنند، اما برخی دیگر باید Webhook دریافت کنند.
ممکن است اتصال خروجی به یک سرویس موفق باشد، اما همان سرویس نتواند درخواست ورودی را به سرور ایران ارسال کند.
بنابراین باید ارتباط ورودی و خروجی را جداگانه بررسی کنید.
چه سروری برای اجرای n8n در ایران مناسب است؟
انتخاب منابع سرور به نوع استفاده شما بستگی دارد.
جدول زیر یک پیشنهاد اولیه برای برنامهریزی منابع است و حداقل رسمی 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 | متناسب با نیاز |
اگر Workflowهای شما فایلهای حجیم پردازش میکنند یا تعداد زیادی اجرای همزمان دارند، ممکن است به منابع بیشتری نیاز داشته باشید.
سیستمعامل پیشنهادی
برای این آموزش از Ubuntu 22.04 یا Ubuntu 24.04 استفاده میکنیم.
همچنین میتوانید مراحل مشابه را روی Debian اجرا کنید.
مرحله اول: اتصال به سرور ایران
پس از تهیه VPS، شرکت ارائهدهنده معمولاً اطلاعات اتصال SSH را در اختیار شما قرار میدهد.
برای مثال:
ssh root@SERVER_IP
بهجای SERVER_IP آدرس واقعی سرور را وارد کنید.
پس از ورود، نسخه سیستمعامل را بررسی کنید:
cat /etc/os-release
برای مشاهده منابع سرور:
free -h
و:
df -h
بهتر است قبل از شروع نصب مطمئن شوید فضای دیسک و حافظه کافی در اختیار دارید.
مرحله دوم: بررسی وضعیت اینترنت سرور
یکی از مهمترین مراحل نصب n8n روی سرور ایران، بررسی ارتباط شبکه است.
ابتدا وضعیت DNS را بررسی کنید:
resolvectl status
سپس اتصال HTTPS به یک مقصد عمومی را آزمایش کنید:
curl -I --connect-timeout 10 https://www.cloudflare.com
برای بررسی دسترسی به Registry رسمی n8n:
curl -I --connect-timeout 10 https://docker.n8n.io
همچنین میتوانید Docker Hub را بررسی کنید:
curl -I --connect-timeout 10 https://registry-1.docker.io/v2/
در آزمایش آخر، دریافت پاسخ 401 Unauthorized میتواند طبیعی باشد؛ زیرا Registry برای برخی درخواستها نیازمند احراز هویت است.
آنچه اهمیت دارد این است که اتصال DNS، TCP و TLS برقرار شود.
اگر درخواستها با Timeout مواجه شدند، باید مشخص کنید مشکل مربوط به DNS است یا ارتباط شبکه.
مرحله سوم: بررسی DNS سرور
برای مشاهده DNSهای فعال از دستور زیر استفاده کنید:
resolvectl status
برای بررسی Resolve شدن یک دامنه:
getent ahostsv4 docker.n8n.io
اگر آدرس IP نمایش داده نشود، احتمال وجود مشکل در DNS مطرح میشود.
برای بررسی دقیقتر میتوانید از دستور زیر استفاده کنید:
dig docker.n8n.io
اگر دستور dig نصب نیست:
sudo apt install dnsutils -y
آیا تغییر DNS مشکل نصب n8n را حل میکند؟
گاهی اوقات بله، اما همیشه خیر.
اگر مشکل ناشی از پاسخگویی DNS باشد، استفاده از DNS مناسب ممکن است آن را برطرف کند.
اما اگر مشکل مربوط به مسدود بودن مسیر شبکه، محدودیت IP یا عدم دسترسی به مقصد باشد، تغییر DNS بهتنهایی کافی نخواهد بود.
قبل از تغییر DNS باید از تنظیمات فعلی نسخه پشتیبان تهیه کنید و DNS جدید را از نظر دسترسی و قابلیت اعتماد بررسی کنید.
مرحله چهارم: نصب Docker روی Ubuntu
برای نصب n8n از Docker استفاده میکنیم.
ابتدا فهرست بستهها را بهروزرسانی کنید:
sudo apt update
سپس بستههای موردنیاز را نصب کنید:
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 را نصب کنید:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
برای بررسی نصب:
sudo docker --version
و:
sudo docker compose version
اگر نصب با خطای اتصال به مخزن مواجه شد، قبل از تغییر تنظیمات باید خطای واقعی شبکه یا APT را بررسی کنید.
مرحله پنجم: بررسی دسترسی به Docker Registry
اکنون باید مطمئن شوید Docker میتواند تصاویر موردنیاز را دریافت کند.
برای آزمایش:
sudo docker pull hello-world
سپس تصویر رسمی n8n را دریافت کنید:
sudo docker pull docker.n8n.io/n8nio/n8n:latest
و PostgreSQL:
sudo docker pull postgres:16
اگر دریافت تصاویر موفق باشد، میتوانید مراحل نصب را ادامه دهید.
اگر خطا دریافت کردید، متن خطا را بررسی کنید.
| خطا | علت احتمالی |
|---|---|
i/o timeout | اختلال یا عدم دسترسی شبکه |
no such host | مشکل DNS |
TLS handshake timeout | اختلال ارتباط TLS یا مسیر شبکه |
connection refused | رد اتصال از مقصد یا واسط شبکه |
unauthorized | مشکل احراز هویت یا مجوز Registry |
manifest unknown | نام یا Tag نامعتبر تصویر |
توجه داشته باشید که هر خطا میتواند دلایل مختلفی داشته باشد و تشخیص نهایی به بررسی لاگها نیاز دارد.
مرحله ششم: رفع مشکل Docker Pull روی سرور ایران
اگر دانلود تصاویر Docker ناموفق بود، چند راهکار وجود دارد.
راهکار اول: بررسی دقیق اتصال
ابتدا DNS را بررسی کنید:
getent ahostsv4 docker.n8n.io
سپس اتصال HTTPS را آزمایش کنید:
curl -vI --connect-timeout 10 https://docker.n8n.io
در خروجی به موارد زیر توجه کنید:
- آیا نام دامنه Resolve میشود؟
- آیا اتصال TCP برقرار میشود؟
- آیا TLS Handshake موفق است؟
- آیا سرور مقصد پاسخ HTTP ارسال میکند؟
راهکار دوم: استفاده از Proxy معتبر
اگر یک Proxy مجاز و قابل اعتماد در اختیار دارید، میتوانید Docker Daemon را برای استفاده از آن تنظیم کنید.
در نسخههای پشتیبانیشده Docker Engine میتوان تنظیمات Proxy را در فایل زیر قرار داد:
/etc/docker/daemon.json
برای مثال:
{
"proxies": {
"http-proxy": "http://proxy.example.com:3128",
"https-proxy": "http://proxy.example.com:3128",
"no-proxy": "localhost,127.0.0.1"
}
}
آدرس proxy.example.com صرفاً نمونه است و باید با Proxy واقعی جایگزین شود.
اگر فایل daemon.json از قبل وجود دارد، تنظیمات جدید را با تنظیمات قبلی ادغام کنید و محتوای موجود را بدون بررسی حذف نکنید.
قبل از راهاندازی مجدد، اعتبار تنظیمات را بررسی کنید:
sudo dockerd --validate --config-file=/etc/docker/daemon.json
سپس:
sudo systemctl restart docker
و دوباره دریافت تصویر را آزمایش کنید.
نکته مهم: Proxy مربوط به Docker Daemon برای دریافت تصاویر Docker است. این تنظیم لزوماً باعث نمیشود درخواستهای HTTP داخل Workflowهای n8n نیز از همان Proxy عبور کنند.
راهکار سوم: استفاده از Registry Mirror
اگر یک Registry Mirror معتبر و قابل اعتماد در اختیار دارید، میتوانید از آن برای دریافت تصاویر پشتیبانیشده استفاده کنید.
برای Docker Hub، نمونه ساختار تنظیمات به این شکل است:
{
"registry-mirrors": [
"https://mirror.example.com"
]
}
این آدرس فقط نمونه است.
همه Mirrorها از تمام Registryها پشتیبانی نمیکنند. بهخصوص تصویر رسمی n8n که از docker.n8n.io دریافت میشود، لزوماً از طریق Mirror مخصوص Docker Hub قابل دریافت نیست.
قبل از استفاده از Mirror، باید اعتبار ارائهدهنده، پشتیبانی از Registry موردنظر و امنیت زنجیره تأمین تصاویر را بررسی کنید.
راهکار چهارم: انتقال تصویر Docker از یک سیستم دیگر
اگر امکان دریافت تصویر روی سرور ایران وجود ندارد، میتوانید آن را روی یک سیستم قابل اعتماد دیگر دریافت کرده و به سرور منتقل کنید.
روی سیستم مبدأ:
docker pull docker.n8n.io/n8nio/n8n:latest
سپس تصویر را در فایل ذخیره کنید:
docker save -o n8n-image.tar docker.n8n.io/n8nio/n8n:latest
فایل را به سرور مقصد منتقل کنید:
scp n8n-image.tar root@SERVER_IP:/root/
روی سرور مقصد:
sudo docker load -i /root/n8n-image.tar
در پایان بررسی کنید تصویر بارگذاری شده باشد:
sudo docker images
این روش برای PostgreSQL نیز قابل استفاده است.
دقت کنید معماری پردازنده سیستم مبدأ و مقصد باید با تصویر منتقلشده سازگار باشد. بهتر است در محیط عملیاتی از نسخه ثابت و Digest معتبر استفاده کنید.
مرحله هفتم: ایجاد پوشه پروژه n8n
پس از آماده شدن Docker، یک پوشه اختصاصی ایجاد کنید:
sudo mkdir -p /opt/n8n
وارد پوشه شوید:
cd /opt/n8n
در این مسیر فایلهای تنظیمات را ایجاد میکنیم.
مرحله هشتم: تولید رمز دیتابیس و کلید رمزنگاری
ابتدا یک رمز تصادفی برای PostgreSQL تولید کنید:
openssl rand -hex 24
سپس کلید رمزنگاری n8n را تولید کنید:
openssl rand -hex 32
هر دو مقدار را در محل امن نگهداری کنید.
کلید رمزنگاری n8n برای محافظت از Credentialهای ذخیرهشده اهمیت دارد و باید در نسخههای پشتیبان امن نیز نگهداری شود.
مرحله نهم: ایجاد فایل .env
فایل تنظیمات را ایجاد کنید:
sudo nano /opt/n8n/.env
محتوای زیر را قرار دهید:
POSTGRES_DB=n8n
POSTGRES_USER=n8n_user
POSTGRES_PASSWORD=YOUR_SECURE_PASSWORD
N8N_ENCRYPTION_KEY=YOUR_SECURE_ENCRYPTION_KEY
GENERIC_TIMEZONE=Asia/Tehran
TZ=Asia/Tehran
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
مقادیر نمونه را با رمزها و کلید واقعی جایگزین کنید.
سپس مجوز دسترسی فایل را محدود کنید:
sudo chmod 600 /opt/n8n/.env
مرحله دهم: ایجاد فایل Docker Compose
اکنون فایل Compose را ایجاد کنید:
sudo 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}
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 برای نگهداری اطلاعات
- n8n برای اجرای Workflowها
پورت PostgreSQL به اینترنت منتشر نشده است.
همچنین پورت n8n فقط روی 127.0.0.1 سرور در دسترس خواهد بود.
این ساختار برای اتصال بعدی به Reverse Proxy مناسب است.
نکته: در محیط عملیاتی بهتر است بهجای latest از یک نسخه مشخص و آزمایششده n8n استفاده کنید.
مرحله یازدهم: اجرای 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 از قبل دریافت شدهاند و نمیخواهید Compose برای دریافت تصویر جدید تلاش کند، میتوانید از گزینه زیر استفاده کنید:
sudo docker compose up -d --pull never
این گزینه زمانی مفید است که تصاویر موردنیاز قبلاً بهصورت محلی در 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"'
اگر دیتابیس آماده باشد، پیام مناسب نمایش داده میشود.
دسترسی موقت به پنل
چون پورت n8n فقط روی localhost باز است، میتوانید از SSH Tunnel استفاده کنید.
روی کامپیوتر شخصی خود اجرا کنید:
ssh -L 5678:127.0.0.1:5678 root@SERVER_IP
سپس در مرورگر باز کنید:
http://localhost:5678
اکنون میتوانید حساب مالک اولیه n8n را ایجاد کنید.
مرحله سیزدهم: اتصال دامنه به n8n
برای استفاده دائمی بهتر است یک زیردامنه اختصاصی تنظیم کنید.
برای مثال:
n8n.example.com
در پنل DNS دامنه یک رکورد A ایجاد کنید که به IP سرور ایران اشاره کند.
سپس یک Reverse Proxy مانند Nginx، Caddy یا Traefik راهاندازی کنید.
در این معماری درخواستها به شکل زیر منتقل میشوند:
User / External Service
|
v
HTTPS :443
|
v
Reverse Proxy
|
v
n8n :5678
|
v
PostgreSQL
برای راهاندازی HTTPS میتوانید از Let's Encrypt استفاده کنید.
پس از آماده شدن دامنه و Reverse Proxy، متغیرهای زیر را نیز به تنظیمات n8n اضافه کنید:
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
این متغیرها باید در بخش environment سرویس n8n نیز تعریف شوند.
مقدار N8N_PROXY_HOPS=1 برای ساختاری مناسب است که یک Reverse Proxy قابل اعتماد در مسیر قرار دارد.
همچنین Reverse Proxy باید هدرهای لازم مانند X-Forwarded-For و X-Forwarded-Proto را بهدرستی تنظیم کند.
مرحله چهاردهم: بررسی اتصال n8n به APIهای خارجی
یکی از مهمترین موضوعات در سرورهای ایران، بررسی دسترسی به سرویسهای خارجی است.
برای مثال، ممکن است بخواهید از n8n برای اتصال به موارد زیر استفاده کنید:
- Telegram Bot API
- Google Sheets API
- OpenAI API
- سرویسهای ایمیل
- APIهای پرداخت
- سرویسهای خارجی فروشگاهی
قبل از ساخت Workflow باید بررسی کنید که سرور شما به Endpoint موردنظر دسترسی دارد یا خیر.
آزمایش اتصال با curl
برای نمونه:
curl -I --connect-timeout 10 https://api.telegram.org
یا:
curl -I --connect-timeout 10 https://api.openai.com
دریافت پاسخ HTTP مانند 401، 403 یا 404 لزوماً به معنی مشکل شبکه نیست؛ ممکن است سرور مقصد به درخواست بدون احراز هویت یا مسیر نامعتبر پاسخ داده باشد.
برای بررسی دقیقتر باید یک درخواست معتبر و مجاز به Endpoint موردنظر ارسال کنید.
بررسی اتصال از داخل کانتینر
ممکن است اتصال از خود سرور برقرار باشد، اما داخل کانتینر مشکل وجود داشته باشد.
برای آزمایش DNS داخل کانتینر:
sudo docker compose exec n8n node -e \
"require('dns').lookup('api.telegram.org',(e,a)=>console.log(e||a))"
برای آزمایش HTTPS از داخل کانتینر:
sudo docker compose exec n8n node -e \
"fetch('https://api.telegram.org').then(r=>console.log(r.status)).catch(e=>console.error(e.message))"
این تستها به شما کمک میکنند مشکل را بین شبکه میزبان و شبکه کانتینر تفکیک کنید.
مرحله پانزدهم: آیا میتوان برای APIهای خارجی از Proxy استفاده کرد؟
در بعضی زیرساختها، استفاده از یک Proxy سازمانی یا Gateway خروجی معتبر میتواند برای مدیریت ارتباط با سرویسهای خارجی مفید باشد.
اما باید بین دو موضوع تفاوت قائل شوید:
Proxy برای Docker Daemon: برای دریافت تصاویر Docker استفاده میشود.
Proxy برای درخواستهای n8n: برای ارتباط خروجی Workflowها و سرویسهای داخل کانتینر کاربرد دارد.
این دو لزوماً تنظیمات یکسانی ندارند.
همچنین همه Nodeهای n8n الزاماً از تنظیمات Proxy به یک شکل پشتیبانی نمیکنند.
اگر قرار است از Proxy استفاده کنید، باید موارد زیر را بررسی کنید:
- پشتیبانی Node یا کتابخانه مربوطه از Proxy
- نوع Proxy و پروتکل پشتیبانیشده
- تنظیمات احراز هویت
- محافظت از رمزهای Proxy
- محدودیتهای سرویس مقصد
- جلوگیری از عبور ناخواسته ارتباطات داخلی از Proxy
برای ارتباطات داخلی مانند PostgreSQL نیز باید مسیرهای مستقیم و امن حفظ شوند.
مرحله شانزدهم: مشکلات Webhook در سرور ایران
Webhook یکی از قابلیتهای مهم n8n است.
برای مثال، ممکن است بخواهید یک سرویس خارجی پس از وقوع رویدادی، درخواست HTTP به n8n ارسال کند.
اما در سرور ایران باید علاوه بر ارتباط خروجی، ارتباط ورودی را نیز آزمایش کنید.
چرا Webhook ممکن است کار نکند؟
چند علت احتمالی وجود دارد:
- دامنه به IP اشتباه اشاره میکند.
- پورت 443 بسته است.
- گواهی SSL معتبر نیست.
- Reverse Proxy به n8n متصل نمیشود.
- متغیر
WEBHOOK_URLاشتباه تنظیم شده است. - Workflow فعال نیست.
- سرویس خارجی نمیتواند به IP سرور ایران متصل شود.
بررسی آدرس Webhook
در n8n یک Workflow جدید ایجاد کنید و Webhook Node را اضافه کنید.
سپس آدرس Test Webhook را مشاهده کنید.
برای مثال:
https://n8n.example.com/webhook-test/test
این آدرس فقط زمانی برای تست قابل استفاده است که n8n در حالت انتظار برای درخواست آزمایشی باشد.
برای استفاده عملیاتی باید Workflow فعال یا منتشر شده باشد و از Production Webhook استفاده کنید.
بررسی ارتباط از خارج سرور
بهتر است Webhook را از یک شبکه خارجی مستقل نیز آزمایش کنید.
برای مثال، یک درخواست HTTPS از سروری خارج از ایران ارسال کنید.
اگر درخواست از شبکه داخلی موفق باشد اما از شبکه خارجی ناموفق باشد، باید مسیر شبکه، فایروال، DNS و محدودیتهای احتمالی ارتباط ورودی را بررسی کنید.
مرحله هفدهم: تنظیم DNS برای کانتینرهای Docker
گاهی اوقات DNS روی سرور بهدرستی کار میکند، اما کانتینرها نمیتوانند دامنهها را Resolve کنند.
ابتدا تنظیمات DNS میزبان را بررسی کنید:
resolvectl status
سپس DNS داخل کانتینر را آزمایش کنید:
sudo docker compose exec n8n node -e \
"require('dns').lookup('example.com',(e,a)=>console.log(e||a))"
اگر مشکل فقط داخل کانتینر وجود داشت، تنظیمات شبکه Docker را بررسی کنید.
در صورت نیاز میتوانید DNS معتبر و قابل دسترس را در فایل زیر تنظیم کنید:
/etc/docker/daemon.json
نمونه ساختار:
{
"dns": [
"DNS_SERVER_1",
"DNS_SERVER_2"
]
}
مقادیر نمونه باید با IP واقعی DNSهای قابل اعتماد جایگزین شوند.
قبل از تغییر فایل، از تنظیمات موجود بکاپ تهیه کنید.
همچنین توجه داشته باشید که تغییر DNS سراسری Docker میتواند روی سایر کانتینرهای سرور نیز اثر بگذارد.
پس از اعمال تنظیمات، لازم است Docker و در صورت نیاز کانتینرها را مجدداً راهاندازی کنید.
مرحله هجدهم: نکات امنیتی n8n روی سرور ایران
امنیت n8n به محل جغرافیایی سرور محدود نمیشود.
برای محافظت از اطلاعات و Workflowها باید چند اقدام مهم انجام دهید.
محدودسازی پورتها
پورت PostgreSQL را در اینترنت منتشر نکنید.
همچنین بهتر است n8n پشت Reverse Proxy قرار بگیرد.
استفاده از HTTPS
برای دسترسی عمومی به پنل از HTTPS استفاده کنید.
محافظت از فایل .env
فایل .env شامل اطلاعات حساسی مانند رمز دیتابیس و کلید رمزنگاری است.
این فایل را در مخازن عمومی Git قرار ندهید.
محدودسازی دسترسی SSH
از کلید SSH استفاده کنید و ورود مستقیم root را پس از آمادهسازی یک حساب مدیریتی امن محدود کنید.
کنترل Nodeهای شخص ثالث
Community Nodeهای ناشناس ممکن است خطرات امنیتی ایجاد کنند.
قبل از نصب آنها، منبع و سطح دسترسی موردنیاز را بررسی کنید.
مانیتورینگ منابع
مصرف RAM و CPU را بررسی کنید:
sudo docker stats
برای مشاهده فضای دیسک:
df -h
همچنین باید رشد اطلاعات Executionها و دیتابیس را کنترل کنید.
مرحله نوزدهم: بکاپ گرفتن از 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
این دستور از دیتابیس PostgreSQL خروجی تهیه میکند.
برای بررسی فایل:
sudo ls -lh /var/backups/n8n/database.dump
وجود فایل بهتنهایی به معنی سالم بودن بکاپ نیست؛ بهتر است بازیابی آن را نیز آزمایش کنید.
بکاپ فایلهای تنظیمات
فایلهای زیر را نیز در محل امن نگهداری کنید:
/opt/n8n/.env
/opt/n8n/compose.yaml
همچنین باید از Volume مربوط به n8n نسخه پشتیبان تهیه کنید.
برای محیط عملیاتی بهتر است بکاپها در فضای ذخیرهسازی مستقل از سرور اصلی نگهداری شوند.
مرحله بیستم: راهکارهای افزایش پایداری n8n در ایران
برای افزایش پایداری سرویس چند اقدام مهم پیشنهاد میشود.
استفاده از نسخه ثابت n8n
بهجای استفاده دائمی از latest، نسخه مشخص و آزمایششده را در Compose ثبت





