لماذا تحتاج بيئة n8n محلية؟
منصة n8n هي أداة أتمتة مفتوحة المصدر تتيح لك بناء سير عمل ذكي يربط بين مئات التطبيقات والخدمات. النسخة السحابية (n8n Cloud) ممتازة للبدء السريع، لكن التشغيل المحلي يمنحك تحكماً كاملاً في بياناتك، ولا حدود على عدد التنفيذات، وإمكانية التخصيص الكامل — وكل ذلك مجاناً.
المشكلة؟ التشغيل المحلي يحتاج إعداد قاعدة بيانات منفصلة، وحل مشكلة الـ Webhooks (لأن الخدمات الخارجية مثل Telegram لا تستطيع الوصول لـ localhost). هنا يأتي دور Docker Compose — حزمة واحدة تحل كل شيء.
ما الذي يحتويه هذا الـ Stack؟
الحزمة تحتوي على ثلاثة مكونات تعمل معاً بتناغم داخل Docker:
1. n8n — محرك الأتمتة الأساسي. يعمل على المنفذ 5678 ويوفر واجهة مرئية لبناء سير العمل بالسحب والإفلات. يستخدم PostgreSQL كقاعدة بيانات بدلاً من SQLite الافتراضي.
2. PostgreSQL 16 — قاعدة بيانات قوية تخزن كل سير العمل والتنفيذات. تعمل بنسخة Alpine خفيفة مع Health Check تلقائي.
3. Ngrok — ينشئ نفقاً آمناً يربط جهازك المحلي بالإنترنت. هذا يعني أن Telegram وأي خدمة خارجية تستطيع إرسال Webhooks لـ n8n على جهازك.
ملف Docker Compose الكامل
version: '3.8'
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=n8n_password
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U n8n -d n8n']
interval: 5s
timeout: 5s
retries: 10
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=n8n_password
- N8N_HOST=localhost
- N8N_PORT=5678
- NODE_ENV=production
- GENERIC_TIMEZONE=Asia/Amman
ports:
- "5678:5678"
depends_on:
postgres:
condition: service_healthy
volumes:
- n8n_data:/home/node/.n8n
ngrok:
image: ngrok/ngrok:latest
restart: unless-stopped
command:
- "http"
- "http://n8n:5678"
- "--log"
- "stdout"
environment:
- NGROK_AUTHTOKEN=${NGROK_AUTHTOKEN}
ports:
- "4040:4040"
depends_on:
- n8n
volumes:
postgres_data:
n8n_data:
خطوات التشغيل
1. ثبّت Docker Desktop من docker.com وتأكد أنه يعمل.
2. سجّل حساب Ngrok مجاني على ngrok.com واحصل على الـ Authtoken.
3. أنشئ ملف .env في نفس المجلد:
NGROK_AUTHTOKEN=your_token_here
4. شغّل الحزمة:
docker compose up -d
5. افتح n8n على http://localhost:5678 وأنشئ حساب المدير.
6. اعرف رابط Ngrok من http://localhost:4040/api/tunnels — استخدمه لربط Webhooks.
ربط Telegram Bot مع n8n المحلي
أنشئ بوت عبر @BotFather على Telegram واحصل على Bot Token. في n8n، أضف عقدة Telegram Trigger واربطها بالـ Token. Ngrok يتكفل بتحويل الرابط العام إلى localhost تلقائياً. فعّل الـ Workflow وجرّب!
نصيحة: احصل على Static Domain مجاني من Ngrok حتى لا يتغير الرابط كل مرة:
command:
- "http"
- "--url=your-domain.ngrok-free.app"
- "http://n8n:5678"
لماذا PostgreSQL وليس SQLite؟
n8n افتراضياً يستخدم SQLite — ممتازة للتجربة لكن قد تسبب مشاكل مع التنفيذات المتزامنة. PostgreSQL يوفر أداءً أفضل بكثير ودعم للعمليات المتزامنة — والانتقال لا يكلفك شيئاً إضافياً في Docker Compose.
حالات استخدام عملية
مع هذا الـ Stack يمكنك بناء: بوت Telegram ذكي يرد بالذكاء الاصطناعي، نظام طلبات إجازة آلي، مراقب أسعار منتجات، محلل سير ذاتية، ومساعد HR ذكي يعرف بيانات الموظفين ويتذكر المحادثات السابقة.
ابدأ الآن
كل ما تحتاجه: جهاز مع Docker وحساب Ngrok مجاني. في أقل من 5 دقائق، ستمتلك بيئة أتمتة كاملة تعمل محلياً — بدون اشتراكات، بدون قيود، وبدون القلق على خصوصية بياناتك.