اودو ۲۰ در سپتامبر ۲۰۲۶ (شهریور ۱۴۰۵) در رویداد Odoo Experience در بروکسل منتشر شد. همان ماه، پشتیبانی استاندارد اودو ۱۷ هم به پایان رسید؛ یعنی اگر هنوز روی ۱۷ هستید، دیگر وصلهٔ امنیتی رسمی دریافت نمیکنید و وقت برنامهریزی برای ارتقاست.
در این راهنما اودو ۲۰ را از سورس روی اوبونتو ۲۴.۰۴ LTS نصب میکنیم. نصب از سورس را به بستهٔ آمادهٔ deb ترجیح میدهیم چون در پروژههای واقعی تقریباً همیشه ماژول اختصاصی دارید و باید بتوانید نسخه را دقیق کنترل کنید.
چرا اوبونتو ۲۴.۰۴؟ این انتخاب سلیقهای نیست. در فایل requirements.txt خود اودو صراحتاً نوشته شده که نسخههای رسماً پشتیبانیشدهٔ کتابخانهها همانهاییاند که در Ubuntu 24.04 و Debian 12 توزیع میشوند. ضمناً اودو ۲۰ دستکم پایتون ۳.۱۲ میخواهد و اوبونتو ۲۴.۰۴ دقیقاً همین را دارد. روی اوبونتو ۲۲.۰۴ (پایتون ۳.۱۰) اودو ۲۰ بالا نمیآید.
پیشنیازها
- سروری با اوبونتو ۲۴.۰۴ LTS و دسترسی
sudo - حداقل ۴ گیگابایت رم (برای محیط تولید ۸ گیگابایت به بالا)
- پایتون ۳.۱۲ یا بالاتر — روی ۲۴.۰۴ بهصورت پیشفرض نصب است
- یک دامنه که به آیپی سرور اشاره کند (برای مرحلهٔ Nginx و SSL)
مرحله ۱ — نصب وابستگیهای سیستمی
ابتدا سیستم را بهروز و بستههای لازم را نصب کنید:
sudo apt update && sudo apt upgrade -y
sudo apt install -y git python3 python3-pip python3-dev python3-venv \
build-essential wget node-less libxslt1-dev libzip-dev libldap2-dev \
libsasl2-dev libssl-dev libpq-dev libjpeg-dev libxml2-dev zlib1g-dev \
libffi-dev libtiff5-dev libopenjp2-7-dev
تفاوت با راهنماهای قدیمیتر: در آموزشهای نسخههای قبل معمولاً less-plugin-clean-css و libmysqlclient-dev هم نصب میشد. اودو سالهاست بهجای LESS از SCSS استفاده میکند و به MySQL هم کاری ندارد؛ این دو را لازم ندارید.
مرحله ۲ — نصب PostgreSQL و ساخت کاربر
اودو پایگاه دادهٔ خود را روی PostgreSQL میسازد:
sudo apt install -y postgresql postgresql-client
sudo systemctl enable --now postgresql
حالا یک کاربر سیستمی برای اودو و یک نقش همنام در PostgreSQL بسازید:
sudo useradd -m -U -r -d /opt/odoo20 -s /bin/bash odoo20
sudo su - postgres -c "createuser -s odoo20"
سوییچ -s نقش را superuser میکند تا اودو بتواند خودش دیتابیس بسازد و حذف کند. اگر روی سروری هستید که چند سرویس دیگر هم روی همان PostgreSQL دارند، بهتر است بهجای superuser فقط CREATEDB بدهید.
مرحله ۳ — دریافت سورس و ساخت محیط مجازی
به کاربر اودو سوییچ کنید و شاخهٔ ۲۰ را بگیرید:
sudo su - odoo20
git clone https://github.com/odoo/odoo --depth 1 --branch 20.0 /opt/odoo20/odoo20
سپس محیط مجازی پایتون بسازید و وابستگیها را نصب کنید:
cd /opt/odoo20
python3 -m venv odoo20-venv
source odoo20-venv/bin/activate
pip install --upgrade pip wheel
pip install -r odoo20/requirements.txt
deactivate
exit
روی اوبونتو ۲۴.۰۴ محیط مجازی اختیاری نیست. از نسخهٔ ۲۳.۰۴ به بعد پایتون سیستمی «externally managed» است و pip install مستقیم با خطا رد میشود. هر راهنمایی که بگوید sudo pip3 install -r requirements.txt، برای این نسخه منسوخ است.
حالا پوشهٔ ماژولهای اختصاصی و فایل لاگ را بسازید:
sudo mkdir -p /opt/odoo20/custom-addons
sudo chown -R odoo20:odoo20 /opt/odoo20/custom-addons
sudo mkdir -p /var/log/odoo20
sudo touch /var/log/odoo20/odoo20.log
sudo chown -R odoo20:odoo20 /var/log/odoo20
مرحله ۴ — rtlcss؛ مرحلهای که برای سایت فارسی حیاتی است
این مرحله در بیشتر آموزشهای انگلیسی یا اصلاً نیست یا یک خط رد شده، ولی اگر سایت یا پنل شما فارسی است، بدون آن کار نمیکند.
اودو فایلهای CSS را برای زبانهای راستبهچپ بهصورت جداگانه تولید میکند و این کار را با فراخوانی برنامهٔ خط فرمان rtlcss انجام میدهد. اگر این برنامه روی سرور نباشد، اودو خطایی نمیدهد و سرویس هم بالا میآید — فقط بیسروصدا همان CSS چپبهراست را سرو میکند. نتیجه این است که صفحه فارسی است ولی چیدمان آن بههمریخته میماند: منو و ستونها در سمت اشتباه، فاصلهها برعکس، و مواردی مثل ایمیل یا شماره در فوتر چپچین.
تشخیص این مشکل سخت است چون شبیه ایراد قالب به نظر میرسد، نه ایراد نصب. پس همین حالا نصبش کنید:
sudo apt install -y nodejs npm
sudo npm install -g rtlcss
rtlcss --version
اگر بعداً rtlcss را نصب کردید، اودو فایلهای CSS قدیمی را در پایگاه داده کش کرده و خودبهخود دوباره نمیسازد. باید کش داراییها را پاک کنید: در حالت توسعهدهنده به مسیر تنظیمات ← فنی ← پیوستها بروید و پیوستهایی که آدرسشان با /web/assets/ شروع میشود را حذف کنید. اودو در اولین بازدید بعدی همه را از نو میسازد.
مرحله ۵ — موتور تولید PDF
اینجا اودو ۲۰ با نسخههای قبل فرق دارد. تا پیش از این، تولید PDF مستقیماً در هستهٔ اودو به wkhtmltopdf گره خورده بود. در اودو ۲۰ موتور PDF ماژولار شده و دو پیادهسازی جداگانه دارد:
base_report_wkhtmltox— همان موتور آشنای wkhtmltopdf. این ماژولauto_installاست، یعنی خودش نصب میشود و رفتار پیشفرض مثل قبل میماند.base_report_paper_muncher— موتور تازهٔ اودو با نام Paper Muncher. برخلاف قبلی خودکار نصب نمیشود و باید دستی فعالش کنید.
برای شروع، همان wkhtmltopdf را نصب کنید. نکته این است که پروژهٔ wkhtmltopdf بایگانی شده و بستهٔ رسمی مخصوص اوبونتو ۲۴.۰۴ منتشر نکرده؛ بستهٔ ۲۲.۰۴ (jammy) روی ۲۴.۰۴ کار میکند:
cd /tmp
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
sudo dpkg -i wkhtmltox_0.12.6.1-2.jammy_amd64.deb
sudo apt install -f -y
wkhtmltopdf --version
در مخزن خود اوبونتو هم بستهٔ wkhtmltopdf هست (نسخهٔ 0.12.6-2build2) و نصبش یک خط است، ولی آن نسخه بدون Qt وصلهخورده ساخته شده و سربرگ و پاورقی گزارشها را درست در نمیآورد. برای سروری که فاکتور چاپ میکند، همان بستهٔ بالا را بگیرید.
مرحله ۶ — فایل پیکربندی
sudo nano /etc/odoo20.conf
محتوای زیر را بگذارید و admin_passwd را حتماً عوض کنید:
[options]
admin_passwd = یک-رمز-قوی-اینجا
db_host = False
db_port = False
db_user = odoo20
db_password = False
addons_path = /opt/odoo20/odoo20/addons,/opt/odoo20/custom-addons
logfile = /var/log/odoo20/odoo20.log
http_port = 8069
proxy_mode = True
limit_time_cpu = 600
limit_time_real = 1200
workers = 4
sudo chown odoo20:odoo20 /etc/odoo20.conf
sudo chmod 640 /etc/odoo20.conf
چند نکته دربارهٔ این مقادیر:
admin_passwdرمز مدیریت پایگاه داده است؛ با آن میشود هر دیتابیسی را روی سرور حذف کرد. مقدار پیشفرضadminرا هرگز نگه ندارید.proxy_mode = Trueفقط وقتی درست است که واقعاً پشت Nginx باشید (مرحلهٔ ۸). اگر بدون پراکسی روشنش کنید، اودو به هدرهای جعلشدنی اعتماد میکند.workersرا روی۲ × تعداد هسته + ۱بگذارید. باworkers = 0اودو تکپروسه اجرا میشود که فقط برای توسعه مناسب است.- مقدارهای
limit_time_*پیشفرض برای گزارشهای سنگین و ایمپورتهای بزرگ کم است؛ اعداد بالا نقطهٔ شروع معقولیاند.
مرحله ۷ — سرویس systemd
sudo nano /etc/systemd/system/odoo20.service
[Unit]
Description=Odoo 20
Requires=postgresql.service
After=network.target postgresql.service
[Service]
Type=simple
SyslogIdentifier=odoo20
PermissionsStartOnly=true
User=odoo20
Group=odoo20
ExecStart=/opt/odoo20/odoo20-venv/bin/python3 /opt/odoo20/odoo20/odoo-bin -c /etc/odoo20.conf
StandardOutput=journal+console
Restart=on-failure
[Install]
WantedBy=multi-user.target
سرویس را فعال و اجرا کنید:
sudo systemctl daemon-reload
sudo systemctl enable --now odoo20
sudo systemctl status odoo20
برای دیدن لاگ زنده:
sudo tail -f /var/log/odoo20/odoo20.log
حالا اودو روی http://آیپی-سرور:8069 در دسترس است.
مرحله ۸ — Nginx بهعنوان پراکسی معکوس و نصب SSL
sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/odoo20
upstream odoo20 {
server 127.0.0.1:8069;
}
upstream odoo20chat {
server 127.0.0.1:8072;
}
server {
listen 80;
server_name example.com;
client_max_body_size 100M;
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 / {
proxy_redirect off;
proxy_pass http://odoo20;
}
location /websocket {
proxy_pass http://odoo20chat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location ~* /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo20;
}
gzip on;
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
}
example.com را با دامنهٔ خودتان عوض کنید، بعد سایت را فعال کنید:
sudo ln -s /etc/nginx/sites-available/odoo20 /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
و گواهی رایگان Let's Encrypt بگیرید:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
بلوک /websocket را حذف نکنید. گفتوگوی زنده، اعلانها و بهروزرسانی لحظهای صفحهها از پورت ۸۰۷۲ میآیند. اگر این بخش نباشد اودو ظاهراً سالم کار میکند ولی اعلانها نمیرسند و کنسول مرورگر پر از خطای اتصال میشود.
نسخهٔ Enterprise
تا اینجا نسخهٔ Community نصب شد. برای Enterprise باید مخزن خصوصی آن را هم کنار سورس بگذارید (دسترسی به آن با اشتراک فعال داده میشود) و مسیرش را قبل از مسیر addons استاندارد در فایل پیکربندی بیاورید:
addons_path = /opt/odoo20/enterprise,/opt/odoo20/odoo20/addons,/opt/odoo20/custom-addons
ترتیب مهم است: اودو اولین نسخهای از هر ماژول را که پیدا کند برمیدارد، و ماژولهای Enterprise باید بر همنامهای Community اولویت داشته باشند. بعد از افزودن مسیر، سرویس را ریاستارت و پایگاه داده را با -u all یکبار بهروزرسانی کنید.
تنظیمات فارسی بعد از نصب
پس از ساخت پایگاه داده، این موارد را انجام دهید:
- زبان فارسی را از تنظیمات ← ترجمهها ← زبانها فعال و بهعنوان زبان پیشفرض کاربران انتخاب کنید.
- اگر سایت شما فقط فارسی است، انگلیسی را از فهرست زبانهای وبسایت بردارید. وگرنه اودو زبان هر بازدید را از هدر
Accept-Languageمرورگر انتخاب میکند و کاربری که مرورگرش انگلیسی است، سایت فارسی شما را با قالب انگلیسی میبیند. - برای تاریخ شمسی به ماژول تقویم فارسی نیاز دارید؛ اودو بهصورت پیشفرض فقط تقویم میلادی دارد.
- یک فونت فارسی مناسب وب به قالب اضافه کنید. فونتهای پیشفرض اودو برای متن فارسی طراحی نشدهاند.
جمعبندی
نصب اودو ۲۰ روی اوبونتو ۲۴.۰۴ تفاوت ساختاری بزرگی با نسخههای قبل ندارد، ولی سه نکته تازه است که نادیده گرفتنشان وقت میگیرد: الزام پایتون ۳.۱۲، اجباریشدن محیط مجازی روی اوبونتو جدید، و ماژولار شدن موتور PDF. برای پروژهٔ فارسی هم rtlcss را جزو نصب حساب کنید، نه یک گزینهٔ اضافی.
اگر هنوز روی نسخهٔ قدیمیتری هستید، راهنمای نصب اودو ۱۷ را هم داریم؛ هرچند پشتیبانی استاندارد آن تمام شده و برای نصب تازه توصیه نمیشود. برای انتخاب بین نسخهها مقایسهٔ نسخههای اودو را ببینید و اگر هنوز در مرحلهٔ شناخت هستید، اودو چیست؟ نقطهٔ شروع بهتری است.
اگر در نصب یا ارتقا به مشکل خوردید یا میخواهید پیادهسازی را به ما بسپارید، با اودوکاران تماس بگیرید.