انتقل إلى المحتوى
Taha Media

تركيب n8n وSupabase وOdoo على سيرفرك الخاص: دليل عملي مع SSL ونسخ احتياطي

كيف تشغّل n8n وSupabase وOdoo على VPS واحد أو سيرفر داخل شركتك باستخدام Docker، مع شهادة SSL تلقائية، وتأمين أساسي، ونسخ احتياطي تختبر استعادته فعلاً.

نُشر في 5 دقائق قراءة

اشتراك أداة أتمتة، واشتراك قاعدة بيانات، واشتراك نظام ERP. كل واحد منها معقول وحده، لكن المجموع يكبر مع عدد المستخدمين والعمليات. البديل أن تشغّل النسخ مفتوحة المصدر على سيرفرك بتكلفة شهرية ثابتة. هذا الدليل يشرح الطريقة التي أستخدمها يومياً: Docker، وبروكسي عكسي يصدر شهادات SSL تلقائياً، ونسخ احتياطي خارج السيرفر.

ما حجم السيرفر المناسب؟

  • n8n وحده: أدلة التثبيت الشائعة تذكر 1 vCPU و1GB RAM كحد أدنى، و2GB أفضل.
  • Supabase: الوثائق الرسمية تذكر حداً أدنى 4GB RAM ومعالجين و40GB SSD، والموصى به 8GB وأربعة معالجات و80GB. Supabase ليس برنامجاً واحداً بل مجموعة خدمات (Postgres، المصادقة، التخزين، الواجهة، وغيرها).
  • Odoo: يعتمد على عدد المستخدمين والوحدات. لفرع صغير، 2 إلى 4GB تكفي للبداية.

للثلاثة معاً على سيرفر واحد، ابدأ من 8GB RAM و4 معالجات. ويمكن أن يكون السيرفر VPS (Hetzner أو Contabo أو DigitalOcean) أو جهازاً داخل الشركة.

الخطوة 1: تجهيز السيرفر

على Ubuntu 24.04:

# تحديثات أمنية تلقائية
sudo apt update && sudo apt -y upgrade
sudo apt -y install unattended-upgrades ufw

# جدار ناري: SSH وHTTP وHTTPS فقط
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable

# Docker من السكربت الرسمي
curl -fsSL https://get.docker.com | sudo sh

وعطّل الدخول بكلمة المرور في SSH واستخدم المفاتيح فقط. انتبه أن Docker يفتح المنافذ المنشورة بتجاوز ufw، لذلك لا تنشر منافذ قواعد البيانات للخارج أبداً، وانشر منافذ التطبيقات على 127.0.0.1 فقط ودع البروكسي يتولى الباقي.

الخطوة 2: البروكسي العكسي وSSL

أنشئ سجلات DNS من نوع A لكل نطاق فرعي (مثل n8n.example.com وerp.example.com) تشير إلى عنوان السيرفر. ثم يكفي Caddy ليصدر الشهادات من Let's Encrypt ويجددها تلقائياً:

n8n.example.com {
    reverse_proxy 127.0.0.1:5678
}

erp.example.com {
    reverse_proxy 127.0.0.1:8069
}

الدليل الرسمي لـ n8n يستخدم Traefik بدلاً من Caddy، وكلاهما يؤدي الغرض. المهم ألا تشغّل أي نظام إنتاجي على HTTP عادي.

الخطوة 3: n8n

الدليل الرسمي لـ n8n مع Docker Compose يعتمد ملف .env بهذه المتغيرات:

DOMAIN_NAME=example.com
SUBDOMAIN=n8n
GENERIC_TIMEZONE=Asia/Riyadh
SSL_EMAIL=you@example.com

البيانات تُحفظ في Volume مركّب على /home/node/.n8n، وفيه قاعدة SQLite ومفتاح التشفير الذي تُشفَّر به بيانات الاعتماد (Credentials). إذا فقدت هذا المفتاح فلن تستطيع فك تشفير بيانات الاعتماد حتى لو كانت لديك نسخة من قاعدة البيانات، لذلك انسخه احتياطياً بشكل منفصل. ولأي استخدام جاد، اربط n8n بقاعدة Postgres بدلاً من SQLite.

