Giới thiệu qua về Odoo
Odoo là một nền tảng ERP mã nguồn mở phổ biến, phục vụ cho rất nhiều loại hình nghiệp vụ khác nhau — từ Quản trị nhân sự (HRM), Quản trị quan hệ khách hàng (CRM), Quản lý dự án, Kế toán, cho đến bán hàng, kho vận, và thậm chí là thương mại điện tử. Với định hướng All-in-One platform, Odoo cho phép doanh nghiệp sử dụng một hệ thống duy nhất để đồng bộ dữ liệu và quy trình nội bộ.
Phiên bản Community Edition (CE) là phiên bản mã nguồn mở hoàn toàn miễn phí, phù hợp cho cá nhân, startup hoặc doanh nghiệp vừa và nhỏ có khả năng tự triển khai và duy trì hạ tầng. (Website Hưng Nguyễn . VN này tôi cũng dựng bằng Odoo).
Trong bài viết này, tôi sẽ hướng dẫn chi tiết từ A-Z cách cài đặt và cấu hình Odoo 18 Community Edition trên hệ điều hành Ubuntu Server 24.04 LTS — bản phát hành mới nhất tính đến thời điểm viết bài.
Triển khai được thực hiện trên môi trường Production, bao gồm:
- PostgreSQL 17 làm hệ quản trị cơ sở dữ liệu (DBMS)
- Nginx làm reverse proxy
- Certbot để tự động cấp và gia hạn HTTPS với Let's Encrypt
- Cấu hình dịch vụ tự động khởi động (systemd)
- Tối ưu hiệu suất cơ bản cho production
Chuẩn bị trước khi bắt đầu
- Cloud server chạy Ubuntu Server 24.04 LTS (khuyến nghị từ 2 vCPU, 4GB RAM trở lên) với tài khoản root - trong bài viết này tôi sẽ giả định IP server của bạn là {YOUR_SERVER_IP}
- Đăng ký 1 tên miền (.com, .vn,... gì cũng được) - trong bài viết này tôi sẽ giả định tên miền bạn mua là {YOUR_DOMAIN}
I - Cài đặt server
Đầu tiên cần SSH vào server, từ Terminal máy local, gõ lệnh:
ssh root@{YOUR_SERVER_IP}
Sau đó nhập mật khẩu để truy xuất vào server của bạn.
Tạo tài khoản mới (không dùng tài khoản root)
adduser normal-user
- Nhập vào mật khẩu mới & gõ lại xác nhận khi được hỏi.
- Các câu hỏi còn lại (Full Name, Room Number, Work Phone, Home Phone, Other) cứ ENTER luôn cho lẹ (Full Name thì nhập tên bạn không dấu vào cũng được).
- Gõ Y > Enter khi được hỏi xác nhận.
- Thêm tài khoản vừa tạo vào nhóm sudo
usermod -aG sudo normal-user
- Thoát tài khoản root và chuyển sang đăng nhập bằng tài khoản vừa tạo.
Đổi hostname
sudo hostnamectl set-hostname normal-user-server
- Nhập vào mật khẩu của user nếu được hỏi.
Cập nhật server
- Cập nhật index cho các repo:
sudo apt update
- Cài đặt các phiên bản mới nhất của các gói:
sudo apt upgrade
Bảo mật server
-
Cài Fail2Ban:
-
Công cụ này giúp bảo vệ máy chủ khỏi việc bị tấn công brute-force bằng cách quản lý file log lại những lần login thất bại và cấm những địa chỉ IP đáng ngờ.
sudo apt install fail2ban
-
Mặc định sau khi cài xong thì Fail2Ban sẽ được enable và khởi chạy luôn. Để chắc ăn, bạn cứ chạy thêm câu lệnh sau:
sudo systemctl enable --now fail2ban
-
Công cụ này giúp bảo vệ máy chủ khỏi việc bị tấn công brute-force bằng cách quản lý file log lại những lần login thất bại và cấm những địa chỉ IP đáng ngờ.
-
Bật firewall
- Đảm bảo an toàn cho server của bạn bằng cách bật firewall (ufw trên Ubuntu Server) lên.
-
Trước khi bật firewall, bạn cần mở thông port cho SSH trước (tránh trường hợp không remote được vào server nữa sau khi bật firewall).
sudo ufw allow OpenSSH
-
Bật firewall:
sudo ufw enable
-
Kiểm tra lại trạng thái firewall sau khi bật:
sudo ufw status
II - Cài PostgreSQL 17
Thêm repo PostgreSQL vào hệ thống:
- Cập nhật index và cài các gói cần thiết:
sudo apt update
- Thêm repo PostgreSQL 17 vào hệ thống:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt> $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
- Nhập signing key cho repo vừa thêm:
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
- Cập nhật lại danh sách gói:
sudo apt update
Cài PostgreSQL 17
-
Chạy lệnh cài:
sudo apt install postgresql-17
-
Mặc định sau khi cài xong thì PostgreSQL 17 sẽ được enable và khởi chạy luôn. Để chắc ăn, bạn cứ chạy thêm câu lệnh sau:
sudo systemctl enable --now postgresql-17
Cấu hình PostgreSQL
-
File postgresql.conf, sửa listen_addresses thành * để cho phép kết nối từ xa:
sudo nano /etc/postgresql/17/main/postgresql.conf listen_addresses = '*'
-
Để kết nối DB remote được, cần sửa file pg_hba.conf, cấu hình sử dụng md5 cho xác thực mật khẩu.
sudo sed -i '/^host/s/ident/md5/' /etc/postgresql/17/main/pg_hba.conf && \ sudo sed -i '/^local/s/peer/trust/' /etc/postgresql/17/main/pg_hba.conf && \ echo "host all all 0.0.0.0/0 md5" | sudo tee -a /etc/postgresql/17/main/pg_hba.conf
-
Khởi động lại PostgreSQL để phản ảnh thay đổi:
sudo systemctl restart postgresql
Kết nối đến PostgreSQL
-
Kết nối bằng tài khoản postgres:
sudo -u postgres psql
-
Đặt mật khẩu cho tài khoản postgres:
ALTER USER postgres PASSWORD 'Str0ngP@ssword!';
-
Tạo tài khoản PostgreSQL mới để dùng riêng cho Odoo:
CREATE USER "normal-user" WITH ENCRYPTED PASSWORD 'normal-user-pass'; ALTER USER "normal-user" CREATEDB;
III - Cài Odoo 18 CE
Cài các gói và thư viện
-
Cài Python 3 Pip - trình quản lý & cài đặt thư viện cho Python:
sudo apt install -y python3-pip
-
Cài Python Virtual Env - tạo môi trường Python độc lập cho mỗi dự án.
sudo apt install -y python3-venv
-
Cài các thư viện và phụ thuộc cho Development: Cần thiết để chạy Odoo và các phụ thuộc của nó.
sudo apt install -y python3-dev libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev libldap2-dev build-essential libssl-dev libffi-dev libmysqlclient-dev libjpeg-dev libpq-dev libjpeg8-dev liblcms2-dev libblas-dev libatlas-base-dev
-
Cài Node.js và NPM: Node.js dùng cho các tác vụ frontend, NPM thì là trình quản lý gói của nó.
sudo apt install -y npm
Kéo source code Odoo 18
- Cài git:
sudo apt install -y git
- Clone source:
cd /home/normal-user && \
git clone https://github.com/odoo/odoo.git --depth 1 --branch 18.0 --single-branch ./odoo18
Cài các phụ thuộc Python
- Tạo Python Virtual Env:
cd /home/normal-user/odoo18 && \
python3 -m venv ./venv
- Kích hoạt Virtual Env:
source venv/bin/activate
- Cài các phụ thuộc Python:
pip install -r requirements.txt
- Cài wkhtmltopdf - để gen PDF:
wget -P /home/normal-user https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb && \
sudo apt install -y fontconfig xfonts-75dpi xfonts-base && \
sudo dpkg -i /home/normal-user/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
- Fix các vấn đề thư viện của server (nếu có):
sudo apt install -f
- Ngừng kích hoạt Virtual Env:
deactivate
Tạo & Chỉnh sửa file Odoo Config
- Tạo file odoo.conf trong folder /etc/:
sudo nano /etc/odoo.conf
- Nội dung:
[options]
addons_path = /home/normal-user/odoo18/addons,/home/normal-user/odoo18/extra-addons
data_dir = /var/lib/odoo
admin_passwd = this-is-master-password
proxy_mode = True
db_maxconn = 6
db_host = localhost
dbfilter = ^normal-user-(%d|%h)$
db_user = normal-user
db_password = normal-user-pass
list_db = False
limit_memory_hard = 805306368
limit_memory_soft = 671088640
limit_request = 8196
limit_time_cpu = 1800
limit_time_real = 3600
gevent_port = 8072
max_cron_threads = 1
workers = 8
logfile = /var/log/odoo/odoo.log
- Set quyền cho file:
sudo chown normal-user: /etc/odoo.conf && \
sudo chmod 640 /etc/odoo.conf
- Tạo folder extra-addons (folder này sẽ chứa các module mà mình tự phát triển hoặc lấy từ bên thứ 3).
sudo mkdir /home/normal-user/odoo18/extra-addons
- Tạo log folder:
sudo mkdir /var/log/odoo && \ sudo chown normal-user:root /var/log/odoo
- Tạo folder chứa filestore và sessions cho Odoo:
sudo mkdir /var/lib/odoo && \ sudo chown normal-user: /var/lib/odoo
Tạo dịch vụ Odoo
Cần tạo dịch vụ Odoo để chạy, dừng cũng như enable việc tự khởi động mỗi khi server bật lên.
-
Tạo service file:
sudo nano /etc/systemd/system/odoo.service
-
Nội dung:
[Unit] Description=Odoo Documentation=http://www.odoo.com After=network.target postgresql.service [Service] # Ubuntu/Debian convention: Type=simple User=normal-user ExecStart=/home/normal-user/odoo18/venv/bin/python3.12 /home/normal-user/odoo18/odoo-bin -c /etc/odoo.conf Restart=always [Install] WantedBy=default.target
-
Set quyền cho service file:
sudo chmod 755 /etc/systemd/system/odoo.service sudo chown root: /etc/systemd/system/odoo.service
-
Khởi chạy odoo service:
sudo systemctl start odoo.service
-
Kiểm tra log:
sudo tail -f /var/log/odoo/odoo.log
-
Enable odoo service để tự chạy mỗi khi server bật lên:
sudo systemctl enable odoo.service
-
Cài Nginx:
-
Chạy lệnh cài Nginx:
sudo apt install -y nginx
-
Mặc định sau khi cài xong thì Nginx sẽ được enable và khởi chạy luôn. Để chắc ăn, bạn cứ chạy thêm câu lệnh sau:
sudo systemctl enable --now nginx
-
Chạy lệnh cài Nginx:
-
Cấu hình Nginx:
-
Tạo file cấu hình nginx cho domain của bạn
sudo nano /etc/nginx/sites-available/{YOUR_DOMAIN}.conf
-
Nội dung:
server { listen 80; server_name {YOUR_DOMAIN}; access_log /var/log/nginx/odoo.access.log; error_log /var/log/nginx/odoo.error.log; proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; client_max_body_size 200m; location / { proxy_pass http://127.0.0.1:8069; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location ~* /web/static/ { proxy_cache_valid 200 90m; proxy_buffering on; expires 864000; proxy_pass http://127.0.0.1:8069; } location /websocket { proxy_pass http://127.0.0.1:8072; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Bấm Ctrl + X rồi gõ Y để lưu file lại. -
Kích hoạt file cấu hình vừa tạo:
sudo ln -s /etc/nginx/sites-available/{YOUR_DOMAIN}.conf /etc/nginx/sites-enabled/
-
Kiểm tra xem có lỗi Nginx gì không:
sudo nginx -t
Báo lại như này là ok:nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
-
Khởi chạy lại nginx service để nhận cấu hình mới:
sudo systemctl restart nginx
-
Mở port HTTP và HTTPS để bên ngoài truy cập vào được web.
sudo ufw allow 80/tcp && \ sudo ufw allow 443/tcp
-
Tạo file cấu hình nginx cho domain của bạn
-
Trỏ domain về server:
-
Tạo bản ghi trên trang quản trị domain của bạn trò về địa chỉ IP của server.
Host=www type=CNAME Address={YOUR_DOMAIN}. TTL=300 Host=@ Type=A Address={YOUR_SERVER_IP} TTL=300
- Bản ghi loại CNAME để trỏ domain www.* về domain không có www của bạn. Lưu ý: có dấu . ở cuối trong trường Address.
-
Tạo bản ghi trên trang quản trị domain của bạn trò về địa chỉ IP của server.
- Cài certbot để dùng HTTPS:
- Chạy lệnh để cài certbot - công cụ tự động cấp phát SSL sử dụng của Let’s Encrypt.
sudo apt install -y certbot python3-certbot-nginx && \ sudo certbot --nginx -d {YOUR_DOMAIN}
- Nhập vào email để nhận thông báo.
- Chọn Y để đồng ý với ToS (Điều khoản dịch vụ).
- Chọn Y để đồng ý chia sẻ địa chỉ email với tổ chức EFF.
-
Từ Web Browser (Chrome), vào trang web: https://{YOUR_DOMAIN} để bắt đầu khởi tạo DB:
- Master Password: this-is-master-password
- Database Name: normal-user-{YOUR_DOMAIN}
- Email: <Email của bạn - sẽ dùng làm tài khoản admin>
- Password: <Mật khẩu của bạn - mật khẩu tài khoản admin>
- Phone number: <SĐT của bạn>
- Language: English (US)
- Country: Vietnam
- Demo data: Không tick
- Ấn nút Create database.
- Đợi 1 lúc, đăng nhập với email và password vừa tạo.
-
File /etc/odoo.conf, sửa giá trị list_db thành False để vô hiệu hóa việc Thêm/ Chọn/Xóa DB từ giao diện Odoo. Sau đó restart Odoo service.
sudo systemctl restart odoo
Vậy là xong! Sau khi làm theo từng bước trong bài viết này, bạn đã có một hệ thống Odoo 18 chạy ổn định trên Ubuntu Server 24.04, có HTTPS đầy đủ, proxy qua Nginx, và sẵn sàng dùng cho môi trường production.
Tôi viết bài này để chia sẻ lại quá trình thực tế tôi đã làm – hy vọng giúp được bạn nào đó đang loay hoay dựng Odoo cho công ty, cho dự án riêng, hay đơn giản là để vọc.
Nếu trong quá trình làm có trục trặc gì, bạn đừng ngần ngại mà hãy liên hệ với tôi nhé!
Chúc bạn dựng Odoo thành công, và sớm bắt tay vào số hoá doanh nghiệp hoặc cho bản thân cá nhân mình!
Cài đặt Odoo 18 CE trên Ubuntu Server 24.04