k3s 部署 yapi

YMFE/yapi: YApi 是一個可本地部署的、打通前后端及QA的营搅、可視化的接口管理平臺 (github.com)
YApi 接口管理平臺 (hellosean1025.github.io)
頂尖 API 文檔管理工具 (YAPI) - 簡書 (jianshu.com)

介紹

安全方面

yapi容器使用非root權限
mongodb使用非root賬號

首先我們創(chuàng)建一個dockerfile

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 --registry https://registry.npm.taobao.org

FROM node:11-alpine
LABEL maintainer="xiesj@live.com"
WORKDIR /home/node/vendors
COPY --from=builder /home/node/vendors /home/node/vendors
USER node
ENV TZ="Asia/Shanghai"
EXPOSE 3000
CMD ["node","server/app.js"]

我們使用node11-alpine俐镐,需要額外安裝python和make
這里使用了多重鏡像,使用 copy --from 命令哺哼,第一個鏡像作為builder鏡像佩抹,把第一個鏡像的builder結果,復制到第二個鏡像里

制作成鏡像

docker build -t xieshujian/yapi:1.9.2 .

鏡像大小大概是164m取董,還是很小的

為了安全我們使用非root賬號棍苹,為了安全我們不新建賬號,直接使用node賬號

k8s部署yaml文件

---

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: yapi-secret
data:
  config.json: |
    ewogICJwb3J0IjogIjMwMDAiLAogICJhZG1pbkFjY291bnQiOiAiYWRtaW5AYWRtaW4uY29tIiwK
    ICAidGltZW91dCI6MTIwMDAwLAogICJkYiI6IHsKICAgICJzZXJ2ZXJuYW1lIjogIm1vbmdvZGIi
    LAogICAgIkRBVEFCQVNFIjogIm1vbmdvZGIiLAogICAgInBvcnQiOiAyNzAxNywKICAgICJ1c2Vy
    IjogInJvb3QiLAogICAgInBhc3MiOiAidGFpaHUxMjMiLAogICAgImF1dGhTb3VyY2UiOiAiYWRt
    aW4iCiAgfSwKICAibWFpbCI6IHsKICAgICJlbmFibGUiOiBmYWxzZSwKICAgICJob3N0IjogInNt
    dHAuMTYzLmNvbSIsCiAgICAicG9ydCI6IDQ2NSwKICAgICJmcm9tIjogIioqKkAxNjMuY29tIiwK
    ICAgICJhdXRoIjogewogICAgICAidXNlciI6ICIqKipAMTYzLmNvbSIsCiAgICAgICJwYXNzIjog
    IioqKioqIgogICAgfQogIH0KfQo=



---


apiVersion: apps/v1
kind: Deployment
metadata:
  name: yapi
  labels:
    app: yapi
spec:
  replicas: 2
  selector:
    matchLabels:
      app: yapi
  template:
    metadata:
      labels:
        app: yapi
    spec:
      containers:
      - name: yapi
        image: xieshujian/yapi:1.9.2
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3000
        livenessProbe:
          httpGet:
            path: /
            port: 3000
          initialDelaySeconds: 5
          periodSeconds: 5
        volumeMounts:
        - name: config
          mountPath: "/home/node/config.json"
          subPath: "config.json"
      volumes:
      - name: config
        secret:
          secretName: yapi-secret
          items:
          - key: config.json
            path: config.json



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

我們把config.json這個文件制作成k8s secret文件茵汰,這里是用了base64,原始文件如下

{
  "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": "*****"
    }
  }
}

我們會用mongodb枢里,servername就是service name就叫mongodb
這里采用文件掛載,使用subPath蹂午,注意path要寫到config.json,因為/yapi是非空目錄栏豺,不是掛載整個目錄,是掛載單個文件豆胸,坑1

探針奥洼,這里使用http探針,5秒跑一次

建立service叫yapi

創(chuàng)建命名空間

kubectl create ns yapi

安裝mongodb

把mongodb chart下載解壓晚胡,找到values.yaml,打開灵奖,修改里面的rootPassword的值改為taihu123
另外把useStatefulSet設置成true嚼沿,我們使用statefull
執(zhí)行下面命令安裝mongodb
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install mongodb bitnami/mongodb -n yapi -f values.yaml
安裝完畢之后進入容器,執(zhí)行下面命令瓷患,新建普通賬號骡尽,和數(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 yapi.yaml -n yapi
安裝完畢之后,進入其中一個pod
執(zhí)行下面命令
npm run install-server
初始化數(shù)據(jù)庫
接下來就可以登錄yapi了擅编,賬號是admin@admin.com,密碼是ymfe.org

k3s界面

image.png
image.png
image.png

image.png

image.png

yapi界面

image.png

方案已被更新攀细,請查看v2版本

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沙咏,隨后出現(xiàn)的幾起案子辨图,更是在濱河造成了極大的恐慌,老刑警劉巖肢藐,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件故河,死亡現(xiàn)場離奇詭異,居然都是意外死亡吆豹,警方通過查閱死者的電腦和手機鱼的,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痘煤,“玉大人凑阶,你說我怎么就攤上這事≈钥欤” “怎么了宙橱?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蘸拔。 經(jīng)常有香客問我师郑,道長,這世上最難降的妖魔是什么调窍? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任宝冕,我火速辦了婚禮,結果婚禮上邓萨,老公的妹妹穿的比我還像新娘地梨。我一直安慰自己,他們只是感情好缔恳,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布宝剖。 她就那樣靜靜地躺著,像睡著了一般歉甚。 火紅的嫁衣襯著肌膚如雪诈闺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天铃芦,我揣著相機與錄音雅镊,去河邊找鬼襟雷。 笑死书斜,一個胖子當著我的面吹牛浓利,可吹牛的內容都是我干的猴贰。 我是一名探鬼主播凫岖,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼梭纹,長吁一口氣:“原來是場噩夢啊……” “哼蛛株!你這毒婦竟也來了周霉?” 一聲冷哼從身側響起雨席,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤征唬,失蹤者是張志新(化名)和其女友劉穎捌显,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體总寒,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡扶歪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了摄闸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片善镰。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖年枕,靈堂內的尸體忽然破棺而出炫欺,到底是詐尸還是另有隱情,我是刑警寧澤熏兄,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布品洛,位于F島的核電站,受9級特大地震影響摩桶,放射性物質發(fā)生泄漏桥状。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一典格、第九天 我趴在偏房一處隱蔽的房頂上張望岛宦。 院中可真熱鬧台丛,春花似錦耍缴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至侠坎,卻和暖如春蚁趁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背实胸。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工他嫡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留番官,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓钢属,卻偏偏與公主長得像徘熔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子淆党,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內容