Cách cài đặt phần mềm ERP Odoo 17 trên Rocky Linux 9

theanh

Administrator
Nhân viên
Odoo (trước đây gọi là OpenERP) là một bộ tự lưu trữ gồm hơn 10.000 ứng dụng nguồn mở cho nhiều nhu cầu kinh doanh khác nhau, bao gồm CRM, thương mại điện tử, kế toán, kiểm kê, quản lý dự án và điểm bán hàng. Các ứng dụng này được tích hợp đầy đủ và truy cập thông qua giao diện web quen thuộc.

Hướng dẫn này sẽ hướng dẫn chúng ta cài đặt Odoo 16 Stack trên máy chủ Rocky Linux 9.

Điều kiện tiên quyết​


  1. Một máy chủ Rocky Linux 9 có RAM tối thiểu 2GB để lưu trữ Odoo Stack.

  2. Một máy chủ Rocky Linux 9 thứ hai có RAM tối thiểu 2GB để lưu trữ cơ sở dữ liệu PostgreSQL. Tuy nhiên, bạn có thể cài đặt cơ sở dữ liệu trên cùng một máy chủ với Odoo, nhưng đối với môi trường sản xuất, chúng tôi khuyên bạn nên cài đặt trên một máy chủ riêng. Bạn cũng có thể chọn bất kỳ tùy chọn cơ sở dữ liệu được quản lý nào có sẵn từ bất kỳ nhà cung cấp nào bạn chọn.

  3. Yêu cầu về RAM sẽ phụ thuộc vào số lượng người dùng đồng thời sẽ sử dụng ngăn xếp. Hướng dẫn chi tiết về cách tính toán yêu cầu hệ thống có thể được tìm thấy trong tài liệu của Odoo.

  4. Luôn cập nhật hệ thống của bạn.
    Mã:
    $ sudo dnf update

  5. Người dùng không phải root có quyền sudo trên cả hai máy chủ.

  6. Cần cài đặt Fail2Ban. Bước này là tùy chọn. Bạn có thể làm theo hướng dẫn của chúng tôi về cách cài đặt Fail2Ban trên Rocky Linux.

  7. SELinux nên được tắt.

  8. Một số gói mà hệ thống của bạn cần.
    Mã:
    $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
    Một số gói này có thể đã được cài đặt trên hệ thống của bạn.

Bước 1 - Cấu hình các quy tắc Tường lửa​

Bước đầu tiên là cấu hình tường lửa. Rocky Linux sử dụng Tường lửa Firewalld. Đối với hướng dẫn này, chúng tôi sẽ giả định rằng bạn đã cài đặt tường lửa Firewalld trên cả hai máy chủ.

Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --state
running
Tường lửa hoạt động với nhiều vùng khác nhau và vùng công cộng là vùng mặc định mà chúng tôi sẽ sử dụng. Liệt kê tất cả các dịch vụ và cổng đang hoạt động trên tường lửa.
Mã:
$ sudo firewall-cmd --zone=public --list-all
Nó sẽ hiển thị đầu ra sau.
Mã:
public target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Trên máy chủ Odoo, chúng ta sẽ cần các cổng 22, 80, 443, 6010, 5432 và 8069 được mở. 22 được sử dụng cho SSH, 80 cho HTTP, 443 cho HTTPS, 6010 được sử dụng cho giao tiếp Odoo, 5432 được sử dụng bởi PostgreSQL và 8069 được sử dụng cho ứng dụng máy chủ Odoo.

Chạy các lệnh sau để mở các cổng cần thiết trên Odoo máy chủ.
Mã:
$ sudo firewall-cmd --zone=public --add-port={6010,5432,8069,8072}/tcp
$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https
Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --zone=public --list-all
public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client http https ssh ports: 6010/tcp 5432/tcp 8069/tcp 8072/tcp protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Trên máy chủ PostgreSQL, chúng ta cần mở các cổng 22, 6010 và 5432. Mở chúng bằng lệnh sau lệnh.
Mã:
$ sudo firewall-cmd --zone=public --add-port={6010,5432}/tcp
Thực hiện tất cả các thay đổi vĩnh viễn và tải lại tường lửa để cho phép các thay đổi.
Mã:
$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

Bước 2 - Gán tên máy chủ​

Bạn có thể sử dụng địa chỉ IP của máy chủ hoặc sử dụng Tên miền đủ điều kiện (FQDN) của chúng, nếu có. Đối với hướng dẫn này, chúng ta sẽ sử dụng FQDN và để làm được điều đó, chúng ta cần đặt tên máy chủ trên cả hai máy chủ.

Đặt tên máy chủ trên máy chủ Odoo bằng lệnh sau.
Mã:
$ sudo hostnamectl set-hostname odoo.yourdomain.com
Đặt tên máy chủ trên máy chủ PostgreSQL bằng lệnh sau.
Mã:
$ sudo hostnamectl set-hostname postgresql.yourdomain.com
Trên máy chủ Odoo, mở tệp /etc/hosts.
Mã:
$ sudo nano /etc/hosts
Đảm bảo rằng tệp trông giống như sau.
Mã:
127.0.0.1	localhost
127.0.0.1	odoo.yourdomain.com	odoo
10.1.1.10	postgresql.yourdomain.com	postgresql
Trên máy chủ PostgreSQL, hãy mở tệp và đảm bảo tệp trông giống như sau.
Mã:
127.0.0.1	localhost
127.0.0.1	postgresql.yourdomain.com	postgresql
10.1.2.10	odoo.yourdomain.com	odoo
Nhấn Ctrl + X để đóng trình chỉnh sửa và nhấn Y khi được nhắc lưu tệp.

Bước 3 - Cài đặt và cấu hình PostgreSQL​

Rocky Linux 9 mặc định đi kèm PostgreSQL 13 và PostgreSQL 15 làm luồng mô-đun postgresql:15. Tuy nhiên, chúng tôi sẽ cài đặt phiên bản mới nhất có tại thời điểm viết hướng dẫn này, PostgreSQL 16 từ kho lưu trữ chính thức của nó.

Cài đặt kho lưu trữ PostgreSQL RPM.
Mã:
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Vô hiệu hóa mô-đun PostgreSQL tích hợp sẵn.
Mã:
$ sudo dnf -qy module disable postgresql
Cài đặt PostgreSQL 16.
Mã:
$ sudo dnf install -y postgresql16-server postgresql16-contrib
Khởi tạo cơ sở dữ liệu.
Mã:
$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
Kích hoạt và khởi động PostgreSQL dịch vụ.
Mã:
$ sudo systemctl enable postgresql-16
$ sudo systemctl start postgresql-16
Kiểm tra trạng thái của dịch vụ.
Mã:
$ sudo systemctl status postgresql-16
Bạn sẽ nhận được một đầu ra.
Mã:
? postgresql-16.service - PostgreSQL 16 database server Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled) Active: active (running) since Sun 2024-04-07 02:22:42 UTC; 3s ago Docs: https://www.postgresql.org/docs/16/static/ Process: 8673 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 8678 (postgres) Tasks: 7 (limit: 10819) Memory: 17.4M CPU: 60ms CGroup: /system.slice/postgresql-16.service ??8678 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/ ??8679 "postgres: logger " ??8680 "postgres: checkpointer " ??8681 "postgres: background writer " ??8683 "postgres: walwriter " ??8684 "postgres: autovacuum launcher " ??8685 "postgres: logical replication launcher "
Apr 07 02:22:42 postgresql systemd[1]: Starting PostgreSQL 16 database server...
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] LOG: redirecting log output to logging collector process
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] HINT: Future log output will appear in directory "log".
Apr 07 02:22:42 postgresql systemd[1]: Started PostgreSQL 16 database server.
Tiếp theo, chúng ta cần tạo một người dùng cơ sở dữ liệu odoo. Bạn sẽ được yêu cầu nhập mật khẩu cho vai trò này. Nhập mật khẩu mạnh theo lựa chọn của bạn.
Mã:
$ sudo -u postgres createuser odoo -U postgres -dP
Tùy chọn -u thực thi lệnh như postgres người dùng.

Tùy chọn -U chỉ ra tên người dùng để kết nối.

Tùy chọn -d cấp cho người dùng quyền tạo cơ sở dữ liệu.

Tùy chọn -p nhắc nhập mật khẩu của người dùng mới.

Cấu hình Xác thực dựa trên máy chủ​

Chúng ta cần cấp quyền cho dịch vụ PostgreSQL để có thể kết nối với Odoo máy chủ.

Đầu tiên, hãy dừng dịch vụ PostgreSQL.
Mã:
$ sudo systemctl stop postgresql-16
Để tìm nơi PostgreSQL lưu trữ tệp Xác thực máy khách, hãy chạy lệnh sau để khởi động shell PostgreSQL.
Mã:
$ sudo -u postgres psql
Chạy truy vấn sau để tìm vị trí của tập tin.
Mã:
postgres=# SHOW hba_file;
Bạn sẽ nhận được kết quả đầu ra sau.
Mã:
hba_file
------------------------------------ /var/lib/pgsql/16/data/pg_hba.conf
(1 row)
Loại exit để thoát khỏi shell.

