Docker构建YApi镜像, Docker安装YApi, Docker部署YApi丨且听阿里架构师细细讲解

╰+哭是因爲堅強的太久メ 2022-01-31 14:39 483阅读 0赞

目录

  • 概述

    • 基本环境
  • docker网络
  • 安装MongoDb
  • 构建YAPI镜像
  • 运行YAPI
  • Nginx反向代理
  • 挂域名

概述

YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。

YApi源码:https://github.com/YMFE/yapi

官方提供了很简单的安装工具,但由于我的安装环境在云端,想要使用docker安装,参考使用 alpine 版 docker 镜像快速部署 yapi, 修改了Dockerfile, 并完善了完整的生产可用的环境搭建过程。

Dockerfile: https://github.com/Ryan-Miao/docker-yapi

基本环境

  • Yapi镜像基于 node:11
  • 宿主机要安装docker
  • MongoDb的dockers版本为4

docker网络

我们将采用Docker专门为Yapi提供一个MongoDb,由于docker kill重启可能会改变ip,这将使得Yapi也必须重新部署,因此,我们需要一个固定ip的mongo。所以,必须提供自定义docker网络。

  1. docker network create --subnet=172.18.0.0/16 tools-net

安装MongoDb

Docker安装MongoDb涉及数据文件导出和备份,防止docker容器关闭后数据丢失。完整步骤参见:docker安装mongodb并备份.

简略步骤为:

安装

  1. docker run \
  2. --name mongod \
  3. -p 27017:27017 \
  4. -v /data/opt/mongodb/data/configdb:/data/configdb/ \
  5. -v /data/opt/mongodb/data/db/:/data/db/ \
  6. --net tools-net --ip 172.18.0.2 \
  7. -d mongo:4 --auth

设置admin root用户

  1. docker exec -it mongod mongo admin
  2. >db.createUser({ user: 'admin', pwd: 'admin123456', roles: [ { role: "root", db: "admin" } ] });

设置yapi用户

  1. db.auth("admin", "admin123456")
  2. db.createUser({
  3. user: 'yapi',
  4. pwd: 'yapi123456',
  5. roles: [
  6. { role: "dbAdmin", db: "yapi" },
  7. { role: "readWrite", db: "yapi" }
  8. ]
  9. });

构建YAPI镜像

我们将基于node:11的debian镜像,部署YApi. 首先要构建Yapi镜像。

下载源码:

  1. wget -O yapi.tgz http://registry.npm.taobao.org/yapi-vendor/download/yapi-vendor-$1.tgz

其中$1是版本,可以在github找到: https://github.com/YMFE/yapi/releases

新建Dockerfile

  1. FROM node:11 as builder
  2. RUN apt-get install -y git python make openssl tar gcc
  3. ADD yapi.tgz /home/
  4. RUN mkdir /api && mv /home/package /api/vendors
  5. RUN cd /api/vendors && \
  6. npm install --production --registry https://registry.npm.taobao.org
  7. FROM node:11
  8. MAINTAINER ryan.miao
  9. ENV TZ="Asia/Shanghai" HOME="/"
  10. WORKDIR ${HOME}
  11. COPY --from=builder /api/vendors /api/vendors
  12. COPY config.json /api/
  13. EXPOSE 3001
  14. COPY docker-entrypoint.sh /api/
  15. RUN chmod 755 /api/docker-entrypoint.sh
  16. ENTRYPOINT ["/api/docker-entrypoint.sh"]

其中,同目录下需要以下几个文件:

config.json

  1. {
  2. "port": "3001",
  3. "adminAccount": "ryan.miao@demo.com",
  4. "db": {
  5. "servername": "172.18.0.2",
  6. "DATABASE": "yapi",
  7. "port": "27017",
  8. "user": "yapi",
  9. "pass": "yapi123456",
  10. "authSource":"admin"
  11. },
  12. "mail": {
  13. "enable": false,
  14. "host": "smtp.163.com",
  15. "port": 465,
  16. "from": "***@163.com",
  17. "auth": {
  18. "user": "***@163.com",
  19. "pass": "*****"
  20. }
  21. },
  22. "ldapLogin": {
  23. "enable": true,
  24. "server": "ldap://192.168.5.3:389",
  25. "baseDn": "cn=admin,dc=demo,dc=com",
  26. "bindPassword": "admin",
  27. "searchDn": "dc=demo,dc=com",
  28. "searchStandard": "mail",
  29. "emailPostfix": "@demo.com",
  30. "emailKey": "mail",
  31. "usernameKey": "sn"
  32. }
  33. }

