Odoo là một bộ ứng dụng kinh doanh nguồn mở phổ biến giúp các công ty quản lý và điều hành công việc kinh doanh của họ. Nó bao gồm một loạt các ứng dụng như CRM, Thương mại điện tử, trình tạo trang web, thanh toán, kế toán, sản xuất, kho hàng, quản lý dự án, hàng tồn kho, v.v., tất cả đều được tích hợp trên cùng một hệ thống.

Odoo có thể được cài đặt theo nhiều cách khác nhau, tùy thuộc vào trường hợp sử dụng và công nghệ sẵn có. Cách dễ nhất và nhanh nhất để cài đặt Odoo là sử dụng kho lưu trữ Odoo APT chính thức .

Cài đặt Odoo trong môi trường ảo hoặc triển khai dưới dạng container Docker , cho phép bạn kiểm soát ứng dụng nhiều hơn và cho phép bạn chạy nhiều phiên bản Odoo trên cùng một hệ thống.

Bài viết này giải thích cách cài đặt và triển khai Odoo 14 bên trong môi trường ảo Python trên Ubuntu 20.04. Chúng ta sẽ tải xuống Odoo từ kho lưu trữ GitHub chính thức và sử dụng Nginx làm reverse proxy.

Yêu cầu trước khi cài đặt