Mở tệp /var/lib/pgsql/16/data/pg_hba.conf để chỉnh sửa.
Mã:
$ sudo nano /var/lib/pgsql/16/data/pg_hba.conf
Dán dòng sau vào cuối.
Mã:
host	all	odoo	odoo.yourdomain.com	scram-sha-256
Dòng này cấp quyền cho odoo người dùng để kết nối với tất cả các cơ sở dữ liệu trong máy chủ này. Bạn cũng có thể chỉ định tên của các cơ sở dữ liệu thay vì sử dụng từ khóa all.

Nhấn Ctrl + X để đóng trình chỉnh sửa và nhấn Y khi được nhắc lưu tệp.

Cấu hình địa chỉ lắng nghe PostgreSQL​

Tiếp theo, chúng ta cần cho phép máy chủ cơ sở dữ liệu lắng nghe các kết nối từ xa.

Khởi động shell PostgreSQL và chạy lệnh sau để định vị tệp cấu hình PostgreSQL.
Mã:
$ sudo -u postgres psql
postgres=# SHOW config_file;
Bạn sẽ nhận được thông báo sau đầu ra.
Mã:
config_file
---------------------------------------- /var/lib/pgsql/16/data/postgresql.conf
(1 row)
Nhập exit để thoát khỏi shell.

Mở tệp /var/lib/pgsql/16/data/postgresql.conf để chỉnh sửa.
Mã:
$ sudo nano /var/lib/pgsql/16/data/postgresql.conf
Thay đổi dòng listen_addresses từ
Mã:
#listen_addresses = 'localhost' # what IP address(es) to listen on;
đến.
Mã:
listen_addresses = '*'
Các * có nghĩa là nó sẽ lắng nghe tất cả các địa chỉ IP. Bạn có thể thay đổi nó thành địa chỉ IP của phiên bản odoo của bạn.
Mã:
listen_addresses = 'localhost, '
Nhấn Ctrl + X để đóng trình soạn thảo và nhấn Y khi được nhắc lưu tệp.

Kích hoạt và khởi động dịch vụ PostgreSQL​

Vì cấu hình của chúng ta đã hoàn tất, đã đến lúc khởi động PostgreSQL dịch vụ.
Mã:
$ sudo systemctl start postgresql-16

Bước 4 - Cài đặt Odoo​

Cài đặt Python 3.10​

Rocky Linux 9 đi kèm với Python 3.9 trong khi Odoo 17 yêu cầu Python 3.10 trở lên. Do đó, chúng ta cần cài đặt trước.

Bạn có thể kiểm tra phiên bản hiện có trước.
Mã:
$ python --version
Python 3.9.18
Cài đặt các phụ thuộc cần thiết cho Python.
Mã:
$ sudo dnf groupinstall "Development Tools"
$ sudo dnf install readline-devel ncurses-devel openssl-devel sqlite-devel tk-devel gdbm-devel libc6-dev libbz2-dev libffi-dev zlib1g-dev
$ sudo dnf install -y openssl-devel bzip2-devel libffi-devel readline-devel ncurses-devel sqlite-devel tk-devel
Tải xuống mã nguồn từ trang web của Python. Vào thời điểm viết hướng dẫn này, phiên bản 3.10.x mới nhất hiện có là 3.10.14, đây là phiên bản chúng tôi đã sử dụng.
Mã:
$ wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
Giải nén tệp lưu trữ.
Mã:
$ tar xzf Python-3.10.14.tgz
Chuyển sang phiên bản đã giải nén thư mục.
Mã:
$ cd Python-3.10.14
Cấu hình mã nguồn.
Mã:
$ ./configure --enable-optimizations
Cài đặt Python 3.10.14. Lệnh altininstall được sử dụng để không ghi đè lên phiên bản Python của hệ thống.
Mã:
$ sudo make altinstall
Xác nhận cài đặt.
Mã:
$ python3.10 -V
OR
$ python3.10 --version
Bạn sẽ nhận được kết quả sau.
Mã:
Python 3.10.14
Tiếp theo, chúng ta cần đặt Python 3.10 làm phiên bản Python mặc định. Tạo liên kết tượng trưng cho từng phiên bản Python được cài đặt trên máy chủ của bạn. Khi tạo phiên bản tượng trưng, bạn nên đưa phiên bản Python chính xác vào lệnh của mình. Chạy các lệnh sau để tạo liên kết tượng trưng.
Mã:
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 1
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2
Để xem các phiên bản Python khả dụng, hãy sử dụng lệnh sau.
Mã:
$ sudo update-alternatives --config python3
Bạn sẽ thấy thông báo sau đầu ra.
Mã:
There are 2 programs which provide 'python3'. Selection Command
----------------------------------------------- 1 /usr/local/bin/python3.10
*+ 2 /usr/bin/python3.9
Enter to keep the current selection[+], or type selection number:
Chọn số 1 để chuyển sang Python 3.10.

