
به اشتراک بگذارید

به اشتراک بگذارید
«غیرفعال کردن مدیر دیتابیس روی هر سیستمِ رو به اینترنت بهشدت توصیه میشود.» این هشدار مستندات Odoo از خود نصب odoo مهمتر است. نصب روی Ubuntu 24.04 با مخزن رسمی چهار دستور است؛ دردسر از تصمیمهای گرفتهنشده میآید.
💡 جای Odoo کنار حسابداری فعلی
نرمافزار Odoo فروش و انبار را در یک ERP تحت وب روی دیتابیس PostgreSQL جمع میکند.
✅ حسابداری روی سرور مجازی تکلیف شعبههایی را روشن میکند که روی نرمافزار حسابداری ویندوزی و یک دیتابیس مشترک میمانند.
هر پاسخ مدیر یک خط odoo.conf میشود؛ هفت پاسخ که بدهید، فایل هم نوشته شده است.
📌 تصمیمهایی که odoo.conf را میسازند
◀️ نسخه و روش راهاندازی
◀️ دیتابیس، پورتها و رمز اصلی
◀️ ورکرها، websocket و Nginx
◀️ بکاپ دیتابیس و پیوستها

برای کار روزانه یک شرکت، گزینه معقول Odoo 20 با بسته رسمی deb است. شاخه latest مستندات Odoo در آبان ۱۴۰۵ به 20.0 میرسد و راهنمای نصب odoo با بسته deb فقط Ubuntu 24.04 را نام میبرد.
خیر؛ دفتر کل و تطبیق بانکی در Enterprise است.
در جدول مقایسه نسخههای Odoo، اپ Accounting فقط برای Enterprise تیک دارد و Community با Invoicing، Sales و Inventory میآید. Community زیر مجوز LGPLv3 است و مجوز Enterprise اجرا را به اشتراک معتبر گره میزند. بسته Enterprise از صفحه دانلود Odoo میآید.
حسابداریای که فعلاً روی SQL Server میماند، سرورش را با معیارهای سرور حسابداری و ERP انتخاب میکند.
برای یک شرکت، بسته رسمی.
طبق صفحه نصبکنندههای بستهای Odoo، بسته deb نسخه 20 فعلاً Ubuntu Noble (24.04 LTS) را پشتیبانی میکند و سرویس و کاربر PostgreSQL را خودش میسازد. اجرا از سورس، به گفته صفحه Source install، به کار توسعهدهنده ماژول میآید. سرویس بستهای پیکربندی را از /etc/odoo/odoo.conf میخواند.
معمولاً بله، و گره همینجاست.
مستندات Odoo برای سربرگ، wkhtmltopdf 0.12.6 را با نصب دستی میخواهد. ویکی Odoo بیلد 0.12.6.1-3 را پیشنهاد میدهد و بسته مخزن Ubuntu را بیسربرگ میداند؛ آن بیلد برای jammy هست و برای noble نیست. نصب بیلد jammy روی 24.04 جایی مستند نشده؛ پس پیش از اولین فاکتور، PDF آزمایشی بگیرید.