Lệnh sau cài đặt Git , Pip , Node.js và các công cụ cần thiết để xây dựng(https://linuxize.com/post/how-to-install-gcc-on-ubuntu-20-04/) Odoo dependencies:

sudo apt update
sudo apt install -y git python3-pip build-essential wget python3-dev python3-venv \
python3-wheel libfreetype6-dev libxml2-dev libzip-dev libldap2-dev libsasl2-dev \
python3-setuptools node-less libjpeg-dev zlib1g-dev libpq-dev \
libxslt1-dev libldap2-dev libtiff5-dev libjpeg8-dev libopenjp2-7-dev \
liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev libxcb1-dev

Tạo System user

Không được phép chạy Odoo dưới quyền người dùng root, vì đó là một rủi ro bảo mật. Chúng ta sẽ tạo một group và system user mới với thư mục chính /opt/odoo14 sẽ chạy service Odoo. Để làm như vậy, hãy nhập lệnh sau:

sudo useradd -m -d /opt/odoo14 -U -r -s /bin/bash odoo14

Bạn có thể đặt tên cho user bất kỳ thứ gì bạn muốn, miễn là bạn tạo một user PostgreSQL có cùng tên.

Cài đặt và cấu hình PostgreSQL

Odoo sử dụng PostgreSQL làm phần cuối cơ sở dữ liệu. PostgreSQL được bao gồm trong kho lưu trữ Ubuntu chuẩn. Để cài đặt nó, hãy chạy:

sudo apt install postgresql -y

Khi cài đặt hoàn tất, hãy tạo user PostgreSQL có cùng tên với system user đã tạo trước đó. Trong ví dụ này, đó là odoo14:

sudo su - postgres -c "createuser -s odoo14"

Cài đặt wkhtmltopdf

wkhtmltopdf là một bộ công cụ dòng lệnh mã nguồn mở để convert trang HTML thành PDF và các định dạng hình ảnh khác nhau. Để in báo cáo PDF trong Odoo, bạn cần cài đặt wkhtmltox gói này. Phiên bản được đề xuất cho Odoo là phiên bản 0.12.5, có thể tải xuống từ Github:

sudo wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.bionic_amd64.deb

Sau khi tệp được tải xuống, hãy cài đặt tệp bằng cách nhập:

sudo apt install ./wkhtmltox_0.12.6-1.bionic_amd64.deb

Cài đặt và cấu hình Odoo 14

Chúng ta sẽ cài đặt Odoo từ nguồn bên trong môi trường ảo Python đã được cô lập .

Đầu tiên, thay đổi thành người dùng “odoo14”:

sudo su - odoo14

Sao chép mã nguồn Odoo 14 từ GitHub:

git clone https://www.github.com/odoo/odoo --depth 1 --branch 14.0 /opt/odoo14/odoo

Tạo một môi trường ảo Python mới cho Odoo:

cd /opt/odoo14
python3 -m venv odoo-venv

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

source odoo-venv/bin/activate

Cài đặt tất cả các mô-đun Python được yêu cầu với pip3:

pip3 install wheelpip3 install -r odoo/requirements.txt

Nếu bạn gặp bất kỳ lỗi biên dịch nào trong quá trình cài đặt, hãy đảm bảo rằng tất cả các phụ thuộc bắt buộc được liệt kê trong Installing Prerequisites phần đã được cài đặt.

Sau khi hoàn tất, hãy hủy kích hoạt môi trường bằng cách nhập:

deactivate

Tạo một thư mục mới chứa các addon của bên thứ 3:

mkdir /opt/odoo14/odoo-custom-addons

Chúng ta sẽ thêm thư mục này vào tham số addons_path. Tham số này xác định danh sách các thư mục nơi Odoo tìm kiếm các mô-đun.

Chuyển trở lại người dùng sudo của bạn:

exit

Tạo một tệp cấu hình với nội dung sau:

sudo nano /etc/odoo14.conf

/etc/odoo14.conf

[options]
; This is the password that allows database operations:
admin_passwd = my_admin_passwd
db_host = False
db_port = False
db_user = odoo14
db_password = False
addons_path = /opt/odoo14/odoo/addons,/opt/odoo14/odoo-custom-addons

Đừng quên thay đổi my_admin_passwd thành một cái gì đó an toàn hơn.

Tạo Systemd Unit File

Mở trình soạn thảo văn bản của bạn và tạo tệp service được gọi odoo14.service với nội dung sau:

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

/etc/systemd/system/odoo14.service:

[Unit]
Description=Odoo14
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
SyslogIdentifier=odoo14
PermissionsStartOnly=true
User=odoo14
Group=odoo14
ExecStart=/opt/odoo14/odoo-venv/bin/python3 /opt/odoo14/odoo/odoo-bin -c /etc/odoo14.conf
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

Thông báo cho systemd rằng tồn tại một unit file mới:

sudo systemctl daemon-reload

Khởi động dịch vụ Odoo và cho phép nó khởi động khi khởi động server bằng cách chạy:

sudo systemctl enable --now odoo14

Xác minh trạng thái service:

sudo systemctl status odoo14

Output sẽ giống như bên dưới, cho thấy rằng dịch vụ Odoo đang hoạt động và đang chạy:

● odoo14.service - Odoo14
     Loaded: loaded (/etc/systemd/system/odoo14.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-10-16 19:05:32 UTC; 3s ago
...

Để xem các message được log lại bằng dịch vụ Odoo, hãy sử dụng lệnh bên dưới:

sudo journalctl -u odoo14

Kiểm tra cài đặt

Mở trình duyệt của bạn và nhập: http://<your_domain_or_IP_address>:8069

Giả sử cài đặt thành công, một màn hình tương tự như sau sẽ xuất hiện:

Cấu hình Nginx làm SSL Termination Proxy

Máy chủ web Odoo mặc định đang cho phép truy cập qua HTTP. Để làm cho việc triển khai Odoo an toàn hơn, chúng ta sẽ đặt Nginx  SSL Termination Proxy sẽ cho phép truy cập qua HTTPS.

 SSL Termination Proxy là một máy chủ proxy xử lý mã hóa / giải mã SSL. Điều này có nghĩa là proxy (Nginx) sẽ xử lý và giải mã các kết nối TLS đến (HTTPS), đồng thời chuyển các yêu cầu chưa được mã hóa đến dịch vụ nội bộ (Odoo). Traffic giữa Nginx và Odoo sẽ không được mã hóa (HTTP).

Sử dụng reverse proxy mang lại cho bạn rất nhiều lợi ích như Cân bằng tải, SSL termination, Lưu vào bộ nhớ đệm, Nén, Cung cấp Nội dung tĩnh, v.v.

Đảm bảo rằng bạn đã đáp ứng các điều kiện tiên quyết sau trước khi tiếp tục với phần này:

  • Tên miền trỏ đến IP public server của bạn. Chúng ta sẽ sử dụng example.com.
  • Nginx đã được cài đặt .
  • Chứng chỉ SSL cho miền của bạn. Bạn có thể cài đặt chứng chỉ SSL Let’s Encrypt miễn phí .

Mở trình soạn thảo văn bản của bạn và tạo / chỉnh sửa file cho tên miền mới:

sudo nano /etc/nginx/sites-enabled/example.com

Cấu hình sau sẽ thiết lập Kết thúc SSL, chuyển hướng HTTP sang HTTPS , chuyển hướng WWW sang không WWW, lưu vào bộ nhớ cache các tệp tĩnh và bật nén GZip .

# Odoo servers
upstream odoo {
 server 127.0.0.1:8069;
}

upstream odoochat {
 server 127.0.0.1:8072;
}

# HTTP -> HTTPS
server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://example.com$request_uri;
}

# WWW -> NON WWW
server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;
    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # log files
    access_log /var/log/nginx/odoo.access.log;
    error_log /var/log/nginx/odoo.error.log;

    # Handle longpoll requests
    location /longpolling {
        proxy_pass http://odoochat;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;

        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 https;
    }

    # Handle / requests
    location / {
       proxy_pass http://odoo;
       proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
       proxy_redirect off;

       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 https;
    }

    # Cache static files
    location ~* /web/static/ {
        proxy_cache_valid 200 90m;
        proxy_buffering on;
        expires 864000;
        proxy_pass http://odoo;
    }

    # Gzip
    gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
    gzip on;
}

Đừng quên thay thế example.com bằng miền Odoo của bạn và đặt đường dẫn chính xác đến các tệp chứng chỉ SSL. 

Sau khi hoàn tất, hãy khởi động lại dịch vụ Nginx :

sudo systemctl restart nginx

Tiếp theo, chúng ta cần yêu cầu Odoo sử dụng proxy. Để làm như vậy, hãy mở tệp cấu hình và thêm dòng sau: /etc/odoo14.conf

proxy_mode = True

Khởi động lại dịch vụ Odoo để các thay đổi có hiệu lực:

sudo systemctl restart odoo14

Tại thời điểm này, reverse proxy được định cấu hình và bạn có thể truy cập phiên bản Odoo của mình tại https://example.com.

Thay đổi Binding interface

Bước này là tùy chọn, nhưng nó là một phương pháp bảo mật tốt.

Theo mặc định, máy chủ Odoo lắng nghe cổng 8069 trên tất cả các interface. Để vô hiệu hóa quyền truy cập trực tiếp vào cá thể Odoo, bạn có thể chặn cổng 8069 cho tất cả các public interface hoặc buộc Odoo chỉ nghe trên local interface.

Chúng ta sẽ định cấu hình Odoo để chỉ lắng nghe 127.0.0.1. Mở cấu hình, thêm hai dòng sau vào cuối tệp /etc/odoo14.conf:

xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1

Lưu tệp cấu hình và khởi động lại máy chủ Odoo để các thay đổi có hiệu lực:

sudo systemctl restart odoo14

Enable Multiprocessing

Theo mặc định, Odoo đang hoạt động ở chế độ đa luồng. Đối với triển khai production, bạn nên thay đổi sang máy chủ đa xử lý vì nó tăng tính ổn định và sử dụng tài nguyên hệ thống tốt hơn.

Để bật đa xử lý, bạn cần chỉnh sửa cấu hình Odoo và đặt số lượng quy trình worker khác 0. Số lượng worker được tính dựa trên số lõi CPU trong hệ thống và bộ nhớ RAM khả dụng.

Theo tài liệu chính thức của Odoo , để tính toán số lượng worker và kích thước bộ nhớ RAM cần thiết , bạn có thể sử dụng các công thức và giả định sau:

Tính toán số worker

  • Số worker tối đa theo lý thuyết = (system_cpus * 2) + 1
  • 1 worker có thể phục vụ ~ = 6 người dùng đồng thời
  • Worker Cron cũng yêu cầu CPU

Tính toán kích thước bộ nhớ RAM

  • Chúng ta sẽ xem xét rằng 20% ​​tổng số yêu cầu là yêu cầu nặng và 80% là yêu cầu nhẹ hơn. Các yêu cầu nặng đang sử dụng khoảng 1 GB RAM trong khi các yêu cầu nhẹ hơn sử dụng khoảng 150 MB RAM
  • RAM cần thiết = number_of_workers * ( (light_worker_ratio * light_worker_ram_estimation) + (heavy_worker_ratio * heavy_worker_ram_estimation) )

Nếu bạn không biết mình có bao nhiêu CPU trên hệ thống của mình, hãy sử dụng lệnh sau :

grep -c ^processor /proc/cpuinfo

Giả sử bạn có một hệ thống với 4 lõi CPU, 8 GB bộ nhớ RAM và 30 người dùng Odoo đồng thời.

  • 30 users / 6 = **5** (5 là số lượng worker cần thiết theo lý thuyết)
  • (4 * 2) + 1 = **9** (9 là số worker tối đa theo lý thuyết)

Dựa vào phép tính trên, bạn có thể sử dụng 5 worker + 1 worker cho worker cron đó là tổng cộng 6 worker.

Tính toán mức tiêu thụ bộ nhớ RAM dựa trên số lượng worker:

  • RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM

Tính toán cho thấy cài đặt Odoo sẽ cần khoảng 2GB RAM.

Để chuyển sang chế độ đa xử lý, hãy mở tệp cấu hình và thay đổi các giá trị đã tính /etc/odoo14.conf:

limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
max_cron_threads = 1
workers = 5

Khởi động lại dịch vụ Odoo để các thay đổi có hiệu lực:

sudo systemctl restart odoo14

Phần còn lại của tài nguyên hệ thống sẽ được sử dụng bởi các dịch vụ khác chạy trên hệ thống này. Trong hướng dẫn này, chúng ta đã cài đặt Odoo cùng với PostgreSQL và Nginx trên cùng một máy chủ. Tùy thuộc vào thiết lập của bạn, bạn cũng có thể có các dịch vụ khác đang chạy trên máy chủ của mình.

Phần kết luận

Bài viết này đã hướng dẫn bạn cách cài đặt Odoo 14 trên Ubuntu 20.04 trong môi trường ảo Python sử dụng Nginx làm reverse proxy. Chúng ta cũng đã tìm hiểu cách bật đa xử lý và tối ưu hóa Odoo cho môi trường production.

Bạn cũng có thể muốn xem hướng dẫn về cách tạo bản sao lưu tự động hàng ngày cho cơ sở dữ liệu Odoo .

Nếu bạn có thắc mắc, đừng ngại để lại bình luận bên dưới.

0 0 votes
Article Rating
Subscribe
Notify of
guest
2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Quân
Quân
5 days ago

Khi mình làm đến bước:
Tạo một môi trường ảo Python mới cho Odoo:

cd /opt/odoo14python3 -m venv odoo-venv

Thì kết quả củ Terminal hiện như thể này:
-bash: cd: too many arguments

Giúp mình cách khắc phục được ko bạn. Cảm ơn bạn