ERPNext是最好的开源ERP软件之一(另一个是同样基于Python开发的Odoo)。但与Odoo相比,ERPNext资料较少一些。本文以V14为例,在Ubuntu22.04上进行ERPNext安装及生产环境配置。相比Docker安装性能与稳定性各方面更好一些。
1.系统需求
1.1软件需求
- Updated Ubuntu 22.04
- A user with sudo privileges
- Python 3.10+
- Node.js 16
1.2硬件需求
- 4GB RAM
- 40GB Hard Disk
2. 服务器配置
2.1安装前先升级系统软件
sudo apt-get update -y
sudo apt-get upgrade -y
2.2创建新用户 – (bench user)
为避免root用户安装带来的风险,新建一个用户用于安装与管理系统(ERPNext是基于frappe bench框架的,这里新建用户 frappe以说明该用户用于frappe安装),赋予该用户sudo权限。
sudo adduser [frappe-user]
usermod -aG sudo [frappe-user]
su [frappe-user]
cd /home/[frappe-user]
3. 安装软件包
框架需要一系列软件运行,需要预先安装软件包。为了加速软件安装,可以预先配置ubuntu安装镜像为国内源(如清华大学开源镜像),也可以配置python的pypi安装镜像为清华开源镜像,相关方法参见镜像站的说明(tuna.moe)。在后续部分软件难以下载或安装的情况下(例如frappe framework需要从github下载),可能需要在命令行配置可以访问的代理服务器或者预先安装(例如先安装ansible以避免默认命令安装过慢)。通过export http_proxy='<host: port>'
配置代理。
3.1 安装GIT
sudo apt-get install git
3.2 安装 Python
ERPNext V14需要 Python3.10+版本.
sudo apt-get install python3-dev python3.10-dev python3-setuptools python3-pip python3-distutils
3.3 安装Python虚拟环境
使用Python的基本技巧之一是通过新建虚拟环境来隔离不同应用。安装方法如下。
sudo apt-get install python3.10-venv
3.4 安装Software Properties Common
sudo apt-get install software-properties-common
3.5 安装MariaDB
ERPNext 建立在MariaDB数据库基础上,目前也仅支持MariaDB。
sudo apt install mariadb-server mariadb-client
3.6 安装Redis Server
sudo apt-get install redis-server
3.7 安装其他软件包
安装用于管理字体, PDFs和其它功能的包。
sudo apt-get install xvfb libfontconfig wkhtmltopdf
sudo apt-get install libmysqlclient-dev
4. 配置数据库
4.1 通过以下命令配置数据库
sudo mysql_secure_installation
配置过程中会有以下英文提示,逐行进行解释
- Enter current password for root: (Enter your SSH root user password) (当前SSH的root用户密码)
- Switch to unix_socket authentication [Y/n]: Y
- Change the root password? [Y/n]: Y (修改root密码,这里指的是数据库的root用户,输入一个新密码)
- Remove anonymous users? [Y/n] Y (移除匿名用户)
- Disallow root login remotely? [Y/n]: Y (禁止root用户远程登录,禁止后root用户只能从本机登录)
- Remove test database and access to it? [Y/n]: Y (移除测试数据库)
- Reload privilege tables now? [Y/n]: Y (立即重新载入数据库权限)
4.2 编辑 MYSQL默认配置文件
sudo nano /etc/mysql/my.cnf
在文件最后添加以下内容:
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
4.3重启数据库
sudo service mysql restart
4.4 安装 CURL, Node, NPM and Yarn
安装 CURL
sudo apt install curl
通过NVM安装Node
由于网络原因,直接安装NVM可能不成功,可参考作者其它文档以安装NVM。
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
source ~/.profile
nvm install 16.15.0
安装 NPM
由于node自带npm,以下安装步骤可省略,但为了加快npm安装软件速度,可以通过后一行命令修改npm为国内镜像。
sudo apt-get install npm
npm config set registry https://registry.npmmirror.com
安装 Yarn并修改其安装镜像
sudo npm install -g yarn
yarn config set registry https://registry.npmmirror.com
安装 Frappe Bench
sudo pip3 install frappe-bench
初始化 Frappe Bench
bench init --frappe-branch version-14 frappe-bench
进入新建的 Frappe Bench 目录
cd frappe-bench
修改目录权限
为本用户主目录下增加权限,保证后面程序的运行
chmod -R o+rx /home/[frappe-user]
新建一个网站
使用Bench新建一个网站,用于安装ERPNext和APP
bench new-site [site-name]
5. 安装ERPNext 和其它Apps
5.1 下载所有需要安装的app
首先下载安装ERPNext安装必需的payments应用。
bench get-app payments
下载ERPNext应用
bench get-app --branch version-14 erpnext
下载其它需要的模块,例如人力资源模块hrms.
bench get-app hrms
5.2在网站中下载安装ERPNext
bench --site [site-name] install-app erpnext
在网站中安装其它模块
bench --site [site-name] install-app hrms
将新建网站设置为当前网站并启动:
bench use [your-site]
bench start
//如果无法找到127.0.0.1则通过以下命令将其添加到hosts文件中
bench --site [your-site] add-to-hosts
在未指定端口的时候,ERPNext默认端口为8000,访问<host:8000>可以访问该网站。
在进行完上述安装后,ERPNext运行在开发者模式,需要每次运行bench start命令才可启动,且性能较低。因此,可通过以下步骤配置为生产模式。
6. 配置ERPNext为生产模式
6.1使能Scheduler
bench --site [site-name] enable-scheduler
6.2禁用维护模式
bench --site [site-name] set-maintenance-mode off
6.3配置系统
sudo bench setup production [frappe-user]
6.4配置nginx
bench setup nginx
6.5使用Ansible配置并启动系统
这里可以手动安装Ansible以加快配置速度,配置完成后,可以通过默认的80端口访问网站。
sudo supervisorctl restart all
sudo bench setup production [frappe-user]
7. 配置ssl证书
生产环境中需要https方式访问,需要配置ssl证书。
7.1 启用dns_multitenant
打开该选项,本机上不同的网站通过域名进行区分,均可通过默认的80端口访问。
bench config dns_multitenant on
如果需要通过不同端口访问不同网站(本例之外的情况),可以关闭上述选项并进行配置(默认的第一个网站使用80端口,以下例子新建一个网站并使用82端口访问)。
bench config dns_multitenant off
bench new-site site2name
bench set-nginx-port site2name 82
bench setup nginx
sudo service nginx reload
7.2 为网站添加域名
使用以下命令为erp网站添加域名,运行时会弹出提示,指定该域名用于哪一个erpnext网站,输入网站即可绑定域名与网站。
bench setup add-domain [desired-domain]
7.3 指定证书文件地址
如果已经申请了SSL文件,使用以下参数来指定ssl文件地址。
--ssl-certificate [path-to-certificate]
--ssl-certificate-key [path-to-certificate-key]
//例如,如果将证书和key放在以下地址,可以通过以下命令
bench setup add-domain custom.erpnext.com --ssl-certificate /etc/letsencrypt/live/erpnext.cert --ssl-certificate-key /etc/letsencrypt/live/erpnext.key
这些内容在网站的site_config.json文件中都可以看到。
"domains": [
{
"ssl_certificate": "/etc/letsencrypt/live/erpnext.cert",
"domain": "erpnext.com",
"ssl_certificate_key": "/etc/letsencrypt/live/erpnext.key"
}
],
7.5 重新配置nginx并启动服务
重新配置nginx并重启服务后可以通过https方式访问站点。
bench setup nginx
sudo service nginx reload
7.6 其它自动化安装let’s encrption免费ssl证书的方式(未测试)
在相关文档中,还可以通过以下命令安装并自动更新证书(由于我的站点已经安装证书,暂未测试)。看操作步骤的说明,应该在前面步骤中域名与站点绑定后运行。
sudo apt install snapd
sudo snap install core; sudo snap refresh core
//卸载系统中可能有的旧版本certbot并重新安装
sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
//自动安装
sudo certbot --nginx
//以下为手动安装,与自动安装选一个即可
sudo certbot certonly --nginx
//配置自动更新
sudo certbot renew --dry-run
//除了上述命令,官方文档中提到以下两部可以快速实现ssl证书安装与更新
sudo -H bench setup lets-encrypt [site-name] --custom-domain [custom-domain]
sudo bench renew-lets-encrypt
8. Python版本问题
由于当前的Ubuntu中默认已经没有了python(之前的python2.7),而是通过python3来启动python,这有可能导致安装失败,可以建立一个名为python的软连接来运行python3.
如果已经申请了SSL文件,使用以下参数来指定ssl文件地址。
//查看系统中的python列表
sudo ls /usr/bin/python*
//查看系统默认的python版本,应该没有内容,再检查python3版本
python -V
python3 -V
//如果系统python已链接到python2.7等其他版本,可以删除该软连接
sudo rm /usr/bin/python
//然后创建一个python软连接到python3版本
sudo ln -s /usr/bin/python3.10 /usr/bin/python