k3s部署yapi v2

介紹

yapi是api 文檔管理系統(tǒng)殴泰,基于nodejs和mongodb。官方?jīng)]有提供標(biāo)準(zhǔn)的docker鏡像都是自己搞的浮驳。我也來搞一個(gè)

制作yapi docker鏡像

yapi容器使用非root權(quán)限悍汛,使用默認(rèn)node賬號(hào),使用node:11-alpine作為基礎(chǔ)鏡像至会,使用多階段構(gòu)建

編寫entrypoint,sh

因?yàn)閏onfig.json這個(gè)配置离咐,通過環(huán)境變量來配置比較方便,所以我們寫一個(gè)entrypoint.sh文件奉件,主要使用sed方法宵蛀,用環(huán)境變量來替換json字段。具體如下县貌,另外再加一個(gè)啟動(dòng)yapi的語句术陶。

#!/bin/sh
#update config file with env var
if [ $YAPI_SERVER_PORT ]; then
    sed -i 2c\"port\":\"$YAPI_SERVER_PORT\", ../config.json
fi
if [ $YAPI_ADMINACCOUNT ]; then
    sed -i 3c\"adminAccount\":\"$YAPI_ADMINACCOUNT\", ../config.json
fi
if [ $YAPI_TIMEOUT ]; then
    sed -i 4c\"timeout\":\"$YAPI_TIMEOUT\", ../config.json
fi
if [ $YAPI_DB_SERVERNAME ]; then
    sed -i 6c\"servername\":\"$YAPI_DB_SERVERNAME\", ../config.json
fi
if [ $YAPI_DB_DATABASE ]; then
    sed -i 7c\"DATABASE\":\"$YAPI_DB_DATABASE\", ../config.json
fi
if [ $YAPI_DB_PORT ]; then
    sed -i 8c\"port\":\"$YAPI_DB_PORT\", ../config.json
fi
if [ $YAPI_DB_USER ]; then
    sed -i 9c\"user\":\"$YAPI_DB_USER\", ../config.json
fi
if [ $YAPI_DB_PASS ]; then
    sed -i 10c\"pass\":\"$YAPI_DB_PASS\", ../config.json
fi
if [ $YAPI_DB_AUTHSOURCE ]; then
    sed -i 11c\"authSource\":\"$YAPI_DB_AUTHSOURCE\" ../config.json
fi
if [ $YAPI_MAIL_ENABLE ]; then
    sed -i 13c\"mail\":\"$YAPI_MAIL_ENABLE\", ../config.json
fi
if [ $YAPI_MAIL_HOST ]; then
    sed -i 14c\"enable\":\"$YAPI_MAIL_HOST\", ../config.json
fi
if [ $YAPI_MAIL_PORT ]; then
    sed -i 15c\"host\":\"$YAPI_MAIL_PORT\", ../config.json
fi
if [ $YAPI_MAIL_FROM ]; then
    sed -i 16c\"port\":\"$YAPI_MAIL_FROM\", ../config.json
fi
if [ $YAPI_MAIL_AUTH ]; then
    sed -i 17c\"from\":\"$YAPI_MAIL_AUTH\", ../config.json
fi
if [ $YAPI_MAIL_USER ]; then
    sed -i 18c\"auth\":\"$YAPI_MAIL_USER\", ../config.json
fi
if [ $YAPI_MAIL_PASS ]; then
    sed -i 19c\"user\":\"$YAPI_MAIL_PASS\" ../config.json
fi
#start yapi
node server/app.js

編寫yapi的dockerfile

基礎(chǔ)鏡像是node:11-alpine,因?yàn)檫@個(gè)鏡像沒有nodejs編譯需要的python make,所以需要加進(jìn)來煤痕。
把entrypoint.sh從本人github下載下來梧宫,加入到鏡像中,修改node可以運(yùn)行的權(quán)限

FROM node:11-alpine as builder
WORKDIR /home/node
RUN wget https://github.com/YMFE/yapi/archive/refs/tags/v1.9.2.tar.gz
RUN tar -zxvf v1.9.2.tar.gz
RUN mv yapi-1.9.2 vendors
WORKDIR /home/node/vendors
RUN apk add python make
RUN npm install --production
RUN wget https://raw.githubusercontent.com/xie-shujian/k3s/main/yapi/entrypoint.sh
RUN chmod a+x entrypoint.sh

FROM node:11-alpine
LABEL maintainer="xiesj@live.com"
USER node
ENV TZ="Asia/Shanghai"
WORKDIR /home/node/vendors
COPY --from=builder /home/node/vendors /home/node/vendors
RUN cp config_example.json ../config.json
EXPOSE 3000
ENTRYPOINT ["sh", "entrypoint.sh"]

這里使用了多重鏡像摆碉,使用 copy --from 命令塘匣,第一個(gè)鏡像作為builder鏡像,把第一個(gè)鏡像的builder結(jié)果巷帝,復(fù)制到第二個(gè)鏡像里

