如何在 Rocky Linux 9 上安装 ERPNext
在此页
- 先决条件
- 设置用户
- 安装 Python 3.10
- 安装和配置 MariaDB 服务器
- 从 Rocky Linux 存储库安装依赖项
- 安装 Nodejs 16 和 Yarn
- 安装 Wkhtmltopdf
- 通过工作台安装 Frappeframework
- 在 Frappe 中设置新应用程序
- 通过工作台安装 ERPNext
- 为 ERP 设置部署下一页
- 配置 ERPNext
- 通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书进行保护
- 结论
ERPNext 是一个开源企业 ERP(企业资源规划)系统,可以在您的企业中实施。 ERPNext 可以在多种类型的行业中实施,例如制造、分销、零售、贸易、服务、教育、非营利组织和医疗保健。此外,它还提供会计、CRM、销售、采购、网站、电子商务、销售点、制造、仓库、项目管理、库存和服务等模块。
ERPNext 是一个获得许可的企业 ERP 平台GNU 通用公共许可证 v3。它主要用 Python 和 JavaScript 编写,由 Frappe Technologies Pvt. 开发。 ERPNext 是一个在 frappe 框架下编写的应用程序,frappe 框架是一个使用 Python 和 Javascript 编写的开源 Web 框架。
ERPNext 是作为 Oracle、QAD、Tython、OpenBrave 和 Odoo 的 NetSuite 等服务的替代品而创建的。对于功能,ERPNext 类似于 Odoo(以前称为 OpenERP)。
在本教程中,您将在 Rocky Linux 9 服务器上安装 ERPNext,然后通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书保护您的安装。您还将学习如何为 ERPNext 安装依赖项,例如来自源代码的 Python 3.10、将用作会话管理器的 Redis、用作 Web 服务器和反向代理的 Nginx、用作进程管理器的 Supervisor、用于防止暴力破解的 Fail2ban、MariaDB 作为用于构建和编译静态文件的数据库服务器、Node.js 和 Yarn。
ERPNext 是一个构建在 frappe 框架之上的应用程序,因此您还将在此过程中通过 frappe-bench 安装 frappe 框架。
先决条件
您将需要满足以下要求才能完成本教程:
- 一台 Debian 11 服务器 - 此示例使用主机名为 erpnext-rocky 的 Debian 服务器。
- 具有 sudo/root 管理员权限的非 root 用户。您将以非根用户身份运行本指南中的所有命令。
- 指向服务器IP地址的域名。
- 以宽容模式运行的 SELinux。
现在让我们开始安装 ERPNext。
设置用户
本教程的第一个任务是创建一个新的专用用户,用于运行 ERPNext 应用程序。您还将使用这个新用户来运行包安装和配置的所有命令。
运行以下命令创建一个新用户 frappe。然后,为frappe 用户设置密码,输入新的强密码,并重复密码。
sudo useradd -m -s /bin/bash frappe
sudo passwd frappe
现在运行以下命令将 frappe 用户添加到 wheel 组。这将允许 frappe 用户执行 sudo 命令成为 root 用户或以 root 权限运行命令。
sudo usermod -aG wheel frappe
最后,以 frappe 用户身份登录以验证并确保您的用户已创建。然后,运行 sudo su 命令获取 root 权限。
sudo - frappe
sudo su
输入 frappe 用户的密码。如果成功,您的提示将变为诸如[email :/home/frappe...。

现在键入 exit 或按 Ctrl+d 退出 root shell。
安装 Python 3.10
ERPNext 是使用基于 Python 的 frappe web 框架创建的 web 应用程序。在撰写本文时,最新版本的 frappe 框架和 ERPNext 至少需要 Python 3.10。
在此步骤中,您将从 Rocky Linux 9 服务器上的源代码手动安装 Python 3.10。
首先,运行以下 dnf 命令来安装一些用于编译 Python 3.10 的基本依赖项。
sudo dnf install gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make
出现提示时输入 y,然后按 ENTER 继续。

接下来,通过下面的 wget 命令下载 Python 3.10 源代码。
wget https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tgz
下载 Python 3.10 后,解压缩 Python 源代码并将您的工作目录移动到其中。
tar xzf Python-3.10.9.tgz
cd Python-*/
接下来,运行以下命令开始编译 Python 3.10。然后将其安装到您的系统中。这会将 Python 3.10 二进制文件安装到 /usr/local/bin 目录。
./configure --enable-optimizations
nproc
sudo make -j2
sudo make altinstall

运行以下命令来验证 Python 3.10 二进制文件。您应该会看到多个 Python 二进制文件,其中包括 Pip3.10。
ls /usr/local/bin
接下来,为确保您可以运行新版本的 Python 命令,您应该将 /usr/local/bin 目录添加到系统 PATH 和 visudo secure_path 中。
运行以下 nano 编辑器命令打开一个新文件 /etc/bashrc。
sudo nano /etc/bashrc
将以下行添加到文件中。
export PATH=$PATH:/usr/local/bin/
完成后保存并退出。
现在运行以下命令重新加载 /etc/bashrc 配置文件。然后验证系统路径。
source /etc/bashrc
echo $PATH
您现在应该看到目录 /usr/local/bin 已添加到系统 PATH 环境变量中。
接下来,运行以下命令来添加和修改 sudoers 配置文件。
sudo visudo
将目录 /usr/local/bin 添加到 Defaults secure_path: 选项,如下所示。
Defaults secure_path=....:/usr/local/bin
完成后保存文件并退出编辑器。
现在通过 sudo 命令运行 Python3.10 和 Pip3.10 二进制文件,如下所示。
sudo python3.10 --version
sudo pip3.10 --version
您应该收到类似于此的输出 - Python 3.10 已从源代码安装到您的 Rocky Linux 服务器。

在下一步中,您将为 ERPNext 安装和配置 MariaDB 服务器。
安装和配置 MariaDB 服务器
在默认安装中,ERPNext 将使用 MySQL/MariaDB 作为数据库服务器。 ERPNext 需要特定版本的 MySQL/MariaDB 才能安装。在撰写本文时,最新版本的 ERPNext 需要 MariaDB 10.6。
在此步骤中,您将从官方 MariaDB 存储库安装 MariaDB Server 10.6。然后,您将向 MariaDB 服务器添加配置并保护 MariaDB 服务器部署。
运行以下命令以添加 MariaDB 存储库 v10.6。
sudo curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version="mariadb-10.6"
你会收到类似这样的输出。

接下来,运行下面的 dnf 命令来安装 MariaDB 包。在提示确认时输入 y,然后按 ENTER 继续。
sudo dnf install MariaDB-server MariaDB-client

此外,当要求接受 MariaDB 存储库的 GPG 密钥时,输入 y,然后按 ENTER。
安装 MariaDB 服务器后,运行以下 systemctl 命令实用程序以启动并启用 MariaDB 服务。
sudo systemctl start mariadb
sudo systemctl enable mariadb
现在通过以下命令验证 MariaDB 服务。您应该看到 MariaDB 服务正在运行并且应该已启用,这意味着它将在启动时自动启动。
sudo systemctl status mariadb

随着 MariaDB 服务器的运行,您将开始根据 ERPNext 的要求配置 MariaDB。
使用以下 nano 编辑器命令打开 MariaDB 配置文件 /etc/my.cnf.d/server.cnf。
sudo nano /etc/my.cnf.d/server.cnf
将以下行添加到 [mysqld] 部分。这将在您的 MariaDB 上启用梭子鱼格式。此外,您还将设置默认字符集为 utf8mb4。
[mysqld]
innodb-file-format=barracuda
innodb-file-per-table=1
innodb-large-prefix=1
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
完成后保存并退出文件。
接下来,使用以下 nano 编辑器命令打开另一个 MariaDB 配置文件 /etc/my.cnf.d/mysql-clients.cnf。
sudo nano /etc/my.cnf.d/mysql-clients.cnf
将以下行添加到 [mysql] 部分。这将始终将客户端的字符集设置为 utf8mb4。
[mysql]
default-character-set = utf8mb4
保存文件并退出编辑器。
现在运行以下 systemctl 命令以重新启动 MariaDB 服务并应用更改。
sudo systemctl restart mariadb
运行以下命令 mariadb-secure-installation 以保护您的 MariaDB 部署。然后系统会要求您配置 MariaDB root 密码,因此请务必输入并重复新密码。对于其余配置,输入 Y 确认并按 ENTER。
sudo mariadb-secure-installation
这样,您就完成了 MariaDB 服务器的安装和配置。在下一步中,您将在 Rocky Linux 机器上安装 Redis、Nginx 和 Supervisor。
从 Rocky Linux 存储库安装依赖项
在此步骤中,您将安装 ERPNxt 的一些依赖项,包括安装将用作会话管理的 Redis、用作 Web 服务器的 Nginx、用作进程管理的 Supervisor 以及保护 ERPNext 免受暴力攻击的 Fail2ban .
您将在此处安装的大多数软件包在 Rocky Linux AppStream 存储库中默认可用。但您还必须确保第三方存储库(例如 EPEL)在您的系统上可用。
运行以下 dnf 命令将 Redis、Nginx、Supervisor 和 Fail2ban 安装到您的 Rocky Linux 系统。
sudo dnf install redis nginx supervisor fail2ban
当提示确认时,输入 Y 并按 ENTER 继续。
现在包安装完成后,运行以下 systemctl 命令启动和启用服务。然后验证每个服务以确保其运行。
启动并启用 Redis 服务,然后验证 Redis 以确保其运行。
sudo systemctl start redis
sudo systemctl enable redis
sudo systemctl status redis
您将收到与此类似的输出。

接下来,启动并启用 Nginx 服务,然后验证 Nginx 以确保该服务正在运行。
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
你会收到类似这样的输出。

之后,启动Supervisor服务并启用它。然后,验证 Supervisor 服务以确保其正在运行。
sudo systemctl start supervisord
sudo systemctl enable supervisord
sudo systemctl status supervisord
以下是您应该在终端屏幕上获得的输出。

最后,对于 Fail2ban 服务,通过下面的 systemctl 命令实用程序启动并启用它。然后,验证 Fail2ban 服务以确保该服务正在运行。
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
sudo systemctl status fail2ban
您现在应该看到 Fail2ban 服务状态正在运行。

完成本节后,确认 Redis、Nginx、Supervisor 和 Fail2ban 服务正在运行。转到下一节安装 Node.js 和 Yarn 包管理器。
安装 Nodejs 16 和 Yarn
ERPNext 的最新版本是 v14,至少需要 Node.js 16 和 Yarn 包管理器。在此步骤中,您将为 Node.js v16 设置 Nodesource 存储库,并为 RHEL 分发添加 Yarn 存储库。然后,您将通过 DNF 安装 Node.js 和 yarn。
首先,运行以下命令为 RHEL 发行版的 Node.js v16 添加 Nodesource 存储库。
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
您应该收到类似这样的输出 - 该脚本将自动检测当前 RHEL 发行版的版本并添加 Nodesource 存储库。

对于 Yarn 存储库,运行以下命令下载存储库并将其添加到您的系统。
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
以下是您应该在终端上收到的输出。

现在 Nodesource 和 Yarn 存储库都已添加到您的 Rocky Linux 系统,是时候通过 DNF 安装 Node.js 和 Yarn 包管理器了。
运行以下 dnf 命令将 Node.js 和 Yarn 安装到您的系统。在提示确认时输入 y,然后按 ENTER 继续。
sudo dnf install gcc-c++ make nodejs yarn
Node.js 和 Yarn 安装应该开始了。

此外,当提示有关两个存储库的 GPG 密钥时,输入 y 并按 ENTER 将 GPG 密钥添加到您的系统。

现在已经安装了 Node.js 和 Yarn 包管理器,接下来您将通过 RPM 文件安装 Wkhtmltopdf 包。
安装 Wkhtmltopdf
在此步骤中,您将安装 ERPNext 用于生成 PDF 报告的 Wkhtmltopdf 包。 Wkhtmltopdf 可以通过 .deb 文件或 .rpm 文件手动下载和安装。
首先,运行以下 dnf 命令来安装 Wkhtmltopdf 包的依赖项。
sudo dnf install fontconfig freetype libX11 libXext libXrender libjpeg libpng xorg-x11-fonts-75dpi xorg-x11-fonts-Type1
出现提示时输入 y,然后按 ENTER 继续。

接下来,运行以下 rpm 命令下载 Wkhtmltopdf 包并将其安装到您的 Rocky Linux 系统。
sudo rpm -Uvh https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox-0.12.6.1-2.almalinux9.x86_64.rpm
安装 Wkhtmltopdf 后,运行以下命令来验证安装。
Wkhtmltopdf 包提供了两个命令行工具,wkhtmltopdf 命令用于将 HTML 页面转换为 PDF,而 wkhtmltoimage 将 HTML 页面转换为各种图像格式。
which wkhtmltopdf
which wkhtmltoimage
wkhtmltopdf --version
wkhtmltoimage --version
您将收到类似于此的输出 - Wkhtmltopdf 软件包 v0.12 安装在您的 Rocky Linux 系统上。

至此,ERPNext和frappeframework的依赖包安装完成。这包括 Python3.10、Redis、Nginx、Supervisor、Fail2ban、MariaDB Server 和 Wkhtmltopdf 包。
在下一节中,您将开始 ERPNext 安装。但首先,您将安装并设置 frappe 框架。
通过工作台安装 Frappeframework
ERPNext 是一个开源的 ERP 软件,它是用 frappeframework 创建的,它是用 Python 和 JavaScript 编写的。 ERPNext 将在 frappeframework 中运行,因此您必须在系统上安装 frappeframework,然后才能安装 ERPNext。
所以首先,你必须安装长凳。然后,通过工作台安装 frappeframework。最后,您将在 frappeframework 中安装 ERPNext 应用程序。
运行以下 pip3.10 命令从 PyPI 存储库安装 bench。
sudo pip3.10 install frappe-bench
在工作台安装过程中,您会收到与此类似的输出。

安装 bench 后,运行以下命令进行验证。
which bench
bench --version
您将收到二进制路径 bench 命令和您安装的 bench 的当前版本。

安装 bench 后,您将通过 bench 命令安装 frappe 框架。
运行以下 bench 命令以在当前工作目录中安装 frappe 框架。此外,您将指定将用于 Python 3.10 的 Python 版本,将 frappe 框架版本指定为 v14。目标安装目录是 frappe-bench。
bench init --python python3.10 --frappe-branch version-14 frappe-bench
在 frappeframework 安装期间,您将收到类似的输出。

frappe 框架安装完成后,您应该会收到以下输出。

最后,运行以下命令让其他用户可以读取并执行到frappe框架安装目录/home/frappe/frappe-bench。这是 Nginx Web 服务器可以读取和执行 flap 框架所必需的。
sudo chmod -R o+rx /home/frappe/frappe-bench
or
sudo chmod -R o+rx /home/frappe
安装 frappe 框架后,您就可以安装和设置 ERPNext。
在 Frappe 中设置新应用程序
在安装 ERPNext 之前,您必须在 frappe 框架上创建一个新站点/项目。在此步骤中,您将创建一个新站点/项目并通过工作台将环境切换到新项目中。
首先,通过 cd 命令将您的工作目录移动到 frappe-bench。
cd ~/frappe-bench
运行下面的 bench 命令为 ERPNext 创建一个新站点/项目。在此示例中,您将创建一个新站点 erp.hwdomain.io,这是 ERPNext 安装的目标域名。此外,在设置过程中,系统会要求您为项目配置管理员密码,因此请输入您的密码并重复。此密码将用于登录您的 ERPNext 应用程序。
bench new-site erp.hwdomain.io
最后,运行以下命令切换到新站点/项目 erp.hwdomain.io。
bench use erp.hwdomain.io
以下是站点/项目创建期间以及切换到新站点/项目后的输出。

通过工作台安装 ERPNext
在此步骤中,您将开始在您创建的 frappe 框架项目中安装 ERPNext。
首先,运行以下命令下载应用 payments 和 erpnext。在此示例中,您将下载 ERPNexxt v14。
bench get-app payments
bench get-app --branch version-14 erpnext
以下是您将在付款 下载过程中收到的类似输出。

下面是 ERPNext 应用程序的下载过程。

接下来,运行以下命令将 ERPNext 应用程序安装到站点/项目 erp.hwdomain.io。
bench --site erp.hwdomain.io install-app erpnext
您将收到类似于此的输出 - 您还应该看到应用程序 payments 已自动安装为 ERPNext 应用程序的依赖项。

最后,运行下面的 bench 命令以在 ERPNext 站点/项目 erp.hwdomain.io 上启用调度程序并禁用维护模式。
bench --site erp.hwdomain.io enable-scheduler
bench --site erp.hwdomain.io set-maintenance-mode off

至此,ERPNext安装完成。在接下来的步骤中,您将为生产中的 ERPNext 部署设置 Nginx Web 服务器和 Supervisor,这可以通过 bench 命令进行配置。
为 ERPNext 设置部署
首先,运行以下命令开始为生产环境配置 frappe 框架和 ERPNext。这将安装 Ansible 并通过 Ansible 自动设置 ERPNext 部署。
sudo bench setup production frappe
下面是 Ansible 安装过程中的输出。

下面是配置完成后的输出。

接下来,运行以下 bench 命令为 ERPNext 设置 Nginx 和 Supervisor。当要求覆盖当前设置时,输入 y 确认并按 ENTER。
sudo bench setup supervisor
sudo bench setup nginx
之后,再次运行下面的bench命令,确保安装了Supervisor和Nginx的配置。
sudo bench setup production frappe
输入 y 覆盖当前设置,然后按 ENTR 继续。

接下来,通过以下 nano 编辑器命令打开 Supervisor 配置 /etc/supervisor.conf。
sudo nano /etc/supervisor.conf
确保您在 [include] 部分中有以下行。如果没有,您可以将格式更改为 *.conf,如下所示。
[include]
file = /etc/supervisord.d/*.conf
完成后保存并退出文件。
现在运行以下 systemctl 命令实用程序以重新启动 Supervisor 服务并应用更改。
sudo systemctl restart supervisord
最后,使用 sudo 权限运行以下 supervisorctl 命令。这将验证 frappe 框架和 ERPNext 使用的所有流程和服务。
sudo supervisorctl status
如果您的 ERPNext 安装成功,您应该会收到类似于以下内容的输出 - ERPNext 的所有服务都在运行。

此时,您已经完成了 ERPNext 安装,并使用 Nginx 作为 Web 服务器和进程管理器的 Supervisor 运行。您现在可以通过您的域名和网络浏览器访问您的 ERPNext 安装。
配置 ERPNext
打开您的网络浏览器并访问您的 ERPNext 安装的域名(即:http://erp.hwdomain.io/)。然后您将看到 frappe 框架登录页面。
输入默认用户 Administrator 并输入您在站点/项目创建期间使用的密码。

现在选择默认语言、时区和货币。然后单击下一步。

为您的 ERPNext 安装输入新的管理员用户。输入您的全名、电子邮件地址和密码,然后单击下一步。

输入公司名称并上传您的公司徽标,然后单击下一步。

输入有关您的组织的详细信息,然后单击完成设置。

您现在应该看到 ERPNext 安装的管理仪表板。

通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书进行保护
在这最后一步中,您将通过 Certbot 工具和 Letsencrypt 使用 SSL/TLS 证书保护 ERPNext。在开始之前,请确保您的域名指向您的服务器 IP 地址,并确保您有一个有效的电子邮件地址将用于注册 Letsencrypt。
通过下面的 dnf 命令安装 Certbot 工具和 Certbot Nginx 插件。出现提示时,输入 y 确认并按 ENTER 继续。
sudo dnf install certbot python3-certbot-nginx
安装 certbot 后,运行以下 certbot 命令为您的 ERPNext 域名生成 SSL 证书。请务必在以下命令中更改域名和电子邮件地址。
sudo certbot --nginx --agree-tos --no-eff-email --redirect --hsts --staple-ocsp --email -d erp.hwdomain.io
有了这个,ERPNext 安装现在通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书进行保护。您还在 ERPNext 域名上配置了自动重定向 HTTP 到 HTTPS,Certbot 会自动处理。
结论
在本教程中,您学习了如何在 Rocky Linux 9 服务器上安装开源 ERP 软件 ERPNext。还学习了Python 3.10等一些依赖的安装,通过编译源码,手动安装。您还安装的其他依赖项包括 MariaDB Server、Nginx、Supervisor、Redis 和 Fail2ban。
您还学习了如何安装 frappe 框架并在其上安装了 ERPNext。然后,您了解了 ERPNext 作为 ERP 软件的基本配置。
最后,您还通过将 Nginx 配置为 Web 服务器并将 Supervisor 配置为流程管理器,将 ERPNext 部署到生产环境中。您还通过 Certbot 和 Letsencrypt 保护了 ERPNext 部署。