分享个人 Full-Stack JavaScript 项目开发经验
YApi是一个有用户和项目管理功能的 mock 服务器平台。它支持与 swagger.json 自动同步,高级 mock 定义等功能,在前端开发中发挥着重要作用。但官方并没有提供镜像化部署的说明,本文将介绍如何在 kubernetes 下部署 YApi 服务。
YApi 以 mongodb 作为数据持久化存储的方式, 所以首先要部署 mongodb。
: v1: Namespace:: mock-server
添加镜像拉取 secret:
kubectl create secret docker-registry aliyun-docker-registry \--docker-server=registry.cn-shenzhen.aliyuncs.com \--docker-username=xxx \--docker-password=xxx \-n mock-server
: PersistentVolumeClaim: v1:: mongo-nfs-pvc: mock-server:::: 2Gi:- ReadWriteMany: nfs-dynamic
上述使用的是名为 nfs-dynamic 的存储类。
: v1: Service:: mongo: mock-server:: NodePort:- : 27017: 27017: 27017:: mongo---# https://docs.mongodb.com/manual/tutorial/backup-and-restore-tools/# 备份# mongodump --host=localhost --port=27017 --username=xxx --authenticationDatabase=admin --db=yapi --out=/data/backup/mongodump-2020-11-13# 恢复# mongorestore --host=localhost --port=27017 --username=xxx --authenticationDatabase=admin /data/backup/mongodump-2020-11-13: apps/v1: Deployment:: mongo: mock-server:: 1: 30: 2:: RollingUpdate:: 1: 0: 120::: mongo::: mongo:: mongo::- : aliyun-docker-registry:- : mongo-data:: mongo-nfs-pvc:- : registry.cn-shenzhen.aliyuncs.com/leeguangxing/mongo:4.0.20: IfNotPresent: mongo:- : 27017:- : MONGO_INITDB_ROOT_USERNAME: xxx- : MONGO_INITDB_ROOT_PASSWORD: xxx:- : mongo-data: /data/db: db: false- : mongo-data: /data/configdb: configdb: false- : mongo-data: /data/backup: backup: false# 设置 WiredTiger 缓存大小限制: ["--wiredTigerCacheSizeGB", "0.5"]
要了解 mongodb 详细的备份和恢复,请查阅官方说明文档。
yapi github 地址为https://github.com/YMFE/yapi。对项目稍作调整:
(1)在跟目录添加 Dockerfile 和 ecosystem.config.js。
Dockerfile
FROM node:12-slimLABEL Description="This image is using PM2 as a layer between the container and node.js application."COPY . /yapiWORKDIR /yapiRUN ["yarn", "global", "add", "pm2"]RUN ["yarn", "install"]EXPOSE 3100CMD ["pm2-runtime", "start", "ecosystem.config.js"]
ecosystem.config.js
module.exports = {apps: [{name: 'web',script: 'server/app.js',instances: 2,autorestart: true,watch: false,max_memory_restart: '300M',exec_mode: 'cluster',listen_timeout: 3000, // wait ready timeoutkill_timeout: 5000, // send SIGKILL timeout}]};
(2)在根目录下创建 config 文件夹,并将根目录下的 config_example.json 复制到 config 文件夹下,命名为 config.json。
(3)修改 server/yapi.js 对 config.json 的引用路径。
(4)构建镜像。
添加配置 ConfigMap:
: v1: ConfigMap:: yapi-config: mock-server:: |+{"port": "3000","adminAccount": "admin@admin.com","timeout":120000,"db": {"servername": "127.0.0.1","DATABASE": "yapi","port": 27017,"user": "test1","pass": "test1","authSource": ""},"mail": {"enable": true,"host": "smtp.163.com","port": 465,"from": "***@163.com","auth": {"user": "***@163.com","pass": "*****"}}}
部署 yapi 及其服务:
: v1: Service:: yapi: mock-server:: NodePort:- : 3100: 3100: 3100:: yapi---: apps/v1: Deployment:: yapi: mock-server:: 1: 30: 2:: RollingUpdate:: 1: 0: 120::: yapi::: yapi:: yapi::- : aliyun-docker-registry:- : config:: yapi-config:- : registry.cn-shenzhen.aliyuncs.com/leeguangxing/yapi:1.9.2: IfNotPresent: yapi:- : 3100:- : config: /yapi/config
yarn install-server
必要时,可以重启 YApi:
pm2 restart ecosystem.config.js