最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go-zero服務(wù)部署配置及源碼解讀

 更新時(shí)間:2023年08月10日 11:22:14   作者:TTSimple  
這篇文章主要為大家介紹了go-zero服務(wù)部署配置及源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

服務(wù)部署

生產(chǎn)環(huán)境搭建

docker & k8s搭建

詳細(xì)請(qǐng)看我的下一篇文章

http://www.fzitv.net/jiaoben/294839eda.htm

git私有倉庫 & 容器私有倉庫 & CI、DI

詳細(xì)請(qǐng)看我的下一篇文章

配置文件編寫 & 生成

dockerfile

我們先用網(wǎng)關(guān)部分代碼來演示

  • 執(zhí)行代碼
./cmd.sh gen dockerfile gateway
  • 生成文件 code/service/gateway/api/Dockerfile
### 加載基礎(chǔ)鏡像
FROM golang:alpine AS builder
LABEL stage=gobuilder
ENV CGO_ENABLED 0
ENV GOOS linux
### 設(shè)置 go module 代理
ENV GOPROXY https://goproxy.cn,direct
WORKDIR /build/zero
### 下載依賴文件
ADD go.mod .
ADD go.sum .
RUN go mod download
COPY . .
COPY service/gateway/api/etc /app/etc
### 編譯源代碼
RUN go build -ldflags="-s -w" -o /app/gateway service/gateway/api/gateway.go
### 生成docker鏡像
FROM alpine
RUN apk update --no-cache && apk add --no-cache ca-certificates tzdata
ENV TZ Asia/Shanghai
WORKDIR /app
COPY --from=builder /app/gateway /app/gateway
COPY --from=builder /app/etc /app/etc
CMD ["./gateway", "-f", "etc/gateway.prod.yaml"]

從生成的Dockerfile可以看到主要有兩個(gè)部分

  • 加載golang基礎(chǔ)鏡像,將代碼編譯為二進(jìn)制文件
  • 加載運(yùn)行環(huán)境基礎(chǔ)鏡像并生成gateway運(yùn)行環(huán)境的docker鏡像

為啥分為兩個(gè)部分呢,我們不能直接把編譯代碼和打包鏡像放一起嗎,這當(dāng)然是可以的,但是這樣會(huì)導(dǎo)致docker鏡像包會(huì)很大,而把編譯和打包分開后可以大大減少docker鏡像包的大小,方便我們快速分發(fā)和部署。

編譯代碼&鏡像打包

?  go-zero-mall git:(master) ? ./cmd.sh docker build gateway
-------- docker build gateway  --------
time: 2022-05-02 00:19:58 msg: ------------ docker build gateway ------------
Untagged: gateway:latest
Deleted: sha256:0eedc326b97f06a3c5d19665309369c4c163e430b6c3d17de8ba9a1ebaf37ca8
[+] Building 31.9s (19/19) FINISHED                                                  
 => [internal] load build definition from Dockerfile                            0.0s
 => => transferring dockerfile: 733B                                            0.0s
 => [internal] load .dockerignore                                               0.0s
 => => transferring context: 2B                                                 0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                3.7s
 => [internal] load metadata for docker.io/library/golang:alpine                3.4s
 => [builder 1/8] FROM docker.io/library/golang:alpine@sha256:42d35674864fbb57  0.0s
 => [internal] load build context                                               1.2s
 => => transferring context: 35.78MB                                            1.1s
 => [stage-1 1/5] FROM docker.io/library/alpine@sha256:4edbd2beb5f78b1014028f4  0.0s
 => CACHED [builder 2/8] WORKDIR /build/zero                                    0.0s
 => CACHED [builder 3/8] ADD go.mod .                                           0.0s
 => CACHED [builder 4/8] ADD go.sum .                                           0.0s
 => CACHED [builder 5/8] RUN go mod download                                    0.0s
 => [builder 6/8] COPY . .                                                      0.6s
 => [builder 7/8] COPY service/gateway/api/etc /app/etc                         0.0s
 => [builder 8/8] RUN go build -ldflags="-s -w" -o /app/gateway service/gatew  26.1s
 => CACHED [stage-1 2/5] RUN apk update --no-cache && apk add --no-cache ca-ce  0.0s
 => CACHED [stage-1 3/5] WORKDIR /app                                           0.0s
 => CACHED [stage-1 4/5] COPY --from=builder /app/gateway /app/gateway          0.0s
 => CACHED [stage-1 5/5] COPY --from=builder /app/etc /app/etc                  0.0s
 => exporting to image                                                          0.0s
 => => exporting layers                                                         0.0s
 => => writing image sha256:0eedc326b97f06a3c5d19665309369c4c163e430b6c3d17de8  0.0s
 => => naming to docker.io/library/gateway:latest                               0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

docker images查看docker鏡像信息

