本文开始,我们会出一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:
-
环境搭建(本文)
-
服务拆分
-
用户服务
-
产品服务
-
订单服务
-
支付服务
-
RPC 服务 Auth 验证
-
服务监控
-
链路追踪
-
分布式事务
期望通过本系列带你在本机利用 Docker 环境利用 go-zero 快速开发一个商城系统,让你快速上手微服务。
完整示例代码:GitHub - nivin-studio/go-zero-mall: go-zero实战:让微服务Go起来
1 环境要求
-
Golang
1.15+ -
Etcd
-
Redis
-
Mysql
-
Prometheus
-
Grafana
-
Jaeger
-
DTM
2 Docker
本地开发环境搭建
为了方便开发调试,我们使用 Docker
构建本地开发环境。Windows
和 macOS
系统可下载 Docker Desktop
安装使用,具体下载安装方法可自行搜索相关教程。
这里我们使用 Docker Compose
来编排管理我们的容器,创建如下目录:
gonivinck
├── dtm # DTM 分布式事务管理器
│ ├── config.yml # DTM 配置文件
│ └── Dockerfile
├── etcd # Etcd 服务注册发现
│ └── Dockerfile
├── golang # Golang 运行环境
│ └── Dockerfile
├── grafana # Grafana 可视化数据监控
│ └── Dockerfile
├── jaeger # Jaeger 链路追踪
│ └── Dockerfile
├── mysql # Mysql 服务
│ └── Dockerfile
├── mysql-manage # Mysql 可视化管理
│ └── Dockerfile
├── prometheus # Prometheus 服务监控
│ ├── Dockerfile
│ └── prometheus.yml # Prometheus 配置文件
├── redis # Redis 服务
│ └── Dockerfile
├── redis-manage # Redis 可视化管理
│ └── Dockerfile
├── .env # env 配置
└── docker-compose.yml
2.1 编写 Dockerfile
在 go-zero
的微服务中采用 grpc
进行服务间的通信,而 grpc
的编写就需要用到 protoc
和翻译成 go
语言 rpc stub
代码的插件 protoc-gen-go
。
为了提高开发效率,减少代码的出错率,缩短业务开发的工作量,go-zero
还提供了 goctl
代码生成工具。
因此,我们需要将 protoc
, protoc-gen-go
, goctl
, 给提前安装到 golang
的容器中,以便后续使用。
所以 golang
容器的 Dockerfile
代码如下:
FROM golang:1.17
LABEL maintainer="Ving <ving@nivin.cn>"
ENV GOPROXY https://goproxy.cn,direct
# 安装必要的软件包和依赖包
USER root
RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list && \
sed -i 's/security.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list && \
sed -i 's/security-cdn.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list && \
apt-get update && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
curl \
zip \
unzip \
git \
vim
# 安装 goctl
USER root
RUN GOPROXY=https://goproxy.cn/,direct go install github.com/tal-tech/go-zero/tools/goctl@cli
# 安装 protoc
USER root
RUN curl -L -o /tmp/protoc.zip https://github.com/protocolbuffers/