انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

تثبيت n8n: أتمتة سير العمل المستضافة ذاتياً

تثبيت n8n عبر Docker، تكاملات webhook، إنشاء سير العمل، ربط 400+ تطبيق، المهام المجدولة، إدارة بيانات الاعتماد والنشر في بيئة الإنتاج.

وقت القراءة: 15 دقيقة الاستضافة الذاتية
n8nأتمتةworkflowself-hostingdockerwebhookتكامل
الكاتب
REXE Teknoloji Network & Security Team
المحرر
REXE Teknoloji Technical Editorial
أول نشر
آخر تحديث

تثبيت n8n: أتمتة سير العمل المستضافة ذاتياً

n8n هي منصة أتمتة سير العمل مفتوحة المصدر بواجهة مرئية يمكنها ربط 400+ تطبيق وخدمة. يمكنك تشغيلها على خادمك الخاص كبديل مستضاف ذاتياً لخدمات مثل Zapier وMake (Integromat). يمكنك إنشاء أتمتة معقدة دون كتابة كود، أو إضافة منطق مخصص باستخدام JavaScript/Python.

ما هو n8n؟

n8n (اختصار لـ "nodemation") يتيح لك بناء سير عمل باستخدام البرمجة المرئية القائمة على العقد. الميزات الرئيسية:

  • 400+ تكامل: Slack، GitHub، Google Sheets، Notion، Airtable والمزيد
  • دعم Webhook: استخدام طلبات HTTP كمحفزات
  • المهام المجدولة: جدولة قائمة على Cron
  • دعم الكود: عقد JavaScript وPython
  • معالجة الأخطاء: آلية إعادة المحاولة وتدفقات الأخطاء
  • بيانات اعتماد مشفرة: مفاتيح API مخزنة بأمان

متطلبات النظام

  • خادم مثبت عليه Docker وDocker Compose
  • 1 غيغابايت من الذاكرة العشوائية كحد أدنى (يُنصح بـ 2 غيغابايت)
  • PostgreSQL (موصى به للإنتاج) أو SQLite

التثبيت الأساسي باستخدام Docker

بداية سريعة مع SQLite

hljs yaml
version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    environment:
      - N8N_HOST=n8n.example.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://n8n.example.com/
      - GENERIC_TIMEZONE=Asia/Riyadh
      - N8N_ENCRYPTION_KEY=مفتاح-تشفير-قوي
    volumes:
      - ./n8n-data:/home/node/.n8n
    ports:
      - "127.0.0.1:5678:5678"
hljs bash
# تشغيل الحاوية
docker compose up -d

# فحص السجلات
docker logs n8n -f

يُستخدم N8N_ENCRYPTION_KEY لتشفير بيانات الاعتماد. إذا فقدت هذه القيمة، ستصبح جميع بيانات اعتمادك غير قابلة للوصول. احتفظ بها في مكان آمن.

إعداد الإنتاج مع PostgreSQL

hljs yaml
version: '3.8'

services:
  postgres:
    image: postgres:15
    container_name: n8n-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: n8n
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: كلمة-مرور-قوية
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 5s
      timeout: 5s
      retries: 10

  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=كلمة-مرور-قوية
      - N8N_HOST=n8n.example.com
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.example.com/
      - GENERIC_TIMEZONE=Asia/Riyadh
      - N8N_ENCRYPTION_KEY=مفتاح-تشفير-قوي
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=كلمة-مرور-المشرف
    volumes:
      - ./n8n-data:/home/node/.n8n
    ports:
      - "127.0.0.1:5678:5678"

volumes:
  postgres-data:

Nginx Reverse Proxy

hljs nginx
server {
    listen 80;
    server_name n8n.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name n8n.example.com;

    ssl_certificate /etc/letsencrypt/live/n8n.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 3600;
    }
}

إنشاء سير عمل أساسي

سير العمل الأول: Webhook → إشعار Slack

  1. انقر على New Workflow
  2. أضف عقدة بـ + → اختر Webhook
    • HTTP Method: POST
    • Path: /slack-notify
  3. أضف عقدة جديدة بـ + → اختر Slack
    • Operation: Send Message
    • Channel: #general
    • Message: {{ $json.message }}
  4. احفظ وفعّل
hljs bash
# اختبار webhook
curl -X POST https://n8n.example.com/webhook/slack-notify \
  -H "Content-Type: application/json" \
  -d '{"message": "مرحباً n8n!"}'

أنواع المحفزات

محفز Cron (الجدولة)

# تعبيرات Cron
0 9 * * 1-5    # أيام الأسبوع الساعة 09:00
*/15 * * * *   # كل 15 دقيقة
0 0 * * *      # كل منتصف ليل
0 8 * * 1      # كل اثنين الساعة 08:00

إدارة بيانات الاعتماد

الإعدادات → بيانات الاعتماد → إضافة بيانات اعتماد

مثال: GitHub API
- نوع بيانات الاعتماد: GitHub API
- Access Token: ghp_xxxxxxxxxxxx
- اختبار الاتصال

أمثلة سير العمل الشائعة

GitHub → إشعار Slack

GitHub Trigger (حدث push)
  → IF (branch == 'main')
    → Slack ("نشر جديد: {{ $json.commits[0].message }}")
    → Email (إشعار الفريق)

التقرير اليومي

Cron Trigger (كل صباح الساعة 09:00)
  → PostgreSQL (جلب مبيعات الأمس)
  → Code (تنسيق البيانات)
  → Google Sheets (إضافة إلى التقرير)
  → Slack (إرسال الملخص)

وضع قائمة الانتظار (الحمل العالي)

hljs yaml
environment:
  - EXECUTIONS_MODE=queue
  - QUEUE_BULL_REDIS_HOST=redis
  - QUEUE_BULL_REDIS_PORT=6379

redis:
  image: redis:7-alpine
  container_name: n8n-redis
  restart: unless-stopped

النسخ الاحتياطي

hljs bash
# نسخ احتياطي لبيانات n8n
tar -czf n8n-backup-$(date +%Y%m%d).tar.gz ./n8n-data/

# نسخ احتياطي لـ PostgreSQL
docker exec n8n-postgres pg_dump -U n8n n8n > n8n-db-$(date +%Y%m%d).sql

مع n8n على خوادم REXE VPS، يمكنك أتمتة جميع عمليات أعمالك. بـ 2 غيغابايت من الذاكرة يمكنك تشغيل مئات من سير العمل.

الأسئلة الشائعة

ما الفرق بين n8n وZapier؟

n8n مستضاف ذاتياً ومفتوح المصدر؛ Zapier قائم على السحابة ومدفوع. مع n8n، تبقى بياناتك على خادمك الخاص ويمكنك إنشاء سير عمل وتنفيذات غير محدودة. قد يكون Zapier أكثر سهولة في الاستخدام لكن له حدود تنفيذ شهرية وتكاليف عالية. يتيح n8n أيضاً كتابة كود مخصص بـ JavaScript/Python.

URL webhook الخاص بي لا يعمل، لا يمكن الوصول إليه من الخارج.

تأكد من أن متغير البيئة WEBHOOK_URL مضبوط بشكل صحيح (https://n8n.example.com/). تحقق من أن وكيل Nginx يدعم اتصالات WebSocket (رؤوس Upgrade وConnection). تحقق من أن المنفذ 443 مفتوح في جدار الحماية. تأكد من أن سير العمل في n8n في حالة 'Active'.

فقدت بيانات اعتمادي، نسيت مفتاح التشفير.

إذا تغيّر N8N_ENCRYPTION_KEY، لا يمكن فك تشفير بيانات الاعتماد الموجودة. في هذه الحالة، تحتاج إلى إعادة إنشاء جميع بيانات الاعتماد. لهذا السبب، تخزين مفتاح التشفير في مكان آمن (مدير كلمات المرور، vault) أمر بالغ الأهمية. انسخ هذا المفتاح احتياطياً عند إجراء النسخ الاحتياطية.

n8n يستخدم ذاكرة كثيرة جداً، كيف أحسّنه؟

حدّد سجل التنفيذ: EXECUTIONS_DATA_MAX_AGE=168 (7 أيام). لمجموعات البيانات الكبيرة، احفظ البيانات الثنائية في نظام الملفات: N8N_DEFAULT_BINARY_DATA_MODE=filesystem. تحكم في عدد العمال باستخدام وضع قائمة الانتظار. عطّل سير العمل غير الضرورية.

كيف أصحح الأخطاء في n8n؟

يمكنك رؤية مخرجات كل عقدة في محرر سير العمل. اختبر العقد الفردية بـ 'Execute Node'. راجع التشغيلات السابقة من قائمة التنفيذ. أضف عقدة خطأ لالتقاط الأخطاء وتلقي إشعارات Slack/email. تحقق من سجلات النظام بـ docker logs n8n.

هل تحديث n8n آمن، هل سأفقد بياناتي؟

عند استخدام PostgreSQL، التحديث آمن. خذ نسخة احتياطية من قاعدة البيانات قبل التحديث: docker exec n8n-postgres pg_dump -U n8n n8n > backup.sql. ثم حدّث بـ docker compose pull && docker compose up -d. يُجري n8n ترحيلات تلقائية. عند استخدام SQLite، انسخ دليل ./n8n-data/ احتياطياً.

مقالات ذات صلة

حركة الشبكةالداخل Gbpsالخارج Gbps