{"id":15178860,"url":"https://github.com/mikaelemmmm/go-zero-looklook","last_synced_at":"2025-05-13T18:07:55.888Z","repository":{"id":37272521,"uuid":"440220648","full_name":"Mikaelemmmm/go-zero-looklook","owner":"Mikaelemmmm","description":"🔥基于go-zero(go zero) 微服务全技术栈开发最佳实践项目。Develop best practice projects based on the full technology stack of go zero (go zero) microservices.","archived":false,"fork":false,"pushed_at":"2025-01-16T02:52:03.000Z","size":105599,"stargazers_count":4713,"open_issues_count":6,"forks_count":869,"subscribers_count":38,"default_branch":"main","last_synced_at":"2025-05-12T02:49:38.931Z","etag":null,"topics":["asynq","dtm","elasticsearch","filebeat","gitlab","go-queue","go-stash","go-zero","goctl","golang","gozero","grafana","harbor","jaeger","jenkins","k8s","kafka","microservices","modd","prometheus"],"latest_commit_sha":null,"homepage":"https://go-zero.dev","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/Mikaelemmmm.png","metadata":{"files":{"readme":"README-cn.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":"https://github.com/Mikaelemmmm/go-zero-looklook/blob/main/doc/images/1/wxpay.png"}},"created_at":"2021-12-20T15:36:59.000Z","updated_at":"2025-05-11T17:10:27.000Z","dependencies_parsed_at":"2023-11-23T06:38:32.591Z","dependency_job_id":"fe1728e0-8c26-4c82-9568-b745ae437f31","html_url":"https://github.com/Mikaelemmmm/go-zero-looklook","commit_stats":{"total_commits":243,"total_committers":30,"mean_commits":8.1,"dds":0.5967078189300412,"last_synced_commit":"4d9cc0b3738cfbbf7fde5d3dc51ea2fecaab29d1"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mikaelemmmm%2Fgo-zero-looklook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mikaelemmmm%2Fgo-zero-looklook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mikaelemmmm%2Fgo-zero-looklook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mikaelemmmm%2Fgo-zero-looklook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mikaelemmmm","download_url":"https://codeload.github.com/Mikaelemmmm/go-zero-looklook/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254000849,"owners_count":21997441,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["asynq","dtm","elasticsearch","filebeat","gitlab","go-queue","go-stash","go-zero","goctl","golang","gozero","grafana","harbor","jaeger","jenkins","k8s","kafka","microservices","modd","prometheus"],"created_at":"2024-09-27T15:40:25.282Z","updated_at":"2025-05-13T18:07:55.859Z","avatar_url":"https://github.com/Mikaelemmmm.png","language":"Go","funding_links":["https://github.com/Mikaelemmmm/go-zero-looklook/blob/main/doc/images/1/wxpay.png"],"categories":[],"sub_categories":[],"readme":"\n\n## go-zero-looklook\n\n[English](README.md) | 简体中文\n\n\n\n## 前言\n\n\n\n#### 老规矩，看之前先给个star哈～～,不star被抓住要打屁股，哈哈哈哈哈哈\n\n本人接触go-zero可能比较早，go-zero在大约1000star左右我就在用了，后来跟go-zero作者加了微信也熟悉了，go-zero作者非常热心以及耐心的帮我解答了很多问题，我也想积极帮助go-zero推广社区，基本是在社区群内回答大家相关的问题，因为在这个过程中发现很多人觉得go-zero没有一个完整的项目例子，作为想推动社区的一员，我就搞了个可用版本开源出来，主要技术栈包含如下：\n\n\n\n##### Tips : 如果你不熟悉这里面很多技术栈也不要怕，只要你会mysql、redis可以先启动这两个中间件在启动项目先跑起来项目，其他可以慢慢学。\n\n\n\n\n- k8s\n- go-zero\n- nginx网关\n- filebeat\n- kafka\n- go-stash\n- elasticsearch\n- kibana\n- prometheus\n- grafana\n- jaeger\n- go-queue\n- asynq\n- asynqmon\n- dtm\n- docker\n- docker-compose\n- mysql\n- redis\n- modd\n- jenkins\n- gitlab\n- harbor\n\n\n\n## 视频教程\n\n这个是我正在录制的go-zero教程：https://space.bilibili.com/389552232/video\n\n此教程最后也会给大家分享一下go-zero-looklook，敬请期待哦～\n\n\n\n## 项目文档\n\n（地址一）[doc/chinese](doc/chinese/) 即该项目的doc目录下\n\n（地址二）go-zero官方微信公众号（微服务从代码到k8s部署应有尽有系列）\n\n【注】go-zero的相关资料、知识点在这都能找到\n\n![go-zero-public-qcode](./doc/chinese/images/1/go-zero-public-qcode.jpeg)\n\n\n\n本项目开发环境推荐docker-compose，使用直链方式，放弃服务注册发现中间件（etcd、nacos、consul等）带来的麻烦\n\n测试、线上部署使用k8s（也不需要etcd、nacos、consul等）有详细教程（搭建+部署），可以进go-zero社区群沟通，非常easy\n\n\n\n## 项目简介\n\n整个项目使用了go-zero开发的微服务，基本包含了go-zero以及相关go-zero作者开发的一些中间件，所用到的技术栈基本是go-zero项目组的自研组件，基本是go-zero全家桶了\n\n另外，前端是小程序，本项目已经对接好了小程序授权登录 以及 微信支付了 ，前端看看后面是否能开源吧\n\n\n\n项目目录结构如下：\n\n\n- app：所有业务代码包含api、rpc以及mq（消息队列、延迟队列、定时任务）\n- common：通用组件 error、middleware、interceptor、tool、ctxdata等\n- data：该项目包含该目录依赖所有中间件(mysql、es、redis、grafana等)产生的数据，此目录下的所有内容应该在git忽略文件中，不需要提交。\n- deploy：\n\n    - filebeat: docker部署filebeat配置\n    - go-stash：go-stash配置\n    - nginx: nginx网关配置\n    - prometheus ： prometheus配置\n    - script：\n        - gencode：生成api、rpc，以及创建kafka语句，复制粘贴使用\n        - mysql：生成model的sh工具\n    - goctl: 该项目goctl的template，goctl生成自定义代码模版，template用法可参考go-zero文档，复制到家目录下.goctl即可\n- doc : 该项目系列文档\n- modd.conf :  modd热加载配置文件，不要怕～它用起来很简单，关于modd更多用法可以去这里了解 ： https://github.com/cortesi/modd ， 本项目镜像只是将golang-1.17.7-alpine作为基础镜像安装了modd在内部，如果你想把goctl、protoc、golint等加进去，不用我的镜像直接制作一个镜像也一样的哈\n\n\n\n\n\n## 系统架构图\n\n![jiagou](./doc/chinese/images/1/gozerolooklook.png)\n\n## 业务架构图\n\n![jiagou](./doc/chinese/images/1/go-zero-looklook-service.png)\n\n\n## 网关\n\nnginx做对外网关，网关前面是slb，另外，很多同学觉得nginx做网关不太好，这块原理基本一样，可以自行替换成apisix、kong等\n\n\n\n## 开发模式\n\n本项目使用的是微服务开发，api （http） + rpc（grpc） ， api充当聚合服务，复杂、涉及到其他业务调用的统一写在rpc中，如果一些不会被其他服务依赖使用的简单业务，可以直接写在api的logic中\n\n\n\n## 日志\n\n关于日志，统一使用filebeat收集，上报到kafka中，由于logstash懂得都懂，资源占用太夸张了，这里使用了go-stash替换了logstash\n\n链接：https://github.com/kevwan/go-stash  ， go-stash是由go-zero开发团队开发的，性能很高不占资源，主要代码量没多少，只需要配置就可以使用，很简单。它是把kafka数据源同步到elasticsearch中，默认不支持elasticsearch账号密码，我fork了一份修改了一下，很简单支持了账号、密码\n\n\n\n## 监控\n\n监控采用prometheus，这个go-zero原生支持，只需要配置就可以了，这里可以看项目中的配置\n\n\n\n## 链路追踪\n\ngo-zero默认jaeger、zipkin支持，只需要配置就可以了，可以看配置\n\n\n\n## 发布订阅\n\nkafka ， 发布订阅使用的是go-zero开发团队开发的go-queue，链接：https://github.com/zeromicro/go-queue\n\n这里使用kq，kq是基于kafka做的高性能发布订阅\n\n\n\n## 消息队列、延迟队列、定时任务\n\n消息队列、延迟队列、定时任务本项目使用的是asynq ，基于redis开发的简单中间件，\n\n当然，消息队列你也可以使用go-queue\n\n链接：https://github.com/hibiken/asynq\n\n\n\n## 分布式事务\n\n分布式事务准备使用的是dtm， 嗯 ，很舒服，之前我写过一篇 \"go-zero对接分布式事务dtm保姆式教程\" 链接地址：https://github.com/Mikaelemmmm/gozerodtm ， 本项目目前还未使用到，后续准备直接集成就好了，如果读者使用直接去看那个源码就行了\n\n\n\n## 部署\n\n本项目开发环境推荐docker-compose，使用直链方式，放弃服务注册发现中间件（etcd、nacos、consul等）带来的麻烦\n\n测试、线上部署使用k8s（也不需要etcd、nacos、consul等）有详细教程（搭建+部署），可以进go-zero社区群沟通，非常easy\n\n文档地址：https://github.com/Mikaelemmmm/go-zero-looklook/tree/main/doc\n\ngitlab + jenkins + harbor + k8s\n\n在jenkins中点击部署对应的服务，会去gitlab拉取代码--\u003e再去拉取线上配置（线上配置单独一个git库，为什么不用配置中心，部署文档中有介绍）----\u003e自动构建镜像--\u003e推送到harbor镜像仓库---\u003e使用kubectl自动发布到k8s中----\u003e前面要挂一个nginx做网关统一入口\n\n\n\n## 感谢\n\ngo-zero 微服务: https://github.com/zeromicro/go-zero\n\ndtm分布式事务：https://github.com/dtm-labs/dtm\n\n\n\n\n\n## 赞赏\n\n![image-20220124142937169](./doc/chinese/images/1/info.jpg)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikaelemmmm%2Fgo-zero-looklook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmikaelemmmm%2Fgo-zero-looklook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikaelemmmm%2Fgo-zero-looklook/lists"}