一、簡單的方式構建shell腳本
將附錄的yapi_help.sh,config.json,Dockerfile以及構建或升級用的yapi.tar.gz。放到同一目錄下即可。
根據yapi_help指引進行構建或升級操作
注意:yapi源碼的壓縮包文件名必須是yapi.tar.gz。解壓後的文件夾名字必須是yapi。
二、手動構建
- 安裝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數據存儲目錄 - Dockerfile文件內容
見附錄 - config.json文件內容
見附錄 - 準備好 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到當前目錄,執行接下來的命令。 - 構建docker img
docker build -t yapi -f Dockerfile .
- 構建完成之後執行 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”
- 刪除剛剛用於初始化yapi數據庫的容器
docker rm -it yapi
- 創建真正用於運行yapi的容器
docker run -d --name yapi --link mongo-yapi:mongo --workdir /api/vendors -p 3000:3000 -it yapi server/app.js
- 瀏覽器訪問
IP:3000 - 登陸站點管理員賬號
賬號:[email protected]
密碼:ymfe.org - 個人中心可以修改站點管理員密碼
常見問題
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": "*****"
}
}
}