[回答] 有使用过ERPNext这款开源ERP系统的吗?
![[回答] 有使用过ERPNext这款开源ERP系统的吗?](/_next/image?url=https%3A%2F%2Flxunzzzdnokdqhipbmdf.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fmedia%2Fcovers%2Ferpnexterp-b3283eaa.png&w=3840&q=75)
[回答] 有使用过ERPNext这款开源ERP系统的吗?
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='' 配置代理。
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,访问可以访问该网站。
在进行完上述安装后,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
![[想法] 有很多你没听过的病毒也含有 DNA,比如,逆转录病毒(iridoviruses)](/_next/image?url=https%3A%2F%2Flxunzzzdnokdqhipbmdf.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fmedia%2Fcovers%2Fdna-39161584.png&w=3840&q=75)
![[回答] 高考查完分数的那个夜晚你做了什么?](/_next/image?url=https%3A%2F%2Flxunzzzdnokdqhipbmdf.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fmedia%2Fcovers%2F-e4a8ec38.png&w=3840&q=75)
![[回答] 高考数学如何才能考到 130+?](/_next/image?url=https%3A%2F%2Flxunzzzdnokdqhipbmdf.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fmedia%2Fcovers%2F130-157dba52.png&w=3840&q=75)