Yapi自動化接口測試平臺 Docker構建和升級

一、簡單的方式構建shell腳本

在這裏插入圖片描述
附錄的yapi_help.sh,config.json,Dockerfile以及構建或升級用的yapi.tar.gz。放到同一目錄下即可。

根據yapi_help指引進行構建或升級操作

注意:yapi源碼的壓縮包文件名必須是yapi.tar.gz。解壓後的文件夾名字必須是yapi。

二、手動構建

  1. 安裝mongodb,並且設置數據庫數據文件映射
    docker run -p 27017:27017 -v /data/db:/data/db --name mongo-yapi -d mongo
    -p 27017:27017 :將容器的27017 端口映射到主機的27017 端口
    -v $PWD/db:/data/db :將主機中當前目錄下的db掛載到容器的/data/db,作爲mongo數據存儲目錄
  2. Dockerfile文件內容
    見附錄
  3. config.json文件內容
    見附錄
  4. 準備好 yapi.tar.gz
    如果是官方github下載下來的yapi.tar.gz壓縮包。
    tar zxvf yapi.tar.gz 解壓
    mv yapi-1.8.5/ yapi 改變文件夾名稱爲yapi
    tar zcvf yapi.tar.gz yapi 重新壓縮
    將Dockerfile、config.json、yapi.tar.gz放置在同一目錄下,並cd到當前目錄,執行接下來的命令。
  5. 構建docker img
    docker build -t yapi -f Dockerfile .
  6. 構建完成之後執行 docker images 顯示如下
[root@localhost yapi1.8.0]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
yapi                latest              070a31990cfa        34 seconds ago      175MB
<none>              <none>              166fcc9bacd6        40 seconds ago      360MB
...

第二個none的鏡像可以刪除。
docker rmi 166fcc9bacd6 <— 這個id改成你生成的non鏡像的id
7.運行
docker run --name yapi --link mongo-yapi:mongo --entrypoint npm --workdir /api/vendors -it yapi run install-server
輸出以下結果

> [email protected] install-server /api/vendors
>  node server/install.js
log: mongodb load success...
初始化管理員賬號成功,賬號名:"[email protected]",密碼:”ymfe.org”
  1. 刪除剛剛用於初始化yapi數據庫的容器
    docker rm -it yapi
  2. 創建真正用於運行yapi的容器
    docker run -d --name yapi --link mongo-yapi:mongo --workdir /api/vendors -p 3000:3000 -it yapi server/app.js
  3. 瀏覽器訪問
    IP:3000
  4. 登陸站點管理員賬號
    賬號:[email protected]
    密碼:ymfe.org
  5. 個人中心可以修改站點管理員密碼

常見問題

1.注意:站點管理員賬號,無法在系統中修改。但是可以直接修改數據庫用戶表中對應記錄即可。

三、附錄

1.yapi_help.sh

