如何在 Rocky Linux 9 上安装 Odoo 17 ERP 软件

如何在 Rocky Linux 9 上安装 Odoo 17 ERP 软件

Odoo(以前称为 OpenERP)是一个自托管套件,包含 10,000 多个开源应用程序,可满足各种业务需求,包括 CRM、电子商务、会计、股票、项目管理和销售点。 这些应用程序完全集成并通过熟悉的 Web 界面进行访问。

本教程将教我们在 Rocky Linux 9 服务器上安装 Odoo 16 Stack。

先决条件

  1. 一台 Rocky Linux 9 服务器,至少具有 2GB RAM 来托管 Odoo Stack。

  2. 第二台 Rocky Linux 9 服务器至少具有 2GB RAM,用于托管 PostgreSQL 数据库。 但是,您可以将数据库安装在与 Odoo 相同的服务器上,但对于生产环境,强烈建议您将其安装在单独的服务器上。 您还可以选择您选择的任何提供商提供的任何托管数据库选项。

  3. RAM 要求取决于将使用堆栈的并发用户数量。 有关如何计算系统要求的详细指南可以在 Odoo 的文档中找到。

  4. 保持您的系统更新。

    $sudo dnf update
    
  5. 在两台服务器上都具有 sudo 权限的非 root 用户。

  6. 应安装 Fail2Ban。 此步骤是可选的。 您可以按照我们在 Rocky Linux 上安装 Fail2Ban 的指南进行操作。

  7. SELinux 应该被禁用。

  8. 您的系统需要的软件包很少。

    $sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
    

    其中一些软件包可能已经安装在您的系统上。

第 1 步 – 配置防火墙规则

第一步是配置防火墙。 Rocky Linux 使用 Firewalld 防火墙。 对于本教程,我们假设您在两台服务器上都安装了 Firewalld 防火墙。

检查防火墙的状态。

$sudo firewall-cmd --state
running

防火墙适用于不同的区域,公共区域是我们将使用的默认区域。 列出防火墙上所有活动的服务和端口。

$sudo firewall-cmd --zone=public --list-all

它应该显示以下输出。

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:

在 Odoo 服务器上,我们需要打开端口 22、80、443、6010、5432 和 8069。 22用于SSH,80用于HTTP,443用于HTTPS,6010用于Odoo通信,5432用于PostgreSQL,8069用于Odoo服务器应用程序。

运行以下命令打开 Odoo 服务器上所需的端口。

$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

检查防火墙的状态。

$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:

在 PostgreSQL 服务器上,我们需要打开端口 22、6010 和 5432。使用以下命令打开它们。

$sudo firewall-cmd --zone=public --add-port={6010,5432}/tcp

使所有更改永久生效并重新加载防火墙以启用更改。

$sudo firewall-cmd --runtime-to-permanent
$sudo firewall-cmd --reload

第 2 步 – 分配主机名

您可以使用服务器的 IP 地址或使用其完全限定域名 (FQDN)(如果可用)。 在我们的教程中,我们将使用 FQDN,为此,我们需要在两台服务器上设置主机名。

使用以下命令在 Odoo 服务器上设置主机名。

$sudo hostnamectl set-hostname odoo.yourdomain.com

使用以下命令在 PostgreSQL 服务器上设置主机名。

$sudo hostnamectl set-hostname postgresql.yourdomain.com

在 Odoo 服务器上,打开 /etc/hosts 文件。

$sudo nano /etc/hosts

确保它看起来像下面这样。

127.0.0.1 	localhost
127.0.0.1	odoo.yourdomain.com		odoo
10.1.1.10	postgresql.yourdomain.com	postgresql

在 PostgreSQL 服务器上,打开文件并确保其如下所示。

127.0.0.1 	localhost
127.0.0.1	postgresql.yourdomain.com	postgresql
10.1.2.10	odoo.yourdomain.com		odoo

按 Ctrl + X 关闭编辑器,并在提示保存文件时按 Y。

第 3 步 – 安装和配置 PostgreSQL

Rocky Linux 9 默认附带 PostgreSQL 13,并且默认附带 PostgreSQL 15 postgresql:15 模块流。 但是,我们将从其官方存储库安装撰写本教程时可用的最新版本 PostgreSQL 16。

安装 PostgreSQL 存储库 RPM。

$sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

禁用内置 PostgreSQL 模块。

$sudo dnf -qy module disable postgresql

