Việc chọn một CRM tự lưu trữ (self-hosted) không chỉ là tìm nơi lưu danh bạ và theo dõi cơ hội bán hàng. Câu hỏi lớn hơn là bạn sẽ cần gì sau khi CRM đã chạy.

Một doanh nghiệp nhỏ có thể bắt đầu với lead, liên hệ, cơ hội và hoạt động bán hàng. Về sau, họ có thể cần báo giá, xuất hóa đơn, kho, mua hàng, kế toán hoặc các công cụ kinh doanh khác. Chạy một ứng dụng riêng cho từng nhu cầu có thể khiến hệ thống khó quản lý hơn.

Hiện có nhiều nền tảng CRM tự lưu trữ, và Odoo là một trong số đó. Odoo có thể hoạt động như một CRM trước tiên và phát triển thành nền tảng quản lý doanh nghiệp rộng hơn khi bạn cần nhiều hơn CRM.

Nếu bạn đang cân nhắc tự lưu trữ Odoo, bạn có thể cài đặt bằng Docker hoặc trực tiếp từ mã nguồn trên máy chủ Linux. Hướng dẫn này đề cập cả hai phương pháp.

Đầu tiên chúng ta sẽ thiết lập Odoo với Docker và PostgreSQL. Sau đó, chúng ta sẽ cài đặt Odoo từ mã nguồn và xem xét công việc bổ sung khi quản lý nó trực tiếp trên máy chủ.

Bạn nên tự lưu trữ hay chọn nhà cung cấp CRM tùy chỉnh?

Trước khi đầu tư thời gian vào một CRM, hãy quyết định xem bạn muốn tự lưu trữ và tự quản lý hay làm việc với một nhà cung cấp chuyên về phát triển CRM tùy chỉnh.

Hãy tự lưu trữ CRM nếu mục tiêu chính của bạn là học, đánh giá năng lực của nó, cấu hình (config) các tính năng tiêu chuẩn và xác định xem nó có phù hợp với doanh nghiệp của bạn không.

Hãy chọn nhà cung cấp CRM khi bạn cần một giải pháp sẵn sàng cho sản xuất (-r), tùy chỉnh quy mô lớn, tích hợp, di chuyển dữ liệu, quy trình làm việc chuyên biệt hoặc hỗ trợ kỹ thuật thường xuyên.

Nếu bạn chọn nhà cung cấp, hãy đánh giá họ cẩn thận trước khi đưa ra quyết định mua. Đừng chọn chỉ dựa trên giá hoặc một bản demo thuyết phục. Hãy kiểm tra kinh nghiệm CRM, năng lực kỹ thuật, hiểu biết về doanh nghiệp của bạn, các dự án trước đây, cách tiếp cận tùy chỉnh, hỗ trợ, khả năng nâng cấp và tổng chi phí dài hạn.

Một nhà cung cấp tốt trước tiên nên xác định liệu yêu cầu của bạn có thể đáp ứng bằng các tính năng CRM tiêu chuẩn hay cấu hình (config) không. Phát triển tùy chỉnh chỉ nên được đề xuất khi thực sự cần thiết.

Nếu bạn muốn tự quản lý hệ thống, phần còn lại của hướng dẫn này giải thích cách đánh giá và tự lưu trữ Odoo bằng Docker hoặc cài đặt từ mã nguồn.

Trước khi bắt tay vào cài đặt, hãy để tôi giới thiệu ngắn gọn về Odoo, các tính năng, các phiên bản hiện có và sự khác biệt giữa chúng. Điều này sẽ cho bạn ý niệm cơ bản về những gì Odoo cung cấp trước khi chúng ta bắt đầu thiết lập.

Odoo là gì?

Odoo là một nền tảng ứng dụng doanh nghiệp bao gồm CRM cùng các ứng dụng cho bán hàng, kế toán, kho, mua hàng, sản xuất, quản lý dự án, website, marketing và các chức năng kinh doanh khác.

