انتقل إلى المحتوى
DevMarket
Odoo ModulesWordPress Pluginsقوالب ووردبريسShopify ThemesApp TemplatesScripts & Utilitiesالمدونةبِع على DevMarket
أدلة Odoo

تثبيت Odoo على Ubuntu: دليل آمن خطوة بخطوة لإصدار Odoo 19.0

دليل خطوة بخطوة لتثبيت Odoo 19.0 على Ubuntu 24.04 LTS من المصدر وبأمان: بلا root، ودور PostgreSQL مخصص، وكلمة مرور رئيسية قوية، وsystemd، ووكيل عكسي مع HTTPS، ونسخ احتياطية.

بقلم DevMarket Editorialنُشر: 8 دقائق قراءة
تثبيت Odoo على Ubuntu: دليل آمن خطوة بخطوة لإصدار Odoo 19.0
في هذه الصفحة

لتثبيت Odoo (أودو) على Ubuntu من المصدر، تثبّت PostgreSQL وبعض حزم النظام، وتنشئ مستخدم نظام مخصصًا باسم odoo ودور PostgreSQL مطابقًا له، وتستنسخ فرع Odoo 19.0، وتثبّت متطلباته من حزم Python في بيئة افتراضية، وتكتب ملف إعداد بكلمة مرور رئيسية قوية، وتشغّل Odoo خدمةً من خدمات systemd. يتبع هذا الدليل وثائق Odoo الرسمية للإصدار 19.0 ويُبقي الخادم آمنًا: فلا تعمل Odoo أبدًا بصلاحيات root، وتقف خلف وكيل عكسي (reverse proxy) مع HTTPS.

باختصار

  • يتطلب Odoo 19.0 الإصدار Python 3.10 أو أحدث وPostgreSQL 13 أو أحدث. وتوفر Ubuntu 24.04 LTS الإصدار Python 3.12 وPostgreSQL 16.
  • استخدم مستخدمًا مخصصًا باسم odoo ودور PostgreSQL ليس مشرفًا عامًا (superuser). ولا تشغّل Odoo بصلاحيات root أبدًا.
  • اجعل الاستماع على 127.0.0.1 فقط، وضع nginx أو وكيلًا عكسيًا آخر مع HTTPS أمامها، ولا تفتح في جدار الحماية إلا SSH وHTTP وHTTPS.
  • عيّن قيمة admin_passwd طويلة وعشوائية، وأنشئ قاعدة بياناتك مرة واحدة، ثم أوقف مدير قواعد البيانات.
  • ثبّت wkhtmltopdf 0.12.6 لتقارير PDF، وثبّت rtlcss إذا كنت تستخدم العربية.

قبل أن تبدأ: الإصدارات والمتطلبات

تسمّي وثائق Odoo الخاصة بمثبّت الحزم الجاهزة للإصدار 19.0 نظام Ubuntu 24.04 LTS (Noble) على أنه إصدار Ubuntu المدعوم، ولهذا يستخدمه هذا الدليل. وقد صدر Ubuntu 26.04 LTS في أبريل 2026 بإصدارات أحدث من Python وPostgreSQL. ويسرد ملف المتطلبات في Odoo 19.0 حزمًا لـ Ubuntu 26.04 بالفعل، لكن الوثائق لا تزال تسمّي 24.04، فراجع الوثائق قبل استخدام 26.04 في الإنتاج.

صدر Odoo 20.0 في سبتمبر 2026، وترفع وثائقه الحدود الدنيا إلى Python 3.12 وPostgreSQL 16، وهو ما يستوفيه Ubuntu 24.04. ولتثبيت 20.0 بدلًا من ذلك، استبدل 19.0 بـ 20.0 في أمر الاستنساخ (clone) واقرأ وثائق 20.0 أولًا. وإذا كنت تعتمد على وحدات خارجية، فتأكد أنها تدعم الإصدار الذي تختاره.

صف من البطاقات تربط بينها أسهم من اليسار إلى اليمين
ثبّت بهذا الترتيب: الحزم، ثم المستخدمين، ثم الشيفرة، ثم الإعداد، ثم الخدمة، ولا تأتي HTTPS والنسخ الاحتياطية إلا بعد ذلك.

الخطوة 1: ثبّت حزم النظام

شغّل هذه الأوامر بمستخدم عادي له صلاحيات sudo. وحزم PostgreSQL والمكتبات مأخوذة من صفحة التثبيت من المصدر في Odoo. وقد أُضيف Git ومترجم (compiler) ورؤوس Python ووحدة venv لأن المتطلبات تُبنى من المصدر. وfonts-noto-core إحدى حزم الخطوط التي تقبلها حزمة Debian الخاصة بـ Odoo للنصوص متعددة اللغات.

sudo apt update
sudo apt install -y git build-essential python3-dev python3-pip python3-venv libldap2-dev libpq-dev libsasl2-dev postgresql postgresql-client fonts-noto-core

wkhtmltopdf لتقارير PDF

تطبع Odoo الفواتير وملفات PDF الأخرى باستخدام wkhtmltopdf. وتشترط الوثائق الإصدار 0.12.6 مع Qt المعدّلة (patched Qt) للترويسات والتذييلات، وحزمة Ubuntu نفسها ليست هذا الإصدار. وليس في صفحة إصدارات wkhtmltopdf ملف لـ Ubuntu 24.04. وأقرب ملف هو ملف Ubuntu 22.04 (jammy)، وهو شائع الاستخدام على 24.04، لكن Odoo لا توثّق هذا الجمع، فاطبع فاتورة اختبار بعد ذلك. استخدم اسم ملف arm64 على خوادم ARM.

cd /tmp
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
sudo apt install -y ./wkhtmltox_0.12.6.1-3.jammy_amd64.deb
wkhtmltopdf --version

وتشرح صفحة Odoo wiki عن wkhtmltopdf الإصدارات.

rtlcss للعربية

تذكر وثائق Odoo أن اللغات التي تُكتب من اليمين إلى اليسار، مثل العربية، تحتاج إلى حزمة rtlcss التي تأتي من npm.

sudo apt install -y nodejs npm
sudo npm install -g rtlcss

الخطوة 2: أنشئ المستخدم odoo ودور PostgreSQL

ترفض Odoo الاتصال بـ PostgreSQL بصفة postgres، لذا تحتاج إلى دور خاص بها. وحين يحمل الدور اسم مستخدم Linux الذي يشغّل Odoo نفسه، تصادق عليه PostgreSQL عبر المقبس المحلي (local socket) دون كلمة مرور. ويسمح الخيار -d للدور بإنشاء قواعد بيانات، ويمنعه -R و-S من إنشاء الأدوار ومن صلاحيات المشرف العام.

sudo adduser --system --group --home /opt/odoo --shell /usr/sbin/nologin odoo
sudo -u postgres createuser -d -R -S odoo
sudo install -d -o odoo -g odoo -m 750 /opt/odoo /opt/odoo/custom-addons /var/lib/odoo /var/log/odoo /etc/odoo

الخطوة 3: نزّل Odoo وثبّت حزم Python

تفضّل وثائق Odoo حزم التوزيعة عبر setup/debinstall.sh وتعدّ pip بديلًا مع تحذير. ويستخدم هذا الدليل بيئة افتراضية، تذكرها الوثائق لعزل حزم Odoo عن حزم النظام، وتكاد تفرضها Ubuntu 24.04 لأنها تمنع تثبيتات pip على مستوى النظام. افتح صدفة (shell) بصفة المستخدم odoo.

cd /tmp
sudo -u odoo -H bash

داخل تلك الصدفة، استنسخ فرع 19.0 وثبّت المتطلبات. تستغرق الخطوتان بضع دقائق. اكتب exit عند انتهائهما.

cd /opt/odoo
git clone --branch 19.0 --single-branch https://github.com/odoo/odoo.git
python3 -m venv venv
venv/bin/pip install -r odoo/requirements.txt

الخطوة 4: اكتب ملف الإعداد

ولّد قيمة عشوائية طويلة لكلمة المرور الرئيسية (master password) التي تحمي مدير قواعد البيانات.

python3 -c 'import secrets; print(secrets.token_urlsafe(24))'

أنشئ الملف بالأمر sudo nano /etc/odoo/odoo.conf والصق فيه ما يلي، مع استبدال القيمة الأولى بالقيمة التي ولّدتها.

[options]
admin_passwd = PASTE-THE-GENERATED-VALUE-HERE
db_user = odoo
addons_path = /opt/odoo/odoo/addons,/opt/odoo/custom-addons
data_dir = /var/lib/odoo
logfile = /var/log/odoo/odoo-server.log
http_interface = 127.0.0.1
http_port = 8069