安装 PostgreSQL 16。

$sudo dnf install -y postgresql16-server postgresql16-contrib

初始化数据库。

$sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

启用并启动 PostgreSQL 服务。

$sudo systemctl enable postgresql-16
$sudo systemctl start postgresql-16

检查服务的状态。

$sudo systemctl status postgresql-16

您应该得到类似的输出。

? 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.

接下来我们需要创建一个数据库用户 odoo。 系统将要求您输入该角色的密码。 输入您选择的强密码。

$sudo -u postgres createuser odoo -U postgres -dP

选项 -u 执行命令为 postgres 用户。

选项 -U 指示连接时使用的用户名。

选项 -d 授予用户创建数据库的权限。

选项 -p 提示输入新用户的密码。

配置基于主机的身份验证

我们需要授予 PostgreSQL 服务权限才能连接到 Odoo 服务器。

首先,停止 PostgreSQL 服务。

$sudo systemctl stop postgresql-16

要查找 PostgreSQL 存储客户端身份验证文件的位置,请运行以下命令来启动 PostgreSQL shell。

$sudo -u postgres psql

运行以下查询以查找文件的位置。

postgres=# SHOW hba_file;

您将收到以下输出。

              hba_file              
------------------------------------
 /var/lib/pgsql/16/data/pg_hba.conf
(1 row)

类型 exit 退出外壳程序。

打开文件 /var/lib/pgsql/16/data/pg_hba.conf 进行编辑。

$sudo nano /var/lib/pgsql/16/data/pg_hba.conf

将以下行粘贴到末尾。

host		all		odoo		odoo.yourdomain.com		scram-sha-256

该行授予权限 odoo 用户连接到该服务器内的所有数据库。 您也可以指定数据库的名称,而不是使用 all 关键词。

按 Ctrl + X 关闭编辑器,并在提示保存文件时按 Y。

配置PostgreSQL监听地址

接下来,我们需要允许数据库服务器监听远程连接。

启动 PostgreSQL shell 并运行以下命令以找到 PostgreSQL 配置文件。

$sudo -u postgres psql
postgres=# SHOW config_file;

您将收到以下输出。

              config_file               
----------------------------------------
 /var/lib/pgsql/16/data/postgresql.conf
(1 row)

类型 exit 退出外壳程序。

打开文件 /var/lib/pgsql/16/data/postgresql.conf 进行编辑。

$sudo nano /var/lib/pgsql/16/data/postgresql.conf

换线 listen_addresses

#listen_addresses = 'localhost' # what IP address(es) to listen on;

到。

listen_addresses = '*'

* 意味着它将监听所有 IP 地址。 您可以将其更改为 odoo 实例的 IP 地址。

listen_addresses = 'localhost, '

按 Ctrl + X 关闭编辑器,并在提示保存文件时按 Y。

启用并启动 PostgreSQL 服务

由于我们的配置已经完成,是时候启动 PostgreSQL 服务了。

$sudo systemctl start postgresql-16	

第 4 步 – 安装 Odoo

安装Python 3.10

Rocky Linux 9 附带 Python 3.9,而 Odoo 17 需要 Python 3.10 及更高版本。 因此,我们需要先安装它。

您可以先查看当前可用的版本。

$python --version
Python 3.9.18

安装 Python 所需的依赖项。

$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

从 Python 网站下载源代码。 在编写本教程时,可用的最新 3.10.x 版本是我们使用的 3.10.14。

$wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz

提取存档。

$tar xzf Python-3.10.14.tgz

切换到解压后的目录。

$cd Python-3.10.14

配置源代码。

$./configure --enable-optimizations

安装Python 3.10.14。 这 altininstall 使用命令是为了避免覆盖系统的Python版本。

$sudo make altinstall

确认安装。

$python3.10 -V
OR
$python3.10 --version

您应该得到以下输出。

Python 3.10.14

接下来,我们需要将 Python 3.10 设置为默认的 Python 版本。 为服务器上安装的每个 Python 版本创建符号链接。 创建符号版本时,您应该在命令中包含准确的 Python 版本。 运行以下命令来创建符号链接。

$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

要查看可用的 Python 版本,请使用以下命令。

$sudo update-alternatives --config python3

您应该看到以下输出。

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:

选择数字 1 以切换到 Python 3.10。

注销并重新登录终端以切换到Python版本。 您现在可以通过使用 Python 3.10.14 python 直接地。

安装依赖项并准备安装

创建一个新的系统用户,用于管理 Odoo 服务器上的 Odoo 进程,主目录为 /opt/odoo。 这是为了防止在 root 用户下运行它带来的任何安全风险。

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

安装 Odoo 17 安装所需的系统依赖项。

$sudo dnf install -y git libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel libpq-devel

安装 Nodejs。 Rocky Linux 9 附带 Node 18.x,这是 Nodejs 的当前 LTS 版本。 但是,我们将使用官方 Nodesource 存储库。

添加 Node 20 存储库。

$curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -

安装 Nodejs。

$sudo dnf -y install nodejs

确认节点版本。

$node --version
v20.12.1

使用 Node.js 安装 Less CSS 包如果您使用的是从右到左界面的语言,请安装 rtlcss 包也是如此。

$sudo npm install -g less rtlcss

安装 wkhtmltopdf。 我们将使用 Wkhtmltopdf GitHub 打包存储库中的 RPM 包。 在撰写本教程时可用的最新版本是 0.12.6.1 r3。

下载 Wkhtmltopdf RPM。

$cd ~
$wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm

安装 Wkhtmltopdf 所需的字体。

$sudo dnf install xorg-x11-fonts-75dpi.noarch xorg-x11-fonts-Type1.noarch

安装 Wkhtmltopdf。

$sudo rpm -i wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm

检查版本 wkhtmltopdf 安装。

$wkhtmltopdf --version
wkhtmltopdf 0.12.6.1 (with patched qt)

下载 Odoo 文件

切换到Odoo系统用户。

$sudo su - odoo

将 Odoo 的 Github 存储库克隆到您的系统上。

$git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0 --single-branch

为了我们的目的,我们将 Odoo 复制到 /opt/odoo 将安装它的目录。 这将创建 /opt/odoo/odoo 我们将用于安装的目录。

设置 Virtualenv Python 环境

此步骤是可选的,但建议这样做,因为 Odoo 的虚拟 Python 环境将有助于避免与操作系统的 Python 模块发生冲突,尤其是在执行操作系统升级时。

为此,我们将使用 virtualenv

  1. 创建一个新的 virtualenv Odoo 的环境。

    $python3 -m venv odoo-env
    
  2. 激活虚拟环境。 我们正在系统用户的主目录下创建一个环境。 您可以自由选择您喜欢的任何位置。

    $source odoo-env/bin/activate
    
  3. 更新 PIP 以防万一。

    (odoo-env) $pip3 install --upgrade pip
    
  4. 在虚拟环境中安装Python的wheel。

    $pip3 install wheel
    

安装Python依赖项

安装 Odoo 17 所需的 Python 依赖项。

$pip3 install -r /opt/odoo/odoo/requirements.txt

安装这些要求将需要一些时间,因此请耐心等待。

通过检查已安装的Python模块列表来检查需求是否正确安装。

$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

退出Python虚拟环境。

$deactivate

为第 3 方插件创建目录

$mkdir /opt/odoo/odoo/custom-addons

该目录应添加到 addons_path 定义 Odoo 查找模块的目录的参数。 退出Odoo系统用户。

$exit

第 5 步 – 配置 Odoo

复制默认的 Odoo 配置文件以创建一个新配置文件。

$sudo cp /opt/odoo/odoo/debian/odoo.conf /etc/odoo.conf

打开文件进行编辑。

$sudo nano /etc/odoo.conf

编辑该文件,使其如下所示。