عن الترخيص: n8n يُوزّع بترخيص Sustainable Use License. بحسب وثائقه، الاستخدام الداخلي لشركتك مسموح، وكذلك أن تتقاضى أجراً من عملائك مقابل بناء سير العمل وإعداده وصيانته. أما استضافة n8n كخدمة يبني فيها عملاؤك سير عملهم بأنفسهم مقابل اشتراك، فغير مسموح بدون ترخيص تجاري.

الخطوة 4: Supabase

الوثائق الرسمية تشرح الطريقة: تنسخ مجلد docker من مستودع Supabase على إصدار محدد، ثم تنسخ ملف الإعدادات:

git clone --depth 1 --branch <الإصدار> https://github.com/supabase/supabase
mkdir supabase-project
cp -rf supabase/docker/* supabase-project/
cp supabase/docker/.env.example supabase-project/.env

ثم غيّر كل الأسرار الافتراضية قبل التشغيل الأول: كلمة مرور Postgres، واسم مستخدم وكلمة مرور لوحة Studio، ومفاتيح API. الوثائق تقول صراحة إنه لا يجب أبداً تشغيل Supabase الذاتي بالقيم الافتراضية، وعلى Linux يوجد سكربت يولّدها لك.

ملاحظات مهمة من الوثائق:

  • لوحة Studio وواجهة API تعملان عبر بوابة على المنفذ 8000، ومحميتان بمصادقة HTTP أساسية. ضعهما خلف البروكسي مع HTTPS.
  • تحتاج خادم SMTP خاصاً بك لرسائل التسجيل واستعادة كلمة المرور.
  • السجلات والتحليلات معطلة افتراضياً، وتفعيلها يزيد استهلاك الموارد.
  • التحديثات مسؤوليتك، ولا تخلط إصدارات الصور عشوائياً.

الخطوة 5: Odoo

الصورة الرسمية على Docker Hub تحتاج Postgres بجانبها. ملف Compose مختصر:

services:
  db:
    image: postgres:16
    environment:
      POSTGRES_USER: odoo
      POSTGRES_PASSWORD: ${PG_PASSWORD}
      POSTGRES_DB: postgres
    volumes: [odoo-db:/var/lib/postgresql/data]
    restart: unless-stopped
  odoo:
    image: odoo:18.0
    depends_on: [db]
    environment:
      HOST: db
      USER: odoo
      PASSWORD: ${PG_PASSWORD}
    ports: ["127.0.0.1:8069:8069"]
    volumes:
      - odoo-data:/var/lib/odoo
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
    restart: unless-stopped
volumes:
  odoo-db:
  odoo-data:

في ملف config/odoo.conf ضع كلمة مرور رئيسية قوية في admin_passwd، وفعّل proxy_mode = True لأنك خلف بروكسي، وفكّر في list_db = False حتى لا تظهر صفحة إدارة قواعد البيانات للعامة. إذا فعّلت workers (وضع تعدد العمليات) فانشر المنفذ 8072 على 127.0.0.1 أيضاً، ووجّه المسار /websocket في البروكسي إليه (عامل الدردشة الفورية يستمع على gevent_port، و8072 هو المنفذ المستخدم في مثال Odoo الرسمي).

المجلد /var/lib/odoo يحتوي ملفات المرفقات (filestore)، وهو جزء من النسخة الاحتياطية مثل قاعدة البيانات تماماً.

الخطوة 6: النسخ الاحتياطي (الجزء الذي يُنسى)

نسخة احتياطية لم تجرّب استعادتها ليست نسخة احتياطية. الحد الأدنى:

#!/usr/bin/env bash
set -euo pipefail
STAMP=$(date +%F)
mkdir -p /backups/$STAMP

# قواعد البيانات بصيغة pg_dump المضغوطة
docker compose exec -T db pg_dump -U odoo -Fc odoo_prod > /backups/$STAMP/odoo.dump

# ملفات Odoo وبيانات n8n
docker run --rm -v odoo-data:/data -v /backups/$STAMP:/out alpine \
  tar czf /out/odoo-filestore.tgz -C /data .

# الاحتفاظ بآخر 14 يوماً محلياً
find /backups -maxdepth 1 -type d -mtime +14 -exec rm -rf {} +

ثم انقل النسخ خارج السيرفر (تخزين S3 متوافق، أو سيرفر آخر) بأداة مثل rclone أو restic، وجدول السكربت بـ cron يومياً. وكل شهر جرّب الاستعادة على سيرفر تجريبي: أنشئ قاعدة فارغة، واستعد بـ pg_restore، وتأكد أن النظام يفتح والمرفقات موجودة.

الخطوة 7: المراقبة والتحديث

  • أداة مثل Uptime Kuma تنبهك إذا توقف أي نطاق، ويمكن إرسال التنبيه إلى تيليجرام.
  • ثبّت إصدارات الصور (odoo:18.0 وليس latest)، وحدّث بشكل مقصود: خذ نسخة احتياطية، ثم docker compose pull && docker compose up -d، ثم تحقق.
  • راقب مساحة القرص، فهي أكثر سبب أراه لتوقف قواعد البيانات.

أسئلة شائعة

هل أشغّل الأنظمة الثلاثة على سيرفر واحد؟

ممكن لفريق صغير، بشرط ذاكرة كافية (8GB على الأقل) ونسخ احتياطي جيد. لكن تذكّر أن السيرفر الواحد نقطة فشل واحدة: إذا توقف، توقفت الأتمتة والنظام المحاسبي معاً. عندما يصبح Odoo أساسياً في عملك، افصله على سيرفر خاص.

VPS خارجي أم جهاز داخل الشركة؟

الـ VPS أسهل في الوصول من أي مكان وله اتصال إنترنت مستقر وعنوان IP ثابت. الجهاز الداخلي أفضل إذا كان الإنترنت عندك غير مستقر أو كانت البيانات يجب ألا تغادر المبنى، لكنه يحتاج مزود طاقة احتياطياً، ونسخة احتياطية خارج المبنى، وطريقة آمنة للوصول عن بعد (VPN أو نفق مثل Cloudflare Tunnel) بدلاً من فتح منافذ الراوتر.

هل Odoo Community يكفي؟

النسخة المجتمعية (Community) مجانية ومفتوحة المصدر وتغطي المبيعات والمشتريات والمخزون والفوترة الأساسية. بعض الوحدات، مثل المحاسبة الكاملة وبعض التكاملات، موجودة في نسخة Enterprise المدفوعة فقط. حدّد الوحدات التي تحتاجها قبل أن تقرر.

كم ساعة إدارة أحتاج شهرياً؟

إذا كان الأساس مضبوطاً (تحديثات أمنية تلقائية، نسخ احتياطي مجدول، مراقبة)، فالعمل الدوري هو: مراجعة التنبيهات، وتحديث الأنظمة بشكل مقصود كل فترة، وتجربة الاستعادة. خصص لذلك وقتاً ثابتاً في التقويم بدلاً من الانتظار حتى يتعطل شيء.

الخلاصة

الخطوات نفسها تتكرر مع أي نظام مفتوح المصدر: سيرفر محدّث بجدار ناري، Docker، منافذ على localhost فقط، بروكسي يصدر SSL، أسرار مغيّرة عن الافتراضي، ونسخ احتياطي خارجي مُختبر. إذا ضبطت هذا الأساس مرة واحدة، يصبح إضافة نظام جديد مسألة ملف Compose ونطاق فرعي.

المصادر

تحتاج من ينفّذ هذا عنك؟

خدمة

أركّب لك النظام على سيرفرك مع SSL ونسخ احتياطي

n8n أو Supabase أو Odoo أو غيرها، على VPS أو جهاز داخل شركتك: Docker، دومين بشهادة SSL، نسخ احتياطي تلقائي مع شرح الاستعادة، ودليل تشغيل بالعربية. التسليم خلال يومين.