اگر میخواهید n8n را روی سرور خود اجرا کنید و کنترل کاملی روی تنظیمات، دیتابیس، اطلاعات و نحوه اجرای آن داشته باشید، استفاده از Docker Compose یکی از بهترین روشهای راهاندازی این ابزار است.
با Docker Compose میتوانید n8n و سرویسهای وابسته مانند PostgreSQL را در یک فایل تعریف کنید، آنها را به یکدیگر متصل کنید و با چند دستور ساده مدیریت کنید.
در این مقاله قصد داریم نصب n8n با Docker Compose را بهصورت کاملاً عملی آموزش دهیم. از ساخت پوشه پروژه و فایل تنظیمات شروع میکنیم، سپس PostgreSQL را به n8n متصل میکنیم و در نهایت نحوه اجرا، مدیریت، بکاپ و بهروزرسانی سرویسها را بررسی خواهیم کرد.
این آموزش برای سرورهای لینوکسی مانند Ubuntu و Debian مناسب است. همچنین میتوانید با تغییرات جزئی از آن روی سیستم شخصی خود استفاده کنید.
Docker Compose چیست و چه کاربردی دارد؟
Docker Compose ابزاری برای تعریف و مدیریت برنامههایی است که از یک یا چند کانتینر Docker تشکیل شدهاند.
فرض کنید میخواهید n8n را روی سرور اجرا کنید. در یک ساختار ساده ممکن است فقط به یک کانتینر n8n نیاز داشته باشید، اما در پروژههای جدیتر معمولاً سرویسهای دیگری نیز وجود دارند.
برای مثال:
- کانتینر n8n برای اجرای Workflowها
- کانتینر PostgreSQL برای نگهداری اطلاعات
- یک Reverse Proxy برای مدیریت دامنه و HTTPS
- در معماری Queue Mode، سرویس Redis و کانتینرهای Worker
بدون Docker Compose باید این سرویسها را جداگانه ایجاد و مدیریت کنید.
اما با Docker Compose میتوانید تمام تنظیمات را در یک فایل YAML قرار دهید.
برای مثال:
services:
app:
image: nginx:alpine
این فایل یک سرویس ساده Nginx را تعریف میکند.
با اجرای دستور زیر Docker Compose سرویس را ایجاد و اجرا میکند:
docker compose up -d
در ادامه همین روش را برای اجرای n8n و PostgreSQL استفاده خواهیم کرد.
چرا برای نصب n8n از Docker Compose استفاده کنیم؟
استفاده از Docker Compose چند مزیت مهم دارد.
مدیریت ساده سرویسها
میتوانید تمام کانتینرهای مربوط به یک پروژه را با یک دستور اجرا یا متوقف کنید.
نگهداری تنظیمات در فایل
تمام تنظیمات اصلی مانند تصویر Docker، شبکه، Volumeها و متغیرهای محیطی در فایل Compose قرار میگیرند.
این موضوع باعث میشود مدیریت و انتقال پروژه آسانتر شود.
اتصال ساده به PostgreSQL
میتوانید PostgreSQL و n8n را در یک شبکه داخلی قرار دهید تا بدون نیاز به انتشار پورت دیتابیس در اینترنت با یکدیگر ارتباط برقرار کنند.
پشتیبانی از Volumeهای پایدار
اطلاعات n8n و PostgreSQL در Volumeهای Docker نگهداری میشوند.
در نتیجه، حذف و ایجاد مجدد کانتینرها لزوماً باعث حذف اطلاعات نخواهد شد.
مناسب برای توسعه زیرساخت
در آینده میتوانید سرویسهایی مانند Redis، Reverse Proxy یا ابزارهای مانیتورینگ را به ساختار خود اضافه کنید.
پیشنیازهای نصب n8n با Docker Compose
قبل از شروع باید چند مورد آماده باشند.
سیستمعامل
در این آموزش فرض میکنیم از یکی از سیستمعاملهای زیر استفاده میکنید:
- Ubuntu 22.04
- Ubuntu 24.04
- Debian 12 یا نسخه پشتیبانیشده جدیدتر
Docker و Docker Compose
ابتدا مطمئن شوید Docker نصب شده است:
docker --version
سپس نسخه Docker Compose را بررسی کنید:
docker compose version
اگر هر دو دستور اطلاعات نسخه را نمایش دهند، میتوانید مراحل بعدی را دنبال کنید.
در این آموزش دستورات Docker را با sudo اجرا میکنیم. اگر کاربر شما مجوز اجرای Docker را دارد، میتوانید sudo را حذف کنید.
منابع سرور
منابع موردنیاز به تعداد Workflowها و حجم پردازش بستگی دارد.
برای یک نمونه کوچک، منابع محدود ممکن است کافی باشند، اما برای محیط عملیاتی بهتر است مصرف RAM، CPU و فضای ذخیرهسازی را بررسی کنید.
بهخصوص اگر از PostgreSQL، پردازشهای سنگین یا تعداد زیادی اجرای همزمان استفاده میکنید، باید منابع بیشتری در نظر بگیرید.
مرحله اول: ایجاد پوشه پروژه
ابتدا به سرور متصل شوید.
سپس پوشهای برای پروژه ایجاد کنید:
sudo mkdir -p /opt/n8n
مالکیت پوشه را به کاربر فعلی اختصاص دهید:
sudo chown -R "$USER:$USER" /opt/n8n
اکنون وارد پوشه شوید:
cd /opt/n8n
تمام فایلهای تنظیمات پروژه را در همین مسیر ایجاد خواهیم کرد.
ساختار نهایی به این شکل خواهد بود:
/opt/n8n/
├── .env
└── compose.yaml
مرحله دوم: تولید رمزهای امن
برای راهاندازی n8n با PostgreSQL به دو مقدار حساس نیاز داریم:
- رمز عبور دیتابیس PostgreSQL
- کلید رمزنگاری اطلاعات n8n
برای تولید رمز تصادفی PostgreSQL دستور زیر را اجرا کنید:
openssl rand -hex 24
خروجی این دستور را در محل امنی نگهداری کنید.
سپس برای تولید کلید رمزنگاری n8n اجرا کنید:
openssl rand -hex 32
کلید دوم برای رمزنگاری اطلاعات حساس و Credentialهای n8n استفاده میشود.
نکته امنیتی: کلید N8N_ENCRYPTION_KEY را پس از راهاندازی بدون فرایند مناسب تغییر ندهید. در صورت از دست رفتن این کلید ممکن است اطلاعات اعتبارنامههای ذخیرهشده دیگر قابل رمزگشایی نباشند.
مرحله سوم: ساخت فایل .env
فایل .env برای نگهداری متغیرهای محیطی استفاده میشود.
داخل پوشه پروژه دستور زیر را اجرا کنید:
nano .env
محتوای زیر را در فایل قرار دهید:
POSTGRES_DB=n8n
POSTGRES_USER=n8n_user
POSTGRES_PASSWORD=REPLACE_WITH_SECURE_PASSWORD
N8N_ENCRYPTION_KEY=REPLACE_WITH_SECURE_ENCRYPTION_KEY
GENERIC_TIMEZONE=Asia/Tehran
TZ=Asia/Tehran
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
N8N_DIAGNOSTICS_ENABLED=false
بهجای مقادیر نمونه، رمز عبور و کلید تولیدشده در مرحله قبل را وارد کنید.
توضیح متغیرها:
| متغیر | کاربرد |
|---|---|
| POSTGRES_DB | نام دیتابیس |
| POSTGRES_USER | نام کاربری PostgreSQL |
| POSTGRES_PASSWORD | رمز عبور دیتابیس |
| N8N_ENCRYPTION_KEY | کلید رمزنگاری Credentialها |
| GENERIC_TIMEZONE | منطقه زمانی Workflowها |
| TZ | منطقه زمانی محیط کانتینر |
| N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS | بررسی و اعمال مجوزهای فایل تنظیمات n8n |
| N8N_DIAGNOSTICS_ENABLED | کنترل ارسال دادههای تشخیصی |
پس از ذخیره فایل، مجوز دسترسی آن را محدود کنید:
chmod 600 .env
فایل .env نباید در مخازن عمومی Git قرار بگیرد.
مرحله چهارم: ساخت فایل 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}
GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
TZ: ${TZ}
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: ${N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS}
N8N_DIAGNOSTICS_ENABLED: ${N8N_DIAGNOSTICS_ENABLED}
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
این فایل یک نمونه n8n و یک دیتابیس PostgreSQL ایجاد میکند.
توجه: این تنظیمات برای یک نصب جدید و مستقل طراحی شدهاند. اگر از قبل یک نمونه n8n فعال دارید، نباید بدون برنامه مهاجرت دیتابیس و بکاپ، فایل Compose فعلی آن را با این نمونه جایگزین کنید.
همچنین در محیط عملیاتی بهتر است بهجای latest، نسخه مشخص و آزمایششده n8n را انتخاب کنید.
مرحله پنجم: بررسی ساختار فایل Compose
قبل از اجرای سرویسها، بهتر است قسمتهای مختلف فایل را بشناسیم.
سرویس PostgreSQL
بخش زیر دیتابیس را تعریف میکند:
postgres:
image: postgres:16
در این مثال از PostgreSQL نسخه 16 استفاده کردهایم.
اطلاعات اتصال از فایل .env دریافت میشوند.
Volume مربوط به PostgreSQL
این قسمت برای نگهداری دائمی اطلاعات دیتابیس است:
volumes:
- postgres_data:/var/lib/postgresql/data
اطلاعات دیتابیس داخل Volume نگهداری میشوند و با ایجاد مجدد کانتینر، تا زمانی که Volume حذف نشده باشد، باقی میمانند.
Health Check دیتابیس
در فایل Compose از pg_isready برای بررسی آماده بودن PostgreSQL استفاده کردیم.
این بررسی به Docker Compose کمک میکند اجرای n8n را تا زمان آماده شدن سرویس دیتابیس به تعویق بیندازد.
البته آماده بودن PostgreSQL بهتنهایی تضمین نمیکند که تمام تنظیمات اتصال n8n صحیح هستند.
اتصال n8n به PostgreSQL
مهمترین متغیرهای اتصال عبارتاند از:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
مقدار postgres نام سرویس دیتابیس در فایل Compose است.
Docker Compose امکان شناسایی سرویسها از طریق نام آنها در شبکه داخلی را فراهم میکند.
بنابراین نیازی نیست برای اتصال n8n به دیتابیس از IP عمومی سرور استفاده کنید.
Volume مربوط به n8n
این قسمت اطلاعات پایدار n8n را نگهداری میکند:
volumes:
- n8n_data:/home/node/.n8n
حتی هنگام استفاده از PostgreSQL نیز باید این Volume را حفظ کنید؛ زیرا ممکن است اطلاعات و فایلهای مهمی خارج از دیتابیس در آن نگهداری شوند.
تنظیم پورت n8n
در فایل Compose از این تنظیم استفاده کردهایم:
ports:
- "127.0.0.1:5678:5678"
این تنظیم باعث میشود پورت n8n فقط از داخل خود سرور قابل دسترسی باشد.
بنابراین پورت 5678 مستقیماً در اینترنت منتشر نمیشود.
برای دسترسی عمومی باید در ادامه یک Reverse Proxy و HTTPS تنظیم کنید.
مرحله ششم: اعتبارسنجی فایل Docker Compose
قبل از اجرای کانتینرها، بهتر است ساختار فایل Compose را بررسی کنید.
دستور زیر را اجرا کنید:
sudo docker compose config --quiet
اگر فایل معتبر باشد، معمولاً خروجی خاصی نمایش داده نمیشود.
اگر مشکلی در ساختار YAML یا متغیرهای محیطی وجود داشته باشد، Docker Compose پیام خطا نمایش میدهد.
این مرحله به شما کمک میکند قبل از اجرای سرویسها مشکلات اولیه را شناسایی کنید.
مرحله هفتم: اجرای n8n و PostgreSQL
اکنون میتوانیم سرویسها را اجرا کنیم.
داخل پوشه پروژه دستور زیر را اجرا کنید:
sudo docker compose up -d
Docker تصاویر موردنیاز را دریافت میکند و کانتینرهای PostgreSQL و n8n را ایجاد خواهد کرد.
برای مشاهده وضعیت سرویسها اجرا کنید:
sudo docker compose ps
در صورت اجرای صحیح باید دو سرویس را مشاهده کنید:
- postgres
- n8n
برای بررسی لاگها نیز میتوانید اجرا کنید:
sudo docker compose logs -f
اگر فقط میخواهید لاگ n8n را مشاهده کنید:
sudo docker compose logs -f n8n
برای خروج از نمایش زنده لاگها، Ctrl + C را فشار دهید.
مرحله هشتم: بررسی اتصال PostgreSQL
برای اطمینان از اینکه PostgreSQL بهدرستی اجرا شده است، دستور زیر را وارد کنید:
sudo docker compose exec postgres sh -c 'pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB"'
اگر دیتابیس آماده پذیرش اتصال باشد، پیام مناسبی نمایش داده میشود.
سپس لاگ n8n را بررسی کنید:
sudo docker compose logs --tail=100 n8n
اگر اطلاعات اتصال صحیح باشند، n8n باید بتواند دیتابیس خود را آماده کند و مراحل راهاندازی را ادامه دهد.
در اولین اجرای n8n ممکن است فرایند Migration دیتابیس انجام شود.
به همین دلیل اولین راهاندازی گاهی بیشتر از اجراهای بعدی زمان میبرد.
مرحله نهم: ورود به پنل n8n
در این آموزش پورت n8n فقط روی localhost سرور باز شده است.
برای دسترسی موقت و امن از کامپیوتر شخصی، میتوانید از SSH Tunnel استفاده کنید.
روی کامپیوتر خود دستور زیر را اجرا کنید:
ssh -L 5678:127.0.0.1:5678 username@SERVER_IP
بهجای username و SERVER_IP اطلاعات سرور را قرار دهید.
پس از اتصال، مرورگر خود را باز کنید و آدرس زیر را وارد کنید:
http://localhost:5678
در اولین ورود، صفحه ساخت حساب مالک اولیه نمایش داده میشود.
اطلاعات حساب را وارد کنید و وارد محیط مدیریت n8n شوید.
برای دسترسی دائمی از طریق دامنه باید تنظیمات Reverse Proxy، SSL و آدرس Webhookها را نیز انجام دهید.
مرحله دهم: مدیریت سرویسها با Docker Compose
یکی از مهمترین مزایای Docker Compose مدیریت ساده کانتینرهاست.
در ادامه دستورات کاربردی را بررسی میکنیم.
مشاهده وضعیت سرویسها
sudo docker compose ps
مشاهده تمام کانتینرهای پروژه
sudo docker compose ps -a
راهاندازی مجدد n8n
sudo docker compose restart n8n
راهاندازی مجدد PostgreSQL
sudo docker compose restart postgres
توجه کنید که راهاندازی مجدد دیتابیس میتواند اجرای Workflowهای فعال را مختل کند.
متوقف کردن سرویسها
sudo docker compose stop
اجرای مجدد سرویسهای متوقفشده
sudo docker compose start
حذف کانتینرها بدون حذف Volumeها
sudo docker compose down
این دستور کانتینرها و شبکه پیشفرض پروژه را حذف میکند، اما Volumeهای نامگذاریشده را بهصورت پیشفرض حذف نمیکند.
مشاهده مصرف منابع
sudo docker stats
با این دستور میتوانید مصرف CPU و RAM کانتینرها را مشاهده کنید.
مرحله یازدهم: اتصال دامنه به n8n
اگر قصد دارید از n8n برای اجرای Workflowهای واقعی و دریافت Webhook از سرویسهای خارجی استفاده کنید، بهتر است یک دامنه اختصاصی برای آن تنظیم کنید.
برای مثال:
n8n.example.com
معمولاً ساختار ارتباط به شکل زیر خواهد بود:
Internet
|
v
HTTPS Reverse Proxy
|
v
n8n:5678
|
v
PostgreSQL
در این معماری، Reverse Proxy درخواستهای HTTPS را دریافت میکند و آنها را به سرویس n8n ارسال میکند.
پس از راهاندازی Reverse Proxy باید متغیرهای مرتبط با آدرس عمومی را نیز متناسب با محیط خود تنظیم کنید.
برای مثال:
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
در این مثال مقدار N8N_PROXY_HOPS برای ساختاری در نظر گرفته شده که یک Reverse Proxy قابل اعتماد جلوی n8n قرار دارد. اگر تعداد Proxyها متفاوت باشد، باید تنظیمات را متناسب با معماری واقعی بررسی کنید.
این مقادیر باید در بخش environment سرویس n8n نیز تعریف شوند تا به کانتینر منتقل شوند.
نکته: صرفاً اضافه کردن این متغیرها باعث فعال شدن HTTPS نمیشود. باید Reverse Proxy، گواهی SSL، DNS و مسیر ارتباطی نیز بهدرستی پیکربندی شده باشند.
مرحله دوازدهم: بکاپ گرفتن از n8n و PostgreSQL
یکی از مهمترین اقدامات پس از راهاندازی n8n، تهیه نسخه پشتیبان است.
در این معماری باید حداقل از سه بخش محافظت کنید:
- دیتابیس PostgreSQL
- Volume اطلاعات n8n
- فایلهای تنظیمات و کلید رمزنگاری
بکاپ گرفتن از PostgreSQL
ابتدا یک پوشه برای بکاپ ایجاد کنید:
mkdir -p /opt/n8n/backups
سپس از دیتابیس خروجی بگیرید:
sudo docker compose exec -T postgres sh -c \
'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" -Fc' \
> /opt/n8n/backups/n8n_database.dump
این دستور یک بکاپ با فرمت Custom از PostgreSQL ایجاد میکند.
برای بررسی فایل خروجی:
ls -lh /opt/n8n/backups/n8n_database.dump
وجود فایل بهتنهایی تضمینکننده سالم بودن بکاپ نیست. بهتر است بازیابی آن را نیز در یک محیط آزمایشی بررسی کنید.
بکاپ گرفتن از فایل تنظیمات
برای محافظت از فایل .env میتوانید یک کپی امن از آن تهیه کنید:
cp /opt/n8n/.env /opt/n8n/backups/env.backup
سپس مجوز دسترسی فایل بکاپ را محدود کنید:
chmod 600 /opt/n8n/backups/env.backup
بکاپ گرفتن از Volume مربوط به n8n
برای بکاپ سازگار از Volume، بهتر است ابتدا سرویس n8n را متوقف کنید:
sudo docker compose stop n8n
سپس نام واقعی Volume را مشاهده کنید:
sudo docker volume ls
نام Volume معمولاً شامل نام پروژه و عبارت n8n_data است.
برای نمونه، اگر نام Volume برابر n8n_n8n_data باشد، میتوانید از دستور زیر استفاده کنید:
sudo docker run --rm \
-v n8n_n8n_data:/source:ro \
-v /opt/n8n/backups:/backup \
alpine \
tar -czf /backup/n8n_data.tar.gz -C /source .
پس از پایان بکاپ، n8n را دوباره اجرا کنید:
sudo docker compose start n8n
در محیط عملیاتی بهتر است بکاپها را به یک محل ذخیرهسازی مستقل از سرور اصلی نیز منتقل کنید.
همچنین فایل .env و بکاپ دیتابیس حاوی اطلاعات حساس هستند و باید رمزنگاری و محافظت شوند.
مرحله سیزدهم: بهروزرسانی n8n با Docker Compose
بهروزرسانی n8n باید با دقت انجام شود؛ زیرا بعضی نسخهها ممکن است تغییرات مهمی در ساختار دیتابیس، متغیرهای محیطی یا رفتار Workflowها داشته باشند.
قدم اول: تهیه بکاپ
قبل از هر بهروزرسانی، از دیتابیس، Volumeها و تنظیمات نسخه پشتیبان تهیه کنید.
قدم دوم: بررسی تغییرات نسخه
Release Notes نسخه مقصد را بررسی کنید و مطمئن شوید تغییرات ناسازگار روی Workflowهای فعلی شما تأثیر نمیگذارند.
قدم سوم: انتخاب نسخه
در محیط عملیاتی بهتر است بهجای latest، از یک نسخه مشخص استفاده کنید.
برای مثال:
image: docker.n8n.io/n8nio/n8n:VERSION
بهجای VERSION شماره نسخه واقعی و آزمایششده را وارد کنید.
قدم چهارم: دریافت تصویر جدید
sudo docker compose pull n8n
قدم پنجم: ایجاد مجدد کانتینر
sudo docker compose up -d n8n
قدم ششم: بررسی لاگها
sudo docker compose logs --tail=100 n8n
پس از بهروزرسانی باید ورود به پنل، اجرای Workflowها، اتصال Credentialها و عملکرد Webhookها را بررسی کنید.
توجه داشته باشید که بازگرداندن تصویر Docker به نسخه قبلی لزوماً برای بازگشت از Migration دیتابیس کافی نیست. در بعضی شرایط برای Rollback باید دیتابیس را نیز از بکاپ سازگار بازیابی کنید.
مرحله چهاردهم: نکات امنیتی مهم
برای راهاندازی n8n در محیط عملیاتی باید امنیت را جدی بگیرید.
انتشار ندادن پورت PostgreSQL
در فایل Compose این آموزش، برای PostgreSQL هیچ پورتی در بخش ports تعریف نکردیم.
بنابراین دیتابیس از طریق پورت منتشرشده Docker مستقیماً در دسترس اینترنت قرار نمیگیرد.
محافظت از کلید رمزنگاری
کلید N8N_ENCRYPTION_KEY باید ثابت و محرمانه باقی بماند.
این کلید را در فایلهای عمومی، مخازن Git یا لاگهای قابل مشاهده برای دیگران قرار ندهید.
محدودسازی دسترسی به پنل
برای دسترسی عمومی از HTTPS استفاده کنید و در صورت امکان دسترسی مدیریتی را از طریق VPN یا لایههای کنترل دسترسی محدود کنید.
بهروزرسانی منظم
نسخههای قدیمی ممکن است دارای مشکلات امنیتی شناختهشده باشند.
بنابراین نسخه n8n، PostgreSQL و Docker را بهصورت برنامهریزیشده بهروزرسانی کنید.
بررسی Workflowها و Nodeهای نصبشده
نصب Community Nodeهای ناشناس یا اجرای کدهای غیرقابل اعتماد میتواند خطرات امنیتی ایجاد کند.
فقط از منابع معتبر استفاده کنید و سطح دسترسی Workflowها را متناسب با نیاز تنظیم کنید.
خطاهای رایج نصب n8n با Docker Compose
خطای اتصال به PostgreSQL
اگر n8n نتواند به دیتابیس متصل شود، ابتدا وضعیت PostgreSQL را بررسی کنید:
sudo docker compose ps
سپس لاگ دیتابیس را مشاهده کنید:
sudo docker compose logs --tail=100 postgres
اطلاعات اتصال داخل فایل .env و متغیرهای محیطی سرویس n8n را بررسی کنید.
اگر Volume دیتابیس قبلاً ایجاد شده باشد، تغییر POSTGRES_USER یا POSTGRES_PASSWORD در فایل .env لزوماً کاربر یا رمز دیتابیس موجود را تغییر نمیدهد.
خطای Permission Denied
اگر با خطای دسترسی به فایلها مواجه شدید، ابتدا مجوز پوشهها و فایلهای پروژه را بررسی کنید.
از دادن مجوز عمومی مانند 777 به فایلهای حساس خودداری کنید.
خطای اشغال بودن پورت 5678
برای بررسی برنامهای که از پورت استفاده میکند:
sudo ss -lntp | grep 5678
اگر پورت اشغال باشد، باید سرویس متداخل را شناسایی کنید یا پورت سمت میزبان را تغییر دهید.
خطای YAML
برای بررسی ساختار فایل Compose:
sudo docker compose config --quiet
فایل YAML به فاصلهگذاری حساس است؛ بنابراین از Tab بهجای Space استفاده نکنید.
از دست رفتن اطلاعات پس از اجرای Docker Compose
یکی از خطرناکترین دستورات هنگام مدیریت سرویسها عبارت است از:
sudo docker compose down -v
این دستور علاوه بر حذف کانتینرها، Volumeهای نامگذاریشده تعریفشده در Compose را نیز حذف میکند.
هشدار: روی سروری که اطلاعات واقعی دارد، بدون اطمینان از بکاپ و هدف عملیات از این دستور استفاده نکنید.
آیا برای n8n به Redis نیاز داریم؟
در معماری سادهای که در این مقاله ساختیم، Redis ضروری نیست.
n8n میتواند Workflowها را در حالت معمول و بدون Queue Mode اجرا کند.
اما اگر قصد دارید پردازشها را بین چند Worker توزیع کنید یا زیرساخت خود را برای بار کاری بیشتر توسعه دهید، میتوانید از Queue Mode استفاده کنید.
در Queue Mode، Redis برای مدیریت صف وظایف استفاده میشود و Workerها اجرای Workflowها را انجام میدهند.
این معماری تنظیمات بیشتری دارد و باید با توجه به منابع سرور و تعداد اجراهای همزمان طراحی شود.
جمعبندی
در این مقاله یاد گرفتیم چگونه n8n را با Docker Compose و PostgreSQL راهاندازی کنیم.
ابتدا فایل .env را برای نگهداری تنظیمات ایجاد کردیم، سپس سرویسهای PostgreSQL و n8n را در فایل compose.yaml تعریف کردیم و با دستور docker compose up -d آنها را اجرا کردیم.
همچنین روش بررسی وضعیت سرویسها، مشاهده لاگها، اتصال به پنل، تهیه بکاپ، بهروزرسانی و رفع خطاهای رایج را بررسی کردیم.
این ساختار میتواند نقطه شروع مناسبی برای راهاندازی n8n روی سرور شخصی باشد.
برای استفاده عملیاتی، توصیه میشود تنظیمات HTTPS، Reverse Proxy، بکاپ خودکار، مانیتورینگ و سیاست بهروزرسانی را نیز تکمیل کنید.
سوالات متداول
آیا نصب n8n با Docker Compose رایگان است؟
نسخه Community Edition را میتوانید مطابق شرایط مجوز n8n بدون پرداخت اشتراک نرمافزار بهصورت Self-hosted اجرا کنید. هزینه سرور و نگهداری جداگانه است.
آیا برای نصب n8n با Docker Compose باید PostgreSQL نصب کنیم؟
خیر. n8n میتواند از SQLite نیز استفاده کند. اما PostgreSQL برای بسیاری از سناریوهای عملیاتی انتخاب مناسبتری است.
آیا PostgreSQL باید روی همان سرور n8n باشد؟
خیر. میتوانید PostgreSQL را روی سرور جداگانه یا بهصورت یک سرویس مدیریتشده اجرا کنید. در این حالت باید تنظیمات شبکه، امنیت و اتصال دیتابیس را متناسب با معماری خود انجام دهید.
آیا حذف کانتینر n8n باعث حذف Workflowها میشود؟
اگر اطلاعات در دیتابیس و Volumeهای پایدار ذخیره شده باشند، حذف و ایجاد مجدد کانتینر بهتنهایی باعث حذف Workflowها نمیشود.
اما حذف Volumeها یا دیتابیس میتواند باعث از دست رفتن اطلاعات شود.
آیا میتوان چند نمونه n8n را با Docker Compose اجرا کرد؟
بله. میتوانید چند پروژه Compose مستقل ایجاد کنید. بهتر است هر نمونه دیتابیس، تنظیمات، کلید رمزنگاری و Volumeهای مستقل داشته باشد.
آیا برای اجرای n8n باید پورت 5678 را در فایروال باز کنیم؟
اگر n8n پشت Reverse Proxy اجرا میشود، معمولاً نیازی به باز کردن مستقیم پورت 5678 برای اینترنت نیست.
تفاوت Docker و Docker Compose در نصب n8n چیست؟
Docker مسئول اجرای کانتینرهاست؛ اما Docker Compose به شما اجازه میدهد چند سرویس مرتبط، شبکهها و Volumeهای آنها را در یک فایل تعریف و مدیریت کنید.
آیا میتوان بعداً Redis را به این ساختار اضافه کرد؟
بله. میتوانید سرویس Redis و Workerهای n8n را به ساختار اضافه کنید؛ اما برای فعالسازی Queue Mode باید تنظیمات مربوط به حالت اجرا، صف، دیتابیس و Workerها را بهدرستی پیکربندی کنید.





