YApi轻松部署

YApi安装部署

安装环境推荐:

  • nodejs:7.6+(🎶 v12.14.1,其他v12的也行)
  • mongodb:2.6+

Windows部署YApi

Linux部署YApi

一、安装nodejs

1、获取nodejs安装包

🎶 ​建议选择v12版本的,过高过低部署时问题较多

方式一:Download | Node.js (nodejs.org)

方式二:$ wget https://nodejs.org/dist/v12.14.0/node-v12.14.0-darwin-x64.tar.gz

  • 版本选择:node-v12.14.1-linux-x64.tar.gz(建议)
2、上传到/usr/local/nodejs
3、解压nodejs安装包
  • 解压:tar -xvf node-v12.14.1-linux-x64.tar.gz
  • 重命名:mv node-v12.14.1-linux-x64 node-v12.14.1
4、建立软连接
ln -s /usr/local/nodejs/node-v12.14.1/bin/node /usr/local/bin
ln -s /usr/local/nodejs/node-v12.14.1/bin/npm /usr/local/bin
5、查看安装信息
# 查看node版本信息
node -v
# 查看npm版本信息
npm -v
6、多版本nodejs管理

如果服务器安装多个版本的nodejs,可以通过 n 进行管理

参考:如何在 Linux 中使用 n 管理 Nodejs 版本 - Linux基础博客 (dbigr.com)

二、安装mongodb

1、获取mongodb安装包

​ 方式一:MongoDB Community Download | MongoDB

2、上传到/usr/local/mongodb
3、解压mongodb包
  • 解压:tar -xvf mongodb-linux-x86_64-rhel70-6.0.1.tgz
  • 重命名:mv mongodb-linux-x86_64-rhel70-6.0.1 mongodb-6.0.1
4、创建数据和日志文件夹
cd /usr/local/mongodb/mongodb-6.0.1
mkdir data
chmod -r 777 data 
mkdir logs
cd logs
touch mongodb.log
5、添加mongodb启动配置
cd /usr/local/mongodb/mongodb-6.0.1
mkdir etc
cd etc
touch mongodb.conf
vim mongodb.conf

初次使用,可以不配置登录,直接连接(♿️ 不用登录需要注意服务的访问限制,最好不对外开发对应的端口或者使用白名单配置访问权限,不然可能会被黑,安全还是要注意的​)

# 数据库数据
dbpath=/usr/local/mongodb/mongodb-6.0.1/data
# 日志
logpath=/usr/local/mongodb/mongodb-6.0.1/logs/mongodb.log
# 错误日志采用追加模式
logappend=true
# 启用日志文件,默认启用
journal=true
# 过滤无用日志,调试时设置为false
quiet=true
# 端口号,默认为27017
port=27017
# 允许远程访问
bind_ip=0.0.0.0
# 开启子进程
fork=true
# 开启认证,必选先添加用户
#auth=true
6、启动mongodb
/usr/local/mongodb/mongodb-6.0.1/bin/mongod -f /usr/local/mongodb/mongodb-6.0.1/etc/mongodb.conf

三、部署YApi

1、安装
方式一. 可视化部署[推荐]

执行 yapi server 启动可视化部署程序,输入相应的配置和点击开始部署,就能完成整个网站的部署。部署完成之后,可按照提示信息,执行 node/{网站路径/server/app.js} 启动服务器。在浏览器打开指定url, 点击登录输入您刚才设置的管理员邮箱,默认密码(ymfe.org) 登录系统(默认密码可在个人中心修改)。

# 安装
npm install -g yapi-cli --registry https://registry.npm.taobao.org
# 可视化部署
yapi server
方式二. 命令行部署

如果 github 压缩文件无法下载,或需要部署到一些特殊的服务器,可尝试此方法

mkdir yapi
cd yapi
git clone https://github.com/YMFE/yapi.git vendors //或者下载 zip 包解压到 vendors 目录(clone 整个仓库大概 140+ M,可以通过 `git clone --depth=1 https://github.com/YMFE/yapi.git vendors` 命令减少,大概 10+ M)
cp vendors/config_example.json ./config.json //复制完成后请修改相关配置
cd vendors
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配置的端口},初次运行会有个编译的过程,请
2、可视化页面配置
当前安装版本: 1.9.2
连接数据库成功!
开始下载平台文件压缩包...
http://registry.npm.taobao.org/yapi-vendor/download/yapi-vendor-1.9.2.tgz
部署文件完成,正在安装依赖库...
npm
.....
依赖库安装完成,正在初始化数据库mongodb...
> yapi-vendor@1.9.2 install-server /usr/local/nodejs/node-v12.14.1/bin/my-yapi/vendors > node server/install.js
log: mongodb load success...
初始化管理员账号成功,账号名:"admin@admin.com",密码:"ymfe.org"
部署成功,请切换到部署目录,输入: "node vendors/server/app.js" 指令启动服务器, 然后在浏览器打开 http://127.0.0.1:3000 访问
3、启动服务
# 可视化部署时 选择的部署位置:/opt/my-yapi
node /opt/my-yapi/vendors/server/app.js

