- Golang
- Gin
- Gorm
- Redis
- MySql
- Swagger
- Docker
- K8s
- Vue.js
- Vue-element-admin
- Http/Https
- Tcp
- Grpc
- WebSocket
- 流量统计
- 流量限制
- 熔断
- 黑白名单
- 错误重试(Http/Https)
- 静态配置
- ETCD
- Zookeeper
- Nacos
- 用户自定义插件
- 按权重分流
- pprof
- Prometheus
- 单机部署
- Docker
- K8s
- DockerCompose
- Golang版本要求Golang1.12+
- 下载类库依赖
export GO111MODULE=on && export GOPROXY=https://goproxy.cn
cd micro_gateway
go mod tidy
- 创建数据库并导入
mysql -h localhost -u root -p -e "CREATE DATABASE micro_gateway DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql -h localhost -u root -p micro_gateway < gateway.sql --default-character-set=utf8
- 在
vue.config.js
文件中设置publicPath
为/
- 在
.env.production
文件中设置VUE_APP_BASE_API
为自己需要的url前缀,本项目设置为/prod-api
。 - 编译。
npm run build:prod
- 通过nginx代理实现与后端接口服务的同域访问。
server {
listen 8884;
server_name localhost;
root /dashboard编译生成的结果的路径;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.html?$args;
}
location /prod-api/ {
proxy_pass http://127.0.0.1:8880/; #后端服务接口
}
}
- 访问
http://你的ip:8884
即可。
- 在
vue.config.js
文件中设置publicPath
为/dist
- 在
.env.production
文件中设置VUE_APP_BASE_API
为空。 - 在后端项目的
router
包的route.go
文件中增加代码
router.Static("/dist", "./dist")
- 编译后放入到后端项目的根目录下。
- 访问
http://后端IP:后端port/dist
make build_dev
sh run.sh
- 部署网关管理服务
docker build -f dockerfile-dashboard -t gateway-dashboard .
docker run --name dashboard --net host -e TZ=Asia/Shanghai -d gateway-dashboard:latest
- 部署代理服务
docker build -f dockerfile-server -t gateway-server .
docker run --name server --net host -e TZ=Asia/Shanghai -d gateway-server:latest
- 需要再额外自己部署Redis和Mysql服务器。
kubectl apply -f k8s_gateway_mysql.yaml
kubectl apply -f k8s_gateway_redis.yaml
kubectl apply -f k8s_dashboard.yaml
kubectl apply -f k8s_server.yaml
example
目录为模拟下游服务节点的代码。
HTTP/HTTPS
代理:通过HttpRule.Rule
字段以前缀匹配的形式实现不同下游服务的转发TCP
代理:通过TcpRule.Port
字段实现不同tcp服务的转发GRPC
代理:通过GrpcRule.Port
字段实现不同GRPC服务的转发
生成接口文档:swag init
然后启动服务器:go run main.go
,浏览地址: http://127.0.0.1:8880/swagger/index.html