Yapi部署文档

  • Post author:
  • Post category:其他

目录

1、部署mongodb

2、部署nodejs

3、下载yapi

4、项目中安装safeify

5、在server/utils/目录下创建sandbox.js文件,内容如下:

6、修改config.json

7、安装yapi

8、pm2管理


1、部署mongodb

docker run -itd –name yapiMongo -p 27017:27017 -v /etc/localtime:/etc/localtime -v /root/yapi/mongoData/:/data/db mongo:latest

mongodb(2.6+)

use admin
db.createUser(
	{
		user:'admin',
		pwd :'',
		customData:{"desc":"This user is for administrators"},
		roles:[
				{
					role:'userAdminAnyDatabase',db:'admin'
				}
		]
	}
)
use yapi
db.createUser(
	{
		user:'yapi',
		pwd :'',
		customData:{"desc":"This user is for administrators"},
		roles:[
				{
					role:'readWrite',db:'yapi'
				}
		]
	}
)

2、部署nodejs

nodejs(7.6+)

3、下载yapi

curl -o yapi.zip https://codeload.github.com/YMFE/yapi/zip/refs/heads/master

yapi(1.10+)

4、项目中安装safeify

npm i safeify –save

5、在server/utils/目录下创建sandbox.js文件,内容如下:

const Safeify = require('safeify').default;
 
module.exports = async function sandboxFn(context, script) {
    // 创建 safeify 实例
    const safeVm = new Safeify({
        timeout: 3000,
        asyncTimeout: 60000,
        // quantity: 4,          //沙箱进程数量,默认同 CPU 核数
        // memoryQuota: 500,     //沙箱最大能使用的内存(单位 m),默认 500m
        // cpuQuota: 0.5,
        // true为不受CPU限制,以解决Docker启动问题
        unrestricted: true,
        unsafe: {
            modules: {
              // 引入assert断言库
                assert: 'assert'
            }
        }
    });
 
    safeVm.preset('const assert = require("assert");');
    
    script += "; return this;";
    // 执行动态代码
    const result = await safeVm.run(script, context);
 
    // 释放资源
    safeVm.destroy();
    return result
};

6、修改config.json

{
  "port": "3000",
  "adminAccount": "admin@admin.com",
  "timeout":120000,
  "db": {
    "servername": "127.0.0.1",
    "DATABASE": "yapi",
    "port": 27017,
    "user": "yapi",
    "pass": "yapi",
    "authSource": ""
  },
  "mail": {
    "enable": true,
    "host": "smtp.163.com",
    "port": 465,
    "from": "***@163.com",
    "auth": {
      "user": "***@163.com",
      "pass": "*****"
    }
  }
}

7、安装yapi

npm install –production –registry https://registry.npm.taobao.org
npm run install-server //安装程序会初始化数据库索引和管理员账号,管理员账号名可在 config.json 配置
node server/app.js //启动服务器后,请访问 127.0.0.1:{config.json配置的端口},初次运行会有个编译的过程,请耐心等候 

8、pm2管理

mirrors / YMFE / yapi · GitCode

问题说明
MockJson脚本调用报错:Error: Cannot read property ‘delay’ of undefined

在sandbox.js中添加script += “; return this;”;,只有脚本中带return语句,变量result才能获得返回值。

在镜像中启动服务报错:Error: EROFS: read-only file system, mkdir ‘/sys/fs/cgroup/cpu/safeify’

这是safeify为了限定CPU资源使用,需要在此路径下写入文件,但是在镜像中此路径为只读路径,在 new Safeify对象时设置unrestricted: true,即可。

断言功能不可用,assert.equal is not a function

safeify对于执行脚本中库的引入方式与之前不同,需要通过unsafe来实现,具体可以看上面的sandbox.js的实现。

测试集合中log对象无效

测试集合中在断言失败的情况下,使用log来进行调试,但是接入safeify之后,log功能有点问题,后续更新解决办法,可以先关注一下。

assert严格模式,Cannot convert object to primitive value

在之前的assert.equal({}, ”)是可以通过的,引入safeify后会报错,但是问题不大,最好还是按照严格模式来写。
 


版权声明:本文为weixin_44385760原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。