Trong bài này, tôi sẽ hướng dẫn bạn 6 bước để cài đặt Odoo 13 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 12 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 này, tôi sẽ hướng dẫn bạn 6 bước để cài đặt Odoo 13 trên máy chủ Ubuntu 22.04 để đạt được những điều sau:
- Odoo 13 chạy với Python 3.7:
- Đang chạy Người dùng Unix: odoo13_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 13 chạy với Python 3.8
- Đang chạy Người dùng Unix: odoo13_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 13 chạy Python 3.7:
- Tên tài khoản: odoo13_37
- Thư mục home:
/home/odoo13_37
- Đối với Odoo 13 chạy Python 3.8:
- Tên tài khoản: odoo13_38
- Thư mục home:
/home/odoo13_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 13 (tức là odoo);
Tạo nhóm unix
Chạy lệnh sau để tạo nhóm odoo:
sudo addgroup odoo
Tạo người dùng odoo13_37
Chạy lệnh sau để tạo tài khoản odoo13_37 và thêm nó vào nhóm odoo:
sudo adduser odoo13_37 --system \ --home=/home/odoo13_37 --disabled-login \ --disabled-password --ingroup odoo
Tạo người dùng odoo13_38
Chạy lệnh sau để tạo tài khoản odoo13_38 và thêm nó vào nhóm odoo:
sudo adduser odoo13_38 --system \ --home=/home/odoo13_38 --disabled-login \ --disabled-password --ingroup odoo
Bước 2 - Cài đặt PostgreSQL 10 và 12
Tôi chưa thử nghiệm đầy đủ Odoo 13 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.
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 13 chạy Python 3.7 sẽ kết nối PostgreSQL 10 trên cổng 5432 bằng cách sử dụng vai trò odoo13_37,
- Odoo 13 chạy Python 3.8 sẽ kết nối PostgreSQL 12 trên cổng 5433 bằng cách sử dụng vai trò odoo13_38
Tạo role odoo13_37
Lệnh dưới đây sẽ tạo một role có tên odoo13_37 trong PostgreSQL 10 đang lắng nghe trên cổng 5432:
sudo -u postgres createuser odoo13_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 odoo13_38
Lệnh dưới đây sẽ tạo một role có tên odoo13_38 trong PostgreSQL 12 đang lắng nghe trên cổng 5433:
sudo -u postgres createuser odoo13_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 13 từ GitHub
Trong phần này, chúng tôi sẽ tải xuống mã nguồn Odoo 13 từ GitHub và thực hiện chính sách bảo mật cho quyền truy cập đọc cho tài khoản người dùng trong nhóm odoo.
Để tải xuống mã nguồn của Odoo 13 từ GitHub, chỉ cần chạy lệnh dưới đây để sao chép nó bằng git qua HTTP:
git clone -b 13.0 https://github.com/odoo/odoo.git /opt/odoo/odoo13
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 13.0 git@github.com:odoo/odoo.git /opt/odoo/odoo13
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 13 trong thư mục /opt/odoo/odoo13/
.
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/odoo13
Bước 4 - Cài đặt Python 3.7 và 3.8
Như đã thảo luận, Odoo 13 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 13 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 13
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 13 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 13 với Python 3.7 và PostgreSQL 10
Tạo môi trường ảo Odoo 13 Python 3.7
Tạo thư mục cha cho Odoo 13 với môi trường ảo Python 3.7:
sudo mkdir -p /python-venv/3.7/odoo13
Bảo mật môi trường ảo:
sudo chown -hR odoo13_37:odoo /python-venv/3.7/odoo13
Chuyển tài khoản người dùng hiện tại sang bash của odoo13_37:
sudo su - odoo13_37 -s /bin/bash
Tạo môi trường ảo:
python3.7 -m venv /python-venv/3.7/odoo13
Cài đặt các thư viện Python bắt buộc cho Odoo 13
Kích hoạt môi trường ảo mà chúng ta đã tạo ở trên:
source /python-venv/3.7/odoo13/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 13 cho môi trường ảo. Hãy chắc chắn rằng bạn đã hoàn thành việc nhân bản mã nguồn Odoo 13.
pip install -r /opt/odoo/odoo13/requirements.txt
Khởi động Odoo 13
Bây giờ, chúng ta có thể khởi động Odoo 13 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 để máy khách truy cập:
/opt/odoo/odoo13/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 13 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 13 của bạn.
Dừng Odoo 13 và Thoát
Để dừng Odoo 13, chỉ cần quay lại thiết bị đầu cuối 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 13 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 13 với Python 3.8 và PostgreSQL 12
Cài đặt Odoo 13 với Python 3.8 tương tự như Cài đặt Odoo 13 với Python 3.7.
Tạo thư mục cha cho môi trường ảo Python 3.8 cho Odoo 13
sudo mkdir -p /python-venv/3.8/odoo13 sudo chown -hR odoo13_38:odoo /python-venv/3.8/odoo13
Chuyển sang tài khoản odoo13_38:
sudo su - odoo13_38 -s /bin/bash
Tạo môi trường ảo Python 3.8 cho Odoo 13:
python3.8 -m venv /python-venv/3.8/odoo13
Kích hoạt môi trường ảo:
source /python-venv/3.8/odoo13/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 13:
pip install -r /opt/odoo/odoo13/requirements.txt
Khởi động Odoo 13 kết nối PostgreSQL 12:
/opt/odoo/odoo13/odoo-bin --db_port=5433 --http-port=8099
Sau khi xác minh rằng Odoo 13 hoạt động bình thường, hãy thoát:
deactivate
exit
Bước 6 - Chạy Odoo 13 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 dịch vụ khởi động cho các phiên bản Odoo 13 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 13 Python 3.7 Daemon
Tạo tệp cấu hình Odoo
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 odoo13_37.conf và lưu trữ trong /home/odoo13_37. Tôi sẽ sử dụng trình soạn thảo nano để tạo tệp:
sudo nano /home/odoo13_37/odoo13_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/odoo13/odoo/addons,/opt/odoo/odoo13/addons admin_passwd = admin # change this please csv_internal_sep = , data_dir = /home/odoo13_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 = longpolling_port = 8090 max_cron_threads = 2 osv_memory_age_limit = 1.0 osv_memory_count_limit = False pg_path = pidfile = proxy_mode = False reportgz = False screencasts = screenshots = /tmp/odoo_tests 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 = test_tags = None translate_modules = ['all'] unaccent = False upgrade_path = without_demo = False workers = 0
Xin lưu ý rằng mật khẩu chính để bảo mật được kiểm soát bởi chỉ mục admin_passwd
trong tệp cấu hình. Bạn nên thay đổi nó thành một mật khẩu mạnh. Bạn cũng có thể bắt đầu tinh chỉnh Odoo 13 bằng cách sửa đổi các chỉ thị khác. Sau khi mọi thứ đều ổn, bạn 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 odoo13_37 truy cập tệp cấu hình:
sudo chown odoo13_37:root /home/odoo13_37/odoo13_37.conf
Tạo tệp dịch vụ
Tôi sẽ sư dụng trình soạn thảo nano để tạo tệp dịch vụ bằng cách chạy lệnh bên dưới:
sudo nano /lib/systemd/system/odoo13_37.service
Sau đó, 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=Odoo13_37 After=network.target postgresql.service [Service] Type=simple PermissionsStartOnly=true User=odoo13_37 Group=odoo SyslogIdentifier=odoo13_37 PIDFile=/run/odoo13_37/odoo13_37.pid ExecStartPre=/usr/bin/install -d -m755 -o odoo13_37 -g odoo /run/odoo13_37 ExecStart=/python-venv/3.7/odoo13/bin/python /opt/odoo/odoo13/odoo-bin -c /home/odoo13_37/odoo13_37.conf --pid=/run/odoo13_37/odoo13_37.pid ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID [Install] Alias=odoo13_37.service WantedBy=multi-user.target
Để lưu tệp và thoát, chỉ cần nhấn Ctrl + X, sau đó nhập y và nhấn nút Enter.
Bây giờ, hãy chạy lệnh sau để thông báo cho systemd rằng có một tệp đơn vị mới:
sudo systemctl daemon-reload
Để kích hoạt dịch vụ và đặt nó chạy khi khởi động:
sudo systemctl enable --now odoo13_37
Bây giờ, hãy khởi động Odoo 13 của bạn bằng systemd:
sudo systemctl start odoo13_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 13.
Để dừng nó, chỉ cần chạy:
sudo systemctl stop odoo13_37
Odoo 13 Python 3.8 Daemon
Chúng ta sẽ làm theo cách tương tự như Odoo 13 Python 3.7 Daemon để tạo daemon cho Odoo 13 Python 3.8.
Tạo tệp cấu hình Odoo
sudo nano /home/odoo13_38/odoo13_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/odoo13/odoo/addons,/opt/odoo/odoo13/addons admin_passwd = admin # change the password here csv_internal_sep = , data_dir = /home/odoo13_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 = longpolling_port = 8100 max_cron_threads = 2 osv_memory_age_limit = 1.0 osv_memory_count_limit = False pg_path = pidfile = proxy_mode = False reportgz = False screencasts = screenshots = /tmp/odoo_tests 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 = test_tags = None translate_modules = ['all'] unaccent = False upgrade_path = without_demo = False workers = 0
Xin lưu ý rằng mật khẩu chính để bảo mật phiên bản của bạn được kiểm soát bởi chỉ mục admin_passwd
trong tệp cấu hình. Bạn nên thay đổi nó thành một mật khẩu mạnh. Sau đó, lưu tệp và thoát bằng cách nhấn Ctrl + X rồi nhập y và nhấn nút Enter.
Để cho phép odoo13_38 truy cập tệp cấu hình:
sudo chown odoo13_38:root /home/odoo13_38/odoo13_38.conf
Tạo tệp dịch vụ
sudo nano /lib/systemd/system/odoo13_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=Odoo13_38 After=network.target postgresql.service [Service] Type=simple PermissionsStartOnly=true User=odoo13_38 Group=odoo SyslogIdentifier=odoo13_38 PIDFile=/run/odoo13_38/odoo13_38.pid ExecStartPre=/usr/bin/install -d -m755 -o odoo13_38 -g odoo /run/odoo13_38 ExecStart=/python-venv/3.8/odoo13/bin/python /opt/odoo/odoo13/odoo-bin -c /home/odoo13_38/odoo13_38.conf --pid=/run/odoo13_38/odoo13_38.pid ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID [Install] Alias=odoo13_38.service WantedBy=multi-user.target
Sau đó, lưu tệp và thoát trước khi chạy lệnh sau để thông báo cho systemd về sự tồn tại của tệp đơn vị mới:
sudo systemctl daemon-reload
Sau đó, kích hoạt dịch vụ và yêu cầu nó chạy khi khởi động:
sudo systemctl enable --now odoo13_38
Và sau đó, khởi động Odoo 13 của bạn bằng systemd:
sudo systemctl start odoo13_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 13.
Để dừng nó, chỉ cần chạy:
sudo systemctl stop odoo13_38
Kết luận
Bây giờ bạn có cả hai phiên bản Odoo 13 đang chạy trên các cổng khác nhau:
- Odoo 13 với Python 3.7 và PostgreSQL 10:
- Cổng HTTP: 8089
- Cổng Longpolling: 8090
- Odoo 13 với Python 3.8 và PostgreSQL 12:
- Cổng HTTP: 8099
- Cổng Longpolling: 8100
Bạn có thể bắt đầu quản lý cơ sở dữ liệu của mình (cụ thể: tạo cơ sở dữ liệu, xóa cơ sở dữ liệu, sao lưu và cơ sở dữ liệu hiện có, khôi phục cơ sở dữ liệu) bằng cách đi tới địa chỉ http://your_ip:8089/web/database/manager
(dành cho Odoo 13 với Python 3.7 và PostgreSQL 10) hoặc http://your_ip:8099/web/database/manager
(dành cho Odoo 13 với Python 3.8 và PostgreSQL 12)