概述
YApi 是高效、易用、功能強大的 api 管理平臺,旨在爲開發、產品、測試人員提供更優雅的接口管理服務。能夠幫助開發者輕鬆建立、發佈、維護 API,YApi 還爲用戶提供了優秀的交互體驗,開發人員只需利用平臺提供的接口數據寫入工具以及簡單的點擊操做就能夠實現接口的管理。html
YApi源碼:https://github.com/YMFE/yapinode
官方提供了很簡單的安裝工具,但因爲個人安裝環境在雲端,想要使用docker安裝,參考使用 alpine 版 docker 鏡像快速部署 yapi, 修改了Dockerfile, 並完善了完整的生產可用的環境搭建過程。python
Dockerfile: https://github.com/Ryan-Miao/docker-yapinginx
基本環境
- Yapi鏡像基於
node:11
- 宿主機要安裝docker
- MongoDb的dockers版本爲4
docker網絡
咱們將採用Docker專門爲Yapi提供一個MongoDb,因爲docker kill重啓可能會改變ip,這將使得Yapi也必須從新部署,所以,咱們須要一個固定ip的mongo。因此,必須提供自定義docker網絡。git
docker network create --subnet=172.18.0.0/16 tools-net
安裝MongoDb
Docker安裝MongoDb涉及數據文件導出和備份,防止docker容器關閉後數據丟失。完整步驟參見:docker安裝mongodb並備份.github
簡略步驟爲:web
安裝mongodb
docker run \ --name mongod \ -p 27017:27017 \ -v /data/opt/mongodb/data/configdb:/data/configdb/ \ -v /data/opt/mongodb/data/db/:/data/db/ \ --net tools-net --ip 172.18.0.2 \ -d mongo:4 --auth
設置admin root用戶docker
docker exec -it mongod mongo admin >db.createUser({ user: 'admin', pwd: 'admin123456', roles: [ { role: "root", db: "admin" } ] });
設置yapi用戶npm
db.auth("admin", "admin123456") db.createUser({ user: 'yapi', pwd: 'yapi123456', roles: [ { role: "dbAdmin", db: "yapi" }, { role: "readWrite", db: "yapi" } ] });
構建YAPI鏡像
咱們將基於node:11的debian鏡像,部署YApi. 首先要構建Yapi鏡像。
下載源碼:
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
FROM node:11 as builder RUN apt-get install -y git python make openssl tar gcc ADD yapi.tgz /home/ RUN mkdir /api && mv /home/package /api/vendors RUN cd /api/vendors && \ npm install --production --registry https://registry.npm.taobao.org FROM node:11 MAINTAINER ryan.miao ENV TZ="Asia/Shanghai" HOME="/" WORKDIR ${HOME} COPY --from=builder /api/vendors /api/vendors COPY config.json /api/ EXPOSE 3001 COPY docker-entrypoint.sh /api/ RUN chmod 755 /api/docker-entrypoint.sh ENTRYPOINT ["/api/docker-entrypoint.sh"]
其中,同目錄下須要如下幾個文件:
config.json
{ "port": "3001", "adminAccount": "ryan.miao@demo.com", "db": { "servername": "172.18.0.2", "DATABASE": "yapi", "port": "27017", "user": "yapi", "pass": "yapi123456", "authSource":"admin" }, "mail": { "enable": false, "host": "smtp.163.com", "port": 465, "from": "***@163.com", "auth": { "user": "***@163.com", "pass": "*****" } }, "ldapLogin": { "enable": true, "server": "ldap://192.168.5.3:389", "baseDn": "cn=admin,dc=demo,dc=com", "bindPassword": "admin", "searchDn": "dc=demo,dc=com", "searchStandard": "mail", "emailPostfix": "@demo.com", "emailKey": "mail", "usernameKey": "sn" } }
不須要ldap的能夠去掉。
docker-entrypoint.sh
#!/bin/bash set -eo pipefail shopt -s nullglob if [ "$1" = '--initdb' ]; then node /api/vendors/server/install.js fi if [ "$1" = '--help' ]; then echo "Usage:" echo "初始化db並啓動: docker run -d -p 3001:3001 --name yapi --net tools-net --ip 172.18.0.3 yapi --initdb" echo "初始化後的帳號爲config.json 配置的郵箱, 密碼爲ymfe.org" echo "直接啓動: docker kill yapi && docker rm yapi && docker run -d -p 3001:3001 --name yapi --net tools-net --ip 172.18.0.3 yapi" exit 1; fi node /api/vendors/server/app.js exec "$@"
構建
docker build -t yapi .
綜合以上,同目錄下文件:
build.sh config.json docker-entrypoint.sh Dockerfile sources.list
編寫build.sh
function usage(){ echo "usage: sh build.sh <version>" echo "yapi的版本: https://github.com/YMFE/yapi/releases" echo "咱們將從這裏下載: http://registry.npm.taobao.org/yapi-vendor/download/yapi-vendor-\$1.tgz" } usage version=1.5.7 if [ -n "$1" ]; then version=$1 fi echo -e "\033[32m download new package (version $version) \033[0m" wget -O yapi.tgz http://registry.npm.taobao.org/yapi-vendor/download/yapi-vendor-$version.tgz echo -e "\033[32m build new image \033[0m" docker build -t yapi .
執行構建:
sh build.sh 1.5.7
運行YAPI
docker run yapi --help Usage: 初始化db並啓動: docker run -d -p 3001:3001 --name yapi --net tools-net --ip 172.18.0.3 yapi --initdb 初始化後的帳號爲config.json 配置的郵箱, 密碼爲ymfe.org 直接啓動: docker kill yapi && docker rm yapi && docker run -d -p 3001:3001 --name yapi --net tools-net --ip 172.18.0.3 yapi
查看:
# docker logs --tail 10 yapi log: mongodb load success... 初始化管理員帳號成功,帳號名:"ryan.miao@demo.com",密碼:"ymfe.org" log: 服務已啓動,請打開下面連接訪問: http://127.0.0.1:3001/ log: mongodb load success...
Nginx反向代理
YApi頁面使用websocket, 因此,nginx配置須要支持ws:
upstream yapi { server 192.168.5.9:80 weight=5; } server { listen 80; server_name yapi.demo.com; access_log /data/log/nginx/yapi/access.log main; location / { proxy_pass http://yapi; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_set_header Connection "upgrade"; proxy_set_header Upgrade $http_upgrade; } }
掛域名
購買域名,指向咱們的nginx便可。
原文出處:https://www.cnblogs.com/woshimrf/p/docker-install-yapi.html