常见问题

1、 【Windows】nodejs安装在非C盘(系统盘),提示operation not permitted

问题:安装插件的时候提示无法操作,没有权限

解决方案:

  • 方案一:使用管理员打开命令(Cmd页面)
  • 方案二:修改文件夹权限,右击【node_global】文件夹-【属性】-【安全】,修改user也有完全控制权限

报错信息:

npm ERR! code EPERM
npm ERR! syscall mkdir
npm ERR! path E:\developTool\nodejs\node_cache\_cacache
npm ERR! errno -4048
npm ERR! Error: EPERM: operation not permitted, mkdir 'E:\developTool\nodejs\node_cache\_cacache'
npm ERR!  [OperationalError: EPERM: operation not permitted, mkdir 'E:\developTool\nodejs\node_cache\_cacache'] {
npm ERR!   cause: [Error: EPERM: operation not permitted, mkdir 'E:\developTool\nodejs\node_cache\_cacache'] {
npm ERR!     errno: -4048,
npm ERR!     code: 'EPERM',
npm ERR!     syscall: 'mkdir',
npm ERR!     path: 'E:\\developTool\\nodejs\\node_cache\\_cacache'
npm ERR!   },
npm ERR!   isOperational: true,
npm ERR!   errno: -4048,
npm ERR!   code: 'EPERM',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: 'E:\\developTool\\nodejs\\node_cache\\_cacache'
npm ERR! }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It's possible that the file was already in use (by a text editor or antivirus),
npm ERR! or that you lack permissions to access it.
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.
2、【Linux】可视化部署时 访问错误的 hostname:‘yapi.demo.qunar.com’

问题:在YApi源码中,部署的时候会访问 ‘yapi.demo.qunar.com’ 去发送简单的部署信息,用户官网记录计数,但是这个网址已经废弃了,但是源码没有修改,所以有这样的问题

解决方案:修改yapi-cli源码,注释涉及的段落代码

  • 位置:nodejs/lib/node_modules/yapi-cli/src/commands

  • 文件:server.js

  • 代码:

    function init(config) {
      // ...
        
     // if(config.company){
     //   try{
     //     axios.post('http://yapi.demo.qunar.com/publicapi/statis', {company: config.company}).then(res=>{});
     //   }catch(e){}
     // }
        
      // ...
    }
    

报错信息:

node:internal/process/promises:246
          triggerUncaughtException(err, true /* fromPromise */);
          ^

<ref *1> Error: getaddrinfo ENOTFOUND yapi.demo.qunar.com
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:71:26) {
  errno: -3008,
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'yapi.demo.qunar.com',
  config: {
    adapter: [Function: httpAdapter],
    transformRequest: { '0': [Function: transformRequest] },
    transformResponse: { '0': [Function: transformResponse] },
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    validateStatus: [Function: validateStatus],
    headers: {
      Accept: 'application/json, text/plain, */*',
      'Content-Type': 'application/json;charset=utf-8',
      'User-Agent': 'axios/0.16.2',
      'Content-Length': 21
    },
    method: 'post',
    url: 'http://yapi.demo.qunar.com/publicapi/statis',
    data: '{"company":"qingyan"}'
  },

3、部署时提示Cannot find module xxx

问题:高于v14版本的 nodejs 可能存在模块依赖的问题

常见的有提示缺失: fs-extranodemailersha1mongooseextendjson5underscoreajvmockjseasy-json-schemajson-schema-fakermd5sha.jsjs-base64

解决方案:安装对应的模块,例如 fs-extra

  • npm install fs-extra
> yapi-vendor@1.6.0 install-server > node server/install.js
Error: node:internal/modules/cjs/loader:936 throw err; ^ Error: Cannot find module 'fs-extra' Require stack: - /opt/my-yapi/vendors/server/install.js at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15) at Function.Module._load (node:internal/modules/cjs/loader:778:27) at Module.require (node:internal/modules/cjs/loader:1005:19) at require (node:internal/modules/cjs/helpers:94:18) at Object.<anonymous> (/opt/my-yapi/vendors/server/install.js:1:12) at Module._compile (node:internal/modules/cjs/loader:1101:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12) { code: 'MODULE_NOT_FOUND', requireStack: [ '/opt/my-yapi/vendors/server/install.js' ] }

> yapi-vendor@1.9.2 install-server > node server/install.js
Error: node:internal/modules/cjs/loader:936 throw err; ^ Error: Cannot find module 'nodemailer' 

> yapi-vendor@1.9.2 install-server > node server/install.js
Error: node:internal/modules/cjs/loader:936 throw err; ^ Error: Cannot find module 'sha1'

> yapi-vendor@1.9.2 install-server > node server/install.js
Error: node:internal/modules/cjs/loader:936 throw err; ^ Error: Cannot find module 'sha1' 

> yapi-vendor@1.9.2 install-server > node server/install.js
Error: node:internal/modules/cjs/loader:936 throw err; ^ Error: Cannot find module 'mongoose' 

> yapi-vendor@1.9.2 install-server > node server/install.js
Error: node:internal/modules/cjs/loader:936 throw err; ^ Error: Cannot find module 'extend' 

> yapi-vendor@1.9.2 install-server > node server/install.js
Error: node:internal/modules/cjs/loader:936 throw err; ^ Error: Cannot find module 'json5'
4、部署时提示初始化管理员账号失败 duplicate key error collection

问题:多次尝试部署后,可能会出现该情况,原因是在之前的某次部署中,数据库中yapi.user表已经有对应的邮箱用户,对应的email索引中也有了该记录(只删除表中记录还会提示duplicate key的原因)。删除记录即可(或者不删除也行,忽略该问题,直接启动也是可以的),这个步骤主要是对数据mongodb进行初始化,新建主要的表、索引,并添加管理员账号,即使没有初始化好,在使用的过程中,yapi也会在用到的时候再自动创建。

🎶 小窍门:如果在其他地方部署好,打包yapi,修改数据库配置等可以直接到另一个有node,mongodb的服务器上解压运行 😄

解决方案:

  • 方案一:删除yapi.user表中对应的账号记录,重建索引
  • 方案二:直接删除yapi.user
  • 方案三:修改config.json,换个管理员邮箱
  • 方案四:不予理会,进入下一流程,启动服务
依赖库安装完成,正在初始化数据库mongodb...
> yapi-vendor@1.10.1 install-server /root/yapi/my-yapi/vendors > node server/install.js
log: mongodb load success...
Error: (node:5064) UnhandledPromiseRejectionWarning: Error: 初始化管理员账号 "admin@admin.com" 失败, E11000 duplicate key error collection: yapi.user index: email_1 dup key: { email: "603413965@qq.com" } at /root/yapi/my-yapi/vendors/server/install.js:146:17 at <anonymous> at process._tickCallback (internal/process/next_tick.js:189:7) (node:5064) 
5、yapi: command not found

问题:yapi安装后,使用yapi server显示命令没有找到,可能是因为安装时没有将yapi命令链接到/usr/local/bin

解决方案:到yapi安装的默认目录下找即可

  • 默认目录:/nodejs/bin
6、部署时提示mongodb:current Server Discovery and Monitoring engine is deprecated

问题: 当前服务器发现和监视引擎已弃用,将在将来的版本中删除。使用新的服务器发现和监视引擎,通过选项{useUnifiedTopology:true}指向MongoClient构造函数

解决方案:

  • 方案一:YApi部署版本提升到 v1.9.2 或更高

  • 方案二:修改连接配置useUnifiedTopology: true

    • 代码:
    mongoose.connect('mongodb://localhost/playStudent', { useUnifiedTopology: true, useNewUrlParser: true })
        .then(() => console.log('数据库连接成功!'))
        .catch(() => console.log('数据库连接失败!'));
    
current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
# 当前服务器发现和监视引擎已弃用,将在将来的版本中删除。使用新的服务器发现和监视引擎,通过选项{useUnifiedTopology:true}指向MongoClient构造函数

参考文档:

  1. 内网部署 (hellosean1025.github.io)
  2. 如何在 Linux 中使用 n 管理 Nodejs 版本 - Linux基础博客 (dbigr.com)
  3. RAP接口管理平台 (taobao.org)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值