دليل عملي

استضافة Odoo 17 Community على VPS: تثبيت Docker متكامل

الاستضافة الذاتية10 دقائق للقراءةعدد الخطوات: 10

Odoo 17 Community Edition هو أحد أكثر أنظمة تخطيط موارد المؤسسات مفتوحة المصدر شمولاً المتاحة اليوم. مجاني وقابل للتوسع ومدعوم بمجتمع كبير، يغطي إدارة المبيعات والمحاسبة والمخزون والموارد البشرية وغير ذلك. ومع ذلك، لا تزال كثير من الشركات تدفع اشتراكات SaaS لميزات يمكنها استضافتها بنفسها على VPS مع تحكم كامل في بياناتها. يرشدك هذا الدليل خطوة بخطوة لنشر Odoo 17 Community على VPS باستخدام Docker Compose، وإعداد النسخ الاحتياطية، وتأمين النسخة وتحسين أدائها.

المحتويات· لماذا تستضيف Odoo Community بنفسك1/12
  1. 01لماذا تستضيف Odoo Community بنفسك
  2. 02ما يتضمنه Odoo 17 Community
  3. 03الفروق بين Community وEnterprise
  4. 04متطلبات VPS لاستضافة Odoo 17
  5. 05تثبيت Odoo 17 باستخدام Docker Compose
  6. 06إعداد قاعدة البيانات والنسخة
  7. 07إعداد النسخ الاحتياطية التلقائية
  8. 08تفعيل الوحدات الرئيسية بعد التثبيت
  9. 09تحسين أداء نسختك
  10. 10تأمين نسخة Odoo في الإنتاج
  11. 11نصيحة متقدمة: دمج الوحدات المخصصة
  12. 12مقارنة الاستضافة: VPS الذاتية مقابل Odoo SaaS

لماذا تستضيف Odoo Community بنفسك

النسخة SaaS من Odoo المباعة عبر Odoo.sh أو من خلال الشركاء تفرض رسوماً لكل مستخدم ولكل وحدة مُفعَّلة. بالنسبة لشركة صغيرة أو متوسطة من 10 أشخاص تستخدم خمس وحدات، تتجاوز الفاتورة الشهرية بسرعة عدة مئات من اليورو. يكفي خادم VPS بسعر 99 درهم/شهر لتشغيل النسخة نفسها دون أي قيود على عدد المستخدمين أو وحدات Community.

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

أخيراً، التخصيص غير محدود. يتيح Odoo Community تثبيت أي وحدة من المجتمع أو تلك التي طُورت داخلياً دون قيود من الناشر.

ما يتضمنه Odoo 17 Community

  • إدارة علاقات العملاء: خط أنابيب المبيعات والعملاء المحتملين والأنشطة وتتبع العملاء
  • المبيعات: عروض الأسعار وأوامر الشراء والتسعير وشروط الدفع
  • المحاسبة: دليل الحسابات والدفاتر اليومية والتسوية البنكية وضريبة القيمة المضافة
  • الفواتير: فواتير العملاء والموردين والتذكيرات الآلية والمدفوعات
  • المخزون: إدارة المخزون والمواقع وقواعد إعادة التزويد
  • المشتريات: طلبات الشراء وطلبات العروض وتتبع الموردين
  • الموارد البشرية: الموظفون والعقود والإجازات والحضور
  • التسويق عبر البريد الإلكتروني: قوائم البريد والحملات وإحصائيات الإرسال
  • الموقع الإلكتروني والتجارة الإلكترونية: منشئ الصفحات ومتجر إلكتروني متكامل
  • مكتب المساعدة: نظام تذاكر العملاء ومستوى الخدمة وبوابة الخدمة الذاتية

الفروق بين Community وEnterprise

مرّر الجدول أفقيًا