Đăng xuất và Đăng nhập lại vào thiết bị đầu cuối để chuyển sang phiên bản Python. Bây giờ bạn có thể sử dụng Python 3.10.14 bằng cách sử dụng python trực tiếp.

Cài đặt các phụ thuộc và Chuẩn bị cài đặt​

Tạo người dùng hệ thống mới để quản lý các quy trình Odoo trên máy chủ Odoo với thư mục gốc là /opt/odoo. Điều này nhằm ngăn ngừa mọi rủi ro bảo mật bằng cách chạy nó dưới quyền người dùng root.
Mã:
$ sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo
Cài đặt các phụ thuộc hệ thống cần thiết để thiết lập Odoo 17.
Mã:
$ sudo dnf install -y git libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel libpq-devel
Cài đặt Nodejs. Rocky Linux 9 đi kèm với Node 18.x, đây là phiên bản LTS hiện tại của Nodejs. Tuy nhiên, chúng tôi sẽ sử dụng kho lưu trữ Nodesource chính thức cho nó.

Thêm kho lưu trữ Node 20.
Mã:
$ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
Cài đặt Nodejs.
Mã:
$ sudo dnf -y install nodejs
Xác nhận Node phiên bản.
Mã:
$ node --version
v20.12.1
Cài đặt gói Less CSS bằng Node. Nếu bạn đang sử dụng ngôn ngữ có giao diện từ phải sang trái, hãy cài đặt gói rtlcss.
Mã:
$ sudo npm install -g less rtlcss
Cài đặt wkhtmltopdf. Chúng tôi sẽ sử dụng gói RPM từ kho lưu trữ đóng gói GitHub Wkhtmltopdf. Phiên bản mới nhất có tại thời điểm viết hướng dẫn này là 0.12.6.1 r3.

Tải xuống RPM Wkhtmltopdf.
Mã:
$ cd ~
$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm
Cài đặt phông chữ theo yêu cầu của Wkhtmltopdf.
Mã:
$ sudo dnf install xorg-x11-fonts-75dpi.noarch xorg-x11-fonts-Type1.noarch
Cài đặt Wkhtmltopdf.
Mã:
$ sudo rpm -i wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm
Kiểm tra phiên bản của wkhtmltopdf đã cài đặt.
Mã:
$ wkhtmltopdf --version
wkhtmltopdf 0.12.6.1 (with patched qt)

Tải xuống tệp Odoo​

Chuyển sang người dùng hệ thống Odoo.
Mã:
$ sudo su - odoo
Sao chép kho lưu trữ Github của Odoo vào hệ thống.
Mã:
$ git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0 --single-branch
Với mục đích của chúng tôi, chúng tôi đang sao chép Odoo vào thư mục /opt/odoo nơi nó sẽ được cài đặt. Thao tác này sẽ tạo thư mục /opt/odoo/odoo mà chúng ta sẽ sử dụng để cài đặt.

Thiết lập Môi trường Python Virtualenv​

Bước này là tùy chọn nhưng được khuyến nghị vì môi trường Python ảo cho Odoo sẽ giúp tránh xung đột với các mô-đun Python của Hệ điều hành, đặc biệt là khi thực hiện nâng cấp HĐH.

Đối với thao tác này, chúng ta sẽ sử dụng virtualenv.

  1. Tạo môi trường virtualenv mới cho Odoo.
    Mã:
    $ python3 -m venv odoo-env

  2. Kích hoạt môi trường ảo. Chúng tôi đang tạo một môi trường trong thư mục home của người dùng hệ thống. Bạn được tự do lựa chọn bất kỳ vị trí nào bạn thích.
    Mã:
    $ source odoo-env/bin/activate

  3. Cập nhật PIP để phòng ngừa.
    Mã:
    (odoo-env) $ pip3 install --upgrade pip

  4. Cài đặt bánh xe Python trong máy ảo môi trường.
    Mã:
    $ pip3 install wheel

Cài đặt Python Dependencies​

Cài đặt Python dependency theo yêu cầu của Odoo 17.
Mã:
$ pip3 install -r /opt/odoo/odoo/requirements.txt
Cần có thời gian để cài đặt các yêu cầu nên hãy kiên nhẫn.

Kiểm tra xem các yêu cầu đã được cài đặt đúng chưa bằng cách kiểm tra danh sách Python đã cài đặt mô-đun.
Mã:
$ pip3 list
Package Version
----------------- --------
attrs 23.2.0
Babel 2.9.1
beautifulsoup4 4.12.3
cached-property 1.5.2
certifi 2024.2.2
cffi 1.16.0
chardet 4.0.0
cryptography 3.4.8
decorator 4.4.2
docopt 0.6.2
docutils 0.17
ebaysdk 2.1.5
freezegun 1.1.0
geoip2 2.9.0
gevent 21.8.0
greenlet 1.1.2
idna 2.10
isodate 0.6.1
Jinja2 3.0.3
libsass 0.20.1
lxml 4.8.0
MarkupSafe 2.0.1
maxminddb 2.6.0
num2words 0.5.10
ofxparse 0.21
passlib 1.7.4
Pillow 9.0.1
pip 24.0
platformdirs 4.2.0
polib 1.1.1
psutil 5.9.0
psycopg2 2.9.2
pyasn1 0.6.0
pyasn1_modules 0.4.0
pycparser 2.22
pydot 1.4.2
pyOpenSSL 21.0.0
pyparsing 3.1.2
PyPDF2 1.26.0
pyserial 3.5
python-dateutil 2.8.1
python-ldap 3.4.0
python-stdnum 1.17
pytz 2024.1
pyusb 1.2.1
qrcode 7.3.1
reportlab 3.6.8
requests 2.25.1
requests-file 2.0.0
requests-toolbelt 1.0.0
rjsmin 1.1.0
setuptools 65.5.0
six 1.16.0
soupsieve 2.5
urllib3 1.26.5
vobject 0.9.6.1
Werkzeug 2.0.2
wheel 0.43.0
xlrd 1.2.0
XlsxWriter 3.0.2
xlwt 1.3.0
zeep 4.1.0
zope.event 5.0
zope.interface 6.2
Thoát khỏi môi trường ảo Python.
Mã:
$ deactivate

Tạo thư mục cho bên thứ 3 tiện ích bổ sung​

Mã:
$ mkdir /opt/odoo/odoo/custom-addons
Thư mục này cần được thêm vào tham sốaddons_path dùng để xác định các thư mục mà Odoo tìm kiếm các mô-đun. Thoát khỏi người dùng hệ thống Odoo.
Mã:
$ exit

Bước 5 - Cấu hình Odoo​

Sao chép tệp cấu hình Odoo mặc định để tạo tệp mới.
Mã:
$ sudo cp /opt/odoo/odoo/debian/odoo.conf /etc/odoo.conf
Mở tệp để chỉnh sửa.
Mã:
$ sudo nano /etc/odoo.conf
Chỉnh sửa tệp để trông giống như sau.
Mã:
[options]
; This is the password that allows database operations:
admin_passwd = admin
db_host = postgresql.yourdomain.com
db_port = False
db_user = odoo
db_password = odoo_password
addons_path = /opt/odoo/odoo/addons, /opt/odoo/odoo/custom-addons
xmlrpc_port = 8069
default_productivity_apps = True
Nhấn Ctrl + X để đóng trình chỉnh sửa và nhấn Y khi được nhắc lưu tệp.

Tùy chọn admin_passwd là mật khẩu cho phép thực hiện các thao tác quản trị trong GUI của Odoo. Hãy chắc chắn chọn một mật khẩu an toàn.

Tùy chọn db_host là FQDN hoặc địa chỉ IP của máy chủ PostgreSQL.

Tùy chọn db_port được đặt thành false vì cổng PostgreSQL mặc định 5432 đang được sử dụng. Nếu bạn muốn sử dụng một cổng khác, bạn sẽ cần cập nhật giá trị này.

Tùy chọn db_user là tên của người dùng PostgreSQL.

Tùy chọn db_password là mật khẩu người dùng PostgreSQL 'odoo' mà chúng ta đã tạo trước đó trên máy chủ PostgreSQL.

Tùy chọn addons_path là đường dẫn Addons mặc định. Bạn cũng có thể thêm đường dẫn tùy chỉnh cho Addon, phân tách chúng bằng dấu phẩy.

Tùy chọn xmlrpc_port là cổng mà Odoo lắng nghe.

Tùy chọn default_productivity_apps đảm bảo các ứng dụng năng suất mặc định (cụ thể là Employees, Email Marketing, Project và Surveys) vẫn được bật. Bốn ứng dụng này là ứng dụng mặc định trên Odoo Community Edition. Trên phiên bản Enterprise, có các ứng dụng năng suất bổ sung có thể được bật theo mặc định là Appointments, Knowledge, Planning và Sign.

Tạo dịch vụ Odoo​

Để đảm bảo Odoo tiếp tục chạy ngay cả sau khi hệ thống khởi động lại, chúng ta cần tạo một dịch vụ cho dịch vụ đó.

Tạo tệp /lib/systemd/system/odoo-server.service và mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /lib/systemd/system/odoo-server.service
Dán mã sau vào đó.
Mã:
[Unit]
Description=Odoo Open Source ERP and CRM
Requires=postgresql-16.service
After=network.target postgresql-16.service
[Service]
Type=simple
SyslogIdentifier=odoo-server
User=odoo
Group=odoo
ExecStart=/opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log
WorkingDirectory=/opt/odoo/odoo/
StandardOutput=journal+console
KillMode=mixed
[Install]
WantedBy=multi-user.target
Thay thế /home/ bằng vị trí bạn đã chọn để cài đặt Python Virtual Environment.

Nhấn Ctrl + X để đóng trình soạn thảo và nhấn Y khi được nhắc lưu tệp.

Tạo thư mục Nhật ký cho Odoo​

Mã:
$ sudo mkdir /var/log/odoo

Thiết lập quyền cho tệp​

Thiết lập quyền cho tệp odoo-server.service để chỉ người dùng Odoo mới có thể đọc hoặc thực thi nó.
Mã:
$ sudo chmod 755 /lib/systemd/system/odoo-server.service
$ sudo chown odoo: /lib/systemd/system/odoo-server.service
Đặt quyền sở hữu cho môi trường Python, cài đặt Odoo và thư mục nhật ký.
Mã:
$ sudo chown -R odoo: /opt/odoo/
$ sudo chown -R odoo: /opt/odoo/odoo-env
$ sudo chown -R odoo: /var/log/odoo
Hạn chế cấu hình Odoo tệp.
Mã:
$ sudo chown odoo: /etc/odoo.conf
$ sudo chmod 640 /etc/odoo.conf

Khởi động máy chủ Odoo​

Khởi động và bật máy chủ Odoo.
Mã:
$ sudo systemctl start odoo-server
$ sudo systemctl enable odoo-server
Kiểm tra trạng thái của máy chủ.
Mã:
$ sudo systemctl status odoo-server
? odoo-server.service - Odoo Open Source ERP and CRM Loaded: loaded (/usr/lib/systemd/system/odoo-server.service; enabled; preset: disabled) Active: active (running) since Tue 2024-04-09 23:59:38 UTC; 1s ago Main PID: 102598 (python3) Tasks: 4 (limit: 10736) Memory: 69.6M CPU: 895ms CGroup: /system.slice/odoo-server.service ??102598 /opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log
Apr 09 23:59:38 odoo.yourdomain.com systemd[1]: Started Odoo Open Source ERP and CRM.

Bước 6 - Cài đặt và cấu hình Nginx​

Rocky Linux 9 được tích hợp sẵn phiên bản Nginx cũ hơn. Bạn cần sử dụng kho lưu trữ Nginx chính thức để cài đặt phiên bản mới nhất.

Tạo và mở tệp /etc/yum.repos.d/nginx.repo để chỉnh sửa.
Mã:
$ sudo nano /etc/yum.repos.d/nginx.repo
Dán mã sau vào it.
Mã:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc. Chúng tôi sẽ sử dụng phiên bản chính của Nginx và do đó đã bật kho lưu trữ chính trong tệp trên bằng cách sử dụng enabled=1 bên dưới phần chính thay vì phần ổn định. Bạn có thể chọn một trong hai.

Cài đặt Nginx.
Mã:
$ sudo dnf install -y nginx
Xác minh cài đặt.
Mã:
$ nginx -v
nginx version: nginx/1.25.4
Bật và khởi động máy chủ Nginx dịch vụ.
Mã:
$ sudo systemctl enable nginx --now
Kiểm tra trạng thái dịch vụ.
Mã:
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled) Active: active (running) since Wed 2024-04-10 06:52:14 UTC; 3s ago Docs: http://nginx.org/en/docs/ Process: 103452 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 103453 (nginx) Tasks: 3 (limit: 10736) Memory: 3.1M CPU: 17ms CGroup: /system.slice/nginx.service ??103453 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??103454 "nginx: worker process" ??103455 "nginx: worker process"

Bước 7 - Cài đặt SSL​

Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL miễn phí do Let's Encrypt cung cấp. Chúng ta sẽ sử dụng trình cài đặt gói Snapd cho mục đích đó. Yêu cầu kho lưu trữ EPEL (Gói bổ sung cho Enterprise Linux) để hoạt động.

Cài đặt kho lưu trữ EPEL.
Mã:
$ sudo dnf install -y epel-release
Rocky Linux 9 không cài đặt Snapd. Cài đặt gói Snapd.
Mã:
$ sudo dnf install -y snapd
Bật và khởi động dịch vụ Snap.
Mã:
$ sudo systemctl enable snapd --now
Cài đặt gói lõi Snap và đảm bảo phiên bản Snapd của bạn là ngày.
Mã:
$ sudo snap install core
$ sudo snap refresh core
Tạo các liên kết cần thiết để Snapd hoạt động.
Mã:
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Sử dụng lệnh sau để đảm bảo lệnh Certbot có thể chạy được bằng cách tạo liên kết tượng trưng đến /usr/bin thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Xác minh xem Certbot có hoạt động bình thường không.
Mã:
$ certbot --version
certbot 2.10.0
Tạo chứng chỉ. Chúng ta cũng cần tạo chứng chỉ DHParams.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d odoo.yourdomain.com
Tạo chứng chỉ trao đổi khóa Diffie-Hellman.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Kiểm tra trình lập lịch gia hạn Certbot dịch vụ.
Mã:
$ sudo systemctl list-timers
Bạn sẽ thấy snap.certbot.renew.service là một trong những dịch vụ được lên lịch chạy.
Mã:
NEXT LEFT LAST PASSED UNIT ACTIVATES
.... .... .... ...... .... .........
Wed 2024-04-10 13:32:11 UTC 1h 42min left Wed 2024-04-10 11:43:41 UTC 5min ago dnf-makecache.timer dnf-makecache.service
Wed 2024-04-10 19:08:00 UTC 7h left - - snap.certbot.renew.timer snap.certbot.renew.service
Thu 2024-04-11 00:00:00 UTC 12h left Wed 2024-04-10 00:00:36 UTC 11h ago logrotate.timer logrotate.service
Thực hiện chạy thử quy trình để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không.
Mã:
$ sudo certbot renew --dry-run
Nếu không thấy lỗi nào, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.

Bước 8 - Cấu hình Nginx​