بسته deb انتظار دارد PostgreSQL روی همان سرور باشد و Ubuntu 24.04 نسخه 16 را دارد که حداقل لازم Odoo 20 است. هنگام نصب odoo با این بسته، کاربر سیستمی odoo و نقش PostgreSQL همنامش با اجازه ساخت دیتابیس ساخته میشود. دستورها از مستندات Odoo 20:
sudo apt install postgresql -y
wget -q -O - https://nightly.odoo.com/odoo.key | sudo gpg --dearmor -o /usr/share/keyrings/odoo-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/odoo-archive-keyring.gpg] https://nightly.odoo.com/20.0/nightly/deb/ ./' | sudo tee /etc/apt/sources.list.d/odoo.list
sudo apt-get update && sudo apt-get install odoo
اگر سرور به nightly.odoo.com راه نداشته باشد، apt-get update خطا میدهد؛ پیش از شروع، پاسخ curl -I https://nightly.odoo.com/20.0/nightly/deb/ را ببینید.
هر ماژول Odoo مغازه خودش را میگرداند، اما کلید برق ساختمان، یعنی odoo.conf و رمز اصلی، در دفتر مدیریت پاساژ میماند.
اجازه ساخت دیتابیس، ولی هرگز superuser.
طبق صفحه پیکربندی سیستم Odoo، مدیر دیتابیس نقشی با createdb میخواهد که superuser نباشد؛ نقش بدون createdb و دیتابیسی با مالک دیگر، آن صفحه را بیاثر میکند. فایل بسته از قبل db_user = odoo را دارد.
خیر؛ Odoo بهطور پیشفرض روی همه نشانیها گوش میدهد.
مرجع خط فرمان پیشفرض http_interface را 0.0.0.0 مینویسد و ورکر websocket هم همین نشانی را میگیرد؛ پس از لحظه نصب، 8069 و 8072 و صفحه مدیر دیتابیس با IP عمومی باز است. Odoo را به 127.0.0.1 ببندید تا فقط Nginx به آن برسد و در فایروال، مثلاً ufw، فقط SSH، 80 و 443 را باز بگذارید. بررسی از خود سرور:
sudo systemctl status odoo
curl -sI http://127.0.0.1:8069
sudo tail -n 50 /var/log/odoo/odoo-server.log
از خط فرمان، پیش از باز شدن سرور به روی کاربران.
به هشدار مستندات، نصب on-premise تا تنظیم رمز اصلی برای همه باز است. مقدار تصادفی بسازید و رشته داخل b’…’ را در admin_passwd بگذارید؛ مجوز 0640 فایل را تغییر ندهید. فرمان db init اولین دیتابیس و کاربر admin را با رمز دلخواه شما میسازد:
python3 -c 'import base64, os; print(base64.b64encode(os.urandom(24)))'
sudo nano /etc/odoo/odoo.conf
sudo -u odoo odoo db -c /etc/odoo/odoo.conf init erp --password '<admin-password>'
sudo systemctl restart odoo
بخش [options] فایل در این مرحله:
admin_passwd = <random>
http_interface = 127.0.0.1
db_name = erp
dbfilter = ^erp$
list_db = False
⚠️ مدیر دیتابیس رو به اینترنت
مسیر /web/database/manager با رمز اصلی دیتابیس میسازد و حذف میکند. مستندات آن را ابزار توسعه و دمو میداند و پس از تنظیم db_name و dbfilter، بستنش با list_db = False را میخواهد. اگر باید برای چند دستگاه باز بماند، مسیرهای /web/database را در Nginx برای بقیه ببندید.