الميزةCommunityEnterpriseالبديل مفتوح المصدر
المحاسبة المتقدمة (التقارير التحليلية)أساسيةكاملةوحدة OCA `account-financial-reporting`
التوقيع الإلكترونيغير متضمنمتضمنوحدة `sign` المجتمعية أو Docusign
جداول الحضور المتقدمةغير متضمنمتضمنوحدة OCA `hr-attendance`
الدعم الرسمي من الناشرمنتدى المجتمعSLA مضمونشريك Odoo معتمد
التحديثات التلقائية (Odoo.sh)غير قابل للتطبيقمتضمنسكريبت ترحيل يدوي
عدد المستخدمينغير محدودغير محدود (مرخص)بدون قيود
السعر (استضافة ذاتية)مجانيمجاني إذا كان ذاتي الاستضافة *مجاني

متطلبات VPS لاستضافة Odoo 17

Odoo تطبيق Python/PostgreSQL يتطلب كميات كبيرة من الذاكرة العشوائية، خاصة عندما يعمل عدة مستخدمين في وقت واحد. الحد الأدنى الموصى به لشركة صغيرة أو متوسطة من 5 إلى 15 مستخدماً:

- المعالج: 4 vCPU كحد أدنى؛ Odoo متعدد العمليات ويستفيد من المعالجة المتوازية
- الذاكرة العشوائية: 8 غيغابايت موصى بها (4 غيغابايت تعمل للاختبار، غير كافية للإنتاج)
- التخزين: 40 غيغابايت SSD NVMe؛ خطط للمزيد إذا فعّلت التجارة الإلكترونية مع الوسائط
- نظام التشغيل: Ubuntu 22.04 LTS أو Debian 12
- Docker Engine 24+ وDocker Compose v2
- اسم نطاق يشير إلى عنوان IP الخاص بـ VPS
- وكيل عكسي (Caddy أو Nginx) لإدارة TLS

خادم VPS بسعر 299 درهم/شهر من ServOrbit.com يلبي هذه المتطلبات بسهولة.

تثبيت Odoo 17 باستخدام Docker Compose

  1. إنشاء هيكل الدلائل

    اتصل عبر SSH بـ VPS الخاص بك وأنشئ شجرة العمل:

    mkdir -p /opt/odoo/{data,addons,config,backups}
    cd /opt/odoo

    ستحمل هذه المجلدات البيانات الدائمة والوحدات المخصصة وإعداد Odoo والنسخ الاحتياطية على التوالي.

  2. كتابة ملف docker-compose.yml

    أنشئ /opt/odoo/docker-compose.yml بالمحتوى التالي:

    services:
      db:
        image: postgres:16
        restart: unless-stopped
        environment:
          POSTGRES_DB: postgres
          POSTGRES_USER: odoo
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
        volumes:
          - ./data/postgres:/var/lib/postgresql/data
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U odoo"]
          interval: 10s
          retries: 5
    
      odoo:
        image: odoo:17.0
        restart: unless-stopped
        depends_on:
          db:
            condition: service_healthy
        environment:
          HOST: db
          USER: odoo
          PASSWORD: ${POSTGRES_PASSWORD}
        volumes:
          - ./data/odoo:/var/lib/odoo
          - ./addons:/mnt/extra-addons
          - ./config/odoo.conf:/etc/odoo/odoo.conf
        ports:
          - "127.0.0.1:8069:8069"
          - "127.0.0.1:8072:8072"
  3. إنشاء ملف ‎.env وإعداد Odoo

    أنشئ /opt/odoo/.env:

    POSTGRES_PASSWORD=$(openssl rand -hex 32)
    echo "POSTGRES_PASSWORD=${POSTGRES_PASSWORD}" > /opt/odoo/.env

    ثم أنشئ /opt/odoo/config/odoo.conf:

    [options]
    db_host = db
    db_port = 5432
    db_user = odoo
    db_password = ${POSTGRES_PASSWORD}
    addons_path = /usr/lib/python3/dist-packages/odoo/addons,/mnt/extra-addons
    admin_passwd = استبدل_بكلمة_مرور_قوية
    without_demo = all
    workers = 4
    max_cron_threads = 2
    limit_memory_hard = 2684354560
    limit_memory_soft = 2147483648
  4. إعداد الوكيل العكسي مع Caddy

    Caddy هو الخيار الأبسط: يتعامل مع TLS تلقائياً عبر Let's Encrypt. أنشئ /etc/caddy/Caddyfile:

    odoo.yourdomain.com {
        reverse_proxy 127.0.0.1:8069
    
        handle /websocket {
            reverse_proxy 127.0.0.1:8072
        }
    
        header {
            X-Frame-Options SAMEORIGIN
            X-Content-Type-Options nosniff
            Strict-Transport-Security "max-age=31536000; includeSubDomains"
        }
    
        encode gzip
    }

    أعد تحميل Caddy: systemctl reload caddy.

  5. تشغيل الحاويات

    من /opt/odoo، شغّل:

    docker compose up -d

    تابع سجلات بدء التشغيل:

    docker compose logs -f odoo

    يستغرق Odoo من 30 إلى 60 ثانية للتهيئة. ستشاهد HTTP service (werkzeug) running عند الاستعداد.

  6. الوصول إلى الواجهة وإنشاء قاعدة البيانات

    افتح https://odoo.yourdomain.com/web/database/manager في متصفحك. أدخل كلمة المرور الرئيسية (admin_passwd) المحددة في odoo.conf، اختر اسم قاعدة البيانات واللغة وبريد المسؤول، ثم انقر على إنشاء. يستغرق التهيئة الأولى من 2 إلى 5 دقائق.

