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-extra
、 nodemailer
、 sha1
、 mongoose
、 extend
、 json5
、 underscore
、 ajv
、mockjs
、 easy-json-schema
、 json-schema-faker
、md5
、 sha.js
、js-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构造函数