Để chạy qua Nginx, chúng ta cần chạy Odoo trên máy chủ cục bộ. Để thay đổi điều đó, hãy dừng dịch vụ Odoo.
Mã:
$ sudo systemctl stop odoo-server
Mở tệp cấu hình máy chủ Odoo.
Mã:
$ sudo nano /etc/odoo.conf
Thêm các dòng sau vào nó.
Mã:
xmlrpc_interface = 127.0.0.1
proxy_mode = True
Tạo tệp cấu hình Nginx cho Odoo.
Mã:
$ sudo nano /etc/nginx/conf.d/odoo.conf
Dán mã bên dưới.
Mã:
#odoo server
upstream odoo { server 127.0.0.1:8069;
}
upstream odoochat { server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade { default upgrade; '' close;
}
map $sent_http_content_type $content_type_csp { default ""; ~image/ "default-src 'none'";
}
# http -> https
server { listen 80; listen [::]:80; server_name odoo.yourdomain.com; return 301 https://$host$request_uri;
}
server { listen 443 ssl; listen [::]:443 ssl; http2 on; http3 on; quic_retry on; server_name odoo.yourdomain.com; proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; # Add Headers for odoo proxy mode proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; # SSL parameters ssl_certificate /etc/letsencrypt/live/odoo.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/odoo.yourdomain.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/odoo.yourdomain.com/chain.pem; ssl_session_timeout 30m; ssl_session_cache shared:MozSSL:10m; # about 40000 sessions ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_prefer_server_ciphers off; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; # log access_log /var/log/nginx/odoo.access.log; error_log /var/log/nginx/odoo.error.log; # Redirect longpoll requests to odoo longpolling port location /longpolling { proxy_pass http://odoochat; } location /websocket { proxy_pass http://odoochat; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_cookie_flags session_id samesite=lax secure; # requires nginx 1.19.8 } # Redirect requests to odoo backend server location / { # Add Headers for odoo proxy mode proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_pass http://odoo; proxy_cookie_flags session_id samesite=lax secure; # requires nginx 1.19.8 } # common gzip gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript; gzip on; # Serve static files right away location ~ ^/[^/]+/static/.+$ { # root and try_files both depend on your addons paths root /opt/odoo/odoo; try_files /opt/odoo/odoo/addons$uri @odoo; expires 24h; add_header Content-Security-Policy $content_type_csp; }
}
Nhấn Ctrl + X để đóng trình soạn thảo và nhấn Y khi được nhắc lưu tệp.

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào trước dòng include /etc/nginx/conf.d/*.conf;.
Mã:
server_names_hash_bucket_size 64;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Kiểm tra Nginx cấu hình.
Mã:
$ sudo nginx -t
Nếu bạn không thấy lỗi nào, điều đó có nghĩa là bạn đã sẵn sàng. Khởi động lại máy chủ Nginx.
Mã:
$ sudo systemctl restart nginx

Bước 9 - Khởi động Odoo​

Chúng ta có thể khởi động lại máy chủ Odoo sau khi mọi thứ đã được thiết lập.
Mã:
$ sudo systemctl start odoo-server
Khởi chạy Odoo trên trình duyệt của bạn thông qua https://odoo.yourdomain.com. Trong trình duyệt của bạn, hãy mở URL http://:8069 hoặc http://odoo.yourdomain.com:8069. Bạn sẽ thấy màn hình tạo cơ sở dữ liệu của Odoo nếu mọi thứ hoạt động bình thường.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22707%22%20height=%22621%22%3E%3C/svg%3E


Chọn email và mật khẩu của bạn để tạo thông tin đăng nhập. Mật khẩu chính là admin_passwd mà bạn đã thêm vào tệp /etc/odoo.conf. Điền vào tất cả các trường còn lại.

Kiểm tra trường Demo Data để điền dữ liệu mẫu vào cơ sở dữ liệu. Không cài đặt dữ liệu demo trên các máy chủ kết nối internet. Các cơ sở dữ liệu có dữ liệu demo chứa thông tin đăng nhập và mật khẩu mặc định có thể được sử dụng để xâm nhập vào hệ thống của bạn và gây ra sự cố đáng kể, ngay cả trên các hệ thống dàn dựng/phát triển. Chúng tôi chỉ sử dụng nó cho mục đích hướng dẫn.

Nhấp vào nút Tạo cơ sở dữ liệu để tiến hành hoàn tất cài đặt. Lần đầu tiên bạn tạo cơ sở dữ liệu, trang tiện ích bổ sung sẽ mất thời gian để tải nên đừng làm mới trang. Bạn sẽ được tự động chuyển hướng đến trang đăng nhập sau khi cơ sở dữ liệu được tạo.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22344%22%20height=%22441%22%3E%3C/svg%3E


Nhập thông tin đăng nhập đã sử dụng ở bước trước để đăng nhập vào Odoo ERP và bạn sẽ được đưa đến trang bảng điều khiển như hiển thị bên dưới. Trang này sẽ được điền sẵn dữ liệu demo. Nếu bạn chưa kiểm tra tùy chọn dữ liệu demo trên trang tạo cơ sở dữ liệu, bạn sẽ nhận được bảng điều khiển khác và sạch hơn nhiều.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22372%22%3E%3C/svg%3E


Bạn có thể bắt đầu sử dụng Odoo để quản lý doanh nghiệp của mình từ đây.

Bước 10 - Cập nhật Odoo​

Dừng Odoo máy chủ.
Mã:
$ sudo systemctl stop odoo-server
Chuyển sang người dùng hệ thống Odoo.
Mã:
$ sudo su - odoo
Kéo mã nguồn mới nhất từ GitHub.
Mã:
$ git fetch
$ git rebase --autostash
Lệnh thứ hai có thể gặp xung đột mã nguồn nếu bạn thay đổi thủ công mã nguồn. Bạn sẽ được cung cấp danh sách các tệp bị xung đột. Bạn sẽ cần phải thay đổi thủ công tất cả các tệp và chạy lại lệnh để khắc phục sự cố.

Nếu bạn muốn loại bỏ các thay đổi xung đột, bạn có thể chạy lệnh sau để đặt lại nguồn.
Mã:
$ git reset --hard
Kích hoạt môi trường ảo Python.
Mã:
$ source odoo-env/bin/activate
Cài đặt Python phụ thuộc.
Mã:
$ pip3 install -r /opt/odoo/odoo/requirements.txt
Thoát khỏi môi trường ảo Python.
Mã:
$ deactivate
Khởi động Odoo máy chủ.
Mã:
$ sudo systemctl start odoo-server

Bước 11 - Bảo mật Odoo bằng Fail2Ban​

Bước này là tùy chọn nhưng nếu bạn đã cài đặt Fail2Ban, bạn có thể thêm cấu hình cho Odoo để bảo vệ nó.

Tạo và mở tệp odoo-login.conf cho chỉnh sửa.
Mã:
$ sudo nano /etc/fail2ban/jail.d/odoo-login.conf
Dán mã sau vào đó.
Mã:
[odoo-login]
enabled = true
port = http,https
bantime = 900 ; 15 min ban
maxretry = 10 ; if 10 attempts
findtime = 60 ; within 1 min /!\ Should be adjusted with the TZ offset
logpath = /var/log/odoo.log ; set the actual odoo log path here
Nhấn Ctrl + X để đóng trình chỉnh sửa và nhấn Y khi được nhắc lưu tệp.

Tạo và mở odoo-login.conf lọc tệp để chỉnh sửa.
Mã:
$ sudo nano /etc/fail2ban/filter.d/odoo-login.conf
Dán mã sau vào nó.
Mã:
[Definition]
failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from 
ignoreregex =
Nhấn Ctrl + X để đóng trình soạn thảo và nhấn Y khi được nhắc lưu tệp.

Khởi động lại Fail2Ban.
Mã:
$ sudo systemctl restart fail2ban

Kết luận​

Đây là phần kết thúc hướng dẫn cài đặt và cấu hình Odoo trên Rocky Linux 9 máy chủ. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên