如何在 Rocky Linux 9 上安装 Odoo 17 ERP 软件
在此页面上
- 先决条件
- 第 1 步 - 配置防火墙规则
- 第 2 步 - 分配主机名
第 3 步 - 安装和配置 PostgreSQL
- 配置基于主机的身份验证
- 配置PostgreSQL监听地址
- 启用并启动 PostgreSQL 服务
第 4 步 - 安装 Odoo
第 5 步 - 配置 Odoo
Odoo(以前称为 OpenERP)是一个自托管套件,包含 10,000 多个开源应用程序,可满足各种业务需求,包括 CRM、电子商务、会计、库存、项目管理和销售点。这些应用程序完全集成并通过熟悉的 Web 界面进行访问。
本教程将教我们在 Rocky Linux 9 服务器上安装 Odoo 16 Stack。
先决条件
一台 Rocky Linux 9 服务器,至少具有 2GB RAM 来托管 Odoo Stack。
第二台 Rocky Linux 9 服务器至少具有 2GB RAM,用于托管 PostgreSQL 数据库。但是,您可以将数据库安装在与 Odoo 相同的服务器上,但对于生产环境,强烈建议您将其安装在单独的服务器上。您还可以选择您选择的任何提供商提供的任何托管数据库选项。
RAM 要求取决于将使用堆栈的并发用户数量。有关如何计算系统要求的详细指南可以在 Odoo 的文档中找到。
保持您的系统更新。
$ sudo dnf update
在两台服务器上都具有 sudo 权限的非 root 用户。
应安装 Fail2Ban。此步骤是可选的。您可以按照我们在 Rocky Linux 上安装 Fail2Ban 的指南进行操作。
SELinux 应该被禁用。
您的系统需要的软件包很少。
$ 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
退出 shell。
打开文件 /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
退出 shell。
打开文件 /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, <odoo_server_ip>'
按 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
来使用 Python 3.10.14。
安装依赖项并准备安装
创建一个新的系统用户,用于管理 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
。
为 Odoo 创建一个新的 virtualenv
环境。
$ python3 -m venv odoo-env
激活虚拟环境。我们正在系统用户的主目录下创建一个环境。您可以自由选择您喜欢的任何位置。
$ source odoo-env/bin/activate
更新 PIP 以防万一。
(odoo-env) $ pip3 install --upgrade pip
在虚拟环境中安装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
应将此目录添加到定义 Odoo 查找模块的目录的 addons_path
参数中。退出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 地址。
由于使用默认的 PostgreSQL 端口 5432,因此选项 db_port
设置为 false。如果您想使用不同的端口,则需要更新此值。
选项 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 PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
安装证书机器人。
$ sudo snap install --classic certbot
使用以下命令确保可以通过创建到 /usr/bin
目录的符号链接来运行 Certbot 命令。
$ 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 -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
通过 https://odoo.yourdomain.com
在浏览器中启动 Odoo。在浏览器中,打开 URL http://
或 http://odoo.yourdomain.com:8069
。如果一切正常,您应该会看到 Odoo 的数据库创建屏幕。
选择您的电子邮件和密码来创建您的登录凭据。主密码是您在 /etc/odoo.conf
文件中添加的 admin_passwd
。填写所有剩余字段。
检查演示数据
字段以使用示例数据填充数据库。不要不要在面向互联网的服务器上安装演示数据。包含演示数据的数据库包含默认登录名和密码,可用于进入您的系统并造成严重麻烦,即使在登台/开发系统上也是如此。我们仅将其用于教程目的。
单击创建数据库按钮继续完成安装。第一次创建数据库时,加载项页面将需要一些时间来加载,因此请勿刷新页面。创建数据库后,您将自动重定向到以下登录页面。
输入上一步中使用的凭据登录 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 <HOST>
ignoreregex =
按 Ctrl + X 关闭编辑器,并在提示保存文件时按 Y。
重新启动 Fail2Ban。
$ sudo systemctl restart fail2ban
结论
我们关于在 Rocky Linux 9 服务器上安装和配置 Odoo 的教程到此结束。如果您有任何疑问,请在下面的评论中发表。