不需要ldap的可以去掉

docker-entrypoint.sh

  1. #!/bin/bash
  2. set -eo pipefail
  3. shopt -s nullglob
  4. if [ "$1" = '--initdb' ]; then
  5. node /api/vendors/server/install.js
  6. fi
  7. if [ "$1" = '--help' ]; then
  8. echo "Usage:"
  9. echo "初始化db并启动: docker run -d -p 3001:3001 --name yapi --net tools-net --ip 172.18.0.3 yapi --initdb"
  10. echo "初始化后的账号为config.json 配置的邮箱, 密码为ymfe.org"
  11. echo "直接启动: docker kill yapi && docker rm yapi && docker run -d -p 3001:3001 --name yapi --net tools-net --ip 172.18.0.3 yapi"
  12. exit 1;
  13. fi
  14. node /api/vendors/server/app.js
  15. exec "$@"

构建

  1. docker build -t yapi .

综合以上,同目录下文件:

  1. build.sh config.json docker-entrypoint.sh Dockerfile sources.list

编写build.sh

  1. function usage(){
  2. echo "usage: sh build.sh <version>"
  3. echo "yapi的版本: https://github.com/YMFE/yapi/releases"
  4. echo "我们将从这里下载: http://registry.npm.taobao.org/yapi-vendor/download/yapi-vendor-\$1.tgz"
  5. }
  6. usage
  7. version=1.5.7
  8. if [ -n "$1" ]; then
  9. version=$1
  10. fi
  11. echo -e "\033[32m download new package (version $version) \033[0m"
  12. wget -O yapi.tgz http://registry.npm.taobao.org/yapi-vendor/download/yapi-vendor-$version.tgz
  13. echo -e "\033[32m build new image \033[0m"
  14. docker build -t yapi .

执行构建:

  1. sh build.sh 1.5.7

运行YAPI

  1. docker run yapi --help
  2. Usage:
  3. 初始化db并启动: docker run -d -p 3001:3001 --name yapi --net tools-net --ip 172.18.0.3 yapi --initdb
  4. 初始化后的账号为config.json 配置的邮箱, 密码为ymfe.org
  5. 直接启动: docker kill yapi && docker rm yapi && docker run -d -p 3001:3001 --name yapi --net tools-net --ip 172.18.0.3 yapi

查看:

  1. # docker logs --tail 10 yapi
  2. log: mongodb load success...
  3. 初始化管理员账号成功,账号名:"ryan.miao@demo.com",密码:"ymfe.org"
  4. log: 服务已启动,请打开下面链接访问:
  5. http://127.0.0.1:3001/
  6. log: mongodb load success...

Nginx反向代理

YApi页面使用websocket, 所以,nginx配置需要支持ws:

  1. upstream yapi {
  2. server 192.168.5.9:80 weight=5;
  3. }
  4. server {
  5. listen 80;
  6. server_name yapi.demo.com;
  7. access_log /data/log/nginx/yapi/access.log main;
  8. location / {
  9. proxy_pass http://yapi;
  10. proxy_set_header Host $host;
  11. proxy_set_header X-Real-IP $remote_addr;
  12. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  13. proxy_set_header X-NginX-Proxy true;
  14. proxy_set_header Connection "upgrade";
  15. proxy_set_header Upgrade $http_upgrade;
  16. }
  17. }

读者福利

分享免费学习资料

针对于Java程序员,我这边准备免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

资料领取方式:加入Java技术交流群963944895,点击加入群聊,私信管理员即可免费领取

发表评论

表情:
评论列表 (有 0 条评论,483人围观)

还没有评论,来说两句吧...

相关阅读