[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

按 Ctrl + X 关闭编辑器,并在提示保存文件时按 Y。

选项 admin_passwd 是允许在 Odoo GUI 中进行管理操作的密码。 请务必选择安全的密码。

选项 db_host 是 PostgreSQL 服务器的 FQDN 或 IP 地址。

选项 db_port 设置为 false,因为使用默认 PostgreSQL 端口 5432。 如果您想使用不同的端口,则需要更新此值。

选项 db_user 是 PostgreSQL 用户的名称。

选项 db_password 是我们之前在 PostgreSQL 服务器上创建的 PostgreSQL ‘odoo’ 用户密码。

选项 addons_path 是默认的插件路径。 您还可以为插件添加自定义路径,并用逗号分隔它们。

选项 xmlrpc_port 是 Odoo 监听的端口。

选项 default_productivity_apps 确保默认生产力应用程序(即员工、电子邮件营销、项目和调查)保持启用状态。 这四个应用程序是 Odoo 社区版的默认应用程序。 在企业版上,默认情况下可以启用其他生产力应用程序,包括约会、知识、规划和签名。

创建 Odoo 服务

为了确保 Odoo 在系统重新启动后也能继续运行,我们需要为其创建一个服务。

创建文件 /lib/systemd/system/odoo-server.service 并打开它进行编辑。

$sudo nano /lib/systemd/system/odoo-server.service

将以下代码粘贴到其中。

[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

代替 /home/ 与您选择安装 Python 虚拟环境的位置。

按 Ctrl + X 关闭编辑器,并在提示保存文件时按 Y。

为 Odoo 创建日志目录

$sudo mkdir /var/log/odoo

设置文件权限

设置权限 odoo-server.service 文件,以便只有 Odoo 用户可以读取或执行它。

$sudo chmod 755 /lib/systemd/system/odoo-server.service
$sudo chown odoo: /lib/systemd/system/odoo-server.service

设置 Python 环境、Odoo 安装和日志目录的所有权。

$sudo chown -R odoo: /opt/odoo/
$sudo chown -R odoo: /opt/odoo/odoo-env
$sudo chown -R odoo: /var/log/odoo

限制 Odoo 配置文件。

$sudo chown odoo: /etc/odoo.conf
$sudo chmod 640 /etc/odoo.conf

启动 Odoo 服务器

启动并启用 Odoo 服务器。

$sudo systemctl start odoo-server
$sudo systemctl enable odoo-server

检查服务器的状态。

$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.

第 6 步 – 安装和配置 Nginx

Rocky Linux 9 附带旧版本的 Nginx。 您需要使用官方 Nginx 存储库来安装最新版本。

创建并打开文件 /etc/yum.repos.d/nginx.repo 进行编辑。

$sudo nano /etc/yum.repos.d/nginx.repo

将以下代码粘贴到其中。

[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

完成后,按 Ctrl + X 并在出现提示时输入 Y 来保存文件。 我们将使用 Nginx 的主线版本,因此通过使用在上述文件中启用了主线存储库 enabled=1 在主线部分而不是稳定部分下。 您可以选择其中之一。

安装 Nginx。

$sudo dnf install -y nginx

验证安装。

$nginx -v
nginx version: nginx/1.25.4

启用并启动 Nginx 服务器服务。

$sudo systemctl enable nginx --now

检查服务状态。

$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"

第 7 步 – 安装 SSL

我们需要安装 Certbot 来生成 Let’s Encrypt 提供的免费 SSL 证书。 为此,我们将使用 Snapd 软件包安装程序。 它需要 EPEL(企业 Linux 额外包)存储库才能工作。

安装 EPEL 存储库。

$sudo dnf install -y epel-release

Rocky Linux 9 未安装 Snapd。 安装 Snapd 软件包。

$sudo dnf install -y snapd

启用并启动 Snap 服务。

$sudo systemctl enable snapd --now

安装 Snap 核心包,并确保您的 Snapd 版本是最新的。

$sudo snap install core
$sudo snap refresh core

创建 Snapd 工作所需的链接。

$sudo ln -s /var/lib/snapd/snap /snap
$echo 'export P新高=$P新高:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

安装证书机器人。

$sudo snap install --classic certbot

使用以下命令确保 Certbot 命令可以通过创建指向该命令的符号链接来运行 /usr/bin 目录。

$sudo ln -s /snap/bin/certbot /usr/bin/certbot

验证 Certbot 是否正常运行。

$certbot --version
certbot 2.10.0

生成证书。 我们还需要创建 DHParams 证书。

$sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d odoo.yourdomain.com

生成 Diffie-Hellman 密钥交易所证书。

$sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

检查 Certbot 续订调度程序服务。

$sudo systemctl list-timers

你会找到 snap.certbot.renew.service 作为计划运行的服务之一。

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

对该过程进行一次演练,以检查 SSL 续订是否正常工作。

$sudo certbot renew --dry-run

如果没有看到任何错误,则一切都已准备就绪。 您的证书将自动更新。

第 8 步 – 配置 Nginx

要通过 Nginx 运行它,我们需要在本地主机上运行 Odoo。 要更改此情况,请停止 Odoo 服务。

$sudo systemctl stop odoo-server

打开 Odoo 服务器配置文件。

$sudo nano /etc/odoo.conf

将以下行添加到其中。

xmlrpc_interface = 127.0.0.1
proxy_mode = True

为 Odoo 创建 Nginx 配置文件。

$sudo nano /etc/nginx/conf.d/odoo.conf

粘贴下面的代码。

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

按 Ctrl + X 关闭编辑器,并在提示保存文件时按 Y。

打开文件 /etc/nginx/nginx.conf 进行编辑。

$sudo nano /etc/nginx/nginx.conf

在该行之前添加以下行 include /etc/nginx/conf.d/*.conf;

server_names_hash_bucket_size 64;

按 Ctrl + X 并在出现提示时输入 Y 保存文件。

测试 Nginx 配置。

$sudo nginx -t

如果您没有看到任何错误,则表示您可以开始了。 重新启动 Nginx 服务器。

$sudo systemctl restart nginx

第 9 步 – 启动 Odoo

一切设置完毕后,我们可以再次启动 Odoo 服务器。

$sudo systemctl start odoo-server

通过以下方式在浏览器中启动 Odoo https://odoo.yourdomain.com。 在浏览器中打开 URL http://:8069 或者 http://odoo.yourdomain.com:8069。 如果一切正常,您应该会看到 Odoo 的数据库创建屏幕。

选择您的电子邮件和密码来创建您的登录凭据。 主密码是 admin_passwd 您在中添加的 /etc/odoo.conf 文件。 填写所有剩余字段。

检查 Demo Data 字段用示例数据填充数据库。 不要在面向互联网的服务器上安装演示数据。 包含演示数据的数据库包含默认登录名和密码,可用于进入您的系统并造成严重麻烦,即使在登台/开发系统上也是如此。 我们仅将其用于教程目的。

单击创建数据库按钮继续完成安装。 第一次创建数据库时,加载项页面将需要一些时间来加载,因此请勿刷新页面。 创建数据库后,您将自动重定向到以下登录页面。

输入上一步中使用的凭据登录 Odoo ERP,您将进入仪表板页面,如下所示。 它将预先填充演示数据。 如果您尚未检查数据库创建页面上的演示数据选项,您将获得一个不同且更清晰的仪表板。

从现在开始您可以开始使用 Odoo 来管理您的业务。

第 10 步 – 更新 Odoo

停止 Odoo 服务器。

$sudo systemctl stop odoo-server

切换到Odoo系统用户。

$sudo su - odoo

从 GitHub 获取最新源代码。

$git fetch
$git rebase --autostash

如果您手动更改源,第二个命令可能会遇到源代码冲突。 您将获得冲突文件的列表。 您将需要手动更改所有文件并重新运行命令来解决问题。

如果您想放弃冲突的更改,可以运行以下命令来重置源。

$git reset --hard

激活Python虚拟环境。

$source odoo-env/bin/activate

安装 Python 依赖项。

$pip3 install -r /opt/odoo/odoo/requirements.txt

退出Python虚拟环境。

$deactivate

启动 Odoo 服务器。

$sudo systemctl start odoo-server

第 11 步 – 使用 Fail2Ban 保护 Odoo

此步骤是可选的,但如果您安装了 Fail2Ban,您可以添加 Odoo 配置来保护它。

创建并打开 odoo-login.conf 文件进行编辑。

$sudo nano /etc/fail2ban/jail.d/odoo-login.conf

将以下代码粘贴到其中。

[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

按 Ctrl + X 关闭编辑器,并在提示保存文件时按 Y。

创建并打开 odoo-login.conf 过滤文件进行编辑。

$sudo nano /etc/fail2ban/filter.d/odoo-login.conf

将以下代码粘贴到其中。

[Definition]
failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from 
ignoreregex =

按 Ctrl + X 关闭编辑器,并在提示保存文件时按 Y。

重新启动 Fail2Ban。

$sudo systemctl restart fail2ban

结论

我们关于在 Rocky Linux 9 服务器上安装和配置 Odoo 的教程到此结束。 如果您有任何疑问,请在下面的评测中发表。

资讯来源:由0x资讯编译自HOWTOFORGE,版权归作者所有,未经许可,不得转载

资讯来源:由a0资讯编译自THECOINREPUBLIC。版权归作者A0资讯所有,未经许可,不得转载

上一篇 2024年 5月 31日
下一篇 2024年 5月 31日

相关推荐