Mở đầu sê-ri lập trình Odoo chuyên sâu không phải bằng code, mà bằng thứ quyết định bạn code có sướng hay không: môi trường phát triển. Dựng ẩu thì sau này mỗi lần sửa code phải khởi động lại tay, không debug được, lẫn lộn phiên bản. Dựng đúng một lần, về sau nhẹ đầu.

Sê-ri này nối tiếp loạt "Odoo 19: Từ Zero đến Hero" — phần đó dạy dùng Odoo và chạm tới lập trình cơ bản (bài 193–200). Từ đây ta đào sâu code: ORM, view/QWeb, OWL/JS, controller, tích hợp, test, deploy. Mức nâng cao, cần biết Python.

Ba cách chạy Odoo — chọn cách hợp việc

  • Từ source (khuyến nghị cho dev): git clone mã Odoo, tạo virtualenv riêng, pip install -r requirements.txt. Sửa code, đọc code core dễ nhất.
  • Docker: tiện, cô lập, hợp khi không muốn cài Python/PostgreSQL lên máy. Mount thư mục addons vào container để sửa nóng.
  • Gói cài sẵn (.deb/.rpm): hợp máy chủ production hơn là dev.

Dù cách nào, ba thành phần luôn có: mã Odoo, PostgreSQL, và thư mục addons (nơi đặt module của bạn).

odoo.conf: khai một lần, khỏi gõ tham số dài

Thay vì gõ hàng tá cờ mỗi lần chạy, gom vào một file cấu hình:

Tệp odoo.conf mẫu với addons_path, data_dir, db_host/user/password, admin_passwd, http_port 8069, workers 0, dev all, log_level info; và lệnh khởi động odoo -c odoo.conf -d blog19 --dev=all

Hình 1: Một odoo.conf thực dụng. Quan trọng nhất: addons_path (danh sách thư mục chứa module, ngăn bằng dấu phẩy — cả addons gốc lẫn custom-addons của bạn); data_dir (nơi lưu file đính kèm, session); thông tin PostgreSQL (db_host/user/password); workers = 0 (chế độ đa luồng, hợp dev — production mới đặt >0); và dev = all để bật auto-reload + debug. Chạy: odoo -c odoo.conf -d blog19 --dev=all.

Điểm hay của dev = all (hoặc cờ --dev=all): sửa file Python là Odoo tự nạp lại, sửa XML/JS là tự làm mới assets — không phải khởi động tay liên tục. Đây là thứ tăng tốc phát triển rõ rệt nhất.

Kiểm môi trường đã chạy chưa

Sau khi dựng xong, xác nhận nhanh bằng vài lệnh — đây là kết quả thật trên máy chủ Odoo 19 của loạt bài này:

Terminal thật: odoo --version ra Odoo Server 19.0-20260908; python3 --version ra Python 3.12.3; vào odoo shell -d blog19 chạy ir.module.module search_count installed ra 175, ir.model search_count ra 687, env.cr.dbname ra blog19

Hình 2: Kiểm chứng thật. odoo --version → Odoo Server 19.0-20260908; python3 --version → Python 3.12.3. Rồi odoo shell -d blog19 — cửa sổ Python có sẵn biến env để nghịch ORM: đếm được 175 module đã cài, 687 model, và DB đang dùng là blog19. Nếu ba lệnh này chạy trơn, môi trường của bạn đã sẵn sàng code.

odoo shell sẽ là người bạn thân suốt sê-ri: mọi ý tưởng ORM đều thử ở đây trong 3 giây trước khi viết vào module.

Vài lưu ý dựng môi trường

  • Mỗi phiên bản Odoo một virtualenv riêng — Odoo 17/18/19 cần bộ thư viện khác nhau, trộn chung là vỡ.
  • PostgreSQL: tạo user odoo có quyền CREATEDB — Odoo tự tạo database khi cần.
  • addons_path đặt custom-addons TRƯỚC hay SAU addons gốc đều được, nhưng nhớ đúng đường dẫn tuyệt đối.
  • Đừng đặt workers > 0 khi dev — chế độ đa tiến trình khó debug và không auto-reload.
  • Bật --dev=all để đỡ khởi động lại; production thì tắt.

Nhớ ba ý

  1. Ba thành phần: mã Odoo (source/Docker/gói), PostgreSQL, và addons_path trỏ tới module của bạn — mỗi phiên bản một virtualenv riêng.
  2. odoo.conf gom cấu hình (addons_path, data_dir, DB, workers=0, dev=all) — chạy odoo -c odoo.conf -d <db> --dev=all để auto-reload.
  3. odoo shell là sân tập ORM tức thì; odoo --version + shell chạy trơn nghĩa là môi trường đã sẵn sàng.

Môi trường xong, ta mở nắp sâu hơn. Phần sau giải mã mọi tham số quan trọng trong odoo.conf — workers, giới hạn bộ nhớ/thời gian, log, dbfilter — những nút chỉnh quyết định Odoo chạy nhanh hay chậm, an toàn hay hở.