#!/bin/bash
# 構建yapi docker 鏡像
function build_img(){
     local version=$1
     if [ -z $version ];then
         echo ">>>>> 默認版本號:latest"
         version='latest'
     else
         echo ">>>>> 生成鏡像版本號爲"$version
     fi
     sudo docker build -t yapi -f Dockerfile .
     sudo docker tag yapi yapi:$version
     echo ">>>>> 構建完成!生成鏡像版本號爲 : "$version
}
# 初始化mongo環境
function init_mongo(){
     local db_data_path=$1
     if [ -z $db_data_path ];then
         db_data_path='/data/db'
     fi
     echo ">>>>> 嘗試kill當前已經存在的命名爲mongo-yapi的容器"
     sudo docker kill mongo-yapi
     echo ">>>>> 嘗試rm當前已經存在的命名爲mongo-yapi的容器"
     sudo docker rm mongo-yapi
     echo ">>>>> 正在創建新的命名爲mongo-yapi的mongo容器"
     sudo docker run -p 27017:27017 -v $db_data_path:/data/db --name mongo-yapi -d mongo
     echo ">>>>> 初始化mongo容器完成!mongo容器命名爲mongo-yapi, 數據文件映射路徑爲 : "$db_data_path
}
# 初始化yapi
function init_yapi(){
     local version=$1
     if [ -z $version ];then
         version='latest'
     fi
     sudo docker kill yapi
     echo ">>>>> 正在初始化yapi數據庫"
     sudo docker rm yapi
     sudo docker run --name yapi --link mongo-yapi:mongo --entrypoint npm --workdir /api/vendors -it yapi:$version run install-server
     echo ">>>>> 刪除用於初始化的無用的yapi容器"    
     sudo docker rm yapi
     echo ">>>>> 正在啓動yapi"
     sudo docker run -d --name yapi --link mongo-yapi:mongo --workdir /api/vendors -p 3000:3000 -it yapi:$version server/app.js
     echo ">>>>> 初始化yapi完成!"
}
# 創建yapi容器
function run_yapi(){
     local version=$1
     if [ -z $version ];then
         version='latest'
     fi
     sudo docker kill yapi
     echo ">>>>> 刪除已經存在的yapi容器"
     sudo docker rm yapi
     echo ">>>>> 正在啓動yapi"
     sudo docker run -d --name yapi --link mongo-yapi:mongo --workdir /api/vendors -p 3000:3000 -it yapi:$version server/app.js
     echo ">>>>> yapi容器創建&啓動完成!"
}
function start(){
     local app=$1
     if [ $app == "mongo" ];then
         app="mongo-yapi"
     fi
     sudo docker start $app
     echo ">>>>> "$1"啓動完成"
}
function stop(){
        local app=$1
        if [ $app == "mongo" ];then
                app="mongo-yapi"
        fi
     sudo docker stop $app
        echo ">>>>> "$1"停止完成"
}
function logs_yapi(){
     sudo  docker logs --tail 10 yapi
}
function print_usage(){
     echo ""
     echo "Usage: bash yapi-help.sh <action> [param]..."
     echo "  action 可選值     "
     echo "    build: 構建yapi docker鏡像. 可選參數:構建的版本號(如果不填寫,默認latest)"
     echo "    init-mongo: 初始化mango容器.重新創建mongo容器,並且創建數據文件映射.可選參數: 數據文件映射路徑(如果不填寫,默認映射到 /data/db)"
     echo "    init-yapi: 初始化yapi的db(必須mongo在正常運行的狀態).可選參數:用於初始化的yapi版本號(如果不填寫,默認latest)"
     echo "    run-yapi: 創建&啓動yapi容器.可選參數:yapi鏡像的版本號(如果不填寫,默認latest)"
     echo "    start: 啓動 yapi|mongo 容器.可選參數:yapi或mongo"
     echo "    stop: 停止 yapi|mongo 容器.可選參數:yapi或mongo"
     echo "    logs-yapi: 查看yapi容器的日誌"
     echo ""
     echo "> 第一次搭建時:"
     echo "    build -> init-mongo -> init-yapi"
     echo "> 升級yapi時"
     echo "  build -> run-yapi"
     echo ""
}
case $1 in
     build)
         build_img $2
         ;;
     init-mongo)
         init_mongo $2
         ;;
     init-yapi)
         init_yapi $2
         ;;
     run-yapi)
         run_yapi $2
         ;;
     start)
         start $2
         ;;
     stop)
         stop $2
         ;;
     logs-yapi)
         logs_yapi
         ;;
     *)
         print_usage
         ;;
esac

2.Dockerfile

FROM node:12-alpine AS builder
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --no-cache git python make openssl tar gcc
COPY yapi.tar.gz /home
RUN cd /home && tar zxvf yapi.tar.gz && mkdir /api && mv /home/yapi /api/vendors
RUN cd /api/vendors && \
    npm install --production --registry https://registry.npm.taobao.org
FROM node:12-alpine
MAINTAINER hotice0
ENV TZ="Asia/Shanghai" HOME="/"
WORKDIR ${HOME}
COPY --from=builder /api/vendors /api/vendors
COPY config.json /api/
EXPOSE 3000
ENTRYPOINT ["node"]

3.config.json

{
     "port": "3000",
     "adminAccount": "[email protected]",
     "db": {
         "servername": "mongo",
         "DATABASE": "yapi",
         "port": 27017
     },
     "mail": {
         "enable": false,
         "host": "smtp.163.com",
         "port": 465,
         "from": "***@163.com",
         "auth": {
             "user": "***@163.com",
             "pass": "*****"
         }
     }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章