│ .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”],
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