- 概述
- 基本環境
- docker網絡
- 安裝MongoDb
- 構建YAPI鏡像
- 運行YAPI
- Nginx反向代理
- 掛域名
YApi 是高效、易用、功能強大的 api 管理平臺,旨在爲開發、產品、測試人員提供更優雅的接口管理服務。能夠幫助開發者輕鬆建立、發佈、維護 API,YApi 還爲用戶提供了優秀的交互體驗,開發人員只需利用平臺提供的接口數據寫入工具以及簡單的點擊操做就能夠實現接口的管理。node
YApi源碼:github.com/YMFE/yapipython
官方提供了很簡單的安裝工具,但因爲個人安裝環境在雲端,想要使用docker安裝,參考使用 alpine 版 docker 鏡像快速部署 yapi, 修改了Dockerfile, 並完善了完整的生產可用的環境搭建過程。nginx
Dockerfile: github.com/Ryan-Miao/d…git
咱們將採用Docker專門爲Yapi提供一個MongoDb,因爲docker kill重啓可能會改變ip,這將使得Yapi也必須從新部署,所以,咱們須要一個固定ip的mongo。因此,必須提供自定義docker網絡。github
docker network create --subnet=172.18.0.0/16 tools-net
複製代碼
Docker安裝MongoDb涉及數據文件導出和備份,防止docker容器關閉後數據丟失。完整步驟參見:docker安裝mongodb並備份.web
簡略步驟爲:sql
安裝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" }
]
});
複製代碼
咱們將基於node:11的debian鏡像,部署YApi. 首先要構建Yapi鏡像。
下載源碼:
wget -O yapi.tgz http://registry.npm.taobao.org/yapi-vendor/download/yapi-vendor-$1.tgz
複製代碼
其中$1是版本,能夠在github找到: github.com/YMFE/yapi/r…
新建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
複製代碼
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...
複製代碼
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便可。
最後,歡迎作Java的工程師朋友們加入Java高級架構進階Qqun:963944895
羣內有技術大咖指點難題,還提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)
比你優秀的對手在學習,你的仇人在磨刀,你的閨蜜在減肥,隔壁老王在練腰, 咱們必須不斷學習,不然咱們將被學習者超越!
趁年輕,使勁拼,給將來的本身一個交代!