Các ứng dụng Odoo dùng chung một cơ sở dữ liệu. Điều này cho phép các phần khác nhau của hệ thống làm việc với cùng khách hàng, sản phẩm, đơn hàng, hóa đơn và các bản ghi kinh doanh khác.

Ví dụ, một nhóm bán hàng có thể quản lý cơ hội trong CRM, tạo báo giá, xác nhận bán hàng, rồi tiếp tục với xuất hóa đơn và giao hàng. Quy trình khả dụng phụ thuộc vào các ứng dụng bạn cài đặt và cấu hình.

Odoo vì vậy rộng hơn một CRM truyền thống. Bạn có thể chỉ dùng những ứng dụng mình cần và thêm các ứng dụng khác sau.

Tính năng của Odoo

Odoo cung cấp ứng dụng cho nhiều lĩnh vực kinh doanh khác nhau:

Ứng dụng CRM bao gồm các tính năng như lead, cơ hội, pipeline bán hàng, hoạt động, báo giá, phân công lead, chấm điểm lead và báo cáo bán hàng.

Bạn không cần cài đặt mọi ứng dụng. Một bản cài đặt tự lưu trữ có thể bắt đầu với CRM và những ứng dụng bạn thực sự cần.

Odoo Community và Enterprise

Odoo có hai phiên bản: Community và Enterprise.

Community là phiên bản mã nguồn mở, được cấp phép theo LGPLv3. Enterprise bao gồm mã Community cùng các ứng dụng và tính năng độc quyền bổ sung. Phần mềm Enterprise được điều chỉnh bởi Giấy phép Odoo Enterprise Edition.

Với người đang lên kế hoạch tự lưu trữ, những khác biệt chính là:

Các tính năng cụ thể trong mỗi phiên bản có thể thay đổi giữa các bản phát hành Odoo. Hãy kiểm tra tài liệu cho phiên bản Odoo cụ thể trước khi cài thêm mô-đun.

Lưu trữ và cài đặt là hai chuyện khác nhau

Community và Enterprise là các phiên bản của Odoo. Docker, cài từ mã nguồn, Odoo Online và Odoo.sh mô tả cách hoặc nơi Odoo chạy. Chúng không phải là các phiên bản Odoo riêng biệt.

Sự phân biệt này quan trọng khi lập kế hoạch tự lưu trữ.

Khi tự lưu trữ, bạn quản lý máy chủ Linux, bản cài Odoo, cơ sở dữ liệu PostgreSQL, lưu trữ, sao lưu, cập nhật và truy cập mạng.

Có nhiều cách cài Odoo trên máy chủ của riêng bạn. Trong hướng dẫn này, chúng ta sẽ đề cập hai cách:

  • Docker: Odoo và PostgreSQL chạy trong container.
  • Cài từ mã nguồn: Odoo chạy trực tiếp trong môi trường Linux với các phụ thuộc cần thiết.

Phần còn lại của hướng dẫn tập trung vào hai phương pháp tự lưu trữ này.

Phương pháp 1: Tự lưu trữ Odoo bằng Docker

Docker giúp Odoo dễ chạy và dễ bảo trì. Bạn có một bản cài sạch, sao lưu đơn giản và lộ trình cập nhật dễ dàng về sau.

Tôi giả định bạn đã quen với các lệnh Docker và Linux cơ bản. Hướng dẫn đi qua một thiết lập thực tế, từ một máy chủ trống đến một phiên bản Odoo đang hoạt động.

Những gì bạn cần

Trước tiên hãy kiểm tra phiên bản Docker:

docker --version
docker compose version

Nếu bạn thấy số phiên bản cho cả hai, bạn đã sẵn sàng. Nếu không, hãy cài Docker:

sudo apt update
sudo apt install -y docker.io docker-compose-v2
sudo usermod -aG docker $USER

