Có bản đồ trong đầu từ phần 3 rồi, giờ ta dựng một Odoo 19 của riêng mình để nghịch thoải mái. Cách gọn nhất, sạch máy nhất là dùng Docker — và tin vui là bạn chỉ cần một file cấu hình với đúng một câu lệnh.
Vì sao Docker mà không cài trực tiếp
Odoo cần hai thứ chạy cùng nhau: bản thân Odoo và một cơ sở dữ liệu PostgreSQL. Cài tay cả hai lên máy Windows/Mac thì lỉnh kỉnh, dễ đụng phiên bản, và lúc muốn gỡ đi thì rác còn vương khắp nơi. Docker đóng mỗi thứ vào một "hộp" (container) riêng:
- Sạch máy: không cài Python/Postgres lung tung vào hệ điều hành.
- Xoá làm lại trong vài giây: nghịch hỏng thì
downrồiuplại. - Giống hệt máy tôi: bạn làm theo sẽ ra đúng kết quả trong bài.
Việc chuẩn bị duy nhất: cài Docker Desktop (Mac/Windows) hoặc Docker Engine (Linux) và mở nó lên. Gõ thử docker version thấy có phản hồi là xong.
Bước 1 — Một file docker-compose.yml
Tạo một thư mục trống, ví dụ odoo19/, rồi tạo trong đó file docker-compose.yml với nội dung:
services:
odoo19-db:
image: postgres:16
container_name: odoo19-db
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=odoo
volumes:
- odoo19-db-data:/var/lib/postgresql/data
odoo19:
image: odoo:19
container_name: odoo19
depends_on: [odoo19-db]
ports:
- "127.0.0.1:8069:8069"
environment:
- HOST=odoo19-db
- USER=odoo
- PASSWORD=odoo
volumes:
- odoo19-web-data:/var/lib/odoo
volumes:
odoo19-db-data:
odoo19-web-data:
Đọc nhanh để hiểu, không cần thuộc:
odoo19-dblà container PostgreSQL 16 — cái tủ chứa toàn bộ dữ liệu.odoo19là container Odoo 19. Ba biếnHOST/USER/PASSWORDbảo Odoo tìm database ở đâu, tên đăng nhập và mật khẩu nào — phải khớp với ba dòng của Postgres phía trên.ports: "127.0.0.1:8069:8069"mở cổng 8069 để bạn vào Odoo qua trình duyệt. Đặt127.0.0.1nghĩa là chỉ máy bạn vào được, người ngoài mạng không chạm tới — an toàn cho bản chạy thử.volumesgiữ dữ liệu lại kể cả khi container bị xoá và dựng lại.
Bước 2 — Một câu lệnh để chạy
Mở terminal ngay trong thư mục vừa tạo, gõ:
docker compose -p odoo19 up -d
Lần đầu, Docker sẽ tải image odoo:19 và postgres:16 về (khoảng vài trăm MB, đợi một chút). Xong, cả hai container bật lên ở chế độ nền:

Hình 1: Sau up -d, lệnh docker compose -p odoo19 ps cho thấy odoo19 (image odoo:19) đang chạy và mở cổng 127.0.0.1:8069, cùng odoo19-db (image postgres:16). Hai container này là toàn bộ hệ thống Odoo của bạn.
Vài lệnh hữu ích cho về sau, gõ trong cùng thư mục:
docker compose -p odoo19 ps # xem đang chạy gì
docker compose -p odoo19 logs -f # xem log Odoo (Ctrl+C để thoát)
docker compose -p odoo19 stop # tạm dừng
docker compose -p odoo19 up -d # bật lại
docker compose -p odoo19 down # tắt và xoá container (dữ liệu vẫn còn nhờ volume)
Bước 3 — Mở Odoo trên trình duyệt
Vào địa chỉ http://localhost:8069. Nếu máy đã có sẵn một database, Odoo đưa bạn tới màn hình đăng nhập:

Hình 2: Màn hình đăng nhập Odoo 19. Thấy được nó nghĩa là máy chủ web đã chạy ngon. Ở góc dưới có "Quản lý cơ sở dữ liệu" — chính là trang bạn đã gặp ở phần 2.
Một lưu ý thật thà: nếu đây là lần đầu hoàn toàn, chưa có database nào, thì Odoo sẽ không đưa bạn tới màn hình đăng nhập mà tới màn hình tạo database — vì chưa có "tủ hồ sơ" nào để đăng nhập vào. Bước tạo database đó (đặt tên, đặt mật khẩu chủ, chọn có nạp dữ liệu mẫu hay không) tôi để dành nguyên phần 5 làm cho kỹ, vì nó có vài lựa chọn quan trọng cần hiểu đúng ngay từ đầu.
Nếu gặp trục trặc
- Cổng 8069 bận (máy đang chạy Odoo khác): đổi dòng ports thành
"127.0.0.1:8070:8069"rồi vàolocalhost:8070. - Trang trắng / lỗi kết nối lúc mới bật: Odoo cần vài giây để khởi động sau
up. Chờ 5–10 giây rồi tải lại. Xemlogs -fđể biết nó đã sẵn sàng chưa. Cannot connect to the Docker daemon: Docker Desktop chưa mở — mở nó lên rồi thử lại.
Xong bài này, bạn đã có một Odoo 19 chạy thật trên máy, sạch sẽ, xoá-làm-lại dễ dàng. Phần sau ta tạo cơ sở dữ liệu đầu tiên và đăng nhập vào bên trong.