جميع المقالات

نطاق خاص و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.comCNAMEexample.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.

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

المصادر

رُوجعت المصادر في 8 أكتوبر 2026. أودو (Odoo) علامة تجارية لشركة Odoo S.A. أما Knova Cloud فخدمة مستقلة، غير تابعة لشركة Odoo S.A. ولا معتمدة منها.

عن الكاتب

محمد سلمان علي خان، مؤسس Knova Digital Solutions

محمد سلمان علي خان هو مؤسس Knova Digital Solutions في دبي. يبني ويدير استضافة أودو (Odoo) وتطبيقه للشركات في الإمارات وخارجها، ويكتب هذه الأدلة من واقع هذا العمل اليومي.

جرّب سير العمل على مستودعك الخاص

اختر العمّال والتخزين وبيئات التجهيز التي تحتاجها، وسيُبنى فرعك الأول خلال دقائق.

عرض الأسعار · تحدّث معنا