作者:企鹅之神魔大陆_544 | 来源:互联网 | 2023-02-04 16:59
go-zero实战:让微服务Go起来——2环境搭建-2.1环境要求Golang1.17EtcdRedisMysqlPrometheusGrafanaJaeger
2.1 环境要求
Golang
1.17
Etcd
Redis
Mysql
Prometheus
Grafana
Jaeger
2.2 Docker
本地开发环境搭建
为了方便开发调试,我们使用 Docker
构建本地开放环境。Windows
和 macOS
系统可下载 Docker Desktop
安装使用,具体下载安装方法可自行搜索相关教程。
这里我们使用 Docker Compose
来编排管理我们的容器,创建如下目录:
golang
├── 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 配置文件
│ └── targets.json
├── redis # Redis 服务
│ └── Dockerfile
├── redis-manage # Redis 可视化管理
│ └── Dockerfile
├── .env # env 配置
└── docker-compose.yml
2.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 "
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
# 安装protoc
USER root
RUN curl -L -o /tmp/protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v3.19.1/protoc-3.19.1-linux-x86_64.zip && \
unzip -d /tmp/protoc /tmp/protoc.zip && \
cp -r /tmp/protoc /usr/local/protoc
# protoc添加到环境变量中
ENV PATH /usr/local/protoc/bin:$PATH
# 安装 goctl 和 protoc-gen-go
RUN go get -u github.com/tal-tech/go-zero/tools/goctl && \
go get -u github.com/golang/protobuf/protoc-gen-go@v1.3.2
# 清理垃圾
USER root
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
rm /var/log/lastlog /var/log/faillog
# 设置工作目录
WORKDIR /usr/src/code
EXPOSE 8000
EXPOSE 8001
EXPOSE 8002
EXPOSE 8003
EXPOSE 8004
EXPOSE 8005
EXPOSE 8006
其他服务容器 Dockerfile
无需特殊处理,只要基于现有的镜像即可。
服务 |
基于的镜像 |
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 |