نطاق خاص وHTTPS لأودو (Odoo): سجلات DNS وnginx وLet's Encrypt ووضع الوكيل
شغّل أودو على نطاقك الخاص عبر HTTPS: سجلات DNS، ووكيل nginx عكسي يدعم websockets، وشهادة Let's Encrypt، وproxy_mode وweb.base.url، والأخطاء الشائعة.
بقلم محمد سلمان علي خان، مؤسس Knova Digital Solutions · نُشر في · 7 دقائق للقراءة · إعداد أودو, نطاق خاص, خادمك الخاص, استضافة أودو
لتشغيل أودو على نطاقك الخاص عبر HTTPS، يجب أن تتوافق أربعة أشياء: سجل DNS يوجّه نطاقك إلى الخادم، ووكيل عكسي مثل nginx يحمل الشهادة ويمرّر الحركة (ومعها websockets) إلى أودو، وشهادة مجانية من Let's Encrypt، وأودو نفسه مضبوطًا على proxy_mode = True مع قيمة web.base.url تستخدم نطاقك. وحين يتعطل شيء، يكون السبب في الغالب واحدًا من هذه الأربعة. يمرّ هذا الدليل عليها بالترتيب، ويعرض الأخطاء الشائعة، وكيف يتولى Knova Cloud ذلك عنك.
الخطوة 1: سجل DNS
أنشئ السجل لدى الجهة التي تستضيف DNS نطاقك (مسجّل النطاق، أو Cloudflare، أو Route 53 وغيرها):
| العنوان | السجل | يشير إلى |
|---|---|---|
erp.example.com (نطاق فرعي) | CNAME | عنوان الخادم لدى مستضيفك، أو سجل A إلى عنوان IP الخاص به |
example.com (النطاق المجرد) | A | عنوان IPv4 للخادم |
www.example.com | CNAME | example.com، أو الهدف نفسه أعلاه |
أربع تفاصيل تسبب معظم مشكلات DNS:
- النطاق المجرد لا يقبل CNAME. هذه قاعدة في DNS لا في أودو. استخدم سجل A، أو الأفضل أن تشغّل أودو على
www.أوerp.وتعيد توجيه النطاق المجرد لدى المسجّل. - سجلات AAAA شاردة. إذا كان للاسم أيضًا سجل IPv6 يشير إلى مكان آخر، فسيذهب إليه بعض الزوار وبعض فحوص الشهادات.
- وكيل Cloudflare. إذا كانت السحابة البرتقالية مفعّلة، فإن Cloudflare هو من يجيب بدل خادمك، وهذا يتعارض مع فحوص الشهادات وwebsockets ما لم تضبطه لذلك. وعند الشك، اجعل السجل «DNS only».
- الانتشار. قد تستغرق التغييرات من دقائق إلى ساعات حتى تظهر في كل مكان. تحقّق بالأمر
dig +short erp.example.comقبل أن تلوم الخادم.
الخطوة 2: الوكيل العكسي (nginx)
يوصي دليل النشر من أودو بتشغيل أودو خلف وكيل ينهي اتصال HTTPS ويعيد توجيه HTTP العادي إلى HTTPS. وهناك نقطتان خاصتان بأودو: مع تفعيل العمّال (workers) يجب أن يذهب المسار /websocket إلى منفذ gevent في أودو (8072 افتراضيًا) مع ترويسات الترقية، ويجب أن يستلم أودو اسم المضيف الحقيقي والبروتوكول وعنوان العميل في الترويسات X-Forwarded-Host وX-Forwarded-Proto وX-Forwarded-For. هذا إعداد مختصر مبني على النموذج الوارد في وثائق أودو:
upstream odoo { server 127.0.0.1:8069; }
upstream odoochat { server 127.0.0.1:8072; }
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
server {
listen 80;
server_name erp.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name erp.example.com;
ssl_certificate /etc/letsencrypt/live/erp.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/erp.example.com/privkey.pem;
proxy_read_timeout 720s;
client_max_body_size 100m;
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Host $http_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 / {
proxy_pass http://odoo;
proxy_set_header X-Forwarded-Host $http_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;
proxy_redirect off;
}
}السطر client_max_body_size ليس في نموذج أودو؛ فالقيمة الافتراضية في nginx وهي 1 ميغابايت صغيرة جدًا لمعظم المرفقات وعمليات الاستيراد. ويقترح دليل أودو أيضًا إضافة ترويسة Strict-Transport-Security بعد أن يعمل HTTPS بثبات.
الخطوة 3: شهادة Let's Encrypt
تصدر Let's Encrypt شهادات مجانية صالحة 90 يومًا، وتوصي بتجديدها كل 60 يومًا. ومع certbot وإضافته لـnginx، يكفي أمر واحد للحصول على الشهادة وتثبيتها:
sudo certbot --nginx -d erp.example.comما يحتاج إليه:
- المنفذ 80 مفتوحًا. تحدّي HTTP-01 المعتاد لا يعمل إلا على المنفذ 80، فلا تغلقه في الجدار الناري حتى لو كنت تعيد توجيه كل شيء إلى HTTPS.
- DNS يشير إلى هذا الخادم مسبقًا. وإلا فستفحص Let's Encrypt جهاز شخص آخر وتفشل.
- سجلات CAA تسمح بـLet's Encrypt إن كان لنطاقك سجلات منها. سجل مثل
0 issue "letsencrypt.org"يسمح بها؛ أما سجل يذكر جهة إصدار أخرى فقط فيمنعها. - تحدّي DNS-01 للشهادات العامة (wildcard). لا يمكن إصدار شهادة تغطي كل النطاقات الفرعية لـ
example.comعبر HTTP-01.
معظم تثبيتات certbot تجدّد الشهادات تلقائيًا من البداية، ويؤكد الأمر sudo certbot renew --dry-run أن تثبيتك يفعل ذلك.
الخطوة 4: أخبر أودو بعنوانه
proxy_mode = Trueفي ملف إعداد أودو. تقول وثائق أودو إنه يُفعَّل فقط خلف وكيل عكسي؛ ومعه يثق أودو بتلك الترويسات المُمرَّرة ويعرف أن الزائر جاء عبر HTTPS.web.base.url. معامل النظام هذا هو العنوان الذي يضعه أودو في الرسائل وروابط البوابة وعروض الأسعار والتقارير. اجعلهhttps://erp.example.com(مع البروتوكول، ودون شرطة مائلة في آخره) من Settings → Technical → System Parameters في وضع المطوّر.web.base.url.freeze = True. من دونه يعيد أودو ضبطweb.base.urlعلى آخر عنوان سجّل منه مسؤولٌ الدخول، مثل عنوان IP للخادم أو نطاق قديم.- نطاق الموقع. إذا كان تطبيق Website مثبتًا، فاضبط النطاق في Website → Configuration → Settings، وهذا يخبر محركات البحث أيضًا بالعنوان الرئيسي.
dbfilter، إذا كان الخادم يستضيف عدة قواعد بيانات، حتى يفتح كل نطاق القاعدة الصحيحة.
الأخطاء الشائعة
| العَرَض | السبب المرجّح |
|---|---|
حلقة إعادة توجيه، أو روابط في الرسائل تبدأ بـhttp:// | proxy_mode معطّل، أو الترويسة X-Forwarded-Proto لا تُمرَّر |
| رسائل «انقطع الاتصال»، أو الدردشة المباشرة وDiscuss لا تتحدث | المسار /websocket لا يُوجَّه إلى منفذ gevent، أو ترويسات الترقية ناقصة |
| عدم تطابق اسم الشهادة أو تحذير «الاتصال غير خاص» | DNS يشير إلى مكان آخر، أو الشهادة لا تغطي هذا الاسم |
| فشل طلب الشهادة | المنفذ 80 مغلق، أو CAA يمنع Let's Encrypt، أو سجل Cloudflare يمرّ عبر الوكيل |
| الرسائل تحمل روابط العنوان القديم | web.base.url غير مضبوط أو غير مُجمَّد |
| فشل الرفع مع «413 Request Entity Too Large» | قيمة client_max_body_size صغيرة جدًا |
كيف يتولى Knova Cloud ذلك
في Knova Cloud، تضيف النطاق من Settings → Custom domains (أو من تبويب Settings في الفرع) وتختار الفرع الذي يخدمه. تعرض المنصة السجل المطلوب: CNAME إلى عنوان مشروعك للنطاق الفرعي، أو سجل A إلى عنوان IP للخادم للنطاق المجرد، مع ملاحظة أن النطاق المجرد يتعطل إذا تغيّر عنوان IP للخادم يومًا، فيكون www. الخيار الأسلم. ومع Cloudflare تذكّرك باستخدام «DNS only».
يخبرك زر Check بما يراه: لا سجل بعد، أو سجل يشير إلى خادم آخر، أو سجل AAAA شارد. ثم تنتقل الحالة من انتظار DNS إلى انتظار الشهادة إلى نشط. تُطلب شهادة Let's Encrypt بمجرد أن يشير DNS إلى المنصة، عادةً خلال دقائق، وتُجدَّد تلقائيًا، ولا شيء ترفعه بنفسك. ويعمل أودو دائمًا مع تفعيل proxy_mode، وتُوجَّه websockets عنك، ويتبع النطاق الإصدارات الجديدة للفرع دون إعادة بناء. ويمكن أن يكون لفروع التجهيز والتطوير نطاقاتها أيضًا. ضع نجمة على نطاق للإنتاج ليصبح النطاق الأساسي، فيصير قيمة web.base.url في أودو، مجمَّدة كي لا يغيّرها تسجيل دخول من عنوان آخر.
على خادمك الخاص، حين تثبّت المنصة أودو لك، تعطيها النطاق وسجل A يشير إلى الخادم. ويجهّز المثبّت nginx والشهادة عبر certbot ووضع الوكيل في أودو. وإن لم يكن DNS جاهزًا بعد، يفتح أودو أولًا على عنوان IP للخادم، وتواصل المنصة الفحص مدة أسبوع وتكمل إعداد HTTPS حين يظهر السجل. وإن فضّلت الإعداد يدويًا، فإن دليل تثبيت Odoo 20 يتضمن خطوات nginx وcertbot.
التفاصيل في وثائق النطاقات الخاصة (بالإنجليزية). ولمعرفة تكلفة مشروع مستضاف، مع النطاقات الخاصة والشهادات، افتح صفحة الأسعار، أو اقرأ كيف نعمل مع الشركات التي تعمل على أودو.
المصادر
- وثائق Odoo 20.0، إعداد النظام (النشر): HTTPS، ووضع الوكيل، ونموذج nginx، وwebsockets، وdbfilter (بالإنجليزية).
- وثائق Odoo 19.0، أسماء النطاقات: CNAME والنطاقات المجردة، وعنوان القاعدة الأساسي و
web.base.url.freeze، ونطاق الموقع (بالإنجليزية). - Let's Encrypt، أنواع التحدي وCAA والأسئلة الشائعة (مدة صلاحية الشهادة).
- Certbot، دليل الاستخدام (التجديد)، وnginx، الوحدة الأساسية (
client_max_body_size).
رُوجعت المصادر في 8 أكتوبر 2026. أودو (Odoo) علامة تجارية لشركة Odoo S.A. أما Knova Cloud فخدمة مستقلة، غير تابعة لشركة Odoo S.A. ولا معتمدة منها.