Odoo là một công cụ lập kế hoạch tài nguyên doanh nghiệp (ERP) mã nguồn mở được viết bằng ngôn ngữ Python. Nó hỗ trợ nhiều plugin cho các nhu cầu kinh doanh khác nhau như kế toán, quản lý tiền lương, quản lý hàng tồn kho, và nhiều hơn nữa.

Trong hướng dẫn này, bạn sẽ cài đặt Odoo và cơ sở dữ liệu PostgreSQL bằng cách sử dụng Docker Compose, sau đó cài đặt Nginx để đóng vai trò như một reverse proxy cho trang web Odoo của bạn. Cuối cùng, bạn sẽ kích hoạt các kết nối HTTPS an toàn bằng cách sử dụng Certbot để tải xuống và cấu hình chứng chỉ TLS từ Cơ quan cấp chứng chỉ Let’s Encrypt.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn cần có:
- Một máy chủ Ubuntu 20.04 với 2 hoặc nhiều CPU, một người dùng non-root có quyền sudo và một tường lửa. Để thiết lập điều này, hãy làm theo hướng dẫn “Thiết lập máy chủ ban đầu với Ubuntu 20.04” của chúng tôi.
- Docker đã được cài đặt. Thực hiện Bước 1 và Bước 2 của hướng dẫn “Cách cài đặt và sử dụng Docker trên Ubuntu 20.04” để cài đặt và cấu hình người dùng non-root của bạn có thể chạy các lệnh
docker. Lưu ý: Bạn có thể bỏ qua các điều kiện tiên quyết này nếu bạn đang sử dụng DigitalOcean’s One-Click Docker Image. Image này đã được cấu hình sẵn Docker, Docker Compose, và UFW. Khởi chạy một Docker image mới trong khu vực bạn chọn, sau đó đăng nhập với tư cách người dùng root và tiếp tục hướng dẫn.
Cuối cùng, để kích hoạt TLS, bạn sẽ cần một tên miền trỏ đến địa chỉ IP công cộng của máy chủ. Nó có thể là example.com hoặc odoo.example.com. Nếu bạn đang sử dụng DigitalOcean, vui lòng xem hướng dẫn DNS Quickstart để biết thông tin về cách tạo tài nguyên tên miền trong bảng điều khiển của bạn.
Khi bạn đã có tất cả các điều kiện tiên quyết, hãy chuyển sang Bước 1, nơi bạn sẽ cài đặt gói docker-compose.
Bước 1: Cài đặt Docker Compose
Để cài đặt công cụ dòng lệnh docker-compose, hãy làm mới danh sách package của bạn, sau đó cài đặt package bằng apt:
sudo apt update
sudo apt install docker-compose
- Lưu ý: Bạn cũng có thể cài đặt một phiên bản Docker Compose mới hơn so với phiên bản có sẵn trên Ubuntu 20.04. Để làm như vậy, hãy làm theo Bước 1 của How To Install and Use Docker Compose on Ubuntu 20.04.
- Nếu bạn chọn sử dụng phiên bản Docker Compose này, bạn sẽ cần thay thế lệnh
docker-composebằngdocker compose.
Bạn có thể xác nhận rằng gói đã được cài đặt bằng cách chạy lệnh sau:
docker-compose –version
Bạn sẽ nhận được kết quả tương tự như sau:
Output
docker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.10
Sau khi bạn đã xác nhận rằng Docker Compose đã được cài đặt trên máy chủ của mình, bạn sẽ cấu hình và khởi chạy Odoo và PostgreSQL bằng Docker Compose trong bước tiếp theo của hướng dẫn này.
Bước 2: Chạy Odoo và PostgreSQL với Docker Compose
Để bắt đầu tạo các container Odoo và PostgreSQL, hãy tạo một thư mục có tên odoo trong thư mục chính của bạn để lưu trữ các tệp mà bạn sẽ tạo trong hướng dẫn này. Bạn sẽ sử dụng thư mục này để lưu trữ tất cả các tệp cần thiết để chạy Odoo.
Chạy các lệnh sau để tạo thư mục và sau đó cd vào đó:
mkdir ~/odoo
cd ~/odoo
Bây giờ hãy mở một tệp YAML trống mới có tên docker-compose.yml bằng nano hoặc trình chỉnh sửa bạn thích:
nano docker-compose.yml
Bạn sẽ sử dụng tệp này với lệnh docker-compose để khởi động các container Odoo và PostgreSQL và liên kết chúng với nhau. Thêm các dòng sau vào tệp:
docker-compose.yml
version: '3'
services:
odoo:
image: odoo:15.0
env_file: .env
depends_on:
- postgres
ports:
- "127.0.0.1:8069:8069"
volumes:
- data:/var/lib/odoo
postgres:
image: postgres:13
env_file: .env
volumes:
- db:/var/lib/postgresql/data/pgdata
volumes:
data:
db:
Tệp này định nghĩa hai services. Đầu tiên được gọi là odoo, chạy ứng dụng Odoo. Thứ hai được gọi là postgres, là container cơ sở dữ liệu PostgreSQL. Cả hai services đều tham chiếu đến các volume được đặt tên mà chúng sử dụng để lưu trữ dữ liệu bên ngoài các instance đang chạy của container. Cuối cùng, service odoo hiển thị port 8069 trên máy chủ của bạn đến container Odoo đang chạy trên cùng port 8069.
Lưu và thoát tệp khi bạn chỉnh sửa xong. Nếu bạn đang sử dụng nano, nhấn CTRL+O sau đó RETURN để lưu, sau đó CTRL+X để thoát.
Các container Odoo và PostgreSQL sử dụng các biến môi trường để tự cấu hình. Tệp docker-compose.yml chỉ định lệnh env_file cho cả hai services. Lệnh đó sau đó bao gồm tệp được tham chiếu có chứa các biến mà mỗi service cần để chạy.
Cách tiếp cận này thường được khuyến nghị thay vì thêm các biến môi trường trực tiếp vào tệp docker-compose.yml, vì việc giữ mật khẩu tránh khỏi tệp docker-compose.yml là một thực tiễn tốt. Cách tiếp cận này đặc biệt thích hợp nếu bạn sẽ commit các tệp của mình vào một kho lưu trữ Git hoặc một hệ thống kiểm soát nguồn khác.
Mở một tệp .env mới bằng nano:
nano .env
Thêm các dòng sau vào tệp, thay thế POSTGRES_USER và POSTGRES_PASSWORD bạn chọn vào chỗ các giá trị được đánh dấu:
.env
# postgresql environment variables
POSTGRES_DB=postgres
POSTGRES_PASSWORD=a_strong_password_for_user
POSTGRES_USER=odoo
PGDATA=/var/lib/postgresql/data/pgdata
# odoo environment variables
HOST=postgres
USER=odoo
PASSWORD=a_strong_password_for_user
Để tạo mật khẩu cho Odoo và PostgreSQL, hãy sử dụng lệnh openssl, lệnh này có sẵn trên hầu hết các hệ thống Linux. Chạy lệnh sau trên máy chủ của bạn để tạo một chuỗi byte ngẫu nhiên và in một phiên bản được mã hóa base64 mà bạn có thể sử dụng làm mật khẩu:
openssl rand -base64 30
Dán chuỗi kết quả vào tệp .env của bạn thay cho các mật khẩu placeholder là a_strong_password_for_user.
Khi bạn chỉnh sửa xong tệp **.env**, hãy lưu và thoát khỏi trình chỉnh sửa văn bản của bạn.
Bây giờ bạn đã sẵn sàng để khởi động các container odoo và postgres bằng lệnh docker-compose:
docker-compose up -d
Lệnh con up yêu cầu docker-compose khởi động các container và các volume cũng như mạng liên quan được định nghĩa trong tệp docker-compose.yml. Cờ -d (viết tắt của “daemonize”) yêu cầu docker-compose chạy các container trong nền để lệnh không chiếm quyền điều khiển terminal của bạn. docker-compose sẽ in một số đầu ra ngắn gọn khi nó tải xuống các Docker image cần thiết và sau đó khởi động các container:
Output
Creating network "odoo_default" with the default driver
Creating volume "odoo_odoo_data" with default driver
Creating volume "odoo_postgres_data" with default driver
Pulling odoo (odoo:14.0)...
15.0: Pulling from library/odoo
. . .
Nếu bạn muốn dừng các container Odoo và PostgreSQL bất kỳ lúc nào, hãy chạy lệnh sau trong thư mục ~/odoo của bạn:
docker-compose stop
Các container sẽ bị dừng. Cấu hình và dữ liệu trong các volume của chúng sẽ được giữ lại để bạn có thể khởi động lại các container bằng lệnh docker-compose up -d. Khi hoàn tất, Odoo sẽ chạy. Bạn có thể kiểm tra xem một máy chủ web có đang chạy tại 127.0.0.1:8069 hay không bằng cách tìm trang chủ bằng lệnh curl:
curl --head <http://localhost:8069>
Điều này sẽ chỉ in ra các HTTP header từ phản hồi:
Output
HTTP/1.0303 SEE OTHER
Content-Type: text/html; charset=utf-8
Content-Length: 215
Location:<http://localhost:8069/web>
Set-Cookie: session_id=142fa5c02742d0f5f16c73bc14ec8144b8230f8a; Expires=Mon, 06-Jun-2022 20:45:34 GMT; Max-Age=7776000; HttpOnly; Path=/
Server: Werkzeug/0.14.1 Python/3.7.3
Date: Tue, 08 Mar 2022 20:45:34 GMT
Phản hồi 303 SEE OTHER có nghĩa là máy chủ Odoo đã hoạt động, nhưng bạn nên truy cập một trang khác để hoàn tất quá trình cài đặt. Header Location được đánh dấu là http://localhost:8069/web cho biết nơi truy cập trang cài đặt Odoo trong trình duyệt của bạn. Tiếp theo, chúng ta sẽ thiết lập Nginx để proxy lưu lượng truy cập công cộng đến container Odoo.
Bước 3: Cài đặt và cấu hình Nginx
Việc đặt một máy chủ web như Nginx ở phía trước máy chủ Odoo của bạn có thể cải thiện hiệu suất bằng cách chuyển việc caching, nén và phục vụ tệp tĩnh sang một quy trình hiệu quả hơn. Chúng ta sẽ cài đặt Nginx và cấu hình nó để reverse proxy các yêu cầu đến Odoo, nghĩa là nó sẽ đảm nhận việc chuyển các yêu cầu từ người dùng của bạn đến Odoo và ngược lại. Sử dụng một quy trình Nginx không được container hóa cũng sẽ giúp việc thêm chứng chỉ Let’s Encrypt TLS dễ dàng hơn trong bước tiếp theo.
Đầu tiên, hãy làm mới danh sách package của bạn, sau đó cài đặt Nginx bằng apt:
sudo apt update
sudo apt install nginx
Cho phép lưu lượng truy cập công cộng đến các port 80 và 443 (HTTP và HTTPS) bằng hồ sơ ứng dụng Nginx Full UFW:
sudo ufw allow "Nginx Full"
Output
Rule added
Rule added (v6)
Tiếp theo, mở một tệp cấu hình Nginx mới trong thư mục /etc/nginx/sites-available. Chúng ta sẽ gọi nó là odoo.conf nhưng bạn có thể sử dụng một tên khác:
sudo nano /etc/nginx/sites-available/odoo.conf
Dán nội dung sau vào tệp cấu hình mới, đảm bảo thay thế your_domain_here bằng tên miền mà bạn đã cấu hình để trỏ đến máy chủ Odoo của mình. Ví dụ, nó có thể là odoo.example.com:
/etc/nginx/sites-available/odoo.conf
server {
listen 80;
listen [::]:80;
server_name your_domain_here;
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_pass <http://localhost:8069>;
}
}
Cấu hình này chỉ dành cho HTTP ở thời điểm hiện tại, vì chúng ta sẽ để Certbot đảm nhận việc cấu hình TLS trong bước tiếp theo. Phần còn lại của tệp cấu hình thiết lập các vị trí logging và sau đó chuyển tất cả lưu lượng truy cập, cũng như một số proxy header quan trọng, đến http://localhost:8069, container Odoo mà chúng ta đã khởi động ở bước trước.
Lưu và đóng tệp, sau đó kích hoạt cấu hình bằng cách liên kết nó vào /etc/nginx/sites-enabled/:
sudo ln -s /etc/nginx/sites-available/odoo.conf /etc/nginx/sites-enabled/
Sử dụng nginx -t để xác minh rằng cú pháp tệp cấu hình là chính xác:
sudo nginx -t
Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Và cuối cùng, tải lại service nginx với cấu hình mới:
sudo systemctl reload nginx.service
Trang web Odoo của bạn bây giờ sẽ có sẵn trên HTTP thuần túy. Tải http://your_domain_here (bạn có thể phải nhấp qua cảnh báo bảo mật) và nó sẽ trông như thế này:

Bây giờ bạn đã có trang web của mình hoạt động qua HTTP, đã đến lúc bảo mật kết nối bằng chứng chỉ Certbot và Let’s Encrypt. Bạn nên làm điều này trước khi tiến hành quy trình thiết lập dựa trên web của Odoo.
Bước 4: Cài đặt Certbot và thiết lập chứng chỉ TLS
Nhờ Certbot và tổ chức cấp chứng chỉ miễn phí Let’s Encrypt, việc thêm mã hóa TLS vào ứng dụng Odoo của bạn sẽ chỉ mất hai lệnh.
Đầu tiên, cài đặt Certbot và plugin Nginx của nó:
sudo apt install certbot python3-certbot-nginx
Tiếp theo, chạy certbot ở chế độ –-nginx, và chỉ định cùng một tên miền mà bạn đã sử dụng trong chỉ thị cấu hình Nginx server_name:
sudo certbot --nginx -d your_domain_here
Bạn sẽ được nhắc đồng ý với các điều khoản dịch vụ của Let’s Encrypt, và nhập một địa chỉ email.
Sau đó, bạn sẽ được hỏi liệu bạn có muốn chuyển hướng tất cả lưu lượng HTTP sang HTTPS hay không. Tùy thuộc vào bạn, nhưng điều này thường được khuyến nghị và an toàn để thực hiện.
Sau đó, Let’s Encrypt sẽ xác nhận yêu cầu của bạn và Certbot sẽ tải xuống chứng chỉ của bạn:
Output
Congratulations! You have successfully enabled <https://odoo.example.com>
You should test your configuration at:
<https://www.ssllabs.com/ssltest/analyze.html?d=odoo.example.com>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/odoo.example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/odoo.example.com/privkey.pem
Your cert will expire on 2022-05-09. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: <https://letsencrypt.org/donate>
Donating to EFF: <https://eff.org/donate-le>
Certbot sẽ tự động tải lại Nginx với cấu hình và chứng chỉ mới. Tải lại trang web của bạn trong trình duyệt và nó sẽ tự động chuyển bạn sang HTTPS nếu bạn đã chọn tùy chọn chuyển hướng.
Trang web của bạn bây giờ đã được bảo mật và an toàn để tiếp tục với các bước thiết lập dựa trên web.
Bước 5: Thiết lập Odoo
Quay lại trình duyệt web của bạn, tải lại trang. Bây giờ bạn sẽ có trang cấu hình cơ sở dữ liệu của Odoo mở qua một kết nối https:// an toàn. Bây giờ bạn có thể nhập tên người dùng và mật khẩu một cách an toàn để hoàn tất quá trình cài đặt.
Thông tin bạn điền vào trang này sẽ cho ứng dụng Odoo biết cách tạo cơ sở dữ liệu PostgreSQL của nó và chi tiết về người dùng quản trị mặc định.
Điền vào các trường sau:
- Database Name: odoo
- Email: địa chỉ email của bạn
- Password: một mật khẩu mạnh và duy nhất cho tài khoản quản trị của bạn
- Demo data: đảm bảo rằng tùy chọn này được chọn nếu đây là lần đầu tiên bạn cài đặt odoo
Các trường còn lại có thể để mặc định. Hãy đảm bảo ghi lại các giá trị email và mật khẩu mà bạn đã chọn vì bạn sẽ sử dụng chúng để đăng nhập vào Odoo trong tương lai.
Bây giờ hãy nhấp vào nút “Create database” ở phía dưới bên trái của trang. Có thể mất một hoặc hai phút để Odoo tạo các bảng cơ sở dữ liệu của nó. Khi quá trình hoàn tất, bạn sẽ được chuyển hướng đến trang quản trị Apps của Odoo.

