كل بيانات الاعتماد تفشل فجأة في فك التشفير
أُعيد إنشاء حجم البيانات وولّد n8n مفتاح تشفير جديداً. لا شيء يستعيد بيانات الاعتماد القديمة. اضبط N8N_ENCRYPTION_KEY صراحة دائماً واحتفظ بنسخة خارج الخادم.

ست خطوات من VPS نوردي عارٍ إلى n8n منتهٍ بـTLS على نطاقك الخاص — Docker Compose، وCaddy، وPostgreSQL، وwebhooks تنطلق فعلاً. عمليات تنفيذ محدودة بـCPU الخاص بك، لا بفئة خطة، على صندوق تكلفته $3.90 شهرياً. مُختبَر على Debian 12 مع n8n 2.x.
التوفير
VPS + سجل A
تثبيت
get.docker.com
Compose
n8n + Caddy + Postgres
الإقلاع الأول
حساب المالك + 2FA
Webhooks
WEBHOOK_URL
التصليب الأمني
تشذيب، تصميت، نسخ احتياطي
n8n محرك أتمتة سير عمل: لوحة بصرية تصل فيها مشغّلاً — webhook، أو جدولة، أو صف جديد في قاعدة بيانات، أو رسالة في طابور — بسلسلة من العقد تستدعي واجهات API، وتحوّل البيانات، وتتفرع حسب الشروط، وتشغّل JavaScript أو Python عشوائياً، وتسلّم النتيجة لما يأتي بعدها. مئات من عقد التكامل تُشحن في الصندوق، إضافة إلى عقدة HTTP Request عامة تغطي كل شيء آخر. منذ خط 1.x يحمل أيضاً عقد AI Agent وLLM، وهذا سبب أن حصة كبيرة ممن يثبّتونه في 2026 يبنون وكلاء لا سباكة ETL كلاسيكية.
الجزء المهم قبل أن تكتب أمراً واحداً هو الترخيص، لأن n8n ليس مفتوح المصدر بمعنى OSI والفرق ليس أكاديمياً. النواة تُشحن بموجب Sustainable Use License: منحة عالمية غير حصرية وخالية من الإتاوات لاستخدام البرنامج ونسخه وتعديله وتوزيعه لأغراض العمل الداخلية وللاستخدام الشخصي أو غير التجاري. ما يمنعه هو حق تحصيل رسوم من آخرين مقابل n8n أو مشتق منه — وهذا هو البند الذي يستبعد بناء منتج "n8n مُدار" مدفوع فوقه. بشكل منفصل، أي ملف يحمل .ee. في اسمه أو .ee في مساره مستثنى من ذلك الترخيص كلياً ويتطلب n8n Enterprise License مدفوعاً.
بوضوح: تشغيل n8n على VPS لأتمتة شركتك الخاصة، أو عمل عملائك المسلَّم كخدمة تؤديها، أو حياتك الشخصية، يقع ضمن المنحة المجانية وكان كذلك دائماً. بيع n8n كمنتج استضافة ليس كذلك. تقريباً كل نقاش "هل n8n مجاني فعلاً؟" على الإنترنت هو شخصان يتحدثان متجاوزَين بعضهما عبر ذلك الخط.
جانب التكلفة. يُسعَّر n8n Cloud بحسب عملية التنفيذ: خطة Starter بـ€20 شهرياً بفوترة سنوية مقابل 2,500 عملية تنفيذ، Pro بـ€50 شهرياً مقابل 10,000، Business بـ€667 شهرياً مقابل 40,000. في الاستضافة الذاتية، عدد عمليات التنفيذ ليس بنداً على الإطلاق — هو محدود بمقدار CPU والذاكرة التي يملكها الصندوق. سير عمل يستطلع API كل خمس دقائق يستهلك 8,640 عملية تنفيذ شهرياً وحده؛ على Cloud ذلك السير الواحد يفرض بالفعل فئة Pro، وعلى VPS بـ$3.90 هو خطأ تقريب مقابل CPU الخامل.
| خيار | شهرياً | عمليات التنفيذ المشمولة | من يديره |
|---|---|---|---|
| n8n Cloud · Starter | €20 | 2 500 | n8n GmbH |
| n8n Cloud · Pro | €50 | 10 000 | n8n GmbH |
| n8n Cloud · Business | €667 | 40 000 | n8n GmbH |
| مستضاف ذاتياً · Sentinel VPS | $3.90 | مقيّد بـCPU، لا مقنّن | أنت |
أسعار Cloud كما نُشرت على n8n.io في أغسطس 2026، بفوترة سنوية؛ الفوترة الشهرية أعلى تكلفة. المقايضة ليست مالية فقط — الاستضافة الذاتية تنقل التحديثات والنسخ الاحتياطي وتجديد TLS وزمن التشغيل إلى جانبك من الخط.
وثائق n8n الخاصة بـDocker Compose تحدد الحد الأدنى بـ2 vCPU و4 GB من RAM. هذا ليس رقماً تسويقياً: تحته ستتنازع واجهة المحرر الأمامية وسير عمل متفرع باعتدال على الذاكرة، وأول حمولة JSON كبيرة ستُخرج الحاوية بقتل نفاد الذاكرة.
Sentinel · 2 vCPU، 4 GB، 120 GB NVMe، $3.90/شهرياً. الافتراضي الصحيح. يشغّل n8n وPostgreSQL وCaddy معاً مع هامش لنسخة شخصية أو لفريق صغير تنفذ بضع مئات من العمليات يومياً. الذاكرة الخاملة تقارب 700 MB عبر الحاويات الثلاث.
Garrison · 4 vCPU، 8 GB، 240 GB NVMe، $7.90/شهرياً. الخطوة الأعلى عندما تضيف queue mode مع Redis وحاوية عامل أو حاويتين، أو عندما يحمل سير العمل عادة حمولات متعددة الميغابايت في الذاكرة، أو عندما تريد هامشاً مريحاً لسير عمل وكلاء AI الذي يتفرع إلى عدة فروع متوازية.
Ravelin · 8 vCPU، 16 GB، 480 GB NVMe، $16.90/شهرياً. نسخة لفريق بآلاف عمليات التنفيذ يومياً وعمل كثيف البيانات الثنائية — توليد PDF، معالجة الصور، تفريغ الصوت نصياً. الأنوية المخصصة مهمة هنا لأن هذه الأحمال مقيدة بـCPU لا بـAPI.
القرص هو الجزء الذي ينساه الناس. يخزّن n8n كامل الإدخال والإخراج لكل عقدة من كل عملية تنفيذ. سير عمل ثرثار يعمل كل دقيقة يكتب مئات الميغابايت أسبوعياً. الإعدادات الافتراضية تشذّب فعلاً — EXECUTIONS_DATA_PRUNE هي true، وEXECUTIONS_DATA_MAX_AGE هي 336 ساعة (أربعة عشر يوماً) وEXECUTIONS_DATA_PRUNE_MAX_COUNT هي 10 000 — لكن أربعة عشر يوماً من نسخة مزدحمة لا تزال كماً كبيراً من NVMe. الخطوة 06 تُحكم تلك القيم.
في اللوحة: Order → VPS → Sentinel، صورة Debian 12. لا يُطلب عنوان بريد إلكتروني لفتح الحساب، ولا تُطلب وثيقة هوية في أي مرحلة، وتُسدَّد الفاتورة بـMonero أو Bitcoin أو Lightning أو أي من الأصول الأخرى المدعومة. اختر الحصن حسب زمن الاستجابة إلى الخدمات التي تؤتمتها لا إليك أنت — خادم الأتمتة يتحدث إلى واجهات API أكثر بكثير مما يتحدث إليك.
ثم أنشئ سجل DNS قبل أن تلمس الخادم: سجل A لـn8n.example.com يشير إلى IPv4 الخاص بـVPS، وسجل AAAA إن كنت تستخدم IPv6. يجب فعل هذا أولاً، لأن Caddy يطلب شهادة من Let's Encrypt لحظة بدء الحزمة، وطلب شهادة لاسم لا يُحلّ يفشل — ثم يتراجع، فتقضي عشرين دقيقة تتساءل لماذا الموقع غير قابل للوصول.
أمهل DNS دقيقة لينتشر وتأكد منه من جهازك الخاص قبل المتابعة:
dig +short n8n.example.com
# → the IPv4 of your VPS, and nothing else
قبل أن يستمع أي شيء على منفذ عام، نفّذ قائمة تصليب الساعة الأولى — SSH بمفتاح فقط، جدار حماية يسمح بالمنافذ 22 و80 و443 لا غير، وتحديثات أمان غير مراقَبة. خادم الأتمتة هو خزنة بيانات اعتماد؛ يستحق الساعة كاملة.
ادخل عبر SSH وثبّت Docker Engine مع إضافة Compose v2:
apt update && apt install -y ca-certificates curl
curl -fsSL https://get.docker.com | sh
docker compose version
سكربت التسهيل يثبّت Engine وCLI وcontainerd وإضافة Compose من مستودع Docker نفسه. يجب أن يطبع السطر الأخير Docker Compose version v2 أو أعلى؛ إن طبع "docker: 'compose' is not a docker command" فأنت لديك حزمة docker.io الأقدم من التوزيعة مثبّتة وعليك إزالتها أولاً.
يوجد مثبّت n8n بسطر واحد يغلّف كل هذا، وهو يعمل. هذا الدليل يكتب ملف Compose يدوياً بدلاً من ذلك، لأن كل ما ستحتاج لاحقاً إلى تغييره — مفتاح التشفير، وقاعدة البيانات، ورابط webhook، وسياسة الاحتفاظ، وعدد العمال — يعيش في ذلك الملف، وحزمة لا تستطيع قراءتها هي حزمة لا تستطيع إصلاحها الساعة 3 فجراً.
أنشئ الدليل وولّد السرّين أولاً. ولّدهما الآن، بهذا الترتيب، والصقهما في .env أثناء ذلك — مفتاح التشفير تحديداً يجب أن يكون موجوداً قبل إقلاع n8n الأول، لا بعده.
mkdir -p /opt/n8n && cd /opt/n8n
openssl rand -hex 32 # → N8N_ENCRYPTION_KEY
openssl rand -hex 24 # → POSTGRES_PASSWORD
/opt/n8n/.env
DOMAIN=n8n.example.com
LETSENCRYPT_EMAIL=you@example.com
GENERIC_TIMEZONE=Europe/Stockholm
N8N_ENCRYPTION_KEY=paste_the_32_byte_hex_here
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=paste_the_24_byte_hex_here
أحكم قفل الملف فوراً — فهو يحمل المفتاح لكل بيانات اعتماد ستخزّنها النسخة على الإطلاق:
chmod 600 /opt/n8n/.env
/opt/n8n/docker-compose.yml
services:
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
environment:
- DOMAIN=${DOMAIN}
- LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
- N8N_HOST=${DOMAIN}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_EDITOR_BASE_URL=https://${DOMAIN}
- WEBHOOK_URL=https://${DOMAIN}/
- N8N_PROXY_HOPS=1
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_BLOCK_ENV_ACCESS_IN_NODE=true
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_VERSION_NOTIFICATIONS_ENABLED=false
- N8N_PERSONALIZATION_ENABLED=false
volumes:
- n8n_data:/home/node/.n8n
volumes:
caddy_data:
caddy_config:
pg_data:
n8n_data:
/opt/n8n/Caddyfile
{$DOMAIN} {
encode zstd gzip
tls {$LETSENCRYPT_EMAIL}
reverse_proxy n8n:5678
}
قراران تصميميان يستحقان الذكر. أولاً، لا ينشر n8n منفذاً. Caddy وحده يربط المنفذين 80 و443؛ يستمع n8n على المنفذ 5678 داخل شبكة Compose حيث لا يستطيع أي شيء خارج المضيف الوصول إليه. عدد مفاجئ من نسخ n8n المستضافة ذاتياً موجود على الإنترنت العام على المنفذ 5678 بلا TLS أمامه، ومحركات البحث عن الخدمات المكشوفة تفهرسها. ثانياً، يبقى حجم بيانات n8n مثبَّتاً رغم أن PostgreSQL يحمل الآن سير العمل — ذلك الدليل ما زال يحمل إعدادات النسخة وملفات السجل وأصول التحكم بالمصدر.
شغّله:
cd /opt/n8n
docker compose up -d
docker compose logs -f caddy # watch the certificate being issued
افتح https://n8n.example.com. الشاشة الأولى هي إعداد حساب المالك — بريد إلكتروني، كلمة مرور، اسم. لم يعد هناك متغير بيئة لمصادقة HTTP الأساسية لضبطه بعد الآن؛ إدارة المستخدمين مدمجة في n8n منذ خط 1.x، والحساب الذي تنشئه هنا هو مالك النسخة. استخدم كلمة مرور من مدير كلمات المرور الخاص بك، ثم توجّه مباشرة إلى Settings → Personal → Two-factor authentication وفعّلها. تسجيل الدخول هذا هو الباب الأمامي لكل مفتاح API ستلصقه يوماً في عقدة.
يشفّر n8n كل بيانات اعتماد مخزَّنة بـN8N_ENCRYPTION_KEY. إن لم تضبطه، يولّد n8n واحداً عند الإقلاع الأول ويكتبه داخل حجم البيانات. أعد إنشاء ذلك الحجم — بـdocker compose down -v، أو ترحيل إلى خادم جديد، أو استعادة فاشلة — وتولّد النسخة الجديدة مفتاحاً مختلفاً، وتصبح كل بيانات اعتماد في قاعدة البيانات غير قابلة لفك التشفير، ولا يوجد أي مسار استرجاع إطلاقاً. تعيد إدخال كل مفتاح API ورمز OAuth وكلمة مرور يدوياً. اضبط المفتاح صراحة، كما يفعل هذا الدليل، واحفظ نسخة خارج الخادم.
المكان الصحيح لتلك النسخة هو مدير كلمات مرور تتحكم فيه أنت أيضاً — دليل Vaultwarden المستضاف ذاتياً يغطي واحداً، والنقطة المتعمّدة هي أنه يجب ألا يعيش على نفس الصندوق مع الشيء الذي يفتحه.
تحقق أن قاعدة البيانات هي PostgreSQL فعلاً وليست البديل الاحتياطي SQLite — إن كان في متغيرات DB_ خطأ إملائي، يبدأ n8n بصمت على SQLite وتكتشف ذلك بعد ثلاثة أشهر:
docker compose exec postgres psql -U n8n -d n8n -c '\dt' | head
# → a list of n8n tables (workflow_entity, credentials_entity, execution_entity…)
ليس كل n8n يقلع ويعرض المحرر وينفذ اختباراً يدوياً هو n8n يعمل فعلاً. النصف الذي يتعطل بصمت هو webhooks الواردة، ويتعطل بطرق توحي بأن الخلل من الخدمة الخارجية.
WEBHOOK_URL. بدونه، يبني n8n روابط webhook من N8N_HOST وN8N_PORT ويعطيك شيئاً مثل http://localhost:5678/webhook/abc — الذي تلصقه بعد ذلك في Stripe أو GitHub، حيث لا يمكن الوصول إليه أبداً. ملف Compose أعلاه يضبط WEBHOOK_URL على جذر HTTPS العام، وهو ما سيعرضه المحرر وما يستطيع العالم الخارجي استدعاءه فعلياً.
N8N_EDITOR_BASE_URL. الرابط العام الذي يستخدمه n8n للروابط في الرسائل التي يرسلها — إعادة تعيين كلمة المرور، دعوات المستخدمين. الخطأ هنا يعني رابط دعوة يشير إلى localhost، وهو تذكرة دعم من زميل بدلاً من تكامل معطّل.
N8N_PROXY_HOPS. يقرأ n8n عنوان IP للعميل من X-Forwarded-For، ولا يثق إلا بعدد القفزات الذي يحدده هذا الرقم. مع وكيل عكسي واحد في الأمام — Caddy في هذه الحزمة — القيمة هي 1. ضع Cloudflare أمام Caddy فتصبح 2. اتركها عند الافتراضي 0 ويبدو أن كل طلب يأتي من الوكيل نفسه، وهو ما يكسر بصمت حدود المعدل وأي منطق يعتمد على IP في سير العمل لديك.
N8N_SECURE_COOKIE. قيمته الافتراضية true، أي أن ملف تعريف ارتباط الجلسة يُرسَل فقط عبر HTTPS. هذا هو الضبط الصحيح وهذه الحزمة تحقّقه. يستحق المعرفة لأنه يفسّر العرَض الكلاسيكي لمحاولة أولى عبر http عادي: نموذج تسجيل الدخول يقبل كلمة المرور ثم يعيدك إلى نموذج تسجيل الدخول، إلى الأبد. الحل هو TLS، لا إيقاف العلامة.
اختبره بشكل صحيح. أنشئ سير عمل بعقدة Webhook، فعّل سير العمل، انسخ Production URL، ثم استدعه من جهاز ليس الخادم:
curl -i https://n8n.example.com/webhook/<path>
# → HTTP/2 200, and a new execution visible in the editor
الفارق الذي يعثر الجميع به مرة واحدة: Test URL يستمع فقط أثناء فتح المحرر مع تفعيل "Listen for test event". Production URL لا يوجد إلا عندما تُبدَّل حالة سير العمل إلى Active. webhook يعمل في المحرر ويعطي 404 في الإنتاج يكون في الغالب دائماً سير عمل غير نشط.
الاحتفاظ. الإعدادات الافتراضية تحتفظ بأربعة عشر يوماً أو 10 000 عملية تنفيذ، أيهما أسبق، مع بيانات إدخال وإخراج كاملة لكل عقدة. على NVMe صغير مع مشغّل جدولة مزدحم هذا ما يملأ القرص. أضف هذه إلى كتلة بيئة n8n وأعد التشغيل:
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168 # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none هو أكبر مكسب منفرد على نسخة عالية التردد: يوقف كتابة حمولات عمليات التنفيذ الناجحة، بينما يستمر في تخزين كل عملية فاشلة كاملة لتتمكن من تصحيحها. أبقها على "all" أثناء بنائك لسير العمل، ثم بدّلها بمجرد أن يصبح سير العمل مستقراً.
التصميت. ملف Compose يوقف بالفعل التشخيصات وإشعارات الإصدار واستبيان التخصيص. المتّصل الصادر المتبقي هو معرض القوالب، الذي يجلب من api.n8n.io؛ اضبط N8N_TEMPLATES_ENABLED=false إن أردت عدم وجود أي اتصال بطرف ثالث إطلاقاً. إن عطّلت إشعارات الإصدار، ضع تذكيراً شهرياً في تقويمك لقراءة ملاحظات الإصدار — نسخة مستضافة ذاتياً لا يحدّثها أحد نتيجة أسوأ من نسخة تستطلع عن الإصدارات.
عقدة Code. N8N_BLOCK_ENV_ACCESS_IN_NODE=true، الموجود بالفعل في الملف، يمنع التعبيرات وعقد Code من قراءة متغيرات بيئة العملية — وهو ما يعني على هذا الصندوق كلمة مرور PostgreSQL ومفتاح التشفير. إذا كنت لا تستخدم REST API العام، أضف N8N_PUBLIC_API_DISABLED=true وأغلق تلك الواجهة أيضاً.
النسخ الاحتياطي — الأجزاء الثلاثة معاً أو لا شيء. نسخة احتياطية من قاعدة البيانات وحدها عديمة القيمة بلا مفتاح التشفير، والمفتاح وحده لا يستعيد شيئاً. انسخ احتياطياً تفريغ PostgreSQL وحجم بيانات n8n وملف .env معاً، واحتفظ بنسخة واحدة على الأقل خارج الخادم:
cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)
اسم الحجم هو اسم مشروع Compose زائد اسم الحجم؛ إن لم يكن دليلك مسمى n8n، شغّل docker volume ls واستخدم ما تراه. ضع الأسطر الثلاثة في مهمّة cron، وأرسل الأرشيفات إلى مكان آخر، واختبر استعادة مرة واحدة — نسخة احتياطية غير مُختبَرة هي اعتقاد، لا نسخة احتياطية.
التحديثات. docker compose pull تليها docker compose up -d. التقط لقطة أولاً: يشغّل n8n ترحيلات قاعدة البيانات عند البدء، وليست الترحيلات مصمَّمة للتراجع. عبر إصدار رئيسي — القفزة من 1.x إلى 2.x، مثلاً — اقرأ ملاحظات الإصدار قبل السحب لا بعده، وفكّر في تثبيت علامة صورة صريحة بدلاً من :latest حتى لا ترقّيك إعادة تشغيل غير مراقَبة بمفاجأة أبداً.
افتراضياً يعمل n8n في regular mode: نفس العملية التي تخدم المحرر وتستقبل webhooks تنفذ أيضاً سير العمل. الأمر بسيط وصحيح إلى أن يبدأ سير عمل طويل واحد بجعل البقية تنتظر. العرض لا لبس فيه — تبقى عمليات التنفيذ في "running" لدقائق، يصبح المحرر بطيئاً، وwebhook كان يجب أن يجيب في 200 ms يجيب خلال ثماني ثوانٍ.
queue mode يقسّم المهمة. النسخة الرئيسية تحتفظ بالمحرر والمشغّلات ونقاط نهاية webhook؛ تدفع معرّفات التنفيذ إلى Redis؛ عمليات عامل منفصلة تسحبها، وتحمّل سير العمل من PostgreSQL، وتنفذه، وتبلّغ عبر Redis. ثلاث قواعد تنبع من تلك البنية وكلها تلدغ من يتجاهلها: يجب أن تشارك كل نسخة نفس قاعدة بيانات PostgreSQL، ويجب أن تحمل كل نسخة نفس N8N_ENCRYPTION_KEY، وSQLite غير مدعوم إطلاقاً.
الإضافات إلى ملف Compose هي خدمة Redis وخدمة عامل واحدة، وهي نفس صورة n8n مُشغَّلة بأمر worker:
redis:
image: redis:7-alpine
restart: unless-stopped
command: ["redis-server", "--save", "60", "1", "--appendonly", "no"]
volumes:
- redis_data:/data
n8n-worker:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
command: worker --concurrency=5
depends_on:
- redis
- postgres
environment:
# the SAME encryption key and the SAME database as the main instance
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
أضف EXECUTIONS_MODE=queue وQUEUE_BULL_REDIS_HOST=redis إلى خدمة n8n الرئيسية أيضاً — يجب أن يتفق الطرفان على النمط. خياران يستحقان الضبط منذ اليوم الأول: OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true، حتى لا يشغل الضغط على "Test workflow" في المحرر العملية الرئيسية، وN8N_GRACEFUL_SHUTDOWN_TIMEOUT، الذي تكون قيمته الافتراضية 30 ثانية ويحدد المدة المسموح بها للعامل لإنهاء مهمته الحالية أثناء إعادة النشر. إذا كانت مهام سير العمل لديك تعمل عادة لأكثر من نصف دقيقة، ارفع هذه القيمة وإلا فإن كل عملية نشر ستقتل العمل الجاري.
لا تبدأ من هنا. queue mode يضيف جزأين متحركين وفئة أعطال لا يملكها regular mode أصلاً. ابقَ في regular mode حتى ترى الطابور ينمو أو سير عمل يحجب آخر، ثم أضف عاملاً واحداً على نفس الصندوق قبل أن تضيف صندوقاً ثانياً. هذا التدرج — Sentinel في regular mode، وGarrison بعامل واحد، وRavelin بثلاثة — يغطي كل شيء ما دون نشر كبير فعلاً.
معظم أدلة الاستضافة الذاتية تعامل اختيار المضيف كمسألة أداء. بالنسبة لمحرك أتمتة، الأمر ليس كذلك. تحمل نسخة n8n شيئين لا يكاد أي شيء آخر تستضيفه ذاتياً يحملهما معاً: جدولاً مشفراً واحداً يحتوي مفاتيح API ورموز OAuth وكلمات مرور البريد لكل خدمة تؤتمتها، و— بجانبه مباشرة — رسماً يصف بالضبط كيف تعمل مؤسستك. أي CRM. أي تغذية بنكية. أي مورّد. أي عملاء يحصلون على أي بريد، عند أي مشغّل. اقرأ قائمة سير العمل لشركة وتكون قد قرأت الشركة.
الطبقة الأولى — من يظن المضيف أنك. طبقة التطبيق هنا جيدة فعلاً: بيانات الاعتماد مشفرة أثناء السكون، والمحرر خلف TLS و2FA. الطبقة التي تسرّب هي التي تحتها. خطة مستضافة تعرف كيانك القانوني وعنوان فوترتك وبطاقتك. مزوّد hyperscaler يعرف نفس الشيء ويحتفظ به لسنوات. هذا ليس تعرّضاً افتراضياً؛ إنه مفتاح الربط بين "توجد خزنة مشفرة" و"تخص هذه الشركة المسمّاة". تسجيل بلا بريد إلكتروني وبلا وثيقة هوية، مُسدَّد بـMonero، يزيل مفتاح الربط لا الخزنة.
الطبقة الثانية — القرص. التشفير أثناء السكون لا يفيد إلا ضد من لا يملك المفتاح أيضاً، وفي التثبيت الافتراضي يقبع المفتاح على نفس نظام الملفات مع قاعدة البيانات. أبقِ .env عند الوضع 600، واحتفظ بنسخة من المفتاح خارج الجهاز، وفضّل مزوداً لا تجعل ولايته القضائية من مركز البيانات مكاناً مريحاً لتسليم إشعار قانوني — وهذه هي حجة دليل الولايات القضائية النوردية بأكملها.
الطبقة الثالثة — عنوان IP الخارج. كل عقدة HTTP Request تنطلق من عنوان VPS، وذلك العنوان يحمل سمعة. نطاقات hyperscaler هي الأكثر تقييداً بمعدل والأكثر حجباً بـCAPTCHA على الإنترنت، لأن هناك تعيش برامج الكشط؛ سير عمل يكشط أو يستطلع دورياً سيبدأ بالفشل على عنوان IP لـAWS أو DigitalOcean قبل وقت طويل من فشله على نطاق نوردي أهدأ. يحترم n8n أيضاً متغيرات HTTP_PROXY وHTTPS_PROXY وALL_PROXY وNO_PROXY المعيارية، بحيث يمكن توجيه الحفنة القليلة من سير العمل التي تحتاج مخرجاً مختلفاً عبر وكيل SOCKS محلي أو Tor بينما يذهب كل شيء آخر مباشرة.
باب إضافي، جديد في خط 2.x: يمكن لـn8n كشف خادم MCP على مستوى النسخة بحيث يستطيع وكيل AI استدعاء سير العمل لديك كأدوات. هذا مفيد فعلاً وهو أيضاً نقطة نهاية عامة إلى طبقة أتمتتك، وتستحق نفس المعاملة كأي نقطة أخرى — راجع دليل خادم MCP البعيد لمنطق TLS وOAuth والتعرّض.
أُعيد إنشاء حجم البيانات وولّد n8n مفتاح تشفير جديداً. لا شيء يستعيد بيانات الاعتماد القديمة. اضبط N8N_ENCRYPTION_KEY صراحة دائماً واحتفظ بنسخة خارج الخادم.
WEBHOOK_URL غير مضبوط، فيبني n8n الروابط من N8N_HOST. اضبط WEBHOOK_URL وN8N_EDITOR_BASE_URL على عنوان HTTPS العام وأعد تشغيل الحاوية.
أنت تصل إلى المحرر عبر http عادي ويُرفض ملف تعريف ارتباط الجلسة الآمن. أكمل إعداد TLS بدلاً من ضبط N8N_SECURE_COOKIE على false على نسخة عامة.
أربعة عشر يوماً من بيانات تنفيذ كاملة من مشغّل يعمل كل دقيقة. شدّد EXECUTIONS_DATA_MAX_AGE وPRUNE_MAX_COUNT، وتوقف عن حفظ عمليات التنفيذ الناجحة.
علامة :latest إضافة إلى ترحيلات قاعدة بيانات لا تتراجع. ثبّت علامة صريحة، والتقط لقطة قبل كل pull، واقرأ ملاحظات الإصدار عبر الإصدارات الرئيسية.
القيمة الافتراضية لـGENERIC_TIMEZONE هي America/New_York، وهي نادراً ما تكون المطلوبة. اضبط GENERIC_TIMEZONE وTZ على نفس المنطقة الزمنية الحقيقية وأعد التشغيل.
عشرة أسئلة تُطرح قبل نقل نسخة n8n إلى خادمك الخاص وأثناءه وبعده.
لأتمتتك الخاصة، نعم. يُشحن n8n بموجب Sustainable Use License: يمكنك استخدامه ونسخه وتعديله وتوزيعه لأغراض عملك الداخلية وللاستخدام الشخصي أو غير التجاري، دون تكلفة. ما يحظره الترخيص هو تحصيل رسوم من آخرين مقابل n8n أو مشتق منه — أي عملياً، إعادة بيع "استضافة n8n" كمنتج. الملفات التي تحمل .ee. في اسمها أو .ee في مسار دليلها مستثناة من ذلك الترخيص وتتطلب n8n Enterprise License مدفوعاً. إذن: أتمتة شركتك الخاصة على VPS تستأجره تقع تماماً ضمن المنحة المجانية؛ بناء عمل استضافة n8n فوقه ليس كذلك.
وثائق n8n الخاصة بـDocker Compose تنص على حد أدنى قدره 2 vCPU و4 GB من RAM. هذه بالضبط فئة Sentinel ($3.90/شهرياً — 2 vCPU، 4 GB، 120 GB NVMe)، التي تشغّل بارتياح n8n مع PostgreSQL مع Caddy لنسخة شخصية أو لفريق صغير. انتقل إلى Garrison (4 vCPU، 8 GB، $7.90/شهرياً) عندما تضيف عمّال queue-mode أو تشغّل سير عمل يحمل حمولات كبيرة في الذاكرة، وإلى Ravelin (8 vCPU، 16 GB، $16.90/شهرياً) لنسخة فريق تنفذ آلاف العمليات يومياً ببيانات ثنائية — PDF وصور وصوت.
SQLite هو الافتراضي وهو جيد فعلاً لشخص واحد بحفنة من سير العمل. انتقل إلى PostgreSQL عندما تكون لديك عمليات تنفيذ متزامنة، أو عندما يتجاوز سجل التنفيذ بضع مئات آلاف الصفوف، أو عندما تخطط للتوسع — ولاحظ أن queue mode لا يدعم SQLite إطلاقاً. الترحيل لاحقاً يعني تصدير سير العمل وبيانات الاعتماد وإعادة استيرادها إلى نسخة جديدة، وهو بعد ظهر لن تستمتع به. إن كان هناك أي احتمال للنمو، ابدأ على PostgreSQL؛ ملف Compose في هذا الدليل يفعل ذلك بالفعل.
كل بيانات الاعتماد في قاعدة البيانات تصبح غير قابلة للقراءة بشكل دائم. يشفّر n8n بيانات الاعتماد المخزنة — رموز OAuth، مفاتيح API، كلمات مرور SMTP — بذلك المفتاح، ولا توجد آلية استرجاع ولا تذكرة دعم تعيدها. تعيد إدخال كل بيانات اعتماد يدوياً. هذه هي الطريقة الأكثر شيوعاً على الإطلاق التي تُدمَّر بها نسخة n8n المستضافة ذاتياً: يعيد أحدهم إنشاء حجم Docker، فيولّد n8n مفتاحاً جديداً، وتبدأ كل سير عمل بالفشل دفعة واحدة بخطأ فك تشفير. اضبط المفتاح صراحة في .env قبل الإقلاع الأول، واحفظ نسخة في مكان ليس الخادم.
أربعة أسباب، بترتيب التكرار. (1) WEBHOOK_URL غير مضبوط، فيعطيك المحرر رابط http://localhost:5678/webhook/… لا يمكن لأي خدمة خارجية الوصول إليه — اضبطه على رابط HTTPS العام الخاص بك. (2) سير العمل غير مفعَّل؛ رابط الاختبار يستمع فقط أثناء فتح المحرر، ورابط الإنتاج لا يوجد إلا بمجرد أن يصبح سير العمل نشطاً. (3) DNS أو جدار الحماية: السجل لا يُحلّ، أو المنفذان 80/443 مغلقان. (4) أنت خلف طبقة وكيل إضافية ولم تضبط N8N_PROXY_HOPS، فيقرأ n8n عنوان IP خاطئاً للعميل. اختبر بـcurl بسيط من جهاز ليس الخادم.
نعم، وهو النمط المعتاد — Caddy واحد في الأمام، وشبكة Compose واحدة، وn8n على اسم مضيف واحد وVaultwarden أو Nextcloud أو SearXNG على أسماء أخرى. تحفظان اثنان. الذاكرة: n8n مع PostgreSQL يخمل عند نحو 700 MB وسير عمل ثقيل يمكن أن يرتفع كثيراً فوق ذلك، فاترك هامشاً. نطاق الانفجار: قاعدة بيانات n8n هي الأكثر كثافة ببيانات الاعتماد على الصندوق، فأي شيء آخر يشارك ذلك المضيف يرث ملف مخاطرها. على فئة $3.90/شهرياً من المعقول إعطاء محرك الأتمتة خادمه الخاص.
افتراضياً، ثلاث نقاط نهاية. قياس تخطي مجهول المصدر للمنتج (N8N_DIAGNOSTICS_ENABLED، الافتراضي true)، فحص الإصدار الجديد وتحديثات الأمان مقابل api.n8n.io (N8N_VERSION_NOTIFICATIONS_ENABLED، الافتراضي true)، ومتصفح قوالب سير العمل، الذي يجلب من https://api.n8n.io (N8N_TEMPLATES_ENABLED، الافتراضي true). لا يرسل أي منها بيانات اعتمادك أو بيانات سير عملك، لكن الثلاثة جميعاً تعلن أن نسخة موجودة عند عنوان IP الخاص بك. اضبط الثلاثة على false إن أردت أن يكون الصندوق صامتاً — تفقد معرض القوالب وشريط التحديث، فتابع الإصدارات بنفسك.
n8n Cloud Starter تكلفته €20/شهرياً بفوترة سنوية مقابل 2,500 عملية تنفيذ؛ Pro بـ€50/شهرياً مقابل 10,000. VPS من فئة Sentinel تكلفته $3.90/شهرياً وعدد عمليات التنفيذ محدود فقط بـCPU وRAM، وهو ما يعني بالنسبة لسير عمل webhook وAPI النموذجي عشرات الآلاف. نقطة التعادل المالي فورية؛ التكلفة الحقيقية تشغيلية. الاستضافة الذاتية تعني أنك تملك التحديثات والنسخ الاحتياطي وتجديد TLS وحادثة امتلاء القرص الساعة 3 فجراً. القاعدة الصادقة: إن كنت لن تُحدّث النسخة بنفسك خلال شهر من إصدار أمني، ادفع مقابل Cloud. إن كان docker compose pull شهري جزءاً من حياتك بالفعل، استضف ذاتياً.
بسبب ما تحمله نسخة n8n. جدول بيانات الاعتماد هو مخزن مشفر واحد لمفاتيح API ورموز OAuth وكلمات مرور البريد لكل خدمة تؤتمتها، وبجانبه رسم سير العمل هو خريطة مقروءة لكيفية عمل مشروعك فعلياً — أي CRM، أي تغذية بنكية، أي مورّد، أي عملاء. الموقع الثابت لا يسرّب شيئاً من هذا. طبقة التطبيق تحميه جيداً؛ طبقة البيانات الوصفية هي حيث يتسرب. إذا كان تسجيل الجهاز يحمل مسح جواز سفر وبطاقة، فأنت قد شفّرت الخزنة وكتبت اسمك على الباب. مضيف بدون KYC يُدفع بـMonero يبقي الطبقتين متوافقتين.
نعم للشكل الشائع — عقدة AI Agent تستدعي API نموذج بعيد. ذلك الحمل مقيّد بـI/O، وينتظر المزوّد، وSentinel يتولاه. ما لا يناسب هو تشغيل النموذج نفسه: نموذج محلي بحجم 7B يريد نحو 8 GB من RAM وسرعة استدلال حقيقية تريد GPU، وهو ما لا تحمله هذه الفئات. وجّه n8n إلى نقطة نهاية بعيدة متوافقة مع OpenAI وأبقِ VPS خفيفاً. الدليل المرافق حول تشغيل وكيل AI على مدار الساعة يغطي جانب وقت التشغيل — سياسات إعادة التشغيل، والأسرار، وسقوف الإنفاق، وفخ حلقة الانهيار.
Sentinel (2 vCPU، 4 GB، 120 GB NVMe، $3.90/شهرياً) يفي بالحد الأدنى لـn8n مع متسع لـPostgreSQL وCaddy على نفس الصندوق. لا بريد إلكتروني عند التسجيل، لا وثيقة هوية، عمليات تنفيذ غير محدودة.
آخر مراجعة · 2026-08-24 · المصادر · وثائق استضافة n8n، وn8n LICENSE.md (Sustainable Use License)، وصفحة تسعير n8n.io، ووثائق Docker وCaddy الرسمية · الدورية · سنوياً
This guide is one spoke of a larger series. The pillar walks the three privacy layers end to end — the sibling spokes below dive into the specifics.
Three independent layers — signup, payment, network — explained, legal context included, common mistakes flagged.
Deploy your own MCP server on a no-KYC VPS — TLS, streamable HTTP, OAuth.
Host an MCP server with no ID — the privacy stack, crypto-paid.
انقل الوكيل من حاسوبك المحمول — تحديد الحجم، وsystemd، والأسرار، وسقوف الإنفاق.
Ollama على CPU بلا GPU — ما يلائم 4 أو 8 أو 16 أو 32 GB.