基于 Go 的微服务架构后端模版。主服务使用 Gin 向外提供 API,各服务间通过 gRPC 进行通信。预置 Mysql 与 Redis 用作数据存储。
- Docker
- golang-migrate(数据库迁移)
- sqlc(sql->go 接口)
- Protocol Buffers(gRPC 数据定义)
- Evans(gRPC 调试工具)
- gRPC
- Protocol Buffers(gRPC 数据定义)
- Asynq(任务队列异步处理框架)
- golang-migrate(数据库迁移)
- Testify(测试框架)
- Viper(配置项管理)
- Paseto(用户鉴权)
- Zerolog(日志输出)
- 修改 go.mod 中 module 名(全局替换)
- 向 .gitignore 文件中添加 app.env 与 compose.yaml
- 安装 CLI 工具
- 安装 Go 依赖
go mod tidy
-
Mysql
- 执行
migrate_init
生成 schema - 使用 dbdiagram 工具设计数据库,将 sql 语句复制到上一步的 schema 中
- 执行
make mysql DB_PASSWORD=? DB_NAME=?
,启动 mysql 容器
- 执行
-
Redis
- 执行
make redis
,启动 mysql 容器
- 执行
- 在 internal/db/query/ 下创建 表名.sql 文件,根据官网编写 sql 语句
- 执行
make sqlc
生成.go 文件
- 修改 internal/proto 目录下的文件名以及文件内容
- 执行
make proto
- 执行
make server
,编译运行
- 修改根目录下 compose.yaml 与 makefile 相关信息
- 应用容器化
- 方法一:在服务器端拉取代码,执行
make build_images
,打包镜像 - 方法二:本地执行
make build_push_multi
,打包多平台镜像并推至 hub
- 方法一:在服务器端拉取代码,执行
注意!!!:Swarm 模式下数据不支持通过 Volume 挂载到 Host 进行持久化存储,此处待改进
-
docker swarm init
创建集群 -
docker stack deploy -c compose.yaml ???
(??? 为项目名)部署 stack -
docker service ls
查看 service 列表 -
docker service logs SERVICE
查看某个 service 的日志 -
docker stack rm ???
结束 stack -
docker swarm leave
离开集群
docker compose up -d
后台运行docker compose logs
查看日志docker compose down
结束运行并删除容器