部署yapi
安装node
安装MongoDB
使用yapi-cli安装yapi
npm i -g yapi-cli
yapi server
启动可视化部署程序。
本地的话输入 0.0.0.0:9090即可访问部署页面。如果不是本地,把0.0.0.0替换成安装yapi-cli 的机器的ip地址即可。注意9090端口是否被防火墙阻挡。
根据页面提示部署即可。
部署完成后启动yapi
找到部署文件夹。执行
node vendors/server/app.js
浏览器打开 http://127.0.0.1:3000 就可以访问搭建的YAPI(如果不是本地服务器,需要把127.0.0.1替换指定的域名或IP)
注意端口3000是否开放
使用pm2守护node进程
要保持node进程,需要使用pm2。
npm i -g pm2
启动yapi
pm2 start server/app.js
重启
pm2 restart service/app.js
停止:
pm2 stop app_name|app_id
查看应用列表,可以获取到 应用的名字和进程id
pm2 list
关于pm2
升级yapi
cd {项目目录}
yapi ls //查看版本号列表
yapi update //更新到最新版本
yapi update -v {Version} //更新到指定版本
使用docker部署yapi
创建自定义网路
docker network create yapi
安装MongoDB
# 1. 备份 mongoDB 到宿主机,需要使用下面命令创建存储卷
docker volume create mongo-data
# 2. 拉取镜像,国内服务器提供商网络问题,可能会拉取多次才能成功
docker pull mongo:latest
# 3. 启动 MongoDB
# 启动 MongoDB,其中 -e 指定 MONGO_INITDB_ROOT_USERNAME 为 MongoDB 的 ROOT 用户名,MONGO_INITDB_ROOT_PASSWORD 为 MongoDB 的 ROOT 用户密码
docker run -d \
--name mongodb \
--restart always \
--net=yapi \
-p 27017:27017 \
-v mongo-data:/data/db \
-e MONGO_INITDB_DATABASE=yapi \
-e MONGO_INITDB_ROOT_USERNAME=yapipro \
-e MONGO_INITDB_ROOT_PASSWORD=yapipro1024 \
mongo
# 4、查看 MongoDB 容器的启动情况
docker ps -a
# 5、 进入 MongoDB 容器,从第 4 步查看 MongoDB 容器可以获取到容器 id,以下示例使用 2c46d9f59874 代表 MongoDB 的容器 id
docker exec -it 2c46d9f59874 /bin/sh
# 6、进入 MongoDB 容器后,进入 mongo cli
mongo localhost:27017
YAPI
使用 Yapi-cli 安装yapi时的问题。
- node 版本问题,
要确定 node 的版本 node (7.6+)同时版本不要太高,最好小于等于node14 - yapi.demo.qunar.com 的问题
开始安装后会报如下错误
(node:19096) Warning: Accessing non-existent property 'which' of module exports inside circular dependency
连接数据库成功!
开始下载平台文件压缩包...
http://yapi.demo.qunar.com/publicapi/archive/v1.4.1
Error: getaddrinfo ENOTFOUND yapi.demo.qunar.com
这是因为yapi.demo.qunar.com
已经无法访问,所以这部分会报错。
找到本地全局安装的yapi-cli
然后,然后搜索 yapi.demo.qunar.com
// src\commands\server.js 文件中的这部分 直接注释掉即可。
// if(config.company){
// try{
// axios.post('http://yapi.demo.qunar.com/publicapi/statis', {company: config.company}).then(res=>{});
// }catch(e){}
// }
if(fileExist(path.resolve(root, 'init.lock'))){
throw new Error('系统已安装,如需重新安装,请清空数据库和删除init.lock文件');
}
第二个在 src\utils.js
中,分析这段代码可知这部分是为了获取ypai的下载地址,如果我们要安装的版本刚好是这些老的版本,就会去http://yapi.demo.qunar.com
下载,而http://yapi.demo.qunar.com
无法访问。所以无法继续,我们可以选择安装不在这个列表中的版本,或者将http://yapi.demo.qunar.com
地址换成另外两个可用的地址即可。
......
function oldVersion(){
return [
"1.4.1",
"1.3.23",
"1.3.22",
"1.3.21",
"1.3.20",
"1.3.19",
"1.3.18",
"1.3.17",
"1.3.16",
"1.3.14",
"1.3.12",
"1.3.11",
"1.3.9",
"1.3.8",
"1.3.7",
"1.3.6",
"1.3.5",
"1.3.4",
"1.3.3",
"1.3.1",
"1.2.9",
"1.2.8",
"1.2.7",
"1.2.5",
"1.2.4",
"1.2.3",
"1.2.0",
"1.1.2",
"1.1.1",
"1.1.0"
]
}
function github(version, type = 'npm') {
let url;
if(version[0] === 'v' || version[0] === 'V'){
version = version.substr(1)
}
if(oldVersion().indexOf(version) !== -1){
type = 'qunar'
}
if(type === 'github'){
version = 'v' + version;
url = 'https://github.com/YMFE/yapi/archive/' + version + '.zip'
}else if(type === 'npm'){
url = `http://registry.npm.taobao.org/yapi-vendor/download/yapi-vendor-${version}.tgz`
}else {
version = 'v' + version;
url = 'http://yapi.demo.qunar.com/publicapi/archive/' + version;
}
return url
}
......