تخطي إلى المحتوى الرئيسي

تثبيت Odoo على سيرفر لينكس - شغّل نظام ERP و CRM مفتوح المصدر الخاص بك

المنتجات المثالية لهذا الدليل

ابدأ على الفور — اطلب المنتج المناسب واتبع هذا الدليل خطوة بخطوة.

مقدمة

Odoo هو منصة مفتوحة المصدر ومودولار تجمع بين ميزات تخطيط موارد المؤسسات (ERP) وإدارة علاقات العملاء (CRM). يتيح للأعمال إدارة وأتمتة عمليات مثل المحاسبة، المخزون، إدارة المشاريع، والمبيعات من نظام واحد.

مع امتداداته المرنة، يمكن تخصيص Odoo لتلبية الاحتياجات الخاصة ويوفر حلاً متكاملاً لإدارة جميع مجالات الشركة.

img

تفكر تستضيف الخدمة بنفسك؟ راح نرشدك خطوة بخطوة لكيفية تثبيتها وضبطها، مع كل اللي تحتاج تعرفه.

المتطلبات الأساسية

قبل تثبيت Odoo، تأكد أن بيئة الاستضافة عندك تلبي المتطلبات التالية لضمان تثبيت سلس وأداء مثالي.

العتادالحد الأدنىالموصى به
CPU1 نواة vCPU4 أنوية vCPU
RAM1 جيجابايت4 جيجابايت
مساحة القرص15 جيجابايت25 جيجابايت

البرنامج يحتاج كل التبعيات الضرورية تكون مثبتة ويشتغل على نظام تشغيل مدعوم. تأكد أن سيرفرك يحقق المتطلبات التالية قبل المتابعة بالتثبيت:

التبعيات: Docker

نظام التشغيل: أحدث إصدار من أوبونتو/ديبيان يدعم Docker 26+

تأكد من تثبيت كل التبعيات واستخدام نسخة نظام التشغيل الصحيحة لتجنب مشاكل التوافق أثناء تثبيت Odoo.

التحضير

قبل إعداد Odoo، لازم تجهز نظامك. هذا يشمل تحديث نظام التشغيل لأحدث نسخة وتثبيت كل التبعيات المطلوبة. هالتحضيرات تضمن بيئة مستقرة وتساعد على منع المشاكل أثناء أو بعد التثبيت.

تحديث النظام

عشان تتأكد أن نظامك يشتغل بأحدث البرامج وتحسينات الأمان، لازم تسوي تحديث للنظام أولاً. نفذ الأمر التالي:

sudo apt update && sudo apt upgrade -y

هذا يضمن أن نظامك يحتوي على آخر تحديثات الأمان والإصدارات قبل المتابعة.

تثبيت التبعيات

بعد ما يخلص التحديث، تقدر تبدأ بتثبيت التبعيات. Bitwarden راح يتم نشره وتشغيله على جهازك باستخدام مجموعة من حاويات Docker. لهذا لازم تثبت Docker أولاً. نفذ الأمر التالي:

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

شرح كامل لعملية التثبيت وكيفية استخدام Docker متوفر في دليل Docker الخاص بنا.

ضبط النطاق

بشكل افتراضي، Odoo يشتغل على السيرفر عبر المنافذ 80 (HTTP) و443 (HTTPS). جهز نطاق مع سجلات DNS تشير إلى السيرفر. إذا كان النطاق مُدار من طرفنا، تقدر تسوي هالشي بسهولة باستخدام خيار EasyDNS.

التثبيت

بعد ما تحقق كل المتطلبات وأكملت التحضيرات، تقدر تبدأ بتثبيت تطبيق Odoo.

لما تشتغل مع عدة إعدادات Docker، من الأفضل تنشئ هيكل مجلدات واضح عشان تفصل المشاريع عن بعضها. طريقة شائعة هي إنشاء مجلد docker داخل مجلد المستخدم، مع مجلد فرعي مخصص لكل نطاق. بهالطريقة، تقدر تستضيف مشاريع متعددة على نفس السيرفر بدون تعارض في الإعدادات.

مثلاً، لتحضير الهيكل لنطاق example.com:

mkdir -p /docker/example.com
cd /docker/example.com

داخل مجلد المشروع، يُنصح بإنشاء مجلدات فرعية تُركب كـ volumes من قبل الحاويات. هالحجوم تسمح بمشاركة البيانات بين الخدمات أو الحفاظ عليها بشكل دائم. حالة مهمة هي الجذر المشترك للويب، اللي لازم nginx وcertbot يوصلون له عشان يولدون ويجددون شهادات SSL. ممكن تنشئ هيكل مناسب كالتالي:

mkdir -p nginx/{conf,ssl,inc} config addons

هذا يوفر مجلدات مخصصة لإعدادات nginx، شهادات SSL، ملفات التضمين، ومحتوى خاص بـ Odoo مثل الإعدادات والإضافات.

إنشاء Docker Compose

داخل مشروع docker، أنشئ ملف compose.yml باستخدام nano compose.yml. الصق الكود التالي فيه:

services:
db:
image: postgres:16
ports:
- "5432:5432"
environment:
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=odoo
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- odoo-db-data:/var/lib/postgresql/data

odoo:
image: odoo:18.0
depends_on:
- db
ports:
- "8069:8069"
volumes:
- odoo-web-data:/var/lib/odoo
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
command: odoo -d odoo_db -i base --db_user=odoo --db_password=odoo --db_host=db

nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./nginx/inc:/etc/nginx/inc
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/certbot/www:/var/www/certbot
- ./nginx/certbot/conf:/etc/letsencrypt
depends_on:
- odoo

certbot:
image: certbot/certbot
volumes:
- ./nginx/certbot/www:/var/www/certbot
- ./nginx/certbot/conf:/etc/letsencrypt

volumes:
odoo-db-data:
odoo-web-data:

الجدار الناري

عشان يشتغل nginx وcertbot بشكل صحيح، لازم تسمح بمرور منافذ TCP 80 (HTTP) و443 (HTTPS) عبر الجدار الناري. هالمنافذ ضرورية لأن certbot يعتمد على المنفذ 80 للتحقق عبر HTTP، والمنفذ 443 مطلوب لخدمة حركة مرور HTTPS المشفرة. إذا كان UFW (جدار ناري بسيط) مفعل، تقدر تضيف القواعد اللازمة بالأوامر التالية:

sudo ufw allow http
sudo ufw allow https

بعدها تحقق من القواعد عبر الأمر sudo ufw status لتتأكد أن المنافذ مفتوحة. تأكد ما في إعدادات جدار ناري أخرى تمنع الوصول لهالمنافذ، لأن هذا ممكن يسبب فشل في توليد الشهادات أو حركة مرور HTTPS الآمنة.

إعداد Nginx

يبدأ إعداد nginx بإنشاء ملف إعدادات لنطاقك. داخل مجلد nginx/conf، أنشئ ملف جديد باسم نطاقك. نفذ الأمر nano nginx/conf/example.com.conf وأضف التوجيهات الأساسية مع استبدال example.com بنطاقك الحقيقي:

server {
listen 80;
server_name example.com;

location /.well-known/acme-challenge/ {
root /var/www/certbot;
}

location / {
return 301 https://$host$request_uri;
}
}

هالإعداد يسمح لـ certbot بإكمال تحدي ACME وإصدار شهادات SSL صالحة. كما يضمن تحويل كل طلبات HTTP إلى HTTPS.

بعد حفظ الملف، شغّل الحاويات المطلوبة، وهي قاعدة البيانات، Odoo، وnginx. نفذ الأمر:

sudo docker compose up -d db odoo nginx

الحاويات راح تشتغل في الخلفية، وnginx راح يستخدم الإعداد الجديد، مما يمكّن certbot من توليد الشهادات في الخطوة التالية.

توليد شهادات SSL

شغّل الأمر التالي لإنشاء شهادات SSL باستخدام certbot. تأكد من تحديد نطاقك الخاص بعد العلامة -d واستبدال البريد الإلكتروني user@mail.com ببريدك الصحيح.

sudo docker compose run --rm certbot certonly --webroot --webroot-path=/var/www/certbot -d example.com --email user@mail.com --agree-tos --no-eff-email

بعدها، أنشئ ملف معلمات DH مخصص لتعزيز أمان تبادل المفاتيح التشفيرية.

openssl dhparam -out nginx/ssl/dhparam.pem 2048

الآن أنشئ ملف ssl.conf باستخدام nano nginx/ssl/ssl.conf وأضف المحتوى التالي مع استبدال example.com بنطاقك:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ecdh_curve X25519:prime256v1:secp384r1;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_dhparam "/etc/nginx/ssl/dhparam.pem";
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 1.1.1.1 1.0.0.1 valid=300s;

الإعدادات

إعدادات Nginx

