{"id":15019527,"url":"https://github.com/javacctvnews/zerosx-cloud","last_synced_at":"2025-10-24T12:31:30.792Z","repository":{"id":194099034,"uuid":"688270923","full_name":"javacctvnews/zerosx-cloud","owner":"javacctvnews","description":"基于SpringBoot2.7、SpringCloud2021\u0026Alibaba采用前后端分离的微服务多租户体系架构开发平台。采用自定义starter组件化的思想，结构解耦；网关统一认证授权及URL级功能权限校验，且可自定义扩展OAuth2授权认证模式；网关聚合OpenAPI3文档及高度定制的代码生成器一键生成基础功能；内置通用基础功能，如OSS、SMS、数据过滤、数据加解密等等。","archived":false,"fork":false,"pushed_at":"2024-05-21T15:32:15.000Z","size":25461,"stargazers_count":12,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-31T01:16:26.287Z","etag":null,"topics":["code-generator","mybatis-plus","oauth2","openfeign","saas","seata","spring-cloud","spring-cloud-alibaba","vue2"],"latest_commit_sha":null,"homepage":"http://120.79.152.222/login","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/javacctvnews.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-09-07T02:20:47.000Z","updated_at":"2024-12-10T10:37:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"23706d5a-22d9-49d7-8858-76cbdbc338b5","html_url":"https://github.com/javacctvnews/zerosx-cloud","commit_stats":{"total_commits":31,"total_committers":1,"mean_commits":31.0,"dds":0.0,"last_synced_commit":"986c7dd357cc1fb6b59fabfbfb992ae958e1cd96"},"previous_names":["javacctvnews/zerosx-cloud"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javacctvnews%2Fzerosx-cloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javacctvnews%2Fzerosx-cloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javacctvnews%2Fzerosx-cloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javacctvnews%2Fzerosx-cloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/javacctvnews","download_url":"https://codeload.github.com/javacctvnews/zerosx-cloud/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237964664,"owners_count":19394439,"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":["code-generator","mybatis-plus","oauth2","openfeign","saas","seata","spring-cloud","spring-cloud-alibaba","vue2"],"created_at":"2024-09-24T19:53:39.063Z","updated_at":"2025-10-24T12:31:24.000Z","avatar_url":"https://github.com/javacctvnews.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 style=\"text-align:center\"\u003e\n    Zerosx-Cloud 多租户开发平台\n\u003c/h1\u003e\n\n\n\u003cdiv style=\"text-align: center\"\u003e逝者如斯夫，不舍昼夜！\u003c/div\u003e\n\u003cdiv style=\"text-align: center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Zerosx_Cloud-v2.0.0-critical\" alt=\"\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/copyright-javacctvnews@163.com-blue\" alt=\"\"\u003e\n\u003c/div\u003e\n\u003cdiv style=\"text-align: center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/JDK-17-blue?logo=openjdk\" alt=\"\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Spring_Boot-3.1.5-blue?logo=spring-boot\" alt=\"\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Spring_Cloud-2022.0.4-blue?logo=spring-boot\" alt=\"\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Spring_Cloud_Alibaba-2022.0.0.0-blue?logo=alibabadotcom\" alt=\"\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Nacos-2.2.1-critical?logo=alibabadotcom\" alt=\"\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Seata-1.7.0-blue?logo=statamic\" alt=\"\"\u003e\n\u003c/div\u003e\n\u003cdiv style=\"text-align: center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Vue-2.x-green\" alt=\"\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Vuex-3.x-blue\" alt=\"\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Vue_Router-3.x-blue\" alt=\"\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Element_UI-2.x-green\" alt=\"\"\u003e\n\u003c/div\u003e\n\u003ch3 style=\"text-align:center;color:red;font-size:16px;\"\u003e如果觉得对您有所帮助，请点右上角 \"Star\" 支持一下，谢谢啦\u003c/h3\u003e\n\n------\n\n\n\n\n### 平台简介\n\n此平台是由作者个人兴趣下搭建及开发，开源，免费，仅供学习参考。\n\n* 基于JDK17、SpringBoot3.1.5、SpringCloud2022.0.4和SpringCloudAlibaba2022.0.0.0且采用前后端分离的微服务多租户体系架构；\n* 采用自定义starter组件化的思想，结构解耦，易于扩展；\n* 实现了SpringCloudGateway集成Spring Authorization Server统一认证授权及URL级功能权限校验（适用于网络隔离场景，即网关是统一入口），且可自定义扩展授权模式；\n* 集成Knife4j基于OpenAPI3的接口文档，方便前后端对接；\n* 代码生成器一键生成基础CRUD功能，节约开发时间，更多注重业务开发；\n* 提供一套基于Vue2.x的前端项目[zerosx-vue2]，此项目是参考【若依】前端开源改造适配，感谢若依（Vue初学者，还不具备从零搭建一个完整的Vue项目，所以目前只能借鉴改造，勿喷^_^）。\n\n### 软件架构图\n\n\u003cimg style=\"width: 80%;text-align: center;\" src=\"./doc/images/zerosx-clould-V2.png\" alt=\"系统架构图\"/\u003e\n\n\u003e 备注：图中灰色虚线块组件作者并未搭建（服务器资源有限），只做一个选型参考。\n\n### 项目结构\n\n```shell\n├─zerosx-cloud\t\t\t\t\t\t\t\t#顶级工程目录\n│ └─doc\t\t\t\t\t\t              \t#项目文档（组件、SQL、操作说明）\n│   └─docker\t\t              \t\t\t#系统所用到的组件的安装文档\n│   └─zerosx\t\t              \t\t\t#系统所用到的SQL和YAML配置\n│ └─zerosx-api\t\t\t\t              \t#Feign对内api\n│   └─zerosx-api-auth\t\t              \t#授权服务api\n│   └─zerosx-api-examples\t              \t#示例工程api\n│   └─zerosx-api-system\t\t              \t#系统服务api\n│   └─zerosx-api-resource\t\t            #资源服务api\n│ └─zerosx-auth\t\t\t                  \t#授权认证服务\n│ └─zerosx-commons\t\t                  \t#通用模块\n│   └─zerosx-common-base\t\t\t\t\t#公共POJO、工具类\n│   └─zerosx-common-bom\t\t\t\t\t\t#common模块依赖项\n│   └─zerosx-common-core\t\t\t\t\t#公共核心模块\n│   └─zerosx-common-db\t\t\t\t\t\t#数据权限\n│   └─zerosx-common-dynamic-datasource\t\t#动态数据源\n│   └─zerosx-common-dynamictp\t\t\t\t#动态可监控线程池框架\n│   └─zerosx-common-encrypt\t\t\t\t\t#数据加解密\n│   └─zerosx-common-idempotent\t\t\t\t#幂等组件\n│   └─zerosx-common-loadbalancer\t\t\t#loadbalancer和feign封装\n│   └─zerosx-common-log\t\t\t\t\t\t#日志记录\n│   └─zerosx-common-oss\t\t\t\t\t\t#OSS对象存储\n│   └─zerosx-common-redis\t\t\t\t\t#Redis封装\n│   └─zerosx-common-seata\t\t\t\t\t#分布式事务Seata\n│   └─zerosx-common-security\t\t\t\t#Spring Authorization Server封装\n│   └─zerosx-common-sentinel\t\t\t\t#Sentinel\n│   └─zerosx-common-sms\t\t\t\t\t\t#多家SMS短信集成\n│   └─zerosx-common-utils\t\t\t\t\t#工具类包\n│   └─zerosx-common-xxljob\t\t\t\t\t#分布式任务调度XXL-JOB\n│ └─zerosx-examples\t\t                  \t#示例工程(Seata、分布式锁)\n│ └─zerosx-gateway\t\t                  \t#网关服务\n│ └─zerosx-modules\t\t                  \t#业务模块\n│   └─zerosx-resource\t\t\t\t\t\t#Resource服务\n│   └─zerosx-system\t\t\t\t\t\t\t#System服务\n│ └─zerosx-tools\t\t\t              \t#工具工程\n│   └─code-generator\t\t\t\t      \t#项目配套的代码生成器\n│   └─zerosx-monitor\t\t\t\t\t\t#SpringBootAdmin应用监控\n│ └─zerosx-ui\t\t\t\t              \t#前端\n│   └─zerosx-vue2\t\t\t              \t#前端-vue2版本\n│   └─zerosx-vue3\t\t\t              \t#前端-vue3版本(开发中)\n│ └─pom.xml\t\t\t\t                  \t#公共依赖\n│ └─README.md\t\t\t\t              \t#项目简介文档\n```\n\n### 功能简介\n\n#### 1. 非业务功能\n\n* 网关统一权限控制：URL级的功能按钮的权限控制，支持配置不同客户端及白名单URL；\n* 网关统一鉴权：OAuth2令牌Token的有效性校验，支持配置忽略认证的URL等；\n* 网关聚合文档：集成Knife4j基于OpenAPI3规范的接口文档，聚合所有微服务，方便前后端对接\n* Spring Authorization Server认证授权：\n  * 支持OAuth2.1默认的4种鉴权方式；\n  * 可扩展自定义授权模式，已实现用户名+验证码+密码、手机号码验证码两种授权模式；\n  * 支持多账户类型授权，应用场景是同一授权模式下需要对不同的账户进行授权（不同数据库表）；\n* 数据权限：多租户的数据隔离，采用的是同一数据库表的逻辑隔离（table添加租户标识的列来区分数据）；\n* 数据安全：敏感数据的加密存储及解密，如手机号码、身份证号码等，不同加密字段可配置不同的加解密算法；\n* 数据导出：支持大量数据快速导出，支持配置每个sheet页的数据大小及每批次查询数据库数据条数大小；\n* 数据翻译：字段标识ID翻译成名称，已支持数据字典、枚举、行政区域、OSS访问链接、租户名称翻译，可扩展；\n* 链路追踪：记录整个调用链路的traceId和spanId，支持多线程；\n* OSS存储：支持多家OSS厂商且参数配置界面化，方便管理及文件管理，已实现阿里云、七牛云、腾讯云厂商，可扩展；\n* SMS短信：支持多家SMS厂商且参数配置界面化，方便管理，已实现阿里云、聚合短信厂商，可扩展；\n* 分布式任务调用：集成XXL-JOB分布式任务调度；\n* 分布式事务：集成Seata分布式事务；\n* 分布式锁：集成Redisson分布式锁，有测试案例；\n* 分布式ID：基于美团Leaf分布式ID生成方案适配此项目，实现了基于MySQL数据库表方案；\n* 多数据源：集成dynamic-datasource多数据源（项目中应用场景是MySQL一主一从模式，其他场景需自行测试验证）；\n* 代码生成器：高度符合阿里巴巴开发手册规范的前后端代码一键生成，减少CRUD基础开发，更专注业务开发；\n* 系统监控：集成SpringBootAdmin应用监控；\n\n#### 2. 内置功能简介\n\n* 租户管理\n    * 租户管理：接入系统的租户公司的管理\n    * 套餐管理：租户套餐定价管理(计划)\n    * 定价规则：定义套餐的不同规则不同价格(计划)\n    * 优惠折扣：发布有时间限制的套餐购买优惠(计划)\n    * 租户订单：租户套餐购买订单管理(计划)\n* 权限管理\n    * 用户管理：系统用户的配置，及管理租户的数据权限分配\n    * 角色管理：角色菜单权限分配\n    * 部门管理：配置租户的组织部门，也可用作用户组，简化新用户的权限分配\n    * 岗位管理：岗位管理，用户所担任的职务\n* 系统管理\n    * 菜单权限：菜单、按钮、功能权限的管理，生成动态路由\n    * 字典管理：数据字典的维护\n    * 参数设置：系统动态参数的维护\n    * 客户端管理：\n        * 令牌管理：系统颁发授权令牌的管理\n        * 认证客户端：基于OAuth2授权认证的客户端维护\n    * 日志管理\n        * 操作日志：操作记录日志\n        * 登录日志：OAuth2授权登录日志\n* 资源管理\n    * 行政区域：中华人民共和国行政区域的维护\n    * 对象存储：集成多家对象存储，配置管理及上传文件管理\n    * 短信配置：集成多家短信服务商及短信业务模板的配置\n* 系统工具\n    * 分布式ID：基于美团Leaf分布式ID生成方案适配\n    * 系统监控：SpringBootAdmin系统监控\n    * 接口文档：OpenAPI3聚合接口文档\n    * 任务调度中心：XXL-JOB任务调度中心\n    \n\n### 本地开发说明\n\n1. 组件安装教程及脚本请看【zerosx-cloud/doc/README.md】\n\n2. 先启动zerosx-gateway、zerosx-auth、zerosx-system、zerosx-resource这四个项目；\n\n3. 启动前端项目，如何启动请看文档【zerosx-cloud/zerosx-ui/zerosx-vue2/README.md】；\n\n4. 浏览器访问前端地址，即可体验。\n\n5. 调试接口文档：\n\n   * 网关聚合入口：http://{gateway.host}:{gateway.port}/doc.html\n\n\n   * 单体微服务入口：http://{app.host}:{app.port}/doc.html (推荐，无token校验)\n\n### 系统部署\n\n​\t系统部署请看文档 **【zerosx-cloud/doc/README.md】**\n\n\n### 在线体验\n\n* 演示地址：\u003ca href=\"http://120.79.152.222/login\"\u003e http://120.79.152.222/login \u003c/a\u003e\n\n\u003e 体验系统只有主要功能，因服务器资源有限故都是单节点部署，但是所有组件及应用都支持集群。\n\n### 演示系统截图\n\n\u003ctable\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/img01.png\" alt=\"登录页\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/img02.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/img03.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/ten00.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/ten01.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/ten02.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/ten03.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/ten04.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/res00.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/res01.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/res02.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/res04.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/res05.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/sys00.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/sys01.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/sys02.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/sys03.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/sys05.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/sys06.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/sys07.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/sys08.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/to00.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/img17-1.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"doc/images/img17-2.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/img17-3.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/seata.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n\u003c/table\u003e\n\n\n\n### 监控告警系统截图\n\n\u003ctable\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/grafana_login.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/grafana_host.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/grafana_redis.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/grafana_nacos.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/grafana_mysql.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/grafana_jvm.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/grafana_dynamictp.png\" /\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/prometheus_alert.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./doc/images/prometheus_targets.png\" /\u003e\u003c/td\u003e\n   \u003c/tr\u003e\n\u003c/table\u003e\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavacctvnews%2Fzerosx-cloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjavacctvnews%2Fzerosx-cloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavacctvnews%2Fzerosx-cloud/lists"}