إعداد قاعدة البيانات والنسخة

بعد إنشاء قاعدة البيانات، يعيد Odoo توجيهك إلى الواجهة الرئيسية. أول شيء يجب فعله هو التحقق من كلمة المرور الرئيسية في الإعدادات > التقنية > كلمة المرور الرئيسية. تحمي كلمة المرور هذه الوصول إلى مدير قواعد البيانات — يجب أن تكون طويلة وفريدة.

في الإعدادات > عام، قم بتكوين اسم الشركة والعملة الأساسية والمنطقة الزمنية والعنوان. تؤثر هذه الإعدادات على المستندات المُنشأة (الفواتير وأوامر الشراء).

إعداد النسخ الاحتياطية التلقائية

نسخة Odoo للإنتاج بدون نسخ احتياطية هي دين تقني فوري. تعتمد الاستراتيجية الموصى بها على مستويين.

نسخ احتياطي يومي لـ PostgreSQL مع سكريبت cron:

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/opt/odoo/backups
DB_NAME=your_database

docker compose -f /opt/odoo/docker-compose.yml exec -T db \
  pg_dump -U odoo ${DB_NAME} | gzip > ${BACKUP_DIR}/odoo_${DATE}.sql.gz

# الاحتفاظ بـ 7 أيام
find ${BACKUP_DIR} -name "odoo_*.sql.gz" -mtime +7 -delete

جدوله في /etc/cron.d/odoo-backup للتشغيل في الساعة 02:00 كل ليلة.

نسخ احتياطي للأحجام: يحتوي مجلد /opt/odoo/data/odoo على المرفقات والصور والملفات المرفوعة. قم بمزامنته يومياً مع تخزين الكائنات باستخدام rclone أو restic.

تفعيل الوحدات الرئيسية بعد التثبيت

  • المبيعات (sale_management): عروض الأسعار والطلبات وبوابة العملاء
  • المحاسبة (account_accountant): دليل الحسابات وضريبة القيمة المضافة والتسوية البنكية
  • المخزون (stock): إدارة متعددة المستودعات والأرقام التسلسلية وقواعد التزويد
  • المشتريات (purchase): طلبات الشراء وطلبات العروض والاستلام وفواتير الموردين
  • الموارد البشرية (hr): ملف الموظف والهيكل التنظيمي ومستندات الموارد البشرية
  • مكتب المساعدة (helpdesk): نظام التذاكر ومستوى الخدمة وبوابة الخدمة الذاتية
  • الموقع الإلكتروني (website): منشئ الصفحات والمدونة ونماذج الاتصال
  • التجارة الإلكترونية (website_sale): متجر إلكتروني وعربة تسوق ودفع

تحسين أداء نسختك

  1. ضبط عدد العمال

    في odoo.conf، يتحكم المعامل workers في عدد عمليات Python التي تعالج طلبات HTTP. القاعدة العملية: workers = (vCPU × 2) + 1. على VPS بـ 4 vCPU، اضبط workers = 4.

  2. إعداد حدود الذاكرة

    يقتل Odoo العمال الذين يتجاوزون الحدود المحددة لمنع تسرب الذاكرة.

    limit_memory_soft = 2147483648   # 2 غيغابايت: إشارة الإنهاء بلطف
    limit_memory_hard = 2684354560   # 2.5 غيغابايت: إيقاف فوري
  3. تحديد المهام المجدولة لتجنب تشبع المعالج

    يحجز المعامل max_cron_threads = 2 خيطين للمهام المجدولة. تجاوز ذلك يجعل المهام تتنافس مع عمال HTTP. على خادم مخصص لـ Odoo، يمكنك الرفع إلى 4، لكن ابدأ بحذر.

  4. تفعيل تخزين الجلسات بـ Redis (اختياري)

    افتراضياً، يخزّن Odoo الجلسات على القرص. أضف خدمة Redis إلى docker-compose.yml واضبط:

    session_store = redis
    redis_url = redis://redis:6379

تأمين نسخة Odoo في الإنتاج

يعتمد أمان نسخة Odoo على عدة طبقات تكميلية.

تعطيل مدير قواعد البيانات في الإنتاج هو الإجراء الأكثر أهمية. أضف إلى odoo.conf:

dbfilter = ^your_database$
list_db = False

list_db = False يخفي واجهة الإدارة ويمنع تعداد قواعد البيانات.

إجبار TLS: يتعامل Caddy مع هذا بشكل أصلي.

Fail2ban: قم بإعداد سجن لمحاولات تسجيل الدخول الفاشلة على /web/login.

كلمة مرور رئيسية قوية: يجب أن تحتوي هذه الكلمة على 32 حرفاً عشوائياً على الأقل.

نصيحة متقدمة: دمج الوحدات المخصصة

مجلد /opt/odoo/addons مُحمَّل في الحاوية على /mnt/extra-addons. لتثبيت وحدة مجتمعية (OCA أو تطويرية)، ضعها في هذا المجلد وأضف المسار إلى addons_path في odoo.conf.

بعد إضافة وحدة، أعد تشغيل Odoo (docker compose restart odoo)، ثم انتقل إلى الإعدادات > التطبيقات > تحديث قائمة التطبيقات. تظهر الوحدة في القائمة وتُثبَّت مثل أي وحدة أصلية.

مقارنة الاستضافة: VPS الذاتية مقابل Odoo SaaS

مرّر الجدول أفقيًا

المعيارVPS ذاتية الاستضافة (ServOrbit.com)Odoo.sh / شريك SaaS
التكلفة الشهرية (10 مستخدمين)من 99 درهم/شهر150 إلى 500 يورو حسب الوحدات
السيطرة على البياناتكاملة — البيانات على خادمكالبيانات لدى الناشر أو الشريك
وحدات Communityجميعها متاحة بدون قيوديعتمد على الخطة والشريك
وحدات Enterpriseغير مضمنة (ترخيص منفصل)مضمنة في الاشتراك
النسخ الاحتياطيةمسؤوليتك، قابلة للتكوينتُدار من قبل المنصة
التحديثاتيدوية (ترحيل رئيسي)مُدارة (ترقية بمساعدة)
التخصيصغير محدودمقيد أو مدفوع
المهارات المطلوبةإدارة Linux وDockerلا تتطلب مهارات خادم
الدعم التقنيمجتمع + شريك مختارSLA وفق عقد الناشر

انشر نظام ERP الخاص بك باستقلالية تامة

تقدم ServOrbit.com خوادم VPS محسّنة للأحمال التطبيقية المطلوبة مثل Odoo. موارد مخصصة، SSD NVMe، دعم تقني سريع الاستجابة — كل ما تحتاجه لتشغيل نظام ERP الخاص بك في بيئة الإنتاج.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة