Ubuntu 22.04安装配置ERPNext

Ubuntu 22.04安装配置ERPNext

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
作者
魏智勇(John)
加入讨论

此站点使用 Akismet 来减少垃圾评论。了解我们如何处理您的评论数据

魏智勇(John)

站长,80后,创业者,擅长工业自动化与信息化技术,熟悉各种PLC,组态软件,熟悉计算机技术,熟悉LabVIEW、C,C#,JavaScript程序设计技术。

%d 博主赞过: