专业的编程技术博客社区

网站首页 > 博客文章 正文

如何使用官方最新源代码部署yapi?

baijin 2024-08-18 13:23:02 博客文章 7 ℃ 0 评论


我们之前使用的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新版本部署啦。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表