本文开始,我们会出一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:
期望通过本系列带你在本机利用 Docker 环境利用 go-zero 快速开发一个商城系统,让你快速上手微服务。
完整示例代码:https://github.com/nivin-studio/go-zero-mall
本地开发环境搭建为了方便开发调试,我们使用 Docker
构建本地开发环境。Windows
和 macOS
系统可下载 Docker Desktop
安装使用,具体下载安装方法可自行搜索相关教程。
这里我们使用 Docker Compose
来编排管理我们的容器,创建如下目录:
gonivinck
├── dtm 的微服务中采用 grpc
进行服务间的通信,而 grpc
的编写就需要用到 protoc
和翻译成 go
语言 rpc stub
代码的插件 protoc-gen-go
。为了提高开发效率,减少代码的出错率,缩短业务开发的工作量,go-zero
还提供了 goctl
代码生成工具。
因此,我们需要将 protoc
, protoc-gen-go
, goctl
, 给提前安装到 golang
的容器中,以便后续使用。
所以 golang
容器的 Dockerfile
代码如下:
无需特殊处理,只要基于现有的镜像即可。服务 | 基于的镜像 |
---|
DTM | yedf/dtm |
Etcd | bitnami/etcd |
Mysql | mysql:5.7 |
Redis | redis:5.0 |
Mysql Manage | phpmyadmin/phpmyadmin |
Redis Manage | erikdubbelboer/phpredisadmin |
Prometheus | bitnami/prometheus |
Grafana | grafana/grafana |
Jaeger | jaegertracing/all-in-one:1.28 |
配置文件配置文件命令来构建和启动运行我们的服务容器,在根目录执行如下命令:
容器中启动所有微服务,并为它们分配监听不同的端口号以示区分。
80:开头的端口号我们将用于 api
服务
90:开头的端口号我们将用于 rpc
服务dtm | 36789:36789 36790:36790 | dtm | dtm 的 http 协议和 grpc 协议服务端口号,供客户端交互使用。 此项目中我们只在 Docker 内部容器之间访问使用,所以也可以不暴露端口号给宿主机 |
etcd | 2379:2379 | etcd | Etcd http api 服务端口号,供客户端交互使用。 此项目中我们只在 Docker 内部容器之间访问使用,所以也可以不暴露端口号给宿主机 |
mysql | 3306:3306 | mysql | Mysql 服务默认端口号,宿主机可通过 127.0.0.1:3306 进行数据库的连接 |
redis | 6379:6379 | redis | Redis 服务默认端口号,宿主机可通过 127.0.0.1:6379 进行数据库的连接 |
mysql-manage | 1000:80 | mysql-manage | phpMyAdmin web 服务端口号,可以在宿主机 127.0.0.1:1000 访问 |
redis-manage | 2000:80 | redis-manage | phpRedisAdmin web 服务端口号,可以在宿主机 127.0.0.1:2000 访问 |
prometheus | 3000:9090 | prometheus | Prometheus web 服务端口号,可以在宿主机 127.0.0.1:3000 访问 |
grafana | 4000:3000 | grafana | Grafana web 服务端口号,可以在宿主机 127.0.0.1:4000 访问 |
jaeger | 5000:16686 | jaeger | Jaeger web 服务端口号,可以在宿主机 127.0.0.1:5000 访问 |