?  go-zero-mall git:(master) ? docker images
REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
gateway                     latest    0eedc326b97f   7 days ago      41.6MB

自動(dòng)部署文件編寫deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: go-zero-mall-gateway
  name: go-zero-mall-gateway
  namespace: zero   #一定要寫名稱空間
spec:
  progressDeadlineSeconds: 600
  replicas: 3
  selector:
    matchLabels:
      app: go-zero-mall-gateway
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 50%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: go-zero-mall-gateway
    spec:
      imagePullSecrets:
        - name: aliyun-docker-hub  #提前在項(xiàng)目下配置訪問阿里云的賬號(hào)密碼
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 100
              podAffinityTerm:
                labelSelector:
                  matchLabels:
                    app: go-zero-mall-gateway
                topologyKey: kubernetes.io/hostname
      containers:
        - image: $REGISTRY/$ALIYUNHUB_NAMESPACE/gateway:latest
          imagePullPolicy: Always
          name: app
          ports:
            - containerPort: 8000
              protocol: TCP
          resources:
            limits:
              cpu: 200m
              memory: 60Mi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: go-zero-mall-gateway
  name: go-zero-mall-gateway
  namespace: zero
spec:
  ports:
    - name: http
      port: 8000
      protocol: TCP
      targetPort: 8000
  selector:
    app: go-zero-mall-gateway
  sessionAffinity: None
  type: ClusterIP

通過自動(dòng)部署文件我們可以指定一些關(guān)鍵指標(biāo)

  • 服務(wù)名稱
  • pod數(shù)量
  • 自動(dòng)擴(kuò)容閥值
  • 服務(wù)權(quán)重
  • 容器端口
  • cpu&memory最大使用量

通過這些指標(biāo)我們的服務(wù)基本可以穩(wěn)定運(yùn)行啦

Jenkins文件編寫Jenkinsfile

pipeline {
  agent {
    node {
      label 'go'
    }
  }
  stages {
    stage('clone code') {
      agent none
      steps {
        git(url: 'https://gitee.com/go-open-project/go-zero-mall.git', changelog: true, poll: false)
        sh 'ls -al'
      }
    }
    stage('deploy user') {
      // agent none
      steps {
        container ('go') {
          withCredentials([
            kubeconfigFile(
              credentialsId: env.KUBECONFIG_CREDENTIAL_ID,
              variable: 'KUBECONFIG'
            )]) 
            {
              sh 'envsubst < code/service/user/rpc/deploy.yaml | kubectl apply -f -'
            }
        }
      }
    }
    stage('deploy product') {
      // agent none
      steps {
        container ('go') {
          withCredentials([
            kubeconfigFile(
              credentialsId: env.KUBECONFIG_CREDENTIAL_ID,
              variable: 'KUBECONFIG'
            )]) 
            {
              sh 'envsubst < code/service/product/rpc/deploy.yaml | kubectl apply -f -'
            }
        }
      }
    }
    stage('deploy order') {
      // agent none
      steps {
        container ('go') {
          withCredentials([
            kubeconfigFile(
              credentialsId: env.KUBECONFIG_CREDENTIAL_ID,
              variable: 'KUBECONFIG'
            )]) 
            {
              sh 'envsubst < code/service/order/rpc/deploy.yaml | kubectl apply -f -'
            }
        }
      }
    }
    stage('deploy gateway') {
      // agent none
      steps {
        container ('go') {
          withCredentials([
            kubeconfigFile(
              credentialsId: env.KUBECONFIG_CREDENTIAL_ID,
              variable: 'KUBECONFIG'
            )]) 
            {
              sh 'envsubst < code/service/gateway/api/deploy.yaml | kubectl apply -f -'
            }
        }
      }
    }
  }
  environment {
    DOCKER_CREDENTIAL_ID = 'dockerhub-id'
    GITHUB_CREDENTIAL_ID = 'github-id'
    KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
    REGISTRY = 'registry.cn-shanghai.aliyuncs.com'
    DOCKERHUB_NAMESPACE = 'ttsimple'
    ALIYUNHUB_NAMESPACE = 'ttsimple'
    GITHUB_ACCOUNT = 'kubesphere'
    APP_NAME = 'go-zero-mall-gateway'
  }
  parameters {
    string(name: 'TAG_NAME', defaultValue: '', description: '')
  }
}

我們?cè)?DevOps 中設(shè)置好環(huán)境變量、倉庫地址、webhook 后便可在我們推送代碼后自動(dòng)部署我們的項(xiàng)目

說明:我們的容器是在開發(fā)環(huán)境打包的,我們當(dāng)然也可以通過 Jenkins 來自動(dòng)打包鏡像

  • 自動(dòng)部署狀態(tài)

  • 服務(wù)運(yùn)行狀態(tài)

  • 調(diào)用線上用戶登錄接口

總結(jié)

  • 通過 go-zero 可以方便生成dockerfile
  • 在 deploy.yaml 中指定服務(wù)部署指標(biāo)
  • 在 Jenkinsfile 中指定服務(wù)從哪里來,分別需要部署哪些服務(wù),等等。
  • 私有部署

    • 鏡像服務(wù)可以使用Harbor搭建,
    • 鏡像制品可以使用云服務(wù)或Jenkins來打包生成,
    • 私有倉庫可以使用云服務(wù),gitee,開源倉庫服務(wù)來搭建

以上就是go-zero服務(wù)部署配置及源碼解讀的詳細(xì)內(nèi)容,更多關(guān)于go-zero服務(wù)部署配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • go語言同步教程之條件變量

    go語言同步教程之條件變量

    這篇文章主要給大家介紹了關(guān)于go語言同步教程之條件變量的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • golang修改結(jié)構(gòu)體中的切片值方法

    golang修改結(jié)構(gòu)體中的切片值方法

    這篇文章主要介紹了golang修改結(jié)構(gòu)體中的切片值方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Go語言正則表達(dá)式示例

    Go語言正則表達(dá)式示例

    這篇文章主要介紹了Go語言正則表達(dá)式,結(jié)合實(shí)例形式分析了Go語言正則表達(dá)式實(shí)現(xiàn)字符串的匹配、查找等相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • 使用Go調(diào)用第三方API的方法詳解

    使用Go調(diào)用第三方API的方法詳解

    在現(xiàn)代應(yīng)用開發(fā)中,調(diào)用第三方API是非常常見的場(chǎng)景,比如獲取天氣預(yù)報(bào)、翻譯文本、發(fā)送短信等,Go作為一門高效并發(fā)的編程語言,擁有強(qiáng)大的標(biāo)準(zhǔn)庫和豐富的第三方庫,可以非常方便地與外部API進(jìn)行交互,本文將通過兩個(gè)實(shí)戰(zhàn)案例,帶你掌握如何在Go中調(diào)用第三方 API
    2025-09-09
  • Goland?Gin?框架中的表單處理與數(shù)據(jù)綁定的操作方法

    Goland?Gin?框架中的表單處理與數(shù)據(jù)綁定的操作方法

    本文詳細(xì)介紹了Gin框架中表單處理的功能,包括數(shù)據(jù)綁定、驗(yàn)證和文件上傳等,并通過一個(gè)完整的用戶注冊(cè)項(xiàng)目示例展示了實(shí)際應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Go并發(fā)與鎖的兩種方式該如何提效詳解

    Go并發(fā)與鎖的兩種方式該如何提效詳解

    如果沒有鎖,在我們的項(xiàng)目中,可能會(huì)存在多個(gè)goroutine同時(shí)操作一個(gè)資源(臨界區(qū)),這種情況會(huì)發(fā)生競(jìng)態(tài)問題(數(shù)據(jù)競(jìng)態(tài)),下面這篇文章主要給大家介紹了關(guān)于Go并發(fā)與鎖的兩種方式該如何提效的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Go語言實(shí)現(xiàn)自動(dòng)填寫古詩詞實(shí)例代碼

    Go語言實(shí)現(xiàn)自動(dòng)填寫古詩詞實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Go語言實(shí)現(xiàn)自動(dòng)填寫古詩詞的相關(guān)資料,這是最近在項(xiàng)目中遇到的一個(gè)需求,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Go|使用Options模式和建造者模式創(chuàng)建對(duì)象實(shí)戰(zhàn)

    Go|使用Options模式和建造者模式創(chuàng)建對(duì)象實(shí)戰(zhàn)

    這篇文章主要介紹了Go使用Options模式和建造者模式創(chuàng)建對(duì)象實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • golang 跳出多重循環(huán)的高級(jí)break用法說明

    golang 跳出多重循環(huán)的高級(jí)break用法說明

    這篇文章主要介紹了golang 跳出多重循環(huán)的高級(jí)break用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言題解LeetCode724尋找數(shù)組的中心下標(biāo)

    Go語言題解LeetCode724尋找數(shù)組的中心下標(biāo)

    這篇文章主要為大家介紹了Go語言題解LeetCode724尋找數(shù)組的中心下標(biāo),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論

镇坪县| 曲麻莱县| 瑞安市| 云梦县| 金塔县| 德兴市| 耒阳市| 长葛市| 从化市| 正安县| 神农架林区| 丰都县| 宜兰县| 万载县| 平顶山市| 罗江县| 荔波县| 时尚| 平泉县| 富锦市| 辽中县| 庄浪县| 靖安县| 四子王旗| 博客| 城固县| 文成县| 顺义区| 油尖旺区| 石渠县| 昌乐县| 新沂市| 陇南市| 浦江县| 陇川县| 鹤峰县| 青铜峡市| 荣昌县| 铜川市| 神农架林区| 盘山县|