本文开始,我们会出一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:

  1. 环境搭建(本文)
  2. 服务拆分
  3. 用户服务
  4. 产品服务
  5. 订单服务
  6. 支付服务
  7. RPC 服务 Auth 验证
  8. 服务监控
  9. 链路追踪
  10. 分布式事务

期望通过本系列带你在本机利用 Docker 环境利用 go-zero 快速开发一个商城系统,让你快速上手微服务。

完整示例代码:

1 环境要求

GolangEtcdRedisMysqlPrometheusGrafanaJaegerDTM
Docker
DockerWindowsmacOSDocker Desktop
Docker Compose
Dockerfile
go-zerogrpcgrpcprotocgorpc stubprotoc-gen-go
go-zerogoctl
protocprotoc-gen-gogoctlgolang
golangDockerfile
Dockerfile
服务基于的镜像
DTMyedf/dtm
Etcdbitnami/etcd
Mysqlmysql:5.7
Redisredis:5.0
Mysql Managephpmyadmin/phpmyadmin
Redis Manageerikdubbelboer/phpredisadmin
Prometheusbitnami/prometheus
Grafanagrafana/grafana
Jaegerjaegertracing/all-in-one:1.28
.env
docker-compose.yml

2.4 构建与运行

docker-compose
  • 容器构建中
WindowsShare itWindows

容器已启动运行

2.5 容器说明

容器名称暴露端口host地址说明
golang8000:8000
8001:8001
8002:8002
8003:8003
9000:9000
9001:9001
9002:9002
9003:9003
golang在生产环境中微服务一般都是集群部署,可能一个微服务一台服务器,也可能一个微服务一个容器。为了方便开发调试,我们将在 golang 容器中启动所有微服务,并为它们分配监听不同的端口号以示区分。
80:开头的端口号我们将用于 api 服务
90:开头的端口号我们将用于 rpc 服务
dtm36789:36789
36790:36790
dtmdtm 的 http 协议和 grpc 协议服务端口号,供客户端交互使用。
此项目中我们只在 Docker 内部容器之间访问使用,所以也可以不暴露端口号给宿主机
etcd2379:2379etcdEtcd http api 服务端口号,供客户端交互使用。
此项目中我们只在 Docker 内部容器之间访问使用,所以也可以不暴露端口号给宿主机
mysql3306:3306mysqlMysql 服务默认端口号,宿主机可通过 127.0.0.1:3306 进行数据库的连接
redis6379:6379redisRedis 服务默认端口号,宿主机可通过 127.0.0.1:6379 进行数据库的连接
prometheus3000:9090prometheusPrometheus web 服务端口号,可以在宿主机 127.0.0.1:3000 访问
grafana4000:3000grafanaGrafana web 服务端口号,可以在宿主机 127.0.0.1:4000 访问
jaeger5000:16686jaegerJaeger web 服务端口号,可以在宿主机 127.0.0.1:5000 访问

2.6 访问验证

Mysql
Redis
Prometheus


Grafana
Jaeger

项目地址

go-zero

微信交流群

关注『微服务实践』公众号并点击 交流群 获取社区群二维码。