نشر Docker Odoo: إعداد حاوية جاهزة للإنتاج
**أصبح Docker طريقة النشر القياسية لـ Odoo في بيئات الإنتاج، مع أكثر من 10 ملايين صورة Odoo Docker يتم سحبها على Docker Hub. ** يوفر النشر في حاويات بيئات قابلة للتكرار، وقياسًا سهلاً، ونسخًا احتياطية مبسطة، وفصلًا نظيفًا بين مثيلات Odoo. يغطي هذا الدليل إعداد Docker Odoo الكامل الجاهز للإنتاج.
الوجبات الرئيسية
- يقوم Docker Compose بتنسيق Odoo وPostgreSQL وNginx كخدمات متصلة
- تضمن وحدات التخزين المستمرة بقاء البيانات بعد إعادة تشغيل الحاوية وتحديثاتها
- يتعامل الوكيل العكسي Nginx مع إنهاء SSL والتخزين المؤقت للملفات الثابتة وموازنة التحميل
- تحمي النسخ الاحتياطية الآلية من فقدان البيانات بأقل قدر من التدخل اليدوي
نظرة عامة على الهندسة المعمارية
يتكون نشر Odoo Docker للإنتاج من ثلاث خدمات أساسية:
- خادم تطبيق Odoo: حاوية Odoo التي تقوم بتشغيل خادم الويب ومنطق التطبيق
- قاعدة بيانات PostgreSQL: حاوية قاعدة بيانات مخصصة لتخزين كافة بيانات Odoo
- وكيل Nginx العكسي: يتعامل مع طبقة المقابس الآمنة (SSL)، ويقدم الملفات الثابتة، ويطلب الوكلاء إلى Odoo
تشمل الخدمات الاختيارية Redis (للتخزين المؤقت وتخزين الجلسة)، وحاوية النسخ الاحتياطي (تفريغ قاعدة البيانات الآلية)، والمراقبة (Prometheus + Grafana).
تكوين تكوين عامل الميناء
أساس النشر هو ملف docker-compose.yml يحدد جميع الخدمات:
version: "3.8"
services:
odoo:
image: odoo:17.0
depends_on:
- db
ports:
- "8069:8069"
- "8072:8072"
volumes:
- odoo-data:/var/lib/odoo
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
environment:
- HOST=db
- PORT=5432
- USER=odoo
- PASSWORD=odoo_db_password
restart: unless-stopped
db:
image: postgres:16
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=odoo_db_password
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- postgres-data:/var/lib/postgresql/data/pgdata
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
depends_on:
- odoo
restart: unless-stopped
volumes:
odoo-data:
postgres-data:
ملف تكوين Odoo
أنشئ config/odoo.conf باستخدام الإعدادات المحسنة للإنتاج:
[options]
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
admin_passwd = your_strong_admin_password
db_host = db
db_port = 5432
db_user = odoo
db_password = odoo_db_password
db_name = production_db
dbfilter = ^production_db$
list_db = False
proxy_mode = True
workers = 4
max_cron_threads = 2
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_time_cpu = 600
limit_time_real = 1200
log_level = warn
شرح الإعدادات الرئيسية:
proxy_mode = True: مطلوب عند التشغيل خلف Nginx للتعامل بشكل صحيح مع الترويسات المُعاد توجيههاworkers = 4: عدد العمليات المنفذة (القاعدة الأساسية: عاملان لكل نواة وحدة المعالجة المركزية)max_cron_threads = 2: مواضيع مخصصة للإجراءات المجدولةlist_db = False: يمنع إدراج قاعدة البيانات في صفحة تسجيل الدخول (الأمان)dbfilter: يقيد الوصول إلى قاعدة بيانات واحدة
تكوين الوكيل العكسي لـ Nginx
upstream odoo {
server odoo:8069;
}
upstream odoochat {
server odoo:8072;
}
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
client_max_body_size 200m;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
proxy_pass http://odoo;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo;
}
}
استراتيجية النسخ الاحتياطي
النسخ الاحتياطي الآلي لقاعدة البيانات
قم بإنشاء برنامج نصي احتياطي يتم تشغيله يوميًا عبر cron:
#!/bin/bash
BACKUP_DIR=/backups/odoo
DATE=$(date +%Y%m%d_%H%M%S)
docker exec odoo-db pg_dump -U odoo production_db | gzip > $BACKUP_DIR/odoo_$DATE.sql.gz
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete
النسخ الاحتياطي لمخزن الملفات
يوجد مخزن ملفات Odoo (المستندات والمرفقات التي تم تحميلها) في المجلد odoo-data. قم بعمل نسخة احتياطية بجانب قاعدة البيانات:
docker run --rm -v odoo-data:/data -v /backups:/backup alpine \
tar czf /backup/odoo-filestore_$DATE.tar.gz /data
##تشديد الأمن
- قم بتغيير
admin_passwdالافتراضي في odoo.conf إلى كلمة مرور عشوائية قوية - قم بتعيين
list_db = Falseلمنع تعداد قاعدة البيانات - استخدم
dbfilterلتقييد الوصول إلى قاعدة البيانات بقاعدة بيانات واحدة - تشغيل الحاويات كمستخدمين غير جذريين حيثما أمكن ذلك
- حافظ على تحديث صور Docker بتصحيحات الأمان
- استخدم أسرار Docker أو ملفات متغيرات البيئة (وليس كلمات المرور المضمنة)
- تقييد الوصول إلى شبكة الحاويات باستخدام شبكات Docker
الأسئلة المتداولة
س: كم عدد المستخدمين المتزامنين الذين يمكنهم التعامل مع حاوية Odoo واحدة؟
مع 4 عمال، تتعامل حاوية Odoo مع ما يقرب من 20-30 مستخدمًا متزامنًا بشكل مريح. للحصول على مستوى أعلى من التزامن، قم بزيادة عدد العاملين (محدود بوحدة المعالجة المركزية/ذاكرة الوصول العشوائي) أو قم بنشر حاويات Odoo متعددة خلف موازن التحميل.
س: كيف يمكنني تحديث Odoo في Docker؟
اسحب الصورة الجديدة، وأوقف الحاوية الحالية، وقم بتشغيل الصورة الجديدة باستخدام وحدات التخزين الموجودة. تحتفظ وحدات التخزين الدائمة ببياناتك ومخزن الملفات عبر تحديثات الصور.
س: هل يجب علي استخدام صورة Odoo Docker الرسمية أو إنشاء نسخة خاصة بي؟
الصورة الرسمية تعمل لعمليات النشر القياسية. أنشئ صورة مخصصة عندما تحتاج إلى حزم Python محددة، أو تبعيات النظام للوحدات النمطية المخصصة، أو وحدات المجتمع المثبتة مسبقًا.
س: كيف يمكنني التعامل مع Odoo Enterprise في Docker؟
Odoo Enterprise غير متاح كصورة Docker عامة. قم بتثبيت دليل الوظائف الإضافية للمؤسسة كوحدة تخزين وقم بالإشارة إليه في تكوين addons_path. أنت بحاجة إلى اشتراك Odoo Enterprise صالح.
ما هو التالي
يمنحك نشر Docker بيئة إنتاج Odoo قابلة للتكرار والتوسع والصيانة. ابدأ بهذا التكوين واضبط عدد العاملين وحدود الذاكرة والتخزين المؤقت بناءً على أنماط الاستخدام الخاصة بك.
اتصل بـ ECOSIRE للحصول على مساعدة في نشر Odoo، أو استكشف خدمات دعم Odoo للاستضافة المُدارة.
تم النشر بواسطة ECOSIRE - مساعدة الشركات على التوسع باستخدام حلول برمجيات المؤسسات.
بقلم
ECOSIRE Research and Development Team
بناء منتجات رقمية بمستوى المؤسسات في ECOSIRE. مشاركة رؤى حول تكاملات Odoo وأتمتة التجارة الإلكترونية وحلول الأعمال المدعومة بالذكاء الاصطناعي.
مقالات ذات صلة
تكامل Allegro Marketplace مع Odoo: منصة التجارة الإلكترونية الرائدة في بولندا
الدليل الكامل لدمج سوق Allegro مع Odoo ERP الذي يغطي إعداد REST API وAllegro Smart والمزايدة والشحن للتجارة الإلكترونية البولندية.
أتمتة الحسابات الدائنة باستخدام Odoo: من الفاتورة إلى الدفع
أتمتة الحسابات المستحقة الدفع في Odoo بدءًا من التقاط الفاتورة ومرورًا بسير عمل الموافقة وحتى تنفيذ الدفع. تقليل تكاليف المعالجة والقضاء على غرامات التأخر في السداد.
كيفية اختيار إدارة علاقات العملاء (CRM) المناسبة لعملك في عام 2026
دليل كامل لاختيار منصة CRM المناسبة في عام 2026، مقارنة بين Odoo CRM وSalesforce وHubSpot وGoHighLevel وZoho عبر الميزات والتسعير وقابلية التوسع والملاءمة مع الصناعة.