Ở bài trước ta đã viết một odoo.conf tối thiểu để chạy dev. Nhưng file này còn cả tá tham số khác — và chính chúng quyết định Odoo của bạn nhanh hay chậm, ổn định hay treo, an toàn hay hở. Bài này soi những nút quan trọng nhất, cả cho dev lẫn production.

Bản đồ các tham số hay chỉnh nhất

Không cần thuộc lòng hết — chỉ cần nắm mấy nhóm sau:

Bảng các tham số odoo.conf quan trọng chia ba nhóm. Kết nối & dữ liệu: addons_path, data_dir, db_host/db_user/db_password, dbfilter, list_db. Hiệu năng: workers, max_cron_threads, limit_memory_soft/hard, limit_time_cpu/real, limit_request. Bảo mật & nhật ký: admin_passwd, proxy_mode, log_level/log_handler, logfile — kèm giải thích từng cái

Hình 1: Ba nhóm tham số bạn sẽ chạm nhiều nhất. Kết nối & dữ liệu: nơi tìm module (addons_path), lưu file (data_dir), kết nối PostgreSQL, và lọc DB (dbfilter, list_db). Hiệu năng: workers, các limit_*. Bảo mật & nhật ký: admin_passwd, proxy_mode, cấu hình log.

workers — nút quyết định hiệu năng

Đây là tham số quan trọng nhất khi lên production:

  • workers = 0: chế độ đa luồng (threaded), một tiến trình. Hợp dev — auto-reload chạy được, debug dễ. KHÔNG dùng cho production tải cao.
  • workers = N > 0: chế độ đa tiến trình (prefork). Mỗi worker xử lý request độc lập → chịu tải song song thật. Công thức phổ biến: workers = 2 × số nhân CPU + 1.

Đi kèm workers là các limit_* để một request lỗi không kéo sập cả hệ thống:

  • limit_memory_soft / limit_memory_hard: worker vượt ngưỡng mềm sẽ tự tái sinh sau request hiện tại (chống rò rỉ RAM tích lũy); vượt ngưỡng cứng bị giết ngay.
  • limit_time_cpu / limit_time_real: một request chạy quá lâu bị cắt — chống truy vấn treo làm nghẽn worker.
  • limit_request: sau bấy nhiêu request, worker tái sinh — dọn RAM định kỳ.

dbfilter & list_db — bảo mật đa database

  • dbfilter = ^blog19$: chỉ cho phép truy cập DB khớp regex — quan trọng khi một Odoo phục vụ nhiều DB/tên miền.
  • list_db = False: ẩn danh sách DB ở màn đăng nhập — production nên tắt để không lộ tên DB.

proxy_mode — khi chạy sau nginx

proxy_mode = True bảo Odoo tin các header X-Forwarded-* từ reverse proxy (nginx). Thiếu nó, Odoo tưởng mọi khách đến từ chính máy chủ → sai IP, sai giao thức trong link email, và bộ lọc IP/rate-limit mất tác dụng.

File cấu hình thật trên máy chủ

Đây là odoo.conf mặc định đọc trực tiếp từ máy chủ Odoo 19 của loạt bài — để bạn thấy hình hài thật:

Nội dung file odoo.conf mặc định đọc từ máy chủ: mục options với addons_path, data_dir, và nhiều dòng bắt đầu bằng dấu chấm phẩy như admin_passwd, db_maxconn, dbfilter, limit_memory_hard, limit_time_cpu, workers, xmlrpc_port... đang để giá trị mặc định

Hình 2: odoo.conf thật. Để ý: dòng bắt đầu bằng ; là chú thích — tham số đó đang dùng giá trị mặc định. Muốn đổi thì bỏ dấu ; và đặt giá trị. Ví dụ mặc định workers là 0, limit_time_cpu 60 giây, limit_memory_hard ~2.6GB, xmlrpc_port 8069. Chỉ vài dòng nhưng chi phối toàn bộ cách Odoo chạy.

Thứ tự ưu tiên: dòng lệnh > file > mặc định

Một tham số có thể đến từ ba nơi, ưu tiên giảm dần:

  1. Cờ dòng lệnh (--workers=4) — thắng tất cả, tiện để thử nhanh.
  2. File odoo.conf (-c odoo.conf) — nguồn chính thức, ổn định.
  3. Mặc định của Odoo — khi hai cái trên không khai.

Mẹo: chạy odoo -c odoo.conf --save sẽ ghi lại toàn bộ tham số (kể cả mặc định) vào file — tiện để xem "thực ra Odoo đang chạy với cấu hình gì".

Cấu hình dev vs production

Tham số Dev Production
workers 0 2×CPU + 1
dev all (tắt)
list_db True False
proxy_mode False True (sau nginx)
admin_passwd tuỳ đổi mạnh
logfile (stdout) file có xoay vòng

Nhớ ba ý

  1. workers quyết định chế độ chạy: 0 = dev (đa luồng, auto-reload); >0 = production (đa tiến trình, chịu tải), kèm limit_* để một request lỗi không sập cả hệ.
  2. dbfilter + list_db=False + proxy_mode=True là bộ ba bảo mật/vận hành production; đừng quên khi chạy sau nginx.
  3. Ưu tiên dòng lệnh > file > mặc định; dòng ; trong file là mặc định — bỏ ; để bật.

Tham số quan trọng nhất là addons_path — nhưng Odoo tìm và nạp module trong đó theo cơ chế nào? Phần sau mổ xẻ cách Odoo quét addons_path, đọc manifest, và quyết định module nào cài được.