Từ đây, bạn có thể chọn các module Odoo mà bạn muốn cài đặt và sử dụng cho nhu cầu ERP của mình. Nếu bạn muốn thử một ứng dụng, hãy nhấp vào nút Install trên ô Sales. Odoo sẽ cài đặt module và sau đó chuyển hướng bạn đến trang ứng dụng Discuss cá nhân của bạn.
Nhấp vào biểu tượng hình vuông được phân đoạn ở phía trên cùng bên trái màn hình của bạn và sau đó chọn liên kết Sales trong danh sách các tùy chọn thả xuống.

Bạn sẽ ở trên một trang sẽ hướng dẫn bạn cách tùy chỉnh dữ liệu, báo giá, đơn hàng, và một danh sách các ví dụ bán hàng mà bạn có thể thử nghiệm.
Kết luận
Trong hướng dẫn này, bạn đã khởi chạy ứng dụng Odoo ERP và cơ sở dữ liệu PostgreSQL bằng Docker Compose, sau đó thiết lập một Nginx reverse proxy và bảo mật nó bằng chứng chỉ Let’s Encrypt TLS.
Bây giờ bạn đã sẵn sàng bắt đầu xây dựng trang web ERP của mình bằng cách sử dụng các module được cung cấp. Để biết thêm thông tin về cách sử dụng Odoo, vui lòng xem tài liệu Odoo chính thức.
Nếu bạn muốn tự viết các module Odoo tùy chỉnh của riêng mình hoặc tùy chỉnh các module hiện có, tài liệu dành cho nhà phát triển là một nơi tốt để bắt đầu.