Trong bài viết này, tôi sẽ hướng dẫn bạn 6 bước để cài đặt Odoo 12 chạy với Python 3.7 và 3.8 trên Máy chủ Ubuntu 22.04 với PostgreSQL 10 và PostgreSQL 12.
Xin lưu ý rằng nếu bạn đang tìm cách cài đặt các phiên bản Odoo khác, bạn có thể đọc các bài liên quan khác của tôi:
- Cách cài đặt Odoo 8 trên Ubuntu 22.04
- Cách cài đặt Odoo 9 trên Ubuntu 22.04
- Cách cài đặt Odoo 10 trên Ubuntu 22.04
- Cách cài đặt Odoo 11 trên Ubuntu 22.04
- Cách cài đặt Odoo 13 trên Ubuntu 22.04
- Cách cài đặt Odoo 14 trên Ubuntu 22.04
- Cách cài đặt Odoo 15 trên Ubuntu 22.04
- Cách cài đặt Odoo 16 trên Ubuntu 22.04
Nếu bạn là nhà phát triển Odoo, bạn có thể quan tâm đến Cách thiết lập môi trường phát triển Odoo trên Ubuntu 22.04.
Tóm tắt
Trong bài đăng này, tôi sẽ hướng dẫn bạn 6 bước để cài đặt Odoo 12 trên máy chủ Ubuntu 22.04 để đạt được những điều sau:
- Odoo 12 chạy với Python 3.7:
- Tài khoản Unix chạy Odoo: odoo12_37
- Phiên bản PostgreSQL: 10
- Cổng HTTP: 8089, để người dùng có thể truy cập bằng trình duyệt web với địa chỉ kiểu như http://ip_cua_server:8089
- Odoo 12 chạy với Python 3.8
- Tài khoản Unix chạy Odoo: odoo12_38
- Phiên bản PostgreSQL: 12
- Cổng HTTP: 8099, để người dùng có thể truy cập bằng trình duyệt web với địa chỉ như http://your_ip: 8099
- Các bản Odoo nói trên (hay còn gọi là các instance) sẽ chạy như một dịch vụ với tính năng tự động khởi động.
- Các instance cũng sẽ được cách ly trong một môi trường chuyên biệt
- Chúng cũng sẽ được đặt master password để bảo vệ cơ sở dữ liệu của chúng. Người dùng có mật khẩu chính sẽ có thể tạo / xóa / sao lưu / khôi phục cơ sở dữ liệu
Bước 1 - Tạo nhóm và người dùng để chạy Odoo
Để bảo mật, chúng ta nên chạy các phiên bản Odoo bằng các tài khoản người dùng Linux riêng biệt có các thông số kỹ thuật sau:
- Đối với Odoo 12 chạy Python 3.7:
- Tên tài khoản: odoo12_37
- Thư mục home:
/home/odoo12_37
- Đối với Odoo 12 chạy Python 3.8:
- Tên tài khoản: odoo12_38
- Thư mục home:
/home/odoo12_38
- Tài khoản người dùng sẽ không thể đăng nhập vì mục đích bảo mật. Chúng cũng phải là tài khoản hệ thống mà daemon và các quy trình khác có thể dùng nó để chạy;
- Các tài khoản người dùng sẽ thuộc về một nhóm có quyền truy cập vào mã nguồn Odoo 12 (cụ thể là odoo);
Tạo nhóm unix
Chạy lệnh sau để tạo nhóm odoo:
sudo addgroup odoo
Tạo tài khoản odoo12_37
Chạy lệnh sau để tạo tài khoản odoo12_37 và thêm nó vào nhóm odoo:
sudo adduser odoo12_37 --system \ --home=/home/odoo12_37 --disabled-login \ --disabled-password --ingroup odoo
Tạo người dùng odoo12_38
Chạy lệnh sau để tạo tài khoản odoo12_38 và thêm nó vào nhóm odoo:
sudo adduser odoo12_38 --system \ --home=/home/odoo12_38 --disabled-login \ --disabled-password --ingroup odoo
Bước 2 – Cài đặt PostgreSQL cho Odoo 12
Tôi chưa thử nghiệm đầy đủ Odoo 12 với phiên bản PostgreSQL mới nhất là PostgreSQL 14 đi kèm với Ubuntu 22.04 nhưng tôi tin rằng nó sẽ hoạt động. Tuy nhiên, như đã thảo luận trong phần Tóm tắt, chúng ta sẽ cài đặt PostgreSQL 10 và 12. Nếu bạn muốn các phiên bản khác của PostgreSQL, bạn có thể làm theo một bài khác của tôi để cài đặt nhiều phiên bản PostgreSQL trên Ubuntu 22.04 trong trường hợp bạn muốn một phiên bản PostgreSQL khác.
Thêm PPA PostgreSQL chính thức
Vì Ubuntu 22.04 không có biết gì về các phiên bản PostgreSQL ngoài 14, chúng ta cần thêm PPA chính thức từ tác giả PostgreSQL
# Create the file repository configuration: sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' # Import the repository signing key: wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg # Update the package lists: sudo apt-get update
Như thường lệ, chúng ta nên cập nhật hệ thống trước khi cài đặt bất kỳ thứ gì:
sudo apt dist-upgrade
Cài đặt PostgreSQL 10 và 12
sudo apt install postgresql-10 sudo apt install postgresql-12
Sau khi cài đặt hoàn tất và tôi giả sử rằng bạn chưa cài đặt bất kỳ postgreSQL nào trước đó, cổng lắng nghe của các cụm PostgreSQL mới được cài đặt sẽ là:
- PostgreSQL 10: 5432
- PostgreSQL 12: 5433
Trong trường hợp bạn có các phiên bản PostgreSQL khác đang chạy và bạn muốn sắp xếp lại việc gán các cổng, vui lòng làm theo hướng dẫn thay đổi cổng PostgreSQL.
Tạo các role cho cơ sở dữ liệu
Trong phần này, chúng ta sẽ tạo các vai trò (role) SQL cơ sở dữ liệu có cùng tên với tài khoản người dùng unix để Odoo có thể xác thực PosgreSQL bằng phương pháp ident (không sử dụng mật khẩu):
- Odoo 12 chạy Python 3.7 sẽ kết nối PostgreSQL 10 trên cổng 5432 bằng cách sử dụng role odoo12_37,
- Odoo 12 chạy Python 3.8 sẽ kết nối PostgreSQL 12 trên cổng 5433 bằng cách sử dụng role odoo12_38
Tạo Role odoo12_37
Lệnh dưới đây sẽ tạo một role có tên odoo12_37 trong PostgreSQL 10 đang lắng nghe trên cổng 5432:
sudo -u postgres createuser odoo12_37 --interactive -p 5432
Khi được hỏi trong phiên tương tác, vui lòng nhập như sau:

Tạo Role odoo12_38
Lệnh dưới đây sẽ tạo một role có tên odoo12_38 trong PostgreSQL 12 đang lắng nghe trên cổng 5433:
sudo -u postgres createuser odoo12_38 --interactive -p 5433
Khi được hỏi trong phiên tương tác, vui lòng nhập như sau:

Bước 3 - Tải xuống mã nguồn Odoo 12 từ GitHub
Trong phần này, chúng ta sẽ tải xuống mã nguồn Odoo 12 từ GitHub và thực hiện chính sách bảo mật cho quyền truy cập đọc cho người dùng trong nhóm odoo.
Để tải xuống mã nguồn của Odoo 12 từ GitHub, chỉ cần chạy lệnh bên dưới để sao chép nó bằng git qua HTTP:
git clone -b 12.0 https://github.com/odoo/odoo.git /opt/odoo/odoo12
Hoặc, bạn có thể sao chép kho lưu trữ từ GitHub qua SSH để có hiệu suất và bảo mật tốt hơn bằng cách sử dụng lệnh sau:
git clone -b 12.0 git@github.com:odoo/odoo.git /opt/odoo/odoo12
Tùy thuộc vào tốc độ kết nối internet của bạn, quá trình này có thể mất vài phút hoặc hơn. Hãy kiên nhẫn hoặc mở một phiên khác để thực hiện các bước tiếp theo của việc cài đặt Python một cách song song.
Sau khi quá trình hoàn tất, bạn sẽ tìm thấy mã nguồn Odoo 12 trong thư mục /opt/odoo/odoo12/
.
Bây giờ, hãy bảo mật mã nguồn của bạn để chỉ cho phép những người dùng của nhóm odoo có thể đọc nó bằng cách thay đổi quyền truy cập cho nhóm odoo.
sudo chown -hR root:odoo /opt/odoo/odoo12
Bước 4 - Cài đặt Python 3.7 và 3.8
Như đã thảo luận, Odoo 12 hỗ trợ chính thức Python 3.7 và 3.8. Tuy nhiên, phiên bản Python đi kèm với Ubuntu 22.04 là 3.10 nên chúng ta cần tự cài đặt Python 3.7 và 3.8. Bạn có thể làm theo hướng dẫn về cách cài đặt nhiều phiên bản Python để hoàn thành bước này. Một cách tóm tắt thì các công việc sẽ như sau:
Thêm PPA Deadsnakes
sudo add-apt-repository ppa:deadsnakes/ppa
Cài đặt Python 3.7 và công cụ Môi trường ảo của nó
Vì chúng ta cần tạo một môi trường Python riêng biệt để Odoo 12 chạy để tránh làm hỏng những thứ hiện có, chúng ta cũng cần cài đặt Công cụ môi trường ảo Python. Đây là lệnh để cài đặt cả Python 3.7 và công cụ môi trường ảo của nó:
sudo apt install python3.7 python3.7-venv
Bây giờ, hãy chạy lệnh bên dưới để xác minh xem Python 3.7 có được cài đặt đúng cách hay không:
python3.7 -V
Bạn sẽ thấy kết quả như bên dưới

Cài đặt Python 3.8 và công cụ Môi trường ảo của nó
sudo apt install python3.8 python3.8-venv
Bây giờ, hãy chạy lệnh bên dưới để xác minh xem Python 3.8 có được cài đặt đúng cách hay không:
python3.8 -V
Bạn sẽ thấy kết quả như bên dưới

Bước 5 - Cài đặt Odoo 12
Các yêu cầu tiên quyết
Cài đặt phần mềm Ubuntu và các gói được yêu cầu để chạy Odoo 12 sau này:
sudo apt install python3.7-dev python3.8-dev \ build-essential libsass-dev libjpeg-dev \ libjpeg8-dev libldap-dev libldap2-dev \ libpq-dev libsasl2-dev libxslt1-dev zlib1g-dev
Cài đặt wkhtmltopdf
Odoo tạo PDF từ HTML, đó là lý do tại sao chúng ta cần wkhtmltopdf.
Tải xuống wkhtmltopdf:
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
Cài đặt wkhtmltopdf:
sudo dpkg -i wkhtmltox_0.12.6.1-2.jammy_amd64.deb # force install dependencies sudo apt -f install -y
Cài đặt Odoo 12 với Python 3.7 và PostgreSQL 10
Tạo môi trường ảo Odoo 12 Python 3.7
Tạo thư mục mẹ cho Odoo 12 với môi trường ảo Python 3.7:
sudo mkdir -p /python-venv/3.7/odoo12
Bảo mật môi trường ảo:
sudo chown -hR odoo12_37:odoo /python-venv/3.7/odoo12
Chuyển tài khoản người dùng hiện tại sang bash của odoo12_37:
sudo su - odoo12_37 -s /bin/bash
Tạo môi trường ảo:
python3.7 -m venv /python-venv/3.7/odoo12
Cài đặt các thư viện Python bắt buộc cho Odoo 12
Kích hoạt môi trường ảo mà chúng ta đã tạo ở trên:
source /python-venv/3.7/odoo12/bin/activate
Như thường lệ, trước tiên chúng ta cần nâng cấp pip lên phiên bản mới nhất cho môi trường ảo hiện hành trước:
pip install --upgrade pip
Bây giờ, hãy bắt đầu cài đặt các thư viện theo yêu cầu của Odoo 12 cho môi trường ảo. Hãy chắc chắn rằng bạn đã hoàn thành việc tải về mã nguồn Odoo 12.
pip install -r /opt/odoo/odoo12/requirements.txt
Khởi động Odoo 12
Bây giờ, chúng ta có thể khởi động Odoo 12 trong môi trường ảo bằng cách chạy lệnh sau kết nối PostgreSQL trên cổng 5432 và cung cấp cổng HTTP 8089 để client có thể truy cập:
/opt/odoo/odoo12/odoo-bin --db_port=5432 --http-port=8089
Bạn sẽ thấy kết quả ở terminal như hình dưới đây:

Bây giờ, bạn có thể mở trình duyệt của mình và nhập địa chỉ kiểu như http://ip_cua_server:8089 để thấy Giao diện tạo cơ sở dữ liệu của Odoo 12 như hình dưới đây:

Bây giờ, bạn có thể nhập tên cơ sở dữ liệu, email, v.v. sau đó nhấn nút Create database để khởi tạo cơ sở dữ liệu đầu tiên cho Odoo 12 của bạn.
Dừng Odoo 12 và Thoát
Để dừng Odoo 12, chỉ cần quay terminal và nhấn Ctrl + C hai lần.
Bây giờ, hãy sẵn sàng cho các bước tiếp theo để cài đặt Odoo 12 với Python 3.8 bằng cách chạy các lệnh bên dưới.
Hủy kích hoạt môi trường ảo
deactivate
Quay lại tài khoản người dùng unix trước đó:
exit
Cài đặt Odoo 12 với Python 3.8 và PostgreSQL 12
Cài đặt Odoo 12 với Python 3.8 tương tự như Cài đặt Odoo 12 với Python 3.7.
Tạo thư mục cha cho môi trường ảo Python 3.8 cho Odoo12
sudo mkdir -p /python-venv/3.8/odoo12 sudo chown -hR odoo12_38:odoo /python-venv/3.8/odoo12
Chuyển sang tài khoản odoo12_38:
sudo su - odoo12_38 -s /bin/bash
Tạo môi trường ảo Python 3.8 cho Odoo 12:
python3.8 -m venv /python-venv/3.8/odoo12
Kích hoạt môi trường ảo:
source /python-venv/3.8/odoo12/bin/activate
Nâng cấp pip
pip install --upgrade pip
Cài đặt các thư viện bắt buộc cho Odoo 12:
pip install -r /opt/odoo/odoo12/requirements.txt
Khởi động Odoo 12 kết nối PostgreSQL 12:
/opt/odoo/odoo12/odoo-bin --db_port=5433 --http-port=8099
Sau khi xác minh rằng Odoo 12 hoạt động bình thường, hãy thoát:
deactivate
exit
Bước 6 - Chạy Odoo 12 dưới dạng dịch vụ / daemon
Trong phần này, tôi sẽ hướng dẫn bạn cách tạo các dịch vụ tự động khởi chạy cho các phiên bản Odoo 12 mới được cài đặt của bạn để chúng sẽ chạy dưới dạng dịch vụ và khởi động mỗi khi máy chủ được khởi động.
Odoo 12 Python 3.7 Daemon
Tạo tệp cấu hình Odoo 12
Tệp cấu hình là tệp lưu trữ các chỉ thị cấu hình cho phép Odoo biết cách chạy (ví dụ: đường dẫn đến các module bổ trợ, cổng cơ sở dữ liệu, v.v.).
Trong phần này, tôi sẽ tạo một tệp cấu hình có tên odoo12_37.conf và lưu trữ trong /home/odoo12_37. Tôi sẽ sử dụng trình soạn thảo nano để tạo tệp:
sudo nano /home/odoo12_37/odoo12_37.conf
Bây giờ, hãy copy và paste những thứ sau vào giao diện người dùng trình soạn thảo nano của bạn:
[options] addons_path = /opt/odoo/odoo12/odoo/addons,/opt/odoo/odoo12/addons admin_passwd = admin # please change this master password csv_internal_sep = , data_dir = /home/odoo12_37/.local/share/Odoo db_host = False db_maxconn = 64 db_name = False db_password = False db_port = 5432 db_sslmode = prefer db_template = template0 db_user = False dbfilter = demo = {} email_from = False geoip_database = /usr/share/GeoIP/GeoLite2-City.mmdb http_enable = True http_interface = http_port = 8089 import_partial = limit_memory_hard = 2684354560 limit_memory_soft = 2147483648 limit_request = 8192 limit_time_cpu = 60 limit_time_real = 120 limit_time_real_cron = -1 list_db = True log_db = False log_db_level = warning log_handler = :INFO log_level = info logfile = None logrotate = False longpolling_port = 8090 max_cron_threads = 2 osv_memory_age_limit = 1.0 osv_memory_count_limit = False pg_path = None pidfile = None proxy_mode = False reportgz = False server_wide_modules = base,web smtp_password = False smtp_port = 25 smtp_server = localhost smtp_ssl = False smtp_user = False syslog = False test_enable = False test_file = False test_tags = None translate_modules = ['all'] unaccent = False without_demo = False workers = 0
Bây giờ, lưu tệp và thoát bằng cách nhấn Ctrl + X, sau đó nhập y và nhấn nút Enter.
Để cho phép odoo12_37 truy cập tệp cấu hình:
sudo chown odoo12_37:root /home/odoo12_37/odoo12_37.conf
Tạo tệp dịch vụ
sudo nano /lib/systemd/system/odoo12_37.service
Bây giờ, sao chép và dán nội dung sau vào giao diện trình soạn thảo nano của bạn
[Unit] Description=Odoo12_37 After=network.target postgresql.service [Service] Type=simple PermissionsStartOnly=true User=odoo12_37 Group=odoo SyslogIdentifier=odoo12_37 PIDFile=/run/odoo12_37/odoo12_37.pid ExecStartPre=/usr/bin/install -d -m755 -o odoo12_37 -g odoo /run/odoo12_37 ExecStart=/python-venv/3.7/odoo12/bin/python /opt/odoo/odoo12/odoo-bin -c /home/odoo12_37/odoo12_37.conf --pid=/run/odoo12_37/odoo12_37.pid ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID [Install] Alias=odoo12_37.service WantedBy=multi-user.target
Bây giờ, lưu tệp và thoát bằng cách nhấn Ctrl + X, sau đó nhập y và nhấn nút Enter.
Chạy lệnh sau để thông báo cho systemd rằng có một tệp đơn vị dịch vụ mới:
sudo systemctl daemon-reload
Bây giờ, hãy kích hoạt dịch vụ và yêu cầu nó chạy khi khởi động:
sudo systemctl enable --now odoo12_37
Bây giờ, hãy khởi động Odoo 12 của bạn bằng systemd:
sudo systemctl start odoo12_37
Giờ bạn có thể mở trình duyệt của mình và nhập địa chỉ kiểu như http://ip_cua_server:8089 để thấy Giao diện tạo cơ sở dữ liệu của Odoo 12.
Để dừng nó, chỉ cần chạy:
sudo systemctl stop odoo12_37
Odoo 12 Python 3.8 Daemon
Tạo tệp cấu hình Odoo 12
Tệp cấu hình là tệp lưu trữ các chỉ thị cấu hình cho phép Odoo biết cách chạy (ví dụ: đường dẫn đến các module bổ trợ, cổng cơ sở dữ liệu, v.v.).
Trong phần này, tôi sẽ tạo một tệp cấu hình có tên odoo12_38.conf và lưu trữ trong / home / odoo12_38. Tôi sẽ sử dụng trình soạn thảo nano để tạo tệp:
sudo nano /home/odoo12_38/odoo12_38.conf
Bây giờ, hãy copy và paste những thứ sau vào giao diện người dùng trình soạn thảo nano của bạn:
[options] addons_path = /opt/odoo/odoo12/odoo/addons,/opt/odoo/odoo12/addons admin_passwd = admin # please change this master password csv_internal_sep = , data_dir = /home/odoo12_38/.local/share/Odoo db_host = False db_maxconn = 64 db_name = False db_password = False db_port = 5433 db_sslmode = prefer db_template = template0 db_user = False dbfilter = demo = {} email_from = False geoip_database = /usr/share/GeoIP/GeoLite2-City.mmdb http_enable = True http_interface = http_port = 8099 import_partial = limit_memory_hard = 2684354560 limit_memory_soft = 2147483648 limit_request = 8192 limit_time_cpu = 60 limit_time_real = 120 limit_time_real_cron = -1 list_db = True log_db = False log_db_level = warning log_handler = :INFO log_level = info logfile = None logrotate = False longpolling_port = 8100 max_cron_threads = 2 osv_memory_age_limit = 1.0 osv_memory_count_limit = False pg_path = None pidfile = None proxy_mode = False reportgz = False server_wide_modules = base,web smtp_password = False smtp_port = 25 smtp_server = localhost smtp_ssl = False smtp_user = False syslog = False test_enable = False test_file = False test_tags = None translate_modules = ['all'] unaccent = False without_demo = False workers = 0
Bây giờ, lưu tệp và thoát bằng cách nhấn Ctrl + X, sau đó nhập y và nhấn nút Enter.
Để cho phép odoo12_38 truy cập tệp cấu hình:
sudo chown odoo12_38:root /home/odoo12_38/odoo12_38.conf
Tạo tệp dịch vụ
sudo nano /lib/systemd/system/odoo12_38.service
Bây giờ, sao chép và dán nội dung sau vào giao diện trình soạn thảo nano của bạn
[Unit] Description=Odoo12_38 After=network.target postgresql.service [Service] Type=simple PermissionsStartOnly=true User=odoo12_38 Group=odoo SyslogIdentifier=odoo12_38 PIDFile=/run/odoo12_38/odoo12_38.pid ExecStartPre=/usr/bin/install -d -m755 -o odoo12_38 -g odoo /run/odoo12_38 ExecStart=/python-venv/3.8/odoo12/bin/python /opt/odoo/odoo12/odoo-bin -c /home/odoo12_38/odoo12_38.conf --pid=/run/odoo12_38/odoo12_38.pid ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID [Install] Alias=odoo12_38.service WantedBy=multi-user.target
Bây giờ, lưu tệp và thoát bằng cách nhấn Ctrl + X, sau đó nhập y và nhấn nút Enter.
Chạy lệnh sau để thông báo cho systemd rằng có một tệp đơn vị dịch vụ mới:
sudo systemctl daemon-reload
Bây giờ, hãy kích hoạt dịch vụ và yêu cầu nó chạy khi khởi động:
sudo systemctl enable --now odoo12_38
Bây giờ, hãy khởi động Odoo 12 của bạn bằng systemd:
sudo systemctl start odoo12_38
Giờ bạn có thể mở trình duyệt của mình và nhập địa chỉ kiểu như http://ip_cua_server:8099 để thấy Giao diện tạo cơ sở dữ liệu của Odoo 12.
Để dừng nó, chỉ cần chạy:
sudo systemctl stop odoo12_38