لماذا تستضيف Odoo Community بنفسك
النسخة SaaS من Odoo المباعة عبر Odoo.sh أو من خلال الشركاء تفرض رسوماً لكل مستخدم ولكل وحدة مُفعَّلة. بالنسبة لشركة صغيرة أو متوسطة من 10 أشخاص تستخدم خمس وحدات، تتجاوز الفاتورة الشهرية بسرعة عدة مئات من اليورو. يكفي خادم VPS بسعر 99 درهم/شهر لتشغيل النسخة نفسها دون أي قيود على عدد المستخدمين أو وحدات Community.
السيطرة على البيانات هي الحجة المقنعة الأخرى. مع نسخة مستضافة ذاتياً، تبقى قاعدة بيانات PostgreSQL على خادمك في مركز البيانات الذي تختاره. لا يصل أي طرف ثالث إلى عملائك أو عروض أسعارك أو فواتيرك أو بيانات الموارد البشرية لديك. بالنسبة للشركات الخاضعة لمتطلبات الامتثال — القطاع الطبي والقانوني والتقنية المالية — فإن هذه السيطرة ليست اختيارية.
أخيراً، التخصيص غير محدود. يتيح Odoo Community تثبيت أي وحدة من المجتمع أو تلك التي طُورت داخلياً دون قيود من الناشر.
ما يتضمنه Odoo 17 Community
- إدارة علاقات العملاء: خط أنابيب المبيعات والعملاء المحتملين والأنشطة وتتبع العملاء
- المبيعات: عروض الأسعار وأوامر الشراء والتسعير وشروط الدفع
- المحاسبة: دليل الحسابات والدفاتر اليومية والتسوية البنكية وضريبة القيمة المضافة
- الفواتير: فواتير العملاء والموردين والتذكيرات الآلية والمدفوعات
- المخزون: إدارة المخزون والمواقع وقواعد إعادة التزويد
- المشتريات: طلبات الشراء وطلبات العروض وتتبع الموردين
- الموارد البشرية: الموظفون والعقود والإجازات والحضور
- التسويق عبر البريد الإلكتروني: قوائم البريد والحملات وإحصائيات الإرسال
- الموقع الإلكتروني والتجارة الإلكترونية: منشئ الصفحات ومتجر إلكتروني متكامل
- مكتب المساعدة: نظام تذاكر العملاء ومستوى الخدمة وبوابة الخدمة الذاتية
الفروق بين Community وEnterprise
مرّر الجدول أفقيًا
| الميزة | Community | Enterprise | البديل مفتوح المصدر |
|---|---|---|---|
| المحاسبة المتقدمة (التقارير التحليلية) | أساسية | كاملة | وحدة 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
إنشاء هيكل الدلائل
اتصل عبر SSH بـ VPS الخاص بك وأنشئ شجرة العمل:
mkdir -p /opt/odoo/{data,addons,config,backups} cd /opt/odooستحمل هذه المجلدات البيانات الدائمة والوحدات المخصصة وإعداد Odoo والنسخ الاحتياطية على التوالي.
كتابة ملف 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"إنشاء ملف .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إعداد الوكيل العكسي مع 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.تشغيل الحاويات
من
/opt/odoo، شغّل:docker compose up -dتابع سجلات بدء التشغيل:
docker compose logs -f odooيستغرق Odoo من 30 إلى 60 ثانية للتهيئة. ستشاهد
HTTP service (werkzeug) runningعند الاستعداد.الوصول إلى الواجهة وإنشاء قاعدة البيانات
افتح
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): متجر إلكتروني وعربة تسوق ودفع
تحسين أداء نسختك
ضبط عدد العمال
في
odoo.conf، يتحكم المعاملworkersفي عدد عمليات Python التي تعالج طلبات HTTP. القاعدة العملية:workers = (vCPU × 2) + 1. على VPS بـ 4 vCPU، اضبطworkers = 4.إعداد حدود الذاكرة
يقتل Odoo العمال الذين يتجاوزون الحدود المحددة لمنع تسرب الذاكرة.
limit_memory_soft = 2147483648 # 2 غيغابايت: إشارة الإنهاء بلطف limit_memory_hard = 2684354560 # 2.5 غيغابايت: إيقاف فوريتحديد المهام المجدولة لتجنب تشبع المعالج
يحجز المعامل
max_cron_threads = 2خيطين للمهام المجدولة. تجاوز ذلك يجعل المهام تتنافس مع عمال HTTP. على خادم مخصص لـ Odoo، يمكنك الرفع إلى 4، لكن ابدأ بحذر.تفعيل تخزين الجلسات بـ Redis (اختياري)
افتراضياً، يخزّن Odoo الجلسات على القرص. أضف خدمة Redis إلى
docker-compose.ymlواضبط:session_store = redis redis_url = redis://redis:6379
تأمين نسخة Odoo في الإنتاج
يعتمد أمان نسخة Odoo على عدة طبقات تكميلية.
تعطيل مدير قواعد البيانات في الإنتاج هو الإجراء الأكثر أهمية. أضف إلى odoo.conf:
dbfilter = ^your_database$
list_db = Falselist_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 وفق عقد الناشر |