YApi 是高效、易用、功能強大的 api 管理平台,旨在為開發、産品、測試人員提供更優雅的接口管理服務…此處省略,具體介紹請自行查閱官方介紹
1.Dockerfile的編寫
FROM nodejs10.16.0 as builder
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk update && apk upgrade && apk add --no-cache git python make openssl tar gcc wget curl
RUN rm -rf /var/cache/apk/*
ADD v1.5.6.tar.gz /tmp
RUN mkdir /yapi
WORKDIR /yapi/vendors
COPY entrypoint.sh /usr/bin
ENTRYPOINT ["/usr/bin/entrypoint.sh"]
這裡示範用的是v1.5.6的版本,大家可以下載下傳自己想部署的版本并做相應修改即可
2.entrypoint.sh代碼如下
#!/bin/sh
# yapi初始化後會有一個init.lock檔案
lockPath="/yapi/vendors/init.lock"
# 如果初始化檔案檔案存在,則直接運作,否則初始化
cd /yapi/vendors
if [ ! -f "$lockPath" ]; then
cp -rf /tmp/yapi-1.5.6/* /yapi/vendors
npm install --production --registry https://registry.npm.taobao.org
# 啟動Yapi初始化
npm run install-server
cp -rf /yapi/init.lock /yapi/vendors/init.lock
node server/app.js
else
# 運作yapi管理系統
node server/app.js
fi
大家可以看下注釋,因為在初始化後會自動在/yapi目錄下生成一個init.lock檔案,我這裡将這個檔案往vendors目錄下拷貝了一份,腳本中判斷vendors目錄下是否有該檔案,如果沒有,則認為是初次安裝,則執行初始化安裝指令,如果存在,則直接啟動項目。
注意修改啟動腳本中的版本号為你自己下載下傳的版本
3.因為yapi項目在初始化的依賴配置檔案,配置檔案内容如下
{
"port": "3000",
"adminAccount": "[email protected]",
"db": {
"connectString": "mongodb://mongodb-rs0-0.mongodb-rs0-svc.mongodb:27017,mongodb-rs0-1.mongodb-rs0-svc.mongodb:27017,mongodb-rs0-2.mongodb-rs0-svc.mongodb:27017/yapi?replicaSet=rs0&slaveOk=true",
"user": "yapi",
"pass": "123456"
},
"ldapLogin": {
"enable": true,
"server": "ldap://172.16.1.29",
"baseDn": "CN=yapi,OU=ServiceAccount,OU=IT部,DC=test,DC=com",
"bindPassword": "yapi123456",
"searchDn": "OU=IT部,DC=test,DC=com",
"searchStandard": "&(objectClass=user)(sAMAccountName=%s)",
"usernameKey": "displayName",
"emailKey": "mail"
},
"closeRegister":true
}
4.yapi在初始化時自行安裝的node依賴需要持久儲存,是以需要建立pv,并在容易中挂載
yapi-pvc.yaml如下
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: yapi-datadir
namespace: omc
annotations:
volume.beta.kubernetes.io/storage-class: "nfs-storage"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
kubectl create -f yapi-pvc.yaml
5. 部署檔案如下
yapi.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yapi
namespace: omc
labels:
app: yapi
release: yapi
spec:
revisionHistoryLimit: 10
selector:
matchLabels:
app: yapi
release: yapi
template:
metadata:
labels:
app: yapi
release: yapi
spec:
containers:
- name: yapi
image: registry.cn-beijing.aliyuncs.com/niu-idc/yapi:v1.5.6
imagePullPolicy: Always
ports:
- containerPort: 3000
name: yapi
protocol: TCP
volumeMounts:
- name: config
mountPath: /yapi/config.json
subPath: config.json
- name: datadir
mountPath: /yapi/vendors
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 1000m
memory: 1024Mi
volumes:
- name: config
configMap:
name: yapi-config
- name: datadir
persistentVolumeClaim:
claimName: yapi-datadir
imagePullSecrets:
- name: registry-aliyun
在該部署檔案中,有兩個volume,一個是配置檔案,一個是持久存儲
6.yapi-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: yapi-svc
namespace: omc
spec:
ports:
- name: yapi
port: 80
targetPort: 3000
protocol: TCP
selector:
app: yapi
release: yapi
7.yapi-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: yapi-ingress
namespace: omc
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: yapi-idc.niucache.com
http:
paths:
- path: /
backend:
serviceName: yapi-svc
servicePort: 80
執行如下指令完成部署:
1.打包鏡像
docker build -t registry.cn-beijing.aliyuncs.com/niu-idc/yapi:v1.5.6 -t Dockerfile .
2.configmap yapi-config建立
kubectl create cm yapi-config -n omc --from-file=config.json
3.持久卷聲明yapi-datadir建立
kubectl create -f yapi-pvc.yaml
4.yapi部署
kubectl create -f yapi.yaml
5.service建立
kubectl create -f yapi-svc.yaml
6.ingress建立
kubectl create -f yapi-ingress.yaml
稍等幾分鐘,當yapi初始化安裝以後就可以通路到了。