سروری که بعد از نصب odoo بالا میآید چندنخی است و مستندات آن را برای توسعه و نمایش میداند. با workers غیرصفر، ورکری جدا برای اعلانهای زنده روی gevent_port (پیشفرض 8072) بالا میآید که کاربر فقط از راه Nginx به آن میرسد.
از هستهها و کاربران همزمان حساب کنید.
قاعده مستندات: سقف نظری ورکر (تعداد CPU × 2) + 1 است و هر ورکر حدود ۶ کاربر همزمان را جواب میدهد. در مثال مستندات، سرور ۴ هستهای با ۶۰ کاربر به ۸ ورکر، یک cron و حدود ۳ گیگابایت RAM میرسد؛ با همان منطق، سرور ۲ هستهای ۴ ورکر و یک cron میگیرد. رفتن از ۴ ورکر به ۸ روی سرور مجازی وبداده تیکتی نمیخواهد؛ ارتقای منابع را از خود پنل انتخاب میکنید.
اول گواهی، بعد پیکربندی.
مستندات HTTPS را لازم میداند، چون Odoo اطلاعات ورود را بیرمزنگاری میفرستد. گواهی Let’s Encrypt را certbot در /etc/letsencrypt/live/ میگذارد:
sudo apt install nginx certbot python3-certbot-nginx
sudo certbot certonly --nginx -d odoo.example.com
سپس نمونه کوتاهشده مستندات را در /etc/nginx/sites-enabled/odoo.conf بنویسید:
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 odoo.example.com;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name odoo.example.com;
proxy_read_timeout 720s;
ssl_certificate /etc/letsencrypt/live/odoo.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/odoo.example.com/privkey.pem;
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_cookie_flags session_id samesite=lax secure;
}
location / {
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_redirect off;
proxy_pass http://odoo;
proxy_cookie_flags session_id samesite=lax secure;
}
}
کلید proxy_mode سرآیندهای X-Forwarded-* را معتبر میکند و فقط پشت Nginx روشن میشود. این سه خط را، با ورکرهای سرور ۲ هستهای، به [options] بیفزایید، سرویسها را دوباره بخوانید و تمدید گواهی را آزمایشی اجرا کنید:
workers = 4
max_cron_threads = 1
proxy_mode = True
sudo nginx -t && sudo systemctl reload nginx
sudo systemctl restart odoo
sudo certbot renew --dry-run
پیوستها، مانند PDF فاکتور و تصویر کالا، بیرون از PostgreSQL در پوشه filestore میمانند. در برنامه بکاپ هر نصب odoo این پوشه هموزن دیتابیس است و pg_dump تنها آن را جا میاندازد. مستندات بکاپ روزانه هر دو را روی سرور بایگانی جدا میخواهد.
🗂️ پوشه filestore کجاست
مسیر data-dir/filestore است. بدون data_dir، Odoo معمولاً ~/.local/share/Odoo را برمیدارد و خانه کاربر odoo مسیر /var/lib/odoo است. با sudo ls بررسی کنید و مسیر را صریح بنویسید: data_dir = /var/lib/odoo/.local/share/Odoo
با فرمان db خود Odoo، که filestore را هم برمیدارد.
در مرجع خط فرمان Odoo، dump بهطور پیشفرض zip همراه filestore میسازد، مگر با –no-filestore. این فایل cron هر شب با کاربر odoo یک نسخه میگیرد:
sudo -u odoo mkdir -p /var/lib/odoo/backups
echo '30 2 * * * odoo /usr/bin/odoo db -c /etc/odoo/odoo.conf dump erp /var/lib/odoo/backups/erp-$(date +\%F).zip' | sudo tee /etc/cron.d/odoo-backup
نسخه روی همان سرور هنوز بکاپ نیست. سرور بایگانی خودش فایلها را بکشد، مثلاً با rsync، تا سرور Odoo به بایگانی راه نداشته باشد؛ نسخههای قدیمی را هم پاک کنید.
روی ماشینی جدا و دیتابیسی خنثیشده.
مستندات نسخه آزمایشی را روی ماشینی جدا از تولید میخواهد. آنجا گزینه -n در load دیتابیس را خنثی میکند تا کارهای زمانبندیشده و ایمیل خروجی خاموش بمانند.
sudo -u odoo odoo db -c /etc/odoo/odoo.conf load -n erp_test /var/lib/odoo/backups/erp-2026-11-07.zip
| پرسش مدیر | کلید تنظیم | محل |
|---|---|---|
| کدام نسخه؟ | بسته جدا؛ در سورس addons_path | odoo.conf |
| پورتها بیرون بسته؟ | مقدار http_interface = 127.0.0.1 | فایل odoo.conf و فایروال |
| چند ورکر؟ | کلید workers و max_cron_threads | odoo.conf |
| گفتوگوی زنده؟ | پورت gevent_port = 8072 و location /websocket | فایل odoo.conf و Nginx |
| پشت Nginx؟ | مقدار proxy_mode = True | odoo.conf |
| مدیر دیتابیس؟ | کلید list_db با dbfilter | odoo.conf |
| رمز اصلی؟ | کلید admin_passwd | odoo.conf |
| بکاپ؟ | کلید data_dir | odoo.conf |
یک طرف میز، نرمافزار حسابداری ویندوزی که سالها کار کرده؛ طرف دیگر، Odoo تازهنصب. مقایسه از هزینه مجوز و ماندن روی ویندوز شروع میشود.
هزینه مجوز ندارد و زیر LGPLv3 است؛ هزینه سرور و نیروی فنی میماند. اپلیکیشن موبایل و Accounting کامل فقط در Enterprise است.
مستندات نصبکننده ویندوز را فقط برای آزمایش یا استفاده تککاربره میداند و حالت workers روی ویندوز نیست.
عدد ثابتی نیست. برآورد مستندات کد خوشطراحی را فرض میکند؛ بار CPU را با مانیتورینگ بسنجید.
بسته deb نسخه 20 فقط Ubuntu 24.04 را پشتیبانی میکند که PostgreSQL 16 و Python 3.12 را در مخزن دارد.
مقدار admin_passwd را با رمزی موقت عوض کنید، خط را با «;» غیرفعال نکنید و سرویس را دوباره راه بیندازید. سپس در /web/database/manager با Set Master Password رمز تازه بدهید؛ list_db موقتاً باید روشن باشد.
با workers صفر، ورکر websocket روی 8072 بالا نمیآید. اگر workers درست است، location /websocket باید به 8072 برود و سرآیندهای Upgrade و Connection را بفرستد.
مخزن به شاخه 20.0 اشاره میکند، پس apt-get upgrade فقط بیلدهای همین نسخه را میآورد. پیش از هر upgrade یک dump کامل بگیرید.
جمعبندی؛ آنچه پیش از نصب odoo باید معلوم باشد Community برای فروش و انبار کافی است و دفتر کل و تطبیق بانکی Enterprise میخواهد. Odoo از لحظه نصب روی همه نشانیها گوش میدهد، پس http_interface و فایروال اولین کارند. سه تصمیم به هم بستهاند: workers غیرصفر ورکر websocket را بالا میآورد، Nginx مسیر /websocket را به آن میرساند و proxy_mode دامنه واقعی را به Odoo میدهد. رمز اصلی پیش از اولین دیتابیس تصادفی میشود و list_db بعد از آن خاموش میماند. بکاپ وقتی کامل است که filestore را داشته باشد و روی سروری دیگر بماند.
🚀 وقتی نرمافزار حسابداری فعلی ماندنی است
اگر کوچ به ERP به سال بعد افتاده، وصل کردن شعبهها به یک دیتابیس حسابداری قدم کوچکتری است.
اولین ماژولی که روی Odoo تازهتان روشن میکنید کدام است، Invoicing یا Inventory؟
منابع رسمی این راهنما