制作成鏡像

docker build -t xieshujian/yapi:1.9.2 .

鏡像大小大概是164m忌卤,還是很小的

為了安全我們使用非root賬號(hào),為了安全我們不新建賬號(hào)楞泼,直接使用node賬號(hào)

k8s部署yaml文件

  • 創(chuàng)建secret
  • 創(chuàng)建部署
    編寫環(huán)境變量驰徊,包含mongodb的連接信息
    編寫探針
  • 創(chuàng)建service
    service端口是80,容器端口是3000
---

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: yapi-secret
stringData:
  YAPI_DB_PASS: yapipassword

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: yapi
  labels:
    app: yapi
spec:
  replicas: 1
  selector:
    matchLabels:
      app: yapi
  template:
    metadata:
      labels:
        app: yapi
    spec:
      containers:
      - name: yapi
        image: xieshujian/yapi:1.9.2
        env:
        - name: YAPI_DB_SERVERNAME
          value: mongodb
        - name: YAPI_DB_DATABASE
          value: yapidb
        - name: YAPI_DB_USER
          value: yapiuser
        - name: YAPI_DB_PASS
          valueFrom:
            secretKeyRef:
              name: yapi-secret
              key: YAPI_DB_PASS
        - name: YAPI_DB_AUTHSOURCE
          value: yapidb
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3000
        livenessProbe:
          httpGet:
            path: /
            port: 3000
          initialDelaySeconds: 5
          periodSeconds: 5

---
apiVersion: v1
kind: Service
metadata:
  name: yapi
spec:
  selector:
    app: yapi
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000

config.json

{
  "port": "3000",
  "adminAccount": "admin@admin.com",
  "timeout":120000,
  "db": {
    "servername": "mongodb",
    "DATABASE": "yapidb",
    "port": 27017,
    "user": "yapiuser",
    "pass": "yapipassword",
    "authSource": "yapidb"
  },
  "mail": {
    "enable": false,
    "host": "smtp.163.com",
    "port": 465,
    "from": "***@163.com",
    "auth": {
      "user": "***@163.com",
      "pass": "*****"
    }
  }
}

我們會(huì)用mongodb堕阔,servername就是service name就叫mongodb

探針辣垒,這里使用http探針,5秒跑一次

建立service叫yapi

創(chuàng)建命名空間

kubectl create ns yapi

安裝mongodb

把mongodb chart下載解壓印蔬,找到values.yaml,打開勋桶,修改里面的rootPassword的值改為taihu123
另外把useStatefulSet設(shè)置成true,我們使用statefull
執(zhí)行下面命令安裝mongodb
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install mongodb bitnami/mongodb -n yapi -f values.yaml
安裝完畢之后進(jìn)入容器侥猬,執(zhí)行下面命令例驹,新建普通賬號(hào),和數(shù)據(jù)庫

mongo -u root -p taihu123
use yapidb
db.createUser({user: "yapiuser",pwd: "yapipassword",roles: [ { role: "dbOwner", db: "yapidb" } ]} )

安裝yapi

kubectl apply -f yapi.yaml -n yapi
安裝完畢之后退唠,進(jìn)入其中一個(gè)pod
執(zhí)行下面命令
npm run install-server
初始化數(shù)據(jù)庫
接下來就可以登錄yapi了鹃锈,賬號(hào)是admin@admin.com,密碼是ymfe.org

k3s界面

image.png
image.png
image.png

image.png

image.png

yapi界面

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瞧预,隨后出現(xiàn)的幾起案子屎债,更是在濱河造成了極大的恐慌仅政,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盆驹,死亡現(xiàn)場離奇詭異圆丹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)躯喇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門辫封,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人廉丽,你說我怎么就攤上這事倦微。” “怎么了正压?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵欣福,是天一觀的道長。 經(jīng)常有香客問我焦履,道長劣欢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任裁良,我火速辦了婚禮凿将,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘价脾。我一直安慰自己牧抵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布侨把。 她就那樣靜靜地躺著犀变,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秋柄。 梳的紋絲不亂的頭發(fā)上获枝,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音骇笔,去河邊找鬼省店。 笑死,一個(gè)胖子當(dāng)著我的面吹牛笨触,可吹牛的內(nèi)容都是我干的懦傍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼芦劣,長吁一口氣:“原來是場噩夢啊……” “哼粗俱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虚吟,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤寸认,失蹤者是張志新(化名)和其女友劉穎签财,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偏塞,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唱蒸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烛愧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片油宜。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掂碱,死狀恐怖怜姿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疼燥,我是刑警寧澤沧卢,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站醉者,受9級(jí)特大地震影響但狭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撬即,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一立磁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剥槐,春花似錦唱歧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蕊苗,卻和暖如春沿后,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朽砰。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工尖滚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞧柔。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓熔掺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親非剃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子置逻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容