我们之前使用的yapi 1.9.2,存在高危漏洞,攻击者可利用该漏洞在目标服务器上执行任意代码,导致服务器被攻击者控制,植入木马或挖矿病毒。
通过目前网络上给出的安全解决方案,总感觉解决得不彻底,yapi 官方仓库已经修复了沙箱提权的问题,我尝试使用官方最新源代码部署yapi,遇到好多问题,顺手记录下来,无论部署新环境或者升级新版本,日后方便自己回顾或者他人参考。
一、命令行 or web界面 那种部署方式更好?
yapi github 官方仓库提供了通过执行yapi server启动http服务,然后在web浏览器配置部署yapi的方式,但笔者更喜欢通过命令行的方式来部署,
因为在命令行中通过源码部署yapi,更易于理解程序其中的运行逻辑,方便日后运维。而且随时使用官方仓库最新源代码,不用等待作者更新yapi-cli部署工具。
二、配置node环境
配置node环境,推荐使用旧版v14.19.0,使用最新的node,我这边安装测试会出现各种各样的问题。从国内镜像站下载node http://nodejs.cn/download/current/
下载nodejs,解压到 /usr/local 下
wget https://cdn.npmmirror.com/binaries/node/v14.19.0/node-v14.19.0-linux-x64.tar.xz
tar -xf node-v14.19.0-linux-x64.tar.xz -C /usr/local/
配置node 环境变量
cat <<__EOF__ >> /etc/profile
export NODE_HOME=/usr/local/node-v14.19.0-linux-x64
export PATH=$PATH:${NODE_HOME}/bin
__EOF__
让环境变量生效
source /etc/profile
su - root
查看node版本
node --version
三、配置yapi
笔者看了好多网络上的文章,大部分人喜欢把文件夹名改为 vendors, 刚开始一脸疑惑,其实大可不必,命名为其他名称也可以,不影响正常部署,我这里就保留了yapi-master的命名
需要注意的是config.json 必须放在源码的上一层级的目录。
git clone https://github.com/YMFE/yapi.git 或者浏览器里下载yapi master分支 yapi-master.zip
mkdir /opt/yapi-project
cp yapi-master.zip /opt/yapi-project/
cd /opt/yapi-project/
unzip yapi-master.zip
cp yapi-master/config_example.json config.json
配置mongodb 管理员用户名和密码, mongodb 用户名和密码需要手工创建,在安装mongodb那一步我们会讲到,这里的密码用的比较简单,生产环境强烈建议使用高复杂度密码。
vim config.json
{
"port": "3000",
"closeRegister":true,
"adminAccount": "admin@admin.com",
"timeout":120000,
"db": {
"servername": "127.0.0.1",
"DATABASE": "yapi",
"port": 27017,
"user": "root",
"pass": "123456",
"authSource": ""
},
"mail": {
"enable": true,
"host": "smtp.163.com",
"port": 465,
"from": "***@163.com",
"auth": {
"user": "***@163.com",
"pass": "*****"
}
}
}
现在的目录层级结构如下,新建的config.json在源码的上一层级目录
[root@pangu yapi-project]# tree -L 2
.
├── config.json
├── yapi-master
│ ├── CHANGELOG.md
│ ├── client
│ ├── common
│ ├── config_example.json
│ ├── docs
│ ├── exts
│ ├── LICENSE
│ ├── nodemon.json
│ ├── npm-publish.js
│ ├── package.json
│ ├── package-lock.json
│ ├── plugin.json
│ ├── README.md
│ ├── SECURITY.md
│ ├── server
│ ├── static
│ ├── test
│ ├── webpack.alias.js
│ ├── yapi-base-flow.jpg
│ ├── ydocfile.js
│ ├── ydoc.js
│ └── ykit.config.js
└── yapi-master.zip
在yapi-master路径下安装npm依赖包
cd /opt/yapi-project/yapi-master
rm package-lock.json -rf
npm install --production --registry=https://registry.npmmirror.com --unsafe-perm
四、 安装mongodb
我从mongodb 官方网站 https://www.mongodb.com/try/download/community 下载了server,shell,tools 三个 mongodb rpm 包,分别对应服务器端,mongo客户端,还有mongodump 等备份工具,所以这三个包都需要安装。
[root@pangu opt]# ls -1 mongo*
mongodb-org-server-3.2.22-1.el7.x86_64.rpm
mongodb-org-shell-3.2.22-1.el7.x86_64.rpm
mongodb-org-tools-3.2.22-1.el7.x86_64.rpm
yum -y localinstall mongodb*
systemctl start mongod
systemctl enable mongod
使用mongo客户端工具在命令行登陆数据库
mongo
创建mongodb高权限用户,如图1
```
use yapi
db.createUser(
{
user:"root",
pwd:"123456",
roles:[{role:"root",db:"admin"}]
}
)
exit
五、初始化数据库,启动服务
#初始化mongodb数据库,config.json里的用户名和密码必须和 mongo命令行手工创建的用户名和密码一致,否则加载数据库会失败
如图2
npm run install-server
# 启动服务,如图3
node /opt/yapi-project/yapi-master/server/app.js
六、使用pm2管理yapi服务
最后安装pm2,以便更好地管理node服务,比如,我们要关闭注册或者mock等功能,修改完配置,直接执行pm2 restart yapi就可以完成配置加载,使用pm2 info yapi 可以查看服务器使用资源等一些统计信息。
安装pm2
npm install pm2 -g --registry=https://registry.npmmirror.com
pm2管理yapi服务,如图4
pm2 start "/opt/yapi-project/yapi-master/server/app.js" --name yapi
查看服务信息
pm2 status
pm2 info yapi
停止服务
pm2 stop yapi
重启服务
pm2 restart yapi
删除服务
pm2 delete yapi
通过以上我们回顾了yapi从源码部署的整个过程,其实只要不厌其烦,仔细认真,我们就能很准确快速地完成yapi新版本部署啦。
本文暂时没有评论,来添加一个吧(●'◡'●)