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

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

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

وقت القراءة: 15 دقيقة الاستضافة الذاتية
n8nأتمتةworkflowself-hostingdockerwebhookتكامل

جدول المحتويات

تثبيت 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 غيغابايت من الذاكرة يمكنك تشغيل مئات من سير العمل.