ثم شغّل sudo chown odoo:odoo /etc/odoo/odoo.conf وsudo chmod 640 /etc/odoo/odoo.conf. فقد تعيد Odoo كتابة هذا الملف، مثلًا عند تغيير كلمة المرور الرئيسية، لذا يجب أن يملكه المستخدم odoo. ويطابق السطر db_user الدور الذي أنشأته في الخطوة 2، ولا حاجة إلى كلمة مرور لقاعدة البيانات عبر المقبس. ويجعل السطر http_interface Odoo متاحة من الخادم نفسه فقط. ولا تضف proxy_mode الآن: فالوثائق تقول إنه لا يُفعَّل إلا خلف وكيل عكسي.

الخطوة 5: شغّل Odoo خدمةً من خدمات systemd

أنشئ /etc/systemd/system/odoo.service بالأمر sudo nano. وهو مبني على ملف الخدمة (unit) في حزمة Debian الخاصة بـ Odoo نفسها، مع تعديله للبيئة الافتراضية.

[Unit]
Description=Odoo 19.0
After=network.target postgresql.service

[Service]
Type=simple
User=odoo
Group=odoo
ExecStart=/opt/odoo/venv/bin/python /opt/odoo/odoo/odoo-bin --config /etc/odoo/odoo.conf
KillMode=mixed
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now odoo
sudo systemctl status odoo --no-pager
sudo tail -n 30 /var/log/odoo/odoo-server.log

ينبغي أن يتضمن السجل سطرًا يفيد بأن خدمة HTTP تعمل على 127.0.0.1:8069. وهذا الملف أول مكان تنظر فيه عند حدوث أي عطل، ويمكن لأدوات تدوير السجلات القياسية إدارته.

الخطوة 6: أنشئ قاعدة بياناتك وأحكم إغلاق الباب

لأن Odoo تستمع على 127.0.0.1، فاتصل بها من حاسوبك عبر نفق SSH.

ssh -L 8069:127.0.0.1:8069 you@your-server

افتح في المتصفح http://localhost:8069/web/database/manager، وأدخل كلمة المرور الرئيسية، واختر اسمًا لقاعدة البيانات وبريدًا إلكترونيًا للمسؤول وكلمة مرور قوية، واترك بيانات العرض التجريبي معطّلة. ثم أضف الأسطر التالية إلى /etc/odoo/odoo.conf وأعد التشغيل بالأمر sudo systemctl restart odoo. ويوصي دليل النشر في Odoo بذلك متى طابق الاسم والمرشّح قاعدة بيانات واحدة: فهو يخفي قائمة قواعد البيانات ويحجب شاشات الإدارة، وتحذّر Odoo من أنها غير مخصصة للأنظمة المكشوفة على الإنترنت.

db_name = mycompany
dbfilter = ^mycompany$
list_db = False

الخطوة 7: أضف HTTPS وجدار حماية ونسخًا احتياطية

الوكيل العكسي وHTTPS. ضع nginx أو وكيلًا عكسيًا آخر في الواجهة، مع شهادة صالحة (يشير دليل Odoo إلى وجود خيارات مجانية كثيرة)، وإعادة توجيه من HTTP إلى HTTPS، وproxy_mode = True في ملف الإعداد بعد أن يعمل الوكيل. وتتضمن وثائق النشر في Odoo المتطلبات ومثالًا لـ nginx. وللفرق الأكبر تصف أيضًا المعالجة المتعددة (multi-processing) عبر workers، وتحتاج إلى قاعدة وكيل إضافية لـ websockets.

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

جدار الحماية. اسمح بـ SSH قبل أن تفعّل جدار الحماية، وإلا حجبت نفسك. وأبقِ المنفذين 8069 و5432 مغلقين: فخدمة Odoo تستمع على localhost، وPostgreSQL لا تقبل إلا الاتصالات المحلية افتراضيًا.

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

ويوصي دليل Odoo أيضًا بتسجيل الدخول عبر SSH بالمفاتيح فقط وبتحديد معدل الطلبات (rate limiting).

النسخ الاحتياطية. مع إيقاف مدير قواعد البيانات، خذ النسخ الاحتياطية من سطر الأوامر. يكتب الأمر db dump في Odoo 19 ملف zip يتضمن مخزن الملفات (filestore). انسخ الملف خارج الخادم، وجدوِل العملية، وجرّب الاستعادة مسبقًا بالأمر db load وخياره -n الذي يُحيّد النسخة التجريبية (neutralize).

sudo install -d -o odoo -g odoo -m 750 /var/backups/odoo
sudo -u odoo -H /opt/odoo/venv/bin/python /opt/odoo/odoo/odoo-bin db -c /etc/odoo/odoo.conf dump mycompany /var/backups/odoo/mycompany.zip

استكشاف الأخطاء الشائعة وإصلاحها

الرسالة أو العَرَضالسببالحل
error: externally-managed-environmentتشغيل pip خارج بيئة افتراضية على Ubuntu 24.04استخدم venv/bin/pip من الخطوة 3
ensurepip is not availableوحدة venv غير مثبتةsudo apt install python3-venv
pg_config executable not foundرؤوس PostgreSQL مفقودة لـ psycopg2sudo apt install libpq-dev build-essential python3-dev
خطأ بناء يذكر lber.hرؤوس LDAP مفقودة لـ python-ldapsudo apt install libldap2-dev libsasl2-dev
role "odoo" does not existلم يُنشأ دور PostgreSQLشغّل الأمر createuser من الخطوة 2
Peer authentication failedتعمل Odoo بمستخدم Linux مختلف عن اسم الدورشغّل الخدمة بصفة odoo، أو عيّن كلمة مرور وdb_password
Address already in useعملية أخرى تستخدم المنفذ 8069اعثر عليها بالأمر sudo ss -ltnp ثم أوقفها أو غيّر http_port
Unable to find Wkhtmltopdf on this systemwkhtmltopdf غير مثبتثبّته كما هو موضح أعلاه ثم أعد تشغيل Odoo
المتصفح لا يستطيع الاتصالتستمع Odoo على 127.0.0.1 فقطاستخدم نفق SSH أو الوكيل العكسي

الأسئلة الشائعة

لماذا لا أشغّل Odoo بصلاحيات root؟

لأن أي خلل أو وحدة خبيثة سيتحكم عندها في الخادم كله. أما المستخدم المخصص فيحصر الضرر في ملفات Odoo ودور قاعدة بياناتها.

هل أستخدم المثبّت المُحزَّم بدلًا من ذلك؟

حزمة .deb الرسمية أبسط: فهي تثبّت Odoo خدمةً وتنشئ مستخدم PostgreSQL نيابة عنك، وتوثّقها Odoo لـ Ubuntu 24.04. أما التثبيت من المصدر فيمنحك تحكمًا أكبر في الإصدارات والإضافات وفي تشغيل عدة نسخ على خادم واحد.

كيف أحدّث Odoo لاحقًا؟

خذ نسخة احتياطية واختبر على نسخة مكررة أولًا. وتذكر وثائق Odoo أن التثبيت من المصدر يُحدَّث بالأمرين git fetch وgit rebase --autostash في مجلد Odoo، ثم إعادة التشغيل. أما الانتقال إلى إصدار رئيسي جديد فهو ترقية لقاعدة البيانات ومشروع منفصل.

أين أضع الوحدات الخارجية؟

في /opt/odoo/custom-addons، وهو موجود أصلًا في مسار الإضافات. راجع كل وحدة أولًا، كما في روتين المراجعة في 30 دقيقة، ثم أعد تشغيل Odoo وحدّث قائمة التطبيقات (Apps list).

الخطوات التالية

تُعد صفحة التثبيت من المصدر في Odoo المرجع للخطوات أعلاه، ويغطي مرجع سطر الأوامر كل خيار. وإذا كنت لا تزال تقارن التكاليف، فاقرأ كم تكلفة Odoo. وحين تصبح جاهزًا للإضافات، راجع كيف تختار وحدة Odoo وتصفّح وحدات Odoo.

XLinkedInWhatsApp

Odoo Studio أم تطوير مخصص: ماذا تستخدم ومتى

Odoo Studio يغيّر Odoo دون كود، والوحدات المخصصة تضيف كودًا. تعرّف على ما يستطيعه كل منهما، وأي نسخة واستضافة تسمحان به، وما تعنيه الترقيات لكليهما، وكيف تقرر بحسب الحاجة.

8 دقائق قراءة

اعثر على البرنامج المناسب للمهمة

لكل منتج على DevMarket إصدار يراجعه فريقنا، ومفتاح ترخيص فوري، وشروط واضحة للتحديث والدعم.