حرر ملف إعدادات nginx اللي أنشأته قبل، واستبدل محتواه بالإعداد التالي لضمان أن موقعك يُخدم فقط عبر HTTPS.

تأكد من إدخال نطاقك الحقيقي في توجيه server_name وتحديد المسارات الصحيحة لملفات الشهادة في ssl_certificate و ssl_certificate_key.

server {
listen 443 ssl;
http2 on;
server_name example.com;

# تضمين إعدادات SSL من موزيلا
include /etc/nginx/ssl/ssl.conf;

# مسارات الشهادات (تأكد أنها تطابق مجلداتك المركبة)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

# رؤوس الأمان
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

access_log /var/log/nginx/odoo_access.log;
error_log /var/log/nginx/odoo_error.log;

# ضغط Gzip
include /etc/nginx/inc/gzip.conf;

# إعدادات البروكسي لـ Odoo
location / {
proxy_pass http://odoo:8069;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
proxy_redirect off;
proxy_request_buffering off;
# مهلات موصى بها للطلبات العادية
proxy_connect_timeout 30s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
send_timeout 60s;
}

# تخزين مؤقت للملفات الثابتة
location ~* /web/static/ {
proxy_cache_valid 200 60m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo:8069;
}

# زيادة المهلات للطلبات الطويلة
location /longpolling {
proxy_pass http://odoo:8069;
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
send_timeout 300s;
}

location /websocket {
proxy_pass http://odoo:8069;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

server {
listen 80;
server_name example.com;

# هذا يسمح لـ Certbot بالوصول إلى عنوان التحدي
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}

location / {
return 301 https://$host$request_uri;
}
}

بعد حفظ التغييرات في إعدادات nginx، لازم تطبق الإعدادات الجديدة بإعادة تشغيل حاوية nginx:

sudo docker compose restart nginx

إعادة التشغيل تضمن أن nginx يحمل الإعدادات المحدثة ويبدأ فوراً بخدمة الطلبات بالمعايير الجديدة. راقب أي رسائل خطأ أثناء إعادة التشغيل. إذا واجهت مشاكل، تقدر تفحص سجلات الحاوية باستخدام sudo docker compose logs nginx لتشخيص المشاكل المحتملة. لما تشتغل الحاوية بدون أخطاء، افتح موقعك وتأكد أن HTTPS شغال والموقع يُخدم بشكل صحيح.

خيارات إعداد Odoo

لتطبيق إعدادات مخصصة، تقدر تنشئ ملف إعداد خاص لـ Odoo. حط ملف جديد في config/odoo.conf وأضف الخيارات اللي تبيها.

في هالملف تقدر تعرف عدة معلمات مفيدة: list_db = False يخفي اختيار قاعدة البيانات من صفحة تسجيل الدخول، proxy_mode = True يخبر Odoo أنه يعمل خلف بروكسي عكسي، وإذا تبي تستخدم إضافات مخصصة، تقدر تلغي تعليق سطر addons_path وتشير إلى مجلد الإضافات اللي أنشأته قبل. مثال للإعداد:

[options]
list_db = False
proxy_mode = True
#addons_path = /mnt/extra-addons

إزالة علامة -i base

لازم تشيل علامة -i base من ملف compose.yml، لأنها تعيد إنشاء قاعدة البيانات لما تعيد إنشاء حاوية odoo. عشان تشيلها، افتح ملف compose باستخدام nano compose.yml وعدل الأمر ليصير كالتالي:

command: odoo -d odoo_db --db_user=odoo --db_password=odoo --db_host=db

الوصول للموقع

بعد ما تخلص التثبيت والإعداد وكل الخدمات شغالة، تقدر تدخل موقعك بأمان عن طريق كتابة نطاقك في شريط عنوان المتصفح.

img

راح تظهر صفحة البداية للتثبيت الجديد. لتسجيل الدخول الأولي، الحساب الافتراضي هو admin وكلمة المرور admin. ننصح بشدة تغير هالبيانات.

الخاتمة والمزيد من الموارد

مبروك! الآن ثبت وضبطت Odoo بنجاح على VPS/سيرفر مخصص خاصتك. ننصحك أيضاً تطّلع على الموارد التالية، اللي ممكن تساعدك وتوجهك أكثر خلال إعداد السيرفر:

عندك أسئلة محددة ما تغطيها هالإرشادات؟ لأي استفسار أو مساعدة إضافية، لا تتردد تتواصل مع فريق الدعم عندنا، متوفر يومياً لخدمتك! 🙂