Sau lệnh cuối, hãy đăng xuất rồi đăng nhập lại. Điều này cho phép bạn chạy Docker mà không cần sudo.

Bước 1: Tạo thư mục dự án

mkdir odoo-docker && cd odoo-docker
mkdir config addons

Thư mục config chứa cấu hình Odoo. Thư mục addons chứa các mô-đun tùy chỉnh, nếu bạn thêm sau này.

Bước 2: Tạo tệp môi trường

Odoo cần mật khẩu cơ sở dữ liệu. Hãy lưu nó trong tệp .env, không phải trong tệp compose. Điều này giữ mật khẩu khỏi hệ thống quản lý phiên bản.

cat > .env << 'EOF'
DB_PASSWORD=change_me_to_a_strong_password
EOF

Hãy thay mật khẩu bằng một mật khẩu thật. Dùng trình quản lý mật khẩu để tạo nó.

Bước 3: Viết tệp Docker Compose

Tạo docker-compose.yml với nội dung sau:

services:
db:
image: postgres:18
restart: unless-stopped
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=${DB_PASSWORD}
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- odoo-db-data:/var/lib/postgresql/data/pgdata
healthcheck:
test: ["CMD-SHELL", "pg_isready -U odoo"]
interval: 10s
timeout: 5s
retries: 5
odoo:
image: odoo:19.0
restart: unless-stopped
depends_on:
db:
condition: service_healthy
ports:
- "8069:8069"
- "8072:8072"
environment:
- HOST=db
- USER=odoo
- PASSWORD=${DB_PASSWORD}
volumes:
- odoo-web-data:/var/lib/odoo
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
volumes:
odoo-db-data:
odoo-web-data:

Tệp này định nghĩa hai services:: db (PostgreSQL) và odoo (ứng dụng). Chúng liên lạc với nhau qua mạng nội bộ của Docker. Bạn không cần mở cổng cơ sở dữ liệu ra bên ngoài.

Lưu ý: Nếu bạn chỉ muốn truy cập bảng điều khiển Odoo từ hệ thống cục bộ, hãy đổi các dòng sau:

ports:
- "8069:8069"
- "8072:8072"

thành:

ports:
- "127.0.0.1:8069:8069"
- "127.0.0.1:8072:8072"

Bước 4: Thêm cấu hình Odoo cơ bản

Tạo config/odoo.conf:

nano config/odoo.conf

với nội dung sau:

[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
admin_passwd = change_me_master_password

admin_passwd khác với mật khẩu cơ sở dữ liệu. Nó bảo vệ việc tạo và xóa cơ sở dữ liệu trong giao diện riêng của Odoo. Hãy đặt nó thành một giá trị mạnh và duy nhất.

Bước 5: Khởi động stack

docker compose up -d

Kiểm tra rằng cả hai container đang chạy:

docker compose ps

Bạn sẽ thấy db và odoo với trạng thái Up hoặc healthy.

Bước 6: Mở Odoo

Truy cập http://your-server-ip:8069 trong trình duyệt. Nếu bạn đang ở trên chính máy chủ, dùng http://localhost:8069.

Odoo hiển thị màn hình tạo cơ sở dữ liệu. Điền vào:

  • Mật khẩu master (admin_passwd bạn đã đặt)
  • Tên cơ sở dữ liệu
  • Email và mật khẩu của bạn (đây sẽ là thông tin đăng nhập quản trị)

Nhấn Create Database.

Odoo xây dựng cơ sở dữ liệu đầu tiên của bạn. Quá trình này mất một đến hai phút.

Sau khi cơ sở dữ liệu được tạo, bạn sẽ được tự động chuyển đến bảng điều khiển web Odoo.

Bây giờ bạn đã có một phiên bản Odoo 19 đang chạy trên Docker, dựa trên PostgreSQL 18.

Thiết lập này dùng các volume có tên để bảo vệ dữ liệu, giữ cổng ở cục bộ cho đến khi bạn thêm reverse proxy, và tách mật khẩu cơ sở dữ liệu khỏi mật khẩu master Odoo.

Các bước tiếp theo: thiết lập HTTPS với reverse proxy, lên lịch sao lưu tự động và thử khôi phục trước khi bạn đưa dữ liệu khách hàng thật vào hệ thống.

Nếu các cổng chỉ được bind vào 127.0.0.1

Nếu tệp compose chỉ mở cổng ra 127.0.0.1, Odoo sẽ chưa thể truy cập từ bên ngoài máy chủ của bạn. Đây là vì lý do bảo mật.

Bạn nên đặt một reverse proxy (nginx hoặc Caddy) trước Odoo. Proxy xử lý HTTPS và chuyển tiếp lưu lượng đến cổng 8069. Chạy Odoo trực tiếp trên internet công khai mà không có HTTPS là không an toàn.

Một site block nginx tối thiểu trông như sau:

server {
listen 443 ssl;
server_name crm.example.com;
ssl_certificate /etc/letsencrypt/live/crm.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/crm.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8069;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /longpolling {
proxy_pass http://127.0.0.1:8072;
}
}

Sau khi thêm reverse proxy, hãy thêm dòng này vào config/odoo.conf:

proxy_mode = True

Điều này báo cho Odoo tin tưởng các header của proxy. Nếu không có nó, Odoo có thể tạo liên kết sai và vòng lặp chuyển hướng.

Sao lưu

Dữ liệu của bạn nằm trong hai volume Docker odoo-db-data và odoo-web-data. Hãy sao lưu cả hai, không chỉ một. Cơ sở dữ liệu chứa các bản ghi của bạn. Filestore chứa các tệp tải lên và tệp đính kèm.

Sao lưu cơ sở dữ liệu:

docker compose exec db pg_dump -U odoo -d your_database_name > backup.sql

Sao lưu filestore:

docker run --rm -v odoo-docker_odoo-web-data:/data -v $(pwd):/backup alpine \
tar czf /backup/filestore-backup.tar.gz -C /data .

Hãy chạy cả hai lệnh theo lịch với cron. Hãy thử quy trình khôi phục ít nhất một lần. Một bản sao lưu bạn chưa từng thử không phải là một bản sao lưu thật.

Cập nhật Odoo

Odoo phát hành các bản dựng hàng đêm cho mỗi phiên bản chính. Để cập nhật trong cùng một phiên bản:

docker compose pull
docker compose up -d

Lệnh này kéo image mới nhất cho Odoo 19 và khởi động lại container. Dữ liệu của bạn vẫn nằm trong các volume, nên việc này an toàn cho các bản cập nhật nhỏ.

Nâng cấp phiên bản chính (ví dụ từ 19 lên 20) cần một quy trình khác. Odoo không hỗ trợ nâng cấp phiên bản chính tại chỗ chỉ qua Docker. Hãy thử nâng cấp phiên bản chính trên một bản sao cơ sở dữ liệu của bạn trước.

Các vấn đề thường gặp

Phương pháp 2: Cài đặt Odoo từ mã nguồn

Bản cài đặt này đã được thử nghiệm với:

Operating System: Ubuntu 26.04 LTS
RAM:              8 GB
Disk:             30 GB
Odoo:             19.0 Community
Python:           3.14.4
Git:              2.53.0
PostgreSQL:       Ubuntu PostgreSQL package
Installation:     Odoo source installation
Purpose:          Test / learning VM

Mục đích là để học và đánh giá, không phải triển khai sản xuất.

Vì sao cài từ mã nguồn?

Odoo cung cấp cả bản cài đóng gói và bản cài từ mã nguồn.

Với VM này, chúng ta dùng cài từ mã nguồn vì gói .deb của Odoo 19 hiện ghi hỗ trợ Ubuntu 24.04 LTS (Noble), trong khi VM này dùng Ubuntu 26.04.

Cài từ mã nguồn cho phép chạy Odoo trực tiếp từ cây mã nguồn Git và cũng hữu ích cho việc học, phát triển, tùy chỉnh và chạy nhiều phiên bản Odoo.

Cài PostgreSQL

Cập nhật Ubuntu:

sudo apt update
sudo apt upgrade -y

Cài PostgreSQL:

sudo apt install -y postgresql postgresql-client

Xác minh:

sudo systemctl is-active postgresql

Kết quả mong đợi:

active

Xác minh PostgreSQL:

psql -l

Ban đầu bạn sẽ thấy:

postgres
template0
template1

Cài Git và các phụ thuộc Python

Cài các gói phát triển cần thiết:

sudo apt install -y \
git \
python3 \
python3-pip \
python3-venv \
python3-dev \
libxml2-dev \
libxslt1-dev \
zlib1g-dev \
libsasl2-dev \
libldap2-dev \
libssl-dev \
libjpeg-dev \
libpq-dev \
libffi-dev \
build-essential

Xác minh Python:

python3 --version

Xác minh Git:

git --version

Tải mã nguồn Odoo 19 Community

Chuyển đến thư mục home:

cd ~

Clone nhánh Odoo 19:

git clone --depth 1 --branch 19.0 \
https://github.com/odoo/odoo.git odoo

Vào thư mục:

cd ~/odoo

Xác minh nhánh:

git branch --show-current

Kết quả mong đợi:

19.0

Tạo môi trường ảo Python

Từ thư mục Odoo:

cd ~/odoo

Tạo môi trường ảo:

python3 -m venv odoo-venv

Kích hoạt nó:

source odoo-venv/bin/activate

Xác minh:

python --version

Và:

which python

Đường dẫn Python phải chứa:

~/odoo/odoo-venv/bin/python

Cài các phụ thuộc Python của Odoo

Đảm bảo môi trường ảo đã được kích hoạt:

cd ~/odoo
source odoo-venv/bin/activate

Cài các phụ thuộc:

pip install -r requirements.txt

Chờ lệnh hoàn tất thành công.

Tạo người dùng và cơ sở dữ liệu PostgreSQL

Tạo role PostgreSQL tương ứng với người dùng Ubuntu hiện tại:

sudo -u postgres createuser -d -R -S $USER

Tiếp theo, tạo cơ sở dữ liệu:

createdb $USER

Xác minh:

psql -l

Bây giờ bạn sẽ thấy một cơ sở dữ liệu mang tên người dùng Ubuntu của bạn.

Ví dụ:

ostechnix
postgres
template0
template1

Khởi động Odoo

Kích hoạt môi trường ảo:

cd ~/odoo
source odoo-venv/bin/activate

Khởi động Odoo:

./odoo-bin

Odoo sẽ báo rằng dịch vụ HTTP đang chạy trên cổng 8069.

Kết quả điển hình:

HTTP service (werkzeug) running on ...:8069

Giữ terminal này mở trong khi Odoo đang chạy.

Khởi tạo cơ sở dữ liệu Odoo

Nếu cơ sở dữ liệu tồn tại nhưng chưa được khởi tạo, hãy dừng Odoo:

Ctrl+C

Sau đó khởi tạo mô-đun base của Odoo:

cd ~/odoo
source odoo-venv/bin/activate
./odoo-bin -d $USER -i base

Chờ các mô-đun tải xong.

Sau đó có thể truy cập Odoo qua trình duyệt.

Truy cập Odoo từ máy tính khác

Tìm địa chỉ IP của VM:

hostname -I

Ví dụ:

192.168.0.30

Từ một máy tính khác trong cùng mạng, mở:

http://192.168.0.30:8069

Thay địa chỉ IP bằng địa chỉ VM thực tế.

Cổng HTTP mặc định của Odoo là 8069.

Đây là giao diện trang đăng nhập Odoo:

Đăng nhập lần đầu

Với cơ sở dữ liệu thử được tạo trong bản cài đặt này, thông tin đăng nhập quản trị ban đầu là:

Username: admin
Password: admin

Hãy đổi mật khẩu quản trị ngay khi dùng bất cứ thứ gì ngoài một môi trường thử dùng một lần.

Đây là giao diện bảng điều khiển Odoo:

Dừng Odoo

Đúng vậy. Vì đây là VM thử nghiệm/học tập của bạn, bạn có thể đóng/dừng Odoo khi đã xong việc.

Odoo của bạn được khởi động thủ công bằng ./odoo-bin, nên:

  1. Vào terminal VM nơi Odoo đang chạy.
  2. Nhấn Ctrl+C. Tài liệu Odoo xác nhận điều này dừng máy chủ.
  3. Sau đó bạn có thể đóng terminal/phiên SSH nếu muốn.

Dữ liệu của bạn sẽ vẫn còn trong PostgreSQL. Dừng máy chủ Odoo không xóa cơ sở dữ liệu của bạn.

Lần sau, bạn sẽ khởi động lại bằng:

cd ~/odoo
source odoo-venv/bin/activate
./odoo-bin

Sau đó truy cập từ PC của bạn bằng cùng IP VM và :8069.

Cấu hình Odoo như một dịch vụ hệ thống

Bản cài từ mã nguồn của Odoo chạy trực tiếp qua odoo-bin; chúng ta chỉ để systemd quản lý tiến trình đó một cách tự động.

Tạo tệp dịch vụ:

sudo nano /etc/systemd/system/odoo.service

Dán:

[Unit]
Description=Odoo 19
Requires=postgresql.service
After=network.target postgresql.service
[Service]
Type=simple
User=ostechnix
WorkingDirectory=/home/ostechnix/odoo
ExecStart=/home/ostechnix/odoo/odoo-venv/bin/python /home/ostechnix/odoo/odoo-bin
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target

Thay ostechnix bằng tên người dùng thực tế của bạn.

Nhấn Ctrl+O → Enter → Ctrl+X để lưu và đóng tệp.

Tải lại systemd:

sudo systemctl daemon-reload

Bật Odoo khởi động cùng hệ thống:

sudo systemctl enable odoo

Khởi động Odoo ngay:

sudo systemctl start odoo

Kiểm tra rằng nó đang chạy:

sudo systemctl status odoo

Bạn muốn thấy:

Active: active (running)

Nhấn q để thoát màn hình trạng thái.

Bây giờ là lúc thử nghiệm. Từ PC của bạn, mở:

http://<VM-IP>:8069

Odoo giờ đây sẽ khả dụng mà không cần chạy thủ công odoo-bin.

Từ giờ, bạn không cần chạy thủ công:

cd ~/odoo
source odoo-venv/bin/activate
./odoo-bin

Khi Ubuntu khởi động, systemd sẽ tự động khởi động Odoo.

Bạn cũng có thể điều khiển nó bằng:

sudo systemctl start odoo
sudo systemctl stop odoo
sudo systemctl restart odoo
sudo systemctl status odoo

Vậy là xong. Không cài lại, không kích hoạt môi trường ảo, không khởi động Odoo thủ công.

Bật chế độ nhà phát triển

Chế độ nhà phát triển hữu ích cho việc học kiến trúc kỹ thuật của Odoo.

Thêm:

?debug=1

vào URL Odoo.

Ví dụ:

http://192.168.0.50:8069/?debug=1

Biểu tượng nhà phát triển/lỗi sau đó sẽ xuất hiện trong giao diện.

Xử lý sự cố

Odoo không chạy

Kiểm tra:

sudo systemctl status odoo

Sau đó xem log gần đây:

sudo journalctl -u odoo -n 50 --no-pager

Theo dõi log trực tiếp:

sudo journalctl -u odoo -f

Lỗi 217/USER

Ví dụ:

status=217/USER

Điều này thường cho thấy vấn đề với tài khoản User= trong dịch vụ systemd.

Với bản cài đặt này, người dùng đúng là:

ostechnix

Xác minh:

id ostechnix

Dịch vụ phải chứa:

User=ostechnix

và các đường dẫn phải dùng:

/home/ostechnix/odoo

Trang web Odoo không mở

Kiểm tra xem Odoo có đang chạy không:

sudo systemctl status odoo

Kiểm tra xem cổng 8069 có đang lắng nghe không:

sudo ss -ltnp | grep 8069

Tìm IP của VM:

hostname -I

Sau đó duyệt đến:

http://<VM-IP>:8069

Cập nhật bản cài từ mã nguồn

Vì bản cài này dùng Git, mã nguồn Odoo có thể được cập nhật qua Git. Tài liệu Odoo mô tả quy trình cập nhật mã nguồn dựa trên Git bằng git fetch và git rebase --autostash.

Trước khi cập nhật một bản cài thật:

Luôn sao lưu cơ sở dữ liệu trước.

Với VM học tập này, quy trình cập nhật mã nguồn cơ bản là:

cd ~/odoo
git fetch
git rebase --autostash

Sau đó khởi động lại Odoo:

sudo systemctl restart odoo

Cảnh báo: Đừng áp dụng cập nhật mã nguồn một cách mù quáng cho một hệ thống sản xuất có mô-đun tùy chỉnh. Hãy thử cập nhật trước.

Tóm tắt tái tạo nhanh

Với một VM thử Ubuntu 26.04 mới, trình tự thiết yếu là:

# Update
sudo apt update
sudo apt upgrade -y
# PostgreSQL
sudo apt install -y postgresql postgresql-client
# System dependencies
sudo apt install -y \
git python3 python3-pip python3-venv python3-dev \
libxml2-dev libxslt1-dev zlib1g-dev \
libsasl2-dev libldap2-dev libssl-dev \
libjpeg-dev libpq-dev libffi-dev \
build-essential
# Odoo source
cd ~
git clone --depth 1 --branch 19.0 \
https://github.com/odoo/odoo.git odoo
# Python environment
cd ~/odoo
python3 -m venv odoo-venv
source odoo-venv/bin/activate
# Python dependencies
pip install -r requirements.txt
# PostgreSQL user/database
sudo -u postgres createuser -d -R -S $USER
createdb $USER
# Start Odoo
./odoo-bin

Nếu cơ sở dữ liệu cần khởi tạo:

./odoo-bin -d $USER -i base

Sau đó truy cập:

http://<VM-IP>:8069

Câu hỏi thường gặp (FAQ)

H: Tôi có thể chạy Odoo Community miễn phí mãi mãi không?

Đ: Có. Odoo Community được cấp phép theo LGPL. Không có phí giấy phép và không giới hạn người dùng.

H: Tôi có cần một máy chủ mạnh không?

Đ: Không. Một VPS nhỏ với 2 GB RAM chạy Odoo tốt cho một vài người dùng. Hãy thêm RAM khi nhóm và dữ liệu của bạn phát triển.

H: Có bắt buộc dùng Docker để tự lưu trữ Odoo không?

Đ: Không, nhưng đó là cách dễ nhất. Docker cô lập Odoo và Postgres khỏi phần còn lại của hệ thống và giúp việc sao lưu, cập nhật trở nên dễ đoán định.

H: Odoo 19 cần phiên bản PostgreSQL nào?

Đ: Odoo 19 hoạt động với PostgreSQL 13 đến 17. Hướng dẫn này dùng 17, bản phát hành ổn định mới nhất tại thời điểm viết.

H: Odoo lưu các tệp tải lên ở đâu?

Bên trong container tại /var/lib/odoo, được ánh xạ tới volume Docker odoo-web-data trên máy chủ của bạn.

Tài nguyên: