# 手摸手教你从0到1搭建部署Go微服务
本仓库配合 [手摸手教你从开发到部署(CI/CD)GO微服务系列](https://www.guaosi.com/2020/07/05/go-microservice-series-from-development-to-deployment-introduction-contents/) 食用最佳噢~
从`原生搭建`、`容器搭建`、`Docker-Compose搭建`、`Kubernetes搭建`这四个过程,从0到1体验基于GO的微服务搭建部署的全过程。
## 涉及
| 技术 | 使用 | 版本 |
| :-----------: | :-----------------------: | :-------------: |
| 语言 | Golang | 1.14.1 |
| Web框架(网关) | Gin | v1.6.3 |
| 通讯格式 | Protobuf | v3.12.1 |
| 微服务框架 | Go-micro | v2.9.0 |
| 反向代理 | Traefik | v2.2.1 |
| 服务注册中心 | Etcd/Kubernetes | v3.3.8/v1.16.5 |
| 容器 | Docker | v19.03.8 |
| 编排工具 | Docker-Compose/Kubernetes | v1.25.5/v1.16.5 |
## 目录讲解
```
- account 基于go-micro的微服务
- apigateway 基于go-micro的网关,负责调用微服务
- deploy 初始化部署调用,k8s搭建时使用到
- etcd 服务注册使用,在原生搭建跟docker-compose搭建时使用到
- traefik 反向代理
```
## 原生搭建
### 确保go环境
由于`原生搭建`是直接跑`go`的代码,所以请先确保有`go`的运行环境。同时,请设置好`go mod`代理.
> 不会设置请看 https://goproxy.io/zh/
### etcd
使用`etcd`来作为服务注册组件,`go-micro`通过`etcd`来做服务注册的存储。
```
# etcd单一节点
docker run -d \
-p 2379:2379 \
-p 2380:2380 \
--name etcd1 \
quay.io/coreos/etcd:v3.3.8 \
/usr/local/bin/etcd \
--name s1 \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://0.0.0.0:2379
```
如果想在etcd容器中使用cli
```
# 进入容器
docker exec -it etcd1 sh
# 设置docker中环境变量
export ETCDCTL_API=3
# 切换至etcdctl目录
cd /bin
```
### account
切换到 `account` 目录下
```
cd account
```
下载依赖
```
go mod download
```
执行
```
go run . --registry etcd
```
> 如果想`account`高可用,多几个进程执行`go run .`即可
### apigateway
切换到 `apigateway` 目录下
```
cd apigateway
```
下载依赖
```
go mod download
```
执行
```
go run . -p 8091 --registry etcd
```
### 验证网关以及微服务
```
curl -X POST -d "username=guaosi&password=guaosi" http://127.0.0.1:8091/account/register
```
如果返回 `{"code":0,"message":""}` 则证明成功。
## 容器搭建
### etcd
在`原生搭建`中使用的就是`etcd`的镜像创建的容器,这里可以跳过
获取etcd在网络里的内网IP地址
```
docker inspect etcd1 --format "{{.NetworkSettings.IPAddress}}"
```
### account
```
# 此时寻找etcd的地址为容器内的127.0.0.1
docker run -e PARAMS="--registry etcd" --name="account" -d registry.cn-shenzhen.aliyuncs.com/go_micro/account:v1.0
# 此时寻找etcd的地址为容器内的172.17.0.5(实际多少请根据上面etcd查询IP方法获取到)
docker run -e PARAMS="--registry etcd --registry_address 172.17.0.5:2379" --name="account" -d registry.cn-shenzhen.aliyuncs.com/go_micro/account:v1.0
```
### apigateway
```
# 此时寻找etcd的地址为容器内的127.0.0.1
docker run -e PARAMS="--registry etcd" --name="account" -d registry.cn-shenzhen.aliyuncs.com/go_micro/account:v1.0
# 此时寻找etcd的地址为容器内的172.17.0.5(实际多少请根据上面etcd查询IP方法获取到)
docker run -e PARAMS="-p 8091 --registry etcd --registry_address 172.17.0.5:2379" -p 8091:8091 --name="apigw" -d registry.cn-shenzhen.aliyuncs.com/go_micro/apigw:v1.0
```
### 验证网关以及微服务
```
curl -X POST -d "username=guaosi&password=guaosi" http://127.0.0.1:8091/account/register
```
如果返回 `{"code":0,"message":""}` 则证明成功。
## Docker Compose下搭建
### 创建专属网络
为了隔离和管理,所以先创建一个专属网络
```
docker network create gomicro --driver bridge
```
### etcd
切换到 `etcd` 目录下.
```
cd etcd
```
因为docker-compose启动时会根据当前的所在目录名取名,这样目录名称下执行`docker-compose`会被认为冲突 所以需要特定名称
```
docker-compose -p go_micro_etcd up -d
```
### account
切换到 `account/deploy` 目录下.
```
cd account/deploy
```
因为docker-compose启动时会根据当前的所在目录名取名,这样目录名称下执行`docker-compose`会被认为冲突 所以需要特定名称
```
docker-compose -p go_micro_account up -d
```
### apigateway
切换到 `apigateway/deploy` 目录下.
```
cd apigateway/deploy
```
因为docker-compose启动时会根据当前的所在目录名取名,这样目录名称下执行`docker-compose`会被认为冲突 所以需要特定名称
```
docker-compose -p go_micro_apigw up -d
```
### traefik
切换到 `traefik` 目录下.
```
cd traefik
```
因为docker-compose启动时会根据当前的所在目录名取名,这样目录名称下执行`docker-compose`会被认为冲突 所以需要特定名称
```
docker-compose -p go_micro_traefik up -d
```
### 配置 Host 文件
客户端想通过域名访问服务,必须要进行`DNS` 解析,由于这里没有`DNS`服务器进行域名解析,所以修改`hosts`文件将`apigw`所在节点服务器的`IP`和自定义`Host`绑定,。打开电脑的`Hosts`配置文件,往其加入下面配置:
```
127.0.0.1 apigw.guaosi.com
```
### 验证Traefik Dashboard
打开浏览器输入地址:http://127.0.0.1:8080,即可打开`Traefik Dashboard`
### 验证网关以及微服务
```
curl -X POST -d "username=guaosi&password=guaosi" http://apigw.guaosi.com/account/register
```
如果返回 `{"code":0,"message":""}` 则证明成功。
## Kubernetes下搭建
当前kubernetes集群是kubernetes单节点,即master上进行任务调度和pod创建。
```
# 通过污点 设置master允许pod创建
kubectl taint node k8s-master node-role.kubernetes.io/master-
# 通过污点 设置master禁止pod创建
kubectl taint node k8s-master node-role.kubernetes.io/master=""
```
当如果想下载自己的私有镜像时,记得需要现在kubernetes里创建secret认证,否则没有权限进行下载。
**我的镜像已经开放了公有权限,可以直接下载,不需要进行验证。如果你想使用自己的镜像,请按照下面进行操作。**
下面以阿里云为例
### 下载私有阿里云镜像
#### 登陆认证阿里云
```
docker login --username=<your-name> registry.cn-shenzhen.aliyuncs.com
# <your-name> 是你在阿里云上的登陆名
```
#### 在集群中创建保存授权令牌的 Secret
```
# 创建 Secret,命名为 regcred:
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email> -n <your-namespace>
# <your-registry-server> 是你的私有 Docker 仓库全限定域名(FQDN)
# <your-name> 是你的 Docker 用户名。
# <your-pword> 是你的 Docker 密码。
# <your-email> 是你的 Docker 邮箱。
# <your-namespace> 创建后的该密钥属于k8s集群中哪一个namespace的
```
举个栗子
```
kubectl create secret docker-registry regcred --docker-server=registry.cn-shenzhen.aliyuncs.com --docker-username=guaosi@vip.qq.com --docker-password=a123654 --docker-email=guaosi@vip.qq.com -n go-micro
# 注意: -n 后面是我想这个密钥归属于哪个namespace,即哪个namespace可以使用
```
#### 在pod清单中加入使用密钥
```
apiVersion: v1
kind: Pod
metadata:
name: private-reg
namespace: <your-namespace>
spec:
containers:
- name: private-reg-container
image: <your-private-image>
imagePullSecrets: # 使用指定的密钥
- name: regcred # 与上面创建的secret名称相同
```
### 初始化
创建名�
没有合适的资源?快使用搜索试试~ 我知道了~
go+gin+网关+go-micro+traefik+etcd+docker-compose+kubernets基于GO的微服务
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
共40个文件
yml:15个
go:10个
sh:4个
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
需积分: 5 0 下载量 186 浏览量
2024-05-23
17:16:38
上传
评论
收藏 79KB ZIP 举报
温馨提示
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
资源推荐
资源详情
资源评论
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![xlsx](https://img-home.csdnimg.cn/images/20210720083732.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 40 条
- 1
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/d7864c98224046ec9a7f43fa6207c84e_qq_51320133.jpg!1)
生瓜蛋子
- 粉丝: 3829
- 资源: 5969
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 优先编码器除法电微分运算电路 全加器函数发生电路等电路经典Multisim仿真实验源文件合集(25个).zip
- 2331308JS课堂案例.zip
- STM32H750VBT6单片机最小系统开发板AD设计硬件(原理图+PCB+3D封装库)工程文件.zip
- 基于74LS161+ 74LS192芯片实现倒计时定时器Multisim仿真源文件,Multisim10以上版本可打开运行
- 科大讯飞语音引擎 jar包 demo,科大讯飞语音合成引擎3.0,支持4.0系统以上,文字转语音输出.zip
- Java架构面试笔试专题资料及经验(含答案)SpringBoot面试Linux面试专题及答案 合集.zip
- 头歌c语言实验答案tion-model-for-ne开发笔记
- docker配置使用-model-for-networK开发demo
- docker配置使用vaWeb-mas笔记
- c语言连接两个字符串-mas开发笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)