Skip to content

iammm0/gozero-micro-starter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gozero-micro-starter

基于 go-zero 框架的微服务启动脚手架,开箱即用。

架构概览

Client ──HTTP──> User API (REST) ──gRPC──> User RPC (gRPC) ──> MySQL / Redis
                                                           └──> Kafka
                                  User MQ Consumer <──────────── Kafka

技术栈:

  • 框架: go-zero v1.9+
  • 数据库: MySQL 8.0 + GORM
  • 缓存: Redis 7
  • 服务发现: Etcd 3.5
  • 消息队列: Kafka
  • 监控: Prometheus + Grafana
  • CI/CD: GitHub Actions

项目结构

├── app/                          # 应用服务
│   └── user/                     # 用户服务
│       ├── api/                  # HTTP API 网关 (端口 8888)
│       ├── rpc/                  # gRPC 服务 (端口 8080)
│       └── mq/                   # Kafka 消费者
├── common/                       # 公共组件
│   ├── errorx/                   # 统一错误码
│   ├── response/                 # 统一响应格式
│   ├── middleware/                # HTTP 中间件 (CORS, 日志)
│   ├── interceptor/              # gRPC 拦截器
│   └── ctxdata/                  # JWT 上下文工具
├── model/                        # 数据模型 (GORM)
├── deploy/                       # 部署配置
│   ├── docker-compose.yml        # 本地基础设施
│   ├── mysql/                    # 数据库初始化脚本
│   ├── prometheus/               # Prometheus 配置
│   ├── grafana/                  # Grafana 数据源和仪表盘
│   └── Dockerfile                # 多阶段构建
├── .github/workflows/            # CI/CD
├── doc/swagger/                  # API 文档
└── Makefile                      # 构建脚本

快速开始

前置条件

  • Go 1.24+
  • Docker & Docker Compose
  • protoc (Protocol Buffers 编译器)
  • protoc-gen-go & protoc-gen-go-grpc

1. 启动基础设施

make docker-up

这将启动以下服务:

服务 端口 说明
MySQL 3306 数据库 (root/123456)
Redis 6379 缓存
Etcd 2379 服务发现
Kafka 9092 消息队列
Prometheus 9090 监控指标
Grafana 3000 监控面板 (admin/admin)

2. 启动服务

在不同的终端中分别启动:

# 终端 1: 启动 RPC 服务 (需要先启动)
make rpc

# 终端 2: 启动 API 服务
make api

# 终端 3: 启动 MQ 消费者
make mq

3. 测试 API

注册:

curl -X POST http://localhost:8888/api/v1/user/register \
  -H "Content-Type: application/json" \
  -d '{"username":"testuser","password":"123456","nickname":"Test","email":"test@example.com"}'

登录:

curl -X POST http://localhost:8888/api/v1/user/login \
  -H "Content-Type: application/json" \
  -d '{"username":"testuser","password":"123456"}'

获取用户信息 (需要 JWT Token):

curl http://localhost:8888/api/v1/user/info \
  -H "Authorization: Bearer <your-token>"

API 文档

Swagger 文档位于 doc/swagger/user.json,可以通过以下方式查看:

  • 导入到 Swagger Editor
  • 使用 VS Code 的 Swagger Viewer 插件
  • 重新生成: make gen-swagger

Makefile 命令

make help          # 查看所有可用命令

# 构建
make build         # 构建所有服务
make build-api     # 构建 API 服务
make build-rpc     # 构建 RPC 服务
make build-mq      # 构建 MQ 消费者

# 运行
make api           # 启动 API 服务
make rpc           # 启动 RPC 服务
make mq            # 启动 MQ 消费者

# 代码生成
make gen-rpc       # 从 proto 文件生成 gRPC 代码
make gen-swagger   # 生成 Swagger 文档

# Docker
make docker-up     # 启动基础设施
make docker-down   # 停止基础设施
make docker-clean  # 停止并清除所有数据

# 质量
make lint          # 运行 golangci-lint
make test          # 运行测试
make test-cover    # 生成覆盖率报告

配置说明

配置文件位于各服务的 etc/ 目录:

  • app/user/api/etc/user-api.yaml - API 服务配置
  • app/user/rpc/etc/user-rpc.yaml - RPC 服务配置
  • app/user/mq/etc/user-mq.yaml - MQ 消费者配置

重要: 生产环境部署前,请务必修改以下配置:

  • JWT Secret (Auth.AccessSecret / JwtAuth.AccessSecret)
  • MySQL 密码 (Mysql.DSN)
  • Redis 密码 (RedisConf.Password)

监控

  1. 访问 Grafana: http://localhost:3000 (admin/admin)
  2. 预配置的 Prometheus 数据源已自动加载
  3. 导入 deploy/grafana/dashboard.json 获取预制仪表盘

扩展指南

添加新服务

  1. app/ 下创建新的服务目录 (参考 app/user/ 结构)
  2. 定义 proto/api 文件
  3. 实现 config, svc, logic, handler/server
  4. 添加配置文件到 etc/
  5. 更新 Makefile 添加构建/运行目标

添加新接口

  1. 在 proto/api 文件中添加接口定义
  2. 重新生成代码 (make gen-rpc)
  3. 实现新的 logic 文件
  4. 更新 server/handler 注册新接口

License

MIT

About

基于 go-zero 框架的微服务启动脚手架,开箱即用。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors