[Phần 1] Hướng dẫn cài đặt Odoo trên môi trường Docker
Giới thiệu tổng quan
Odoo là một phần mềm nguồn mở được sử dụng rộng rãi cho quản lý doanh nghiệp (ERP - Enterprise Resource Planning). Nó cung cấp nhiều module chuyên biệt cho các nhu cầu kinh doanh khác nhau như kế toán, quản lý nhân sự, quản lý kho hàng, quản lý dự án, quản lý quan hệ khách hàng (CRM), và nhiều tính năng khác. Odoo là một giải pháp toàn diện cho doanh nghiệp vừa và nhỏ.
Docker là một nền tảng mã nguồn mở cho phép đóng gói và triển khai ứng dụng dễ dàng hơn trong các container. Container là một đơn vị phần mềm độc lập, bao gồm tất cả các thành phần cần thiết để chạy một ứng dụng, bao gồm mã, thư viện, và các phần tử hệ thống khác. Container được triển khai và chạy trên nhiều hệ điều hành và nền tảng khác nhau.
Sử dụng Docker cho phép bạn dễ dàng triển khai và quản lý ứng dụng Odoo cũng như các thành phần phụ trợ như cơ sở dữ liệu PostgreSQL. Bằng cách sử dụng Docker, bạn có thể đảm bảo rằng môi trường ứng dụng của bạn luôn nhất quán trên bất kỳ hệ thống nào, giúp giảm thiểu các vấn đề khác biệt giữa các môi trường phát triển, kiểm thử và sản xuất.
Khi sử dụng Docker để triển khai Odoo, bạn có thể tách các thành phần như ứng dụng web Odoo và cơ sở dữ liệu PostgreSQL thành các container riêng biệt. Điều này giúp quản lý và mở rộng quy mô dễ dàng hơn, cũng như tăng tính linh hoạt khi triển khai trên các môi trường khác nhau.
Yêu cầu trước khi cài đặt
Để có thể host Odoo trên Docker, bạn cần đáp ứng các yêu cầu cần thiết sau:
Docker: Docker phải được cài đặt trên máy chủ hoặc máy tính của bạn. Bạn có thể tải Docker và làm theo hướng dẫn cài đặt cho hệ điều hành của bạn.
Cài đặt Odoo trên Docker
Khởi chạy máy chủ PostgreSQL
Lưu ý: Trong trường hợp bạn đã khởi tạo một cơ sở dữ liệu PostgreSQL từ trước thì không cần bước này cũng được nhé.
Khởi chạy bằng docker bằng lệnh:
docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:15
Trong đó,
POSTGRES_USER
là user để kết nối với databasePOSTGRES_PASSWORD
là mật khẩu để kết nối databasePOSTGRES_DB
là tên databasedb
là tên container, sẽ được dùng để connect nhé
Ở đây mình sử dụng Postgres phiên bản 15 nên sẽ docker image postgres:15
, các bạn có thể sử dụng phiên bản khác
Khởi chạy một instance Odoo
docker run -p 8069:8069 --name odoo --link db:db -t odoo
Tên alias của container chạy Postgres là db để Odoo có thể kết nối với máy chủ Postgres.
Dừng và khởi chạy lại một instance Odoo
docker stop odoo
docker start -a odoo
Lưu ý: Trong trường hợp khi chạy instance Odoo và xảy ra lỗi ERROR odoo odoo.modules.loading: Database odoo not initialized, bạn hãy sử dụng lệnh
odoo --init base --database <tên database muốn khởi tạo> --stop-after-init
Sử dụng volumes để lưu trữ dữ liệu
Khi container Odoo được tạo như hướng dẫn ở trên, filestore (các file assets, attachments cần thiết của Odoo) sẽ được tạo bên trong container. Nếu container bị xóa, filestore sẽ bị mất. Nếu muốn tạo lại các filestore cần thiết thì các bạn có thể xem ở phần 2 nhé!
Cách để ngăn chặn điều đó là sử dụng Docker named volume. (hoặc sẽ lưu trữ trên AWS S3 hoặc trực tiếp trên PostgresDB - mình sẽ hướng dẫn ở phần sau)
docker run -v odoo-data:/var/lib/odoo -d -p 8069:8069 --name odoo --link db:db -t odoo
Với lệnh trên, volume có tên odoo-data sẽ vẫn tồn tại ngay cả khi container bị xóa và có thể được sử dụng lại bằng cách gọi lệnh tương tự. Đường dẫn /var/lib/odoo được sử dụng làm điểm mount cho volume phải khớp với data_dir của Odoo trong file cấu hình hoặc dưới dạng tham số CLI.
Lưu ý: nguyên tắc tương tự cũng có thể áp dụng cho container Postgresql và có thể sử dụng named volume để lưu trữ cơ sở dữ liệu khi container bị xóa.
docker run -d -v odoo-db:/var/lib/postgresql/data -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:15
Khi một máy chủ PostgreSQL được khởi chạy lại, các instance Odoo liên kết với máy chủ đó cũng phải được khởi chạy lại vì địa chỉ máy chủ đã thay đổi và liên kết bị hỏng.
Chạy Odoo với cấu hình tùy chỉnh
Cách để config, cũng như giải thích về file config này mình sẽ hướng dẫn ở phần sau luôn nhé.
File cấu hình mặc định cho máy chủ (nằm tại /etc/odoo/odoo.conf) có thể bị ghi đè khi khởi chạy bằng cách sử dụng volumes. Giả sử bạn có một cấu hình tùy chỉnh tại /path/to/config/odoo.conf, thì
docker run -v /path/to/config:/etc/odoo -p 8069:8069 --name odoo --link db:db -t odoo
Bạn cũng có thể chỉ định trực tiếp các đối số Odoo trong lệnh. Các đối số này được khai báo sau từ khóa --
trong dòng lệnh, như sau:
docker run -p 8069:8069 --name odoo --link db:db -t odoo -- --db-filter=odoo_db_.*
Mount addon tùy chỉnh
Bạn có thể mount các addon Odoo tùy chỉnh của mình trong container Odoo, tại /mnt/extra-addons
docker run -v /path/to/addons:/mnt/extra-addons -p 8069:8069 --name odoo --link db:db -t odoo
Biến môi trường
Điều chỉnh các biến môi trường này để dễ dàng kết nối với máy chủ postgres:
- HOST: Địa chỉ của máy chủ postgres. Nếu bạn đã sử dụng một container postgres, hãy đặt thành tên của container đó. Mặc định là db.
- PORT: Cổng mà máy chủ postgres đang lắng nghe. Mặc định là 5432.
- USER: Vai trò postgres mà Odoo sẽ kết nối. Nếu bạn đã sử dụng một container postgres, hãy đặt cùng giá trị với POSTGRES_USER. Mặc định là odoo.
- PASSWORD: Mật khẩu của vai trò postgres mà Odoo sẽ kết nối. Nếu bạn đã sử dụng một container postgres, hãy đặt cùng giá trị với POSTGRES_PASSWORD. Mặc định là odoo.
Ví dụ Docker Compose File docker-compose.yml đơn giản nhất sẽ là:
version: '3.1'
services:
web:
image: odoo:17.0
depends_on:
- db
ports:
- "8069:8069"
db:
image: postgres:15
environment:
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=odoo
- POSTGRES_USER=odoo
All rights reserved