【golang】gin框架集成相关组件及docker部署-一些要点记录

gin项目架构

│  .gitignore
│  docker-compose.yml
│  Dockerfile
│  go.mod
│  go.sum
│  main.go
│  main_test.go
│  README.md
│  swagger.yaml
│  userInfoService
│
├─conf
│      db.toml
│
├─docs
│      auth.go
│      doc.go
│
├─logs
│      error.log.20220816
│      error.log.20220818
│      error.log.20220819
│      error.log.20220822
│      error.log.20220825
│      log.20220816
│      log.20220818
│      log.20220819
│      log.20220822
│      log.20220825
│
├─middlewares
│      jwt.go
│
├─models
│      jwt_auth.go
│      models.go
│
├─pkg
│  ├─e
│  │      code.go
│  │      message.go
│  │
│  ├─logging
│  │      logging.go
│  │
│  ├─setting
│  │      setting.go
│  │
│  └─util
│          jwt.go
│
└─routers
    │  routers.go
    │
    └─api
            auth.go

包含的组件:
gorm
zap日志
Jwt
单元测试
swagger文档生成
docker部署

针对user表,实现增删查改,使用gorm,jwt,实现单元测试,实现swagger文档自动生成,上传git仓库,最后用docker从git仓库拉取代码,并部署服务,把一套开发脚手架搭建起来,跑通整个开发流程

代码地址:
https://github.com/keyunq/docker-gin-start-kit
仅供参考

工作区模式

在项目的上级目录
执行 go work init userInfoService
生成go.work文件,vscode就不会报错
工作区又新建一个项目feishuAPIService,需要加入go.work文件,go work use feishuAPIService 或者直接编辑go.work文件。

go 1.19

use (
    ./feishuAPIService
    ./userInfoService
)

Vscode 单元测试 run test 某个函数,打开打印信息,设置settings.json文件 “go.testFlags”:[“-v”],

Rocky Linux server 防火墙开放端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent #开放8080端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent  #关闭5672端口
firewall-cmd --reload   # 配置立即生效
#查看所有开放端口
firewall-cmd --zone=public --list-ports

先根据dockerfile生成镜像,设置时区:

FROM golang:1.19 AS builder
 
ENV GO111MODULE=on \
        CGO_ENABLED=0 \
        GOOS=linux \
        GOARCH=amd64
ENV GOPROXY=https://goproxy.cn
 
WORKDIR /userInfoService
COPY go.mod ./
COPY go.sum ./
COPY routers/ ./routers/
COPY conf/ ./conf/
COPY docs/ ./docs/
COPY middlewares/ ./middlewares/
COPY models/ ./models/
COPY pkg/ ./pkg/
RUN go mod download
COPY main.go ./
RUN go build -o userInfoService ./main.go
 
FROM scratch
COPY --from=builder /userInfoService/userInfoService /
COPY --from=builder /userInfoService/conf/ /conf/
ENV TZ=Asia/Shanghai
RUN echo "http://mirrors.aliyun.com/alpine/v3.4/main/" > /etc/apk/repositories \
    && apk --no-cache add tzdata zeromq \
    && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo '$TZ' > /etc/timezone
ENTRYPOINT ["./userInfoService"]

再编写docker-compose.yml文件,编排容器

version: '3'
services:
  user_info_service:
    container_name: "user_info_service"
    build:
      context: ./                 #指定dockerfile所在目录
      dockerfile: Dockerfile      #指定dockerfile文件名
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - /usr/local/src/userInfoService/logs:/logs

使用docker-compose,则只需一条命令,docker-compose up -d --build

停止服务,拉取最新代码,重新部署,非优雅重启,后续需要再想优化办法

docker-compose stop && docker-compose rm -f && git pull && docker-compose up -d --build

清理docker占用空间,清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)

docker system prune

Swagger 生成yaml文件

swagger generate spec -o swagger.yaml

Swagger 启动服务

swagger serve --no-open -F=swagger --port 36666 swagger.yaml

你可能感兴趣的:(go,docker,golang,gin)