{"id":37123257,"url":"https://github.com/hugokung/micro_gateway","last_synced_at":"2026-01-14T14:14:13.684Z","repository":{"id":169916854,"uuid":"620803858","full_name":"hugokung/micro_gateway","owner":"hugokung","description":"🔥micro_gateway is a micro-service gateway developed based on Vue and Golang. The system supports multiple proxy protocols (such as HTTP, TCP and gRPC) and multiple load balancing algorithms.","archived":false,"fork":false,"pushed_at":"2024-04-22T07:29:43.000Z","size":1345,"stargazers_count":54,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-06-21T16:57:08.204Z","etag":null,"topics":["api","gateway","gin","go","grpc","http","tcp-server"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hugokung.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-29T12:04:45.000Z","updated_at":"2024-05-13T05:16:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"69d0d8ed-9336-44be-8864-416dc87e3a18","html_url":"https://github.com/hugokung/micro_gateway","commit_stats":null,"previous_names":["hugokung/micro_gateway"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/hugokung/micro_gateway","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hugokung%2Fmicro_gateway","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hugokung%2Fmicro_gateway/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hugokung%2Fmicro_gateway/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hugokung%2Fmicro_gateway/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hugokung","download_url":"https://codeload.github.com/hugokung/micro_gateway/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hugokung%2Fmicro_gateway/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28422426,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T13:30:50.153Z","status":"ssl_error","status_checked_at":"2026-01-14T13:29:08.907Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","gateway","gin","go","grpc","http","tcp-server"],"created_at":"2026-01-14T14:14:12.970Z","updated_at":"2026-01-14T14:14:13.672Z","avatar_url":"https://github.com/hugokung.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Github Repo Stars](https://img.shields.io/github/stars/hugokung/micro_gateway?style=plastic\n)\n![License](https://img.shields.io/github/license/hugokung/micro_gateway?style=plastic\u0026color=green\n)\n![Issue](https://img.shields.io/github/issues-search/hugokung/micro_gateway?query=is%3Aopen%20label%3Aenhancement\u0026style=plastic\u0026color=red\n)\n![Verison](https://img.shields.io/github/v/tag/hugokung/micro_gateway?sort=semver\u0026style=plastic\u0026label=version\u0026color=yellow\n)\n![Build](https://img.shields.io/github/actions/workflow/status/hugokung/micro_gateway/release.yml?style=plastic\n)\n![Commit](https://img.shields.io/github/commits-since/hugokung/micro_gateway/latest?style=plastic\u0026color=pink\n)\n\u003cdiv align=\"center\"\u003e\n\n\u003ch3 align=\"center\"\u003eMicro Gateway\u003c/h3\u003e\n  \u003cp align=\"center\"\u003e\n    🧱一个高性能微服务网关\n    \u003cbr /\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n### Micro Gateway 管理后台Demo\n![demo1](./assets/dashboard.png)\n![demo2](./assets/service_list.png)\n![demo3](./assets/app_list.png)\n### 功能\n![功能脑图](./assets/功能脑图.png)\n### 技术栈\n#### 后端\n- Golang\n- Gin\n- Gorm\n- Redis\n- MySql\n- Swagger\n- Docker\n- K8s\n#### 前端\n- Vue.js\n- Vue-element-admin\n\n### 特性\n#### 代理协议\n- [x] Http/Https\n- [x] Tcp\n- [x] Grpc\n- [ ] WebSocket\n\n#### 代理功能\n- [x] 流量统计\n- [x] 流量限制\n- [x] 熔断\n- [x] 黑白名单\n- [x] 错误重试(Http/Https)\n\n#### 服务发现\n- [x] 静态配置\n- [x] ETCD\n- [x] Zookeeper\n- [ ] Nacos  \n\n#### 插件\n- [ ] 用户自定义插件\n\n#### 灰度发布\n- [x] 按权重分流\n\n#### 性能监测\n- [x] pprof\n- [ ] Prometheus\n\n#### 部署方式\n- [x] 单机部署\n- [x] Docker\n- [x] K8s\n- [ ] DockerCompose\n\n### 环境依赖\n- Golang版本要求Golang1.12+\n- 下载类库依赖\n```shell\nexport GO111MODULE=on \u0026\u0026 export GOPROXY=https://goproxy.cn\ncd micro_gateway\ngo mod tidy\n```\n- 创建数据库并导入\n```shell\nmysql -h localhost -u root -p -e \"CREATE DATABASE micro_gateway DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;\"\nmysql -h localhost -u root -p micro_gateway \u003c gateway.sql --default-character-set=utf8\n```\n### 前端部署\n#### 控制面板前端与后端服务分开部署时，前端项目需要如下设置：  \n  - 在`vue.config.js`文件中设置`publicPath`为`/`\n  - 在`.env.production`文件中设置`VUE_APP_BASE_API`为自己需要的url前缀，本项目设置为`/prod-api`。\n  - 编译。\n  ```sh\n  npm run build:prod\n  ```\n  - 通过nginx代理实现与后端接口服务的同域访问。\n  ```sh\n   server {\n        listen       8884;\n        server_name  localhost;\n        root /dashboard编译生成的结果的路径;\n        index  index.html index.htm index.php;\n\n        location / {\n            try_files $uri $uri/ /index.html?$args;\n        }\n\n        location /prod-api/ {\n            proxy_pass http://127.0.0.1:8880/; #后端服务接口\n        }\n  }\n  ```\n  - 访问`http://你的ip:8884`即可。\n#### 控制面板前端与后端项目合并部署   \n  - 在`vue.config.js`文件中设置`publicPath`为`/dist`\n  - 在`.env.production`文件中设置`VUE_APP_BASE_API`为空。\n  - 在后端项目的`router`包的`route.go`文件中增加代码\n  ```go\n  router.Static(\"/dist\", \"./dist\")\n  ``` \n  - 编译后放入到后端项目的根目录下。\n  - 访问`http://后端IP:后端port/dist`\n  \n### 后端部署\n#### 直接编译源码运行\n```shell\nmake build_dev\nsh run.sh\n```\n#### 使用Docker部署  \n- 部署网关管理服务\n```shell\ndocker build -f dockerfile-dashboard -t gateway-dashboard .\ndocker run --name dashboard --net host -e TZ=Asia/Shanghai -d gateway-dashboard:latest\n```\n- 部署代理服务\n```shell\ndocker build -f dockerfile-server -t gateway-server .\ndocker run --name server --net host -e TZ=Asia/Shanghai -d gateway-server:latest\n```\n- 需要再额外自己部署Redis和Mysql服务器。\n\n#### 使用K8s部署\n```shell\nkubectl apply -f k8s_gateway_mysql.yaml\nkubectl apply -f k8s_gateway_redis.yaml\nkubectl apply -f k8s_dashboard.yaml\nkubectl apply -f k8s_server.yaml\n```\n\n### 测试  \n- `example`目录为模拟下游服务节点的代码。\n\n### 代理规则\n- `HTTP/HTTPS`代理：通过`HttpRule.Rule`字段以前缀匹配的形式实现不同下游服务的转发\n- `TCP`代理：通过`TcpRule.Port`字段实现不同tcp服务的转发\n- `GRPC`代理：通过`GrpcRule.Port`字段实现不同GRPC服务的转发\n\n\n### 💻API文档\n生成接口文档：`swag init`  \n然后启动服务器：`go run main.go`，浏览地址: `http://127.0.0.1:8880/swagger/index.html`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhugokung%2Fmicro_gateway","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhugokung%2Fmicro_gateway","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhugokung%2Fmicro_gateway/lists"}