<h1>此项目正在重构，从头开发，包含完善的测试类</h1>
<h2>重构项目包含配套功能讲解视频（充电专属）：B站网址（搜索 “重构微服务” 或者直接查看个人 “充电专属” 视频）: https://space.bilibili.com/198580655</h2>
<h3>重构项目地址：</h3>
<h4><a href="https://jihulab.com/xuxiaowei-jihu/xuxiaowei-cloud/spring-cloud-xuxiaowei">jihulab</a></h4>
<h4><a href="https://gitee.com/xuxiaowei-cloud/spring-cloud-xuxiaowei">gitee</a></h4>
<h4><a href="https://github.com/xuxiaowei-cloud/spring-cloud-xuxiaowei">github</a></h4>

<div align="center" style="text-align: center;">
    <h1>xuxiaowei-cloud</h1>
    <h3>徐晓伟微服务</h3>
    <a target="_blank" href="https://github.com/996icu/996.ICU/blob/master/LICENSE">
        <img alt="License-Anti" src="https://img.shields.io/badge/License-Anti 996-blue.svg">
    </a>
    <a target="_blank" href="https://996.icu/#/zh_CN">
        <img alt="Link-996" src="https://img.shields.io/badge/Link-996.icu-red.svg">
    </a>
    <a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=ZieC6s1WB4njfVbrDHYgoNS8YpT26VtF&jump_from=webapi">
        <img alt="QQ群" src="https://img.shields.io/badge/QQ群-696503132-blue.svg"/>
    </a>
</div>

<p></p>

<div align="center" style="text-align: center;">
    <a target="_blank" href="https://work.weixin.qq.com/gm/75cfc47d6a341047e4b6aca7389bdfa8">
        <img alt="企业微信群" src="docs/static/wechat-work.jpg" height="100"/>
    </a>
</div>

<p></p>

<div align="center" style="text-align: center;">
    <div>基于 JDK 8/11、Spring Boot 2.7.x、OAuth 2.1、Vite 4、Vue 3、Element Plus 的微服务。</div>
    <div>支持支付宝、钉钉、码云、GitHub、GitLab、QQ、微信、企业微信、微博等第三方登录。</div>
    <div>包含基于 GitLab Runner 的 kubernetes（k8s）、Docker、Shell 等执行器执行 CI/CD 流水线进行自动构建、制作 Docker 镜像、发布。</div>
    <div>永久免费开源。</div>
</div>

<p></p>

<div align="center" style="text-align: center;">
  为简化开发工作、提高生产率、解决常见问题而生
</div>

<p></p>

<div align="center" style="text-align: center;">

  <a target="_blank" href="https://space.bilibili.com/198580655">
    <img alt="bilibili 粉丝" src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fapi.spencerwoo.com%2Fsubstats%2F%3Fsource%3Dbilibili%26queryKey%3D198580655&label=bilibili%20fans&query=%24.data.totalSubs&logo=bilibili">
  </a>

  <a target="_blank" href="https://blog.csdn.net/qq_32596527">
    <img alt="CSDN 码龄" src="https://img.shields.io/badge/dynamic/xml?color=orange&label=CSDN&query=%2F%2Fdiv%5B%40class%3D%27person-code-age%27%5D%5B1%5D%2Fspan%5B1%5D%2Ftext%28%29%5B1%5D&url=https%3A%2F%2Fblog.csdn.net%2Fqq_32596527&logo=data:image/x-icon;base64, ">
  </a>

  <a target="_blank" href="https://blog.csdn.net/qq_32596527">
    <img alt="CSDN 粉丝" src="https://img.shields.io/badge/dynamic/xml?color=orange&label=CSDN&prefix=%E7%B2%89%E4%B8%9D&query=%2F%2Fli%5B4%5D%2Fa%5B1%5D%2Fdiv%5B%40class%3D%27user-profile-statistics-num%27%5D%5B1%5D%2Ftext%28%29%5B1%5D&url=https%3A%2F%2Fblog.csdn.net%2Fqq_32596527&logo=data:image/x-icon;base64, ">
  </a>

  <a target="_blank" href="https://blog.csdn.net/qq_32596527">
    <img alt="CSDN 访问" src="https://img.shields.io/badge/dynamic/xml?color=orange&label=CSDN&prefix=%E8%AE%BF%E9%97%AE&query=//span[1]/div[@class='user-profile-statistics-num'][1]/text()[1]&url=https%3A%2F%2Fblog.csdn.net%2Fqq_32596527&logo=data:image/x-icon;base64, ">
  </a>

  <a target="_blank" href="https://blog.csdn.net/qq_32596527">
    <img alt="CSDN 博客" src="https://img.shields.io/badge/dynamic/json?color=orange&label=CSDN&prefix=%E5%8D%9A%E5%AE%A2&query=%24.data.blog&suffix=%E7%AF%87&url=https%3A%2F%2Fblog.csdn.net%2Fcommunity%2Fhome-api%2Fv1%2Fget-tab-total%3Fusername%3Dqq_32596527&logo=data:image/x-icon;base64, ">
  </a>

  <a target="_blank" href="https://www.jetbrains.com/idea">
    <img alt="IntelliJ IDEA" src="https://img.shields.io/static/v1?logo=data:image/png;base64, &message=IntelliJ IDEA">
  </a>

  <a target="_blank" href="https://github.com/xuxiaowei-cloud/xuxiaowei-cloud">
    <img alt="GitHub stars" src="https://img.shields.io/github/stars/xuxiaowei-cloud/xuxiaowei-cloud?logo=github">
  </a>

  <a target="_blank" href="https://github.com/xuxiaowei-cloud/xuxiaowei-cloud">
    <img alt="GitHub forks" src="https://img.shields.io/github/forks/xuxiaowei-cloud/xuxiaowei-cloud?logo=github">
  </a>

  <a target="_blank" href="https://github.com/xuxiaowei-cloud/xuxiaowei-cloud">
    <img alt="GitHub watchers" src="https://img.shields.io/github/watchers/xuxiaowei-cloud/xuxiaowei-cloud?logo=github">
  </a>

  <a target="_blank" href="https://github.com/xuxiaowei-cloud/xuxiaowei-cloud">
    <img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/xuxiaowei-cloud/xuxiaowei-cloud">
  </a>

  <a target="_blank" href="https://gitee.com/xuxiaowei-cloud/xuxiaowei-cloud">
    <img alt="码云Gitee stars" src="https://gitee.com/xuxiaowei-cloud/xuxiaowei-cloud/badge/star.svg?theme=blue">
  </a>

  <a target="_blank" href="https://gitee.com/xuxiaowei-cloud/xuxiaowei-cloud">
    <img alt="码云Gitee forks" src="https://gitee.com/xuxiaowei-cloud/xuxiaowei-cloud/badge/fork.svg?theme=blue">
  </a>

  <a target="_blank" href="https://gitlab.com/xuxiaowei-cloud/xuxiaowei-cloud">
    <img alt="Gitlab stars" src="https://badgen.net/gitlab/stars/xuxiaowei-cloud/xuxiaowei-cloud?icon=gitlab">
  </a>

  <a target="_blank" href="https://gitlab.com/xuxiaowei-cloud/xuxiaowei-cloud">
    <img alt="Gitlab forks" src="https://badgen.net/gitlab/forks/xuxiaowei-cloud/xuxiaowei-cloud?icon=gitlab">
  </a>

  <a target="_blank" href="https://github.com/xuxiaowei-cloud/xuxiaowei-cloud">
    <img alt="OSCS Status" src="https://www.oscs1024.com/platform/badge/xuxiaowei-cloud/xuxiaowei-cloud.svg?size=small">
  </a>

  <a target="_blank" href="https://github.com/xuxiaowei-cloud/xuxiaowei-cloud">
    <img alt="total lines" src="https://tokei.rs/b1/github/xuxiaowei-cloud/xuxiaowei-cloud">
  </a>

  <a target="_blank" href="https://github.com/xuxiaowei-cloud/xuxiaowei-cloud/blob/main/pom.xml">
    <img alt="Spring Boot" src="https://img.shields.io/static/v1?logo=Spring Boot&message=2.7.15&color=blue">
  </a>

  <a target="_blank" href="https://github.com/xuxiaowei-cloud/xuxiaowei-cloud/blob/main/pom.xml">
    <img alt="Spring Cloud" src="https://img.shields.io/static/v1?label=Spring Cloud&message=2021.0.8&color=blue">
  </a>

  <a target="_blank" href="https://github.com/xuxiaowei-cloud/xuxiaowei-cloud/blob/main/pom.xml">
    <img alt="Alibaba Cloud" src="https://img.shields.io/static/v1?logo=Alibaba Cloud&message=2021.0.5.0&color=blue">
  </a>

  <a target="_blank" href="https://github.com/xuxiaowei-cloud/xuxiaowei-cloud/blob/main/pom.xml">
    <img alt="OAuth 2.1" src="https://img.shields.io/static/v1?label=OAuth 2.1&message=0.4.3&color=blue">
  </a>

  <a target="_blank" href="https://github.com/dragonwell-project/dragonwell8/releases/tag/dragonwell-standard-8.15.16_jdk8u372-ga">
    <img alt="JDK" src="https://img.shields.io/badge/JDK-1.8.0_372-blue.svg"/>
  </a>

  <a target="_blank" href="https://github.com/xuxiaowei-cloud/xuxiaowei-cloud/blob/main/pom.xml">
    <img alt="Redis" src="https://img.shields.io/static/v1?logo=Redis&message=7.0.8&color=blue">
  </a>

  <a target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0">
    <img alt="code style" src="https://img.shields.io/badge/license-Apache 2-blue">
  </a>
</div>

## 相关项目

- xuxiaowei-cloud-next
    - 使用 Spring Boot 3.x.x，将仓库地址后面增加 `-next` 即可（全平台仓库同名）
        1. [极狐 GitLab](https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud-next)
        2. [码云 Gitee](https://gitee.com/xuxiaowei-cloud/xuxiaowei-cloud-next)
        3. [GitCode](https://gitcode.net/xuxiaowei-cloud/xuxiaowei-cloud-next)
        4. [GitLink](https://gitlink.org.cn/xuxiaowei-cloud/xuxiaowei-cloud-next)
        5. [GitHub](https://github.com/xuxiaowei-cloud/xuxiaowei-cloud-next)
        6. [GitLab](https://gitlab.com/xuxiaowei-cloud/xuxiaowei-cloud-next)

## [代码格式规范 spring-javaformat](https://github.com/spring-io/spring-javaformat)

- [代码贡献说明](https://www.yuque.com/xuxiaowei-com-cn/xuxiaowei-cloud/how-to-contribute-code)
- IntelliJ IDEA
  -
  项目添加 [io.spring.javaformat:spring-javaformat-maven-plugin](https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-maven-plugin)
  依赖之后，可安装自动格式化插件（无需运行下列命令）：[spring-javaformat-intellij-idea-plugin](https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-intellij-idea-plugin)

  ```shell
  ./mvnw spring-javaformat:apply
  ```
  或
  ```shell
  mvn spring-javaformat:apply
  ```

## [本项目文档](https://www.yuque.com/xuxiaowei-com-cn/xuxiaowei-cloud)

## 依赖版本对比

### 后端

- 更新日期：2023-09-18

| 依赖                          | 本项目版本       | 新版                                                                                                                                                                                                                                                        | 说明                                                                                                                             |
|-----------------------------|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|
| spring-boot                 | v2.7.15     | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&versionPrefix=2.&metadataUrl=https://s01.oss.sonatype.org/content/repositories/releases/org/springframework/boot/spring-boot-dependencies/maven-metadata.xml">                        | 限制 Spring Boot 2.x，<a href="https://gitee.com/xuxiaowei-cloud/xuxiaowei-cloud-next">点击查看 Spring Boot 3.x.x 的项目</a>             |
| spring-cloud                | v2021.0.8   | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&versionPrefix=2021&metadataUrl=https://s01.oss.sonatype.org/content/repositories/releases/org/springframework/cloud/spring-cloud-dependencies/maven-metadata.xml">                    | 限制 Spring Boot 2.x                                                                                                             |
| spring-cloud-alibaba        | v2021.0.5.0 | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&versionPrefix=2021.0&metadataUrl=https://oss.sonatype.org/content/repositories/releases/com/alibaba/cloud/spring-cloud-alibaba-dependencies/maven-metadata.xml">                      | 限制 Spring Boot 2.x，<a href="https://github.com/alibaba/spring-cloud-alibaba/blob/2022.x/README-zh.md">Spring Cloud Alibaba</a> |
| spring-boot-admin           | v2.7.11     | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&versionPrefix=2.&metadataUrl=https://oss.sonatype.org/content/repositories/releases/de/codecentric/spring-boot-admin-dependencies/maven-metadata.xml">                                | 限制 Spring Boot 2.x                                                                                                             |
| spring-authorization-server | v0.4.3      | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&versionPrefix=0.&metadataUrl=https://s01.oss.sonatype.org/content/repositories/releases/org/springframework/security/spring-security-oauth2-authorization-server/maven-metadata.xml"> | 限制 Spring Boot 2.x                                                                                                             |
| mybatis                     | v2.3.1      | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&versionPrefix=2.&metadataUrl=https://oss.sonatype.org/content/repositories/releases/org/mybatis/spring/boot/mybatis-spring-boot-starter/maven-metadata.xml">                          | 限制 Spring Boot 2.x，指 mybatis-spring-boot-starter                                                                               |
| mybatis-plus                | v3.5.3.2    | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&metadataUrl=https://oss.sonatype.org/content/repositories/releases/com/baomidou/mybatis-plus-boot-starter/maven-metadata.xml">                                                        |                                                                                                                                |
| dynamic-datasource          | v3.6.1      | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&versionPrefix=3.&metadataUrl=https://oss.sonatype.org/content/repositories/releases/com/baomidou/dynamic-datasource-spring-boot-starter/maven-metadata.xml">                          | 限制 JDK 8，指 dynamic-datasource-spring-boot-starter                                                                              |
| springdoc                   | v1.7.0      | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&metadataUrl=https://oss.sonatype.org/content/repositories/releases/org/springdoc/springdoc-openapi-ui/maven-metadata.xml">                                                            | 用于生成 API doc，支持从 javadoc 中获取字段注释                                                                                               |
| guava                       | v32.1.2-jre | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&metadataUrl=https://oss.sonatype.org/content/repositories/releases/com/google/guava/guava/maven-metadata.xml">                                                                        |                                                                                                                                |
| fastjson                    | v2.0.40     | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&metadataUrl=https://oss.sonatype.org/content/repositories/releases/com/alibaba/fastjson/maven-metadata.xml">                                                                          | 使用的是不带英文后缀的版本                                                                                                                  |
| hutool                      | v5.8.22     | <img src="https://img.shields.io/maven-metadata/v?label=&color=blue&metadataUrl=https://oss.sonatype.org/content/repositories/releases/cn/hutool/hutool-all/maven-metadata.xml">                                                                          |                                                                                                                                |

### 前端

- 更新日期：2023-09-18

| 依赖                               | 本项目版本  | 新版                                                                          | 说明 |
|----------------------------------|--------|-----------------------------------------------------------------------------|----|
| @element-plus/icons-vue          | 2.1.0  | <img src="https://img.shields.io/npm/v/@element-plus/icons-vue">            |    |
| @tauri-apps/api                  | 1.4.0  | <img src="https://img.shields.io/npm/v/@tauri-apps/api">                    |    |
| @toast-ui/editor                 | 3.2.2  | <img src="https://img.shields.io/npm/v/@toast-ui/editor">                   |    |
| @wangeditor/editor-for-vue       | 5.1.12 | <img src="https://img.shields.io/npm/v/@wangeditor/editor-for-vue/next">    |    |
| axios                            | 1.5.0  | <img src="https://img.shields.io/npm/v/axios">                              |    |
| crypto-js                        | 4.1.1  | <img src="https://img.shields.io/npm/v/crypto-js">                          |    |
| echarts                          | 5.4.3  | <img src="https://img.shields.io/npm/v/echarts">                            |    |
| element-plus                     | 2.3.14 | <img src="https://img.shields.io/npm/v/element-plus">                       |    |
| js-cookie                        | 3.0.5  | <img src="https://img.shields.io/npm/v/js-cookie">                          |    |
| jsencrypt                        | 3.3.2  | <img src="https://img.shields.io/npm/v/jsencrypt">                          |    |
| pinia                            | 2.1.6  | <img src="https://img.shields.io/npm/v/pinia">                              |    |
| sockjs-client                    | 1.6.1  | <img src="https://img.shields.io/npm/v/sockjs-client">                      |    |
| stompjs                          | 2.3.3  | <img src="https://img.shields.io/npm/v/stompjs">                            |    |
| vue                              | 3.3.4  | <img src="https://img.shields.io/npm/v/vue">                                |    |
| vue-clipboard3                   | 2.0.0  | <img src="https://img.shields.io/npm/v/vue-clipboard3">                     |    |
| vue-echarts                      | 6.6.1  | <img src="https://img.shields.io/npm/v/vue-echarts">                        |    |
| vue-router                       | 4.2.4  | <img src="https://img.shields.io/npm/v/vue-router">                         |    |
|                                  |        |                                                                             |    |
| @tauri-apps/cli                  | 1.4.0  | <img src="https://img.shields.io/npm/v/@tauri-apps/cli">                    |    |
| @types/crypto-js                 | 4.1.2  | <img src="https://img.shields.io/npm/v/@types/crypto-js">                   |    |
| @types/node                      | 20.6.2 | <img src="https://img.shields.io/npm/v/@types/node">                        |    |
| @typescript-eslint/eslint-plugin | 6.7.0  | <img src="https://img.shields.io/npm/v/@typescript-eslint/eslint-plugin">   |    |
| @typescript-eslint/parser        | 6.7.0  | <img src="https://img.shields.io/npm/v/@typescript-eslint/parser">          |    |
| @vitejs/plugin-vue               | 4.3.4  | <img src="https://img.shields.io/npm/v/@vitejs/plugin-vue">                 |    |
| eslint                           | 8.49.0 | <img src="https://img.shields.io/npm/v/eslint">                             |    |
| eslint-config-standard           | 17.1.0 | <img src="https://img.shields.io/npm/v/eslint-config-standard">             |    |
| eslint-plugin-import             | 2.28.1 | <img src="https://img.shields.io/npm/v/eslint-plugin-import">               |    |
| eslint-plugin-n                  | 16.1.0 | <img src="https://img.shields.io/npm/v/eslint-plugin-n">                    |    |
| eslint-plugin-promise            | 6.1.1  | <img src="https://img.shields.io/npm/v/eslint-plugin-promise">              |    |
| eslint-plugin-vue                | 9.17.0 | <img src="https://img.shields.io/npm/v/eslint-plugin-vue">                  |    |
| lint-staged                      | 14.0.1 | <img src="https://img.shields.io/npm/v/lint-staged">                        |    |
| terser                           | 5.19.4 | <img src="https://img.shields.io/npm/v/terser">                             |    |
| typescript                       | 5.2.2  | <img src="https://img.shields.io/npm/v/typescript">                         |    |
| unocss                           | 0.55.7 | <img src="https://img.shields.io/npm/v/unocss?color=blue">                  |    |
| unplugin-auto-import             | 0.16.6 | <img src="https://img.shields.io/npm/v/unplugin-auto-import?color=blue">    |    |
| unplugin-vue-components          | 0.25.2 | <img src="https://img.shields.io/npm/v/unplugin-vue-components?color=blue"> |    |
| vite                             | 4.4.9  | <img src="https://img.shields.io/npm/v/vite">                               |    |
| vue-tsc                          | 1.8.11 | <img src="https://img.shields.io/npm/v/vue-tsc">                            |    |

## 模块

- [依赖分析](./docs/README-dependencies.md)

```
cloud.xuxiaowei
├──xuxiaowei-cloud-starter-parent           // 微服务父模块
│    └──gateway                             // 网关服务
│    └──admin-server                        // 监控（管理）服务
│    └──passport-ui                         // 登录服务UI
│    └──passport                            // 登录服务
│    └──ui                                  // UI
│    └──resource-services-parent            // 资源服务父模块
│        └──canal                           // 阿里巴巴 MySQL binlog 增量订阅、消费服务
│        └──file                            // 文件服务
│        └──master-data                     // 主数据服务
│        └──user                            // 用户服务
│        └──websocket                       // WebSocket 服务
│        └──webservice                      // WebService 服务
│        └──wechat-miniprogram              // 微信小程序服务
│        └──wechat-offiaccount              // 微信公众号服务
│    └──utils                               // 工具类
│    └──cloud-commons-parent                // 微服务公共组件父模块
│        └──cloud-starter-core              // 核心组件
│        └──cloud-starter-idempotent        // 幂等组件
│        └──cloud-starter-loadbalancer      // 负载均衡组件
│        └──cloud-starter-log               // 日志组件
│        └──cloud-starter-mybatis           // MyBatis 组件
│        └──cloud-starter-oauth2            // OAuth2 组件
│        └──cloud-starter-openfeign         // OpenFeign 组件
│        └──cloud-starter-redis             // Redis 组件
│        └──cloud-starter-session-redis     // Session Redis 组件
│        └──cloud-starter-validation        // 验证组件
│    └──xxl-job-admin                       // XXL JOB Admin
│    └──example-parent                      // 示例模块（独立模块）
│        └──oauth2-client                   // OAuth 2.0 客户端（独立服务）
│        └──cxf-client                      // CXF 2.0 客户端（独立服务）
```

### 端口

- 注意：本项目主要使用 `IDEA`
  编写，为了方便，引入了环境变量插件 [EnvFile](https://plugins.jetbrains.com/plugin/7861-envfile)，[环境变量文件](./.env.dev)
  ，如果需要调整，请自行修改该文件或删除

| 模块                 | 模块名称                        | 域名（虚拟）                                 | 端口    | kubernetes Service 端口 |
|--------------------|-----------------------------|----------------------------------------|-------|-----------------------|
| Nacos              | 注册、配置中心                     | nacos.example.xuxiaowei.cloud          | 8848  | 30848/31848           |
| MySQL              | 数据库                         | mysql.example.xuxiaowei.cloud          | 3306  | 30306                 |
| Redis              | 数据库                         | redis.example.xuxiaowei.cloud          | 6379  | 30379                 |
| canal-deployer     | 阿里巴巴 MySQL binlog 增量订阅&消费组件 | canal-deployer.example.xuxiaowei.cloud | 11111 | 暂未部署                  |
| sentinel-dashboard | 流控防护组件                      |                                        | 22222 | 32222                 |
|                    |                             |                                        |       |                       |
| ui                 | UI                          | example.xuxiaowei.cloud                | 1001  | 30180                 |
| gateway            | 网关                          | gateway.example.xuxiaowei.cloud        | 1101  | 31101                 |
| admin-server       | 监控（管理）                      | admin-server.example.xuxiaowei.cloud   | 1201  | 31201                 |
| passport           | 登录                          | passport.example.xuxiaowei.cloud       | 1401  | 31401                 |
| passport-ui        | 登录UI                        | passport.example.xuxiaowei.cloud       | 1411  | 放在 passport 中部署       |
| canal              | 阿里巴巴 MySQL binlog 增量订阅、消费服务 |                                        | 1601  | 31601                 |
| user               | 用户服务                        |                                        | 1701  | 31701                 |
| websocket          | WebSocket 服务                |                                        | 1801  | 31801                 |
| webservice         | WebService 服务               |                                        | 1901  | 31901                 |
| wechat-miniprogram | 微信小程序服务                     |                                        | 2001  | 32001                 |
| wechat-offiaccount | 微信公众号服务                     |                                        | 2101  | 32101                 |
| master-data        | 主数据服务                       |                                        | 2201  | 32201                 |
| file               | 文件服务                        |                                        | 2301  | 32301                 |
| xxl-job-admin      | XXL Job Admin               |                                        | 5101  | 30101                 |
|                    |                             |                                        |       |                       |
| oauth2-client      | OAuth 2.0 客户端（独立服务）         |                                        | 10001 | 以下是仅用于测试的客户端，无需部署     |
| cxf-client         | CXF 客户端（独立服务）               |                                        | 10002 |                       |

- 流控防护限流端口

| 模块                 | 模块名称          | 限流端口 | 
|--------------------|---------------|------|
| gateway            | 网关            | 9001 |
| passport           | 登录            | 9002 |
| user               | 用户服务          | 9003 |
| websocket          | WebSocket 服务  | 9004 |
| webservice         | WebService 服务 | 9005 |
| wechat-miniprogram | 微信小程序服务       | 9006 |
| wechat-offiaccount | 微信公众号服务       | 9007 |
| master-data        | 主数据服务         | 9008 |
| file               | 文件服务          | 9009 |

### 租户、用户名与密码

| 租户ID | 租户名        | 账户名/用户名     | 密码  | 启用 | 说明            |
|------|------------|-------------|-----|----|---------------|
| 1    | 徐晓伟工作室（默认） | xuxiaowei   | 123 | 1  |               |
| 1    | 徐晓伟工作室（默认） | xuxiaowei-2 | 123 | 1  | 相同组织不能有重复的用户名 |
| 2    | 青岛XX公司     | xuxiaowei   | 123 | 1  | 不同组织可以有相同的用户名 |
| 3    | 上海XX公司     | zhangsan    | 123 | 1  |               |

### 其他服务

| 名称               | 地址                                                  | 账户名   | 密码        |
|------------------|-----------------------------------------------------|-------|-----------|
| XXL Job          | http://127.0.0.1:5101/xxl-job-admin                 | admin | 123456    |
| 网关 Swagger       | http://127.0.0.1:1101/webjars/swagger-ui/index.html |       |           |
| 服务 Swagger       | http://127.0.0.1:端口/swagger-ui/index.html           |       |           |
| docker 守护程序的 URL | http://host.docker.example.xuxiaowei.cloud:2375     |       |           |
| docker 私库 URL    | registry.docker.example.xuxiaowei.cloud             | admin | xuxiaowei |

### [权限](docs/README-authority.md)

### 租户、客户ID与秘钥

| tenant_id | tenant_name |                               | id | client_id                                    | client_id_issued_at | client_secret                                    | client_secret_expires_at | client_authentication_methods          | authorization_grant_types                                    | redirect_uris                                                                                                                                                                                                | scopes                  | require-authorization-consent | authorization-code-time-to-live | access-token-time-to-live | refresh-token-time-to-live | reuse-refresh-tokens | id-token-signature-algorithm | token-endpoint-authentication-signing-algorithm | access-token-format |
|-----------|-------------|-------------------------------|----|----------------------------------------------|---------------------|--------------------------------------------------|--------------------------|----------------------------------------|--------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------|-------------------------------|---------------------------------|---------------------------|----------------------------|----------------------|------------------------------|-------------------------------------------------|---------------------|
| 租户ID      | 租户名         | 说明                            | 主键 | 客户ID                                         | 客户ID发布时间            | 客户秘钥                                             | 客户秘钥过期时间                 | 授权认证方法                                 | 授权类型                                                         | 授权码重定向地址                                                                                                                                                                                                     | 范围                      | 是否需要客户授权同意                    | 授权code有效时间                      | 授权Token有效时间               | 刷新Token有效时间                | 重复使用刷新Token          | 授权Token签名算法                  | private_key_jwt、client_secret_jwt 算法            | 授权Token的格式          |
| 1         | 徐晓伟工作室（默认）  | 网站                            | 1  | xuxiaowei_client_id                          | 2022-05-30 17:17:41 | xuxiaowei_client_secret                          |                          | client_secret_post,client_secret_basic | refresh_token,implicit,client_credentials,authorization_code | http://127.0.0.1:1401/code/xuxiaowei_client_id,http://gateway.example.xuxiaowei.cloud:1101/passport/code/xuxiaowei_client_id,https://gateway.example.xuxiaowei.cloud/passport/code/xuxiaowei_client_id       | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | 微信小程序使用                       | 2  | xuxiaowei_client_wechat_miniprogram_id       | 2022-05-30 17:17:41 | xuxiaowei_client_wechat_miniprogram_secret       |                          | client_secret_post,client_secret_basic | refresh_token,wechat_miniprogram                             |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | 微信公众号使用                       | 3  | xuxiaowei_client_wechat_offiaccount_id       | 2022-05-30 17:17:41 | xuxiaowei_client_wechat_offiaccount_secret       |                          | client_secret_post,client_secret_basic | refresh_token,wechat_offiaccount                             |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | 微信扫码使用                        | 4  | xuxiaowei_client_wechat_oplatform_id         | 2022-05-30 17:17:41 | xuxiaowei_client_wechat_oplatform_secret         |                          | client_secret_post,client_secret_basic | refresh_token,wechat_oplatform_website                       |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | 码云Gitee使用                     | 5  | xuxiaowei_client_gitee_id                    | 2022-05-30 17:17:41 | xuxiaowei_client_gitee_secret                    |                          | client_secret_post,client_secret_basic | refresh_token,gitee                                          |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | QQ扫码使用                        | 6  | xuxiaowei_client_qq_website_id               | 2022-05-30 17:17:41 | xuxiaowei_client_qq_website_secret               |                          | client_secret_post,client_secret_basic | refresh_token,qq_website                                     |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | 微博扫码使用                        | 7  | xuxiaowei_client_weibo_id                    | 2022-05-30 17:17:41 | xuxiaowei_client_weibo_secret                    |                          | client_secret_post,client_secret_basic | refresh_token,weibo_website                                  |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | gitlab使用                      | 8  | xuxiaowei_client_gitlab_id                   | 2022-05-30 17:17:41 | xuxiaowei_client_gitlab_secret                   |                          | client_secret_post,client_secret_basic | refresh_token,gitlab                                         |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | 企业微信扫码使用                      | 9  | xuxiaowei_client_wechat_work_website_id      | 2022-05-30 17:17:41 | xuxiaowei_client_wechat_work_website_secret      |                          | client_secret_post,client_secret_basic | refresh_token,wechat_work_website                            |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | github使用                      | 10 | xuxiaowei_client_github_id                   | 2022-05-30 17:17:41 | xuxiaowei_client_github_secret                   |                          | client_secret_post,client_secret_basic | refresh_token,github                                         |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | 钉钉dingtalk使用                  | 11 | xuxiaowei_client_dingtalk_id                 | 2022-05-30 17:17:41 | xuxiaowei_client_dingtalk_secret                 |                          | client_secret_post,client_secret_basic | refresh_token,dingtalk                                       |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | QQ小程序使用                       | 12 | xuxiaowei_client_qq_miniprogram_id           | 2022-05-30 17:17:41 | xuxiaowei_client_qq_miniprogram_secret           |                          | client_secret_post,client_secret_basic | refresh_token,qq_miniprogram                                 |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | 支付宝小程序使用                      | 13 | xuxiaowei_client_alipay_miniprogram_id       | 2022-05-30 17:17:41 | xuxiaowei_client_alipay_miniprogram_secret       |                          | client_secret_post,client_secret_basic | refresh_token,alipay_miniprogram                             |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | 支付宝网站应用使用                     | 14 | xuxiaowei_client_alipay_oplatform_website_id | 2022-05-30 17:17:41 | xuxiaowei_client_alipay_oplatform_website_secret |                          | client_secret_post,client_secret_basic | refresh_token,alipay_oplatform_website                       |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | 飞书网页应用使用                      | 15 | xuxiaowei_client_feishu_webpage_id           | 2022-05-30 17:17:41 | xuxiaowei_client_feishu_webpage_secret           |                          | client_secret_post,client_secret_basic | refresh_token,feishu_webpage                                 |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 1         | 徐晓伟工作室（默认）  | 使用 client_secret_jwt 验证客户凭证使用 | 16 | xuxiaowei_client_client_secret_jwt_id        | 2022-05-30 17:17:41 | 6c63d616146a4c3db7d0d2f3ec6d93ce                 |                          | client_secret_jwt                      | client_credentials                                           |                                                                                                                                                                                                              | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        | HS256                                           | self-contained      |
| 2         | 青岛XX公司      | 网站                            | 17 | tenant_id_1_client_id                        | 2022-05-30 17:17:41 | tenant_id_1_client_secret                        |                          | client_secret_post,client_secret_basic | refresh_token,implicit,client_credentials,authorization_code | http://127.0.0.1:1401/code/tenant_id_1_client_id,http://gateway.example.xuxiaowei.cloud:1101/passport/code/tenant_id_1_client_id,https://gateway.example.xuxiaowei.cloud/passport/code/tenant_id_1_client_id | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |
| 3         | 上海XX公司      | 网站                            | 18 | tenant_id_2_client_id                        | 2022-05-30 17:17:41 | tenant_id_2_client_secret                        |                          | client_secret_post,client_secret_basic | refresh_token,implicit,client_credentials,authorization_code | http://127.0.0.1:1401/code/tenant_id_2_client_id,http://gateway.example.xuxiaowei.cloud:1101/passport/code/tenant_id_2_client_id,https://gateway.example.xuxiaowei.cloud/passport/code/tenant_id_2_client_id | snsapi_base,snsapi_info | false                         | 300                             | 43200                     | 2592000                    | true                 | RS256                        |                                                 | self-contained      |

- authorization_grant_types
    - 授权码模式 authorization_code
    - 刷新Token权限 refresh_token
    - 客户端凭证模式 client_credentials
    - 密码模式 password
    - 简化模式 implicit
    - 微信小程序（个人开发适配 OAuth 2.1、微信小程序的授权方式） wechat_miniprogram
    - 微信公众号（个人开发适配 OAuth 2.1、微信公众号的授权方式） wechat_offiaccount
    - 微信扫码（个人开发适配 OAuth 2.1、微信扫码的授权方式） wechat_oplatform_website
    - 码云（个人开发适配 OAuth 2.1、码云的授权方式） gitee
    - QQ扫码（个人开发适配 OAuth 2.1、QQ扫码的授权方式） qq_website
    - 微博扫码（个人开发适配 OAuth 2.1、微博扫码的授权方式） weibo_website
    - gitlab授权（个人开发适配 OAuth 2.1、gitlab的授权方式） gitlab
    - 企业微信扫码（个人开发适配 OAuth 2.1、企业微信扫码的授权方式） wechat_work_website
    - github授权（个人开发适配 OAuth 2.1、gitlab的授权方式） github
    - 钉钉dingtalk扫码（个人开发适配 OAuth 2.1、钉钉dingtalk扫码的授权方式） dingtalk
    - 支付宝小程序（个人开发适配 OAuth 2.1、支付宝小程序的授权方式） alipay_miniprogram
    - 支付宝网站应用（个人开发适配 OAuth 2.1、支付宝网站应用的授权方式） alipay_oplatform_website
    - 飞书网页应用（个人开发适配 OAuth 2.1、飞书网页应用的授权方式） feishu_webpage

## 仓库、分支、提交记录

1. 使用了哪六个仓库？
    1. [极狐 GitLab](https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud)
    2. [码云 Gitee](https://gitee.com/xuxiaowei-cloud/xuxiaowei-cloud)
    3. [GitCode](https://gitcode.net/xuxiaowei-cloud/xuxiaowei-cloud)
    4. [GitLink](https://gitlink.org.cn/xuxiaowei-cloud/xuxiaowei-cloud)
    5. [GitHub](https://github.com/xuxiaowei-cloud/xuxiaowei-cloud)
    6. [GitLab](https://gitlab.com/xuxiaowei-cloud/xuxiaowei-cloud)

2. 上述六个仓库以哪个为准？其余仓库何时同步？
    1. 以 [极狐 GitLab](https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud) 为准
    2. 其余仓库每日同步

3. 提交记录中的地址为何不准确？
    1. 由于本项目使用了多个代码托管平台，并且某些代码托管平台的规则相同，导致提交注释中简写地址不存在或者不匹配，请根据情况区分后到各个平台查看：
        1. 如：`dependabot[bot] <support@github.com>` 提交的PR，全部都在GitHub平台

4. 各个仓库的作用？

| 仓库地址                                                              | 作用         | 说明                                                                                                                                                                                                                                                                    |
|-------------------------------------------------------------------|------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [极狐 GitLab](https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud)  | 国内备份仓库，主仓库 | 供国内用户访问、提问、下载资源、GitLab Runner CI/CD 流水线打包/制作Docker镜像、Kubernetes(k8s)/shell/docker 发布项目使用，开源项目 [免费使用 GitLab Runner](https://forum.gitlab.cn/t/topic/1527)                                                                                                              |
| [码云 Gitee](https://gitee.com/xuxiaowei-cloud/xuxiaowei-cloud)     | 国内备份仓库     | 已关闭该仓库的流水线，后续仅在 [极狐 GitLab](https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud/-/pipelines) 上运行流水线，由于技术栈（项目使用 GitLab Runner CI/CD 流水线测试与发布）及不可抗力的因素，将来会关闭 Gitee 的 issues，并将历史数据迁移到 [极狐 GitLab](https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud)                  |
| [GitCode](https://gitcode.net/xuxiaowei-cloud/xuxiaowei-cloud)    | 国内备份仓库     | 已关闭该仓库的流水线，后续仅在 [极狐 GitLab](https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud/-/pipelines) 上运行流水线                                                                                                                                                                   |
| [GitLink](https://gitlink.org.cn/xuxiaowei-cloud/xuxiaowei-cloud) | 国内备份仓库     |                                                                                                                                                                                                                                                                       |
| [GitHub](https://github.com/xuxiaowei-cloud/xuxiaowei-cloud)      | 国外备份仓库     | 使用 [CodeQL](https://github.com/xuxiaowei-cloud/xuxiaowei-cloud/actions/workflows/codeql.yml) 每日扫描项目中的 `main` 分支是否存在漏洞、使用 [dependabot](https://github.com/xuxiaowei-cloud/xuxiaowei-cloud/blob/main/.github/dependabot.yml) 每日扫描项目中的 `main` 分支是否需要升级依赖并创建对应的 `PR` 与 测试 |
| [GitLab](https://gitlab.com/xuxiaowei-cloud/xuxiaowei-cloud)      | 国外备份仓库     | 已关闭该仓库的流水线，后续仅在 [极狐 GitLab](https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud/-/pipelines) 上运行流水线                                                                                                                                                                   |

1. 各分支的作用？
    1. `main`
        - 主分支
        - 用于在 [极狐GitLab流水线](https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud/-/pipelines) 上执行打包/测试/扫描依赖漏洞等
    2. `k8s`
        - 用于 GitLab Runner 在 kubernetes（k8s） 类型的执行器执行 CI/CD
        - 使用 kubernetes（k8s） 编译代码打包
        - 使用 kubernetes（k8s） 将打包后的jar包制作成docker镜像
        - 使用 kubernetes（k8s） 进行发布
        - 与主分支代码相同（定时同步/测试），流水线根据分支名进行触发
    3. `shell`
        - 用于 GitLab Runner 在 shell 类型的执行器执行 CI/CD
        - 使用 shell 命令编译代码打包
        - 使用 shell 命令创建 Linux service 服务进行发布
        - 与主分支代码相同（定时同步/测试），流水线根据分支名进行触发
    4. `docker`
        - 用于 GitLab Runner 在 docker 类型的执行器执行 CI/CD
        - 使用 docker 编译代码打包
        - 使用 docker 将打包后的jar包制作成docker镜像
        - 使用 docker 进行发布
        - 与主分支代码相同（定时同步/测试），流水线根据分支名进行触发
    5. `xuxiaowei`开头的分支
        - 个人分支，按功能`PR`到主分支`main`
    6. `pages`
        - 文档分支
    7. `archive/OAuth2.0`
        - 归档版本分支，使用 OAuth 2.0 进行授权，后续不再维护（主分支使用 OAuth 2.1）
    8. `archive/only-passport`
        - 归档版本分支，删除了`passport-ui`模块，在`passport`中使用`CDN`引入`element-plus`、`vue`进行网页编写（不推荐，后续不再维护）
    9. 此处未说明的分支，请勿使用
    10. 已上包含 CI/CD 的分支
        1. 分支内的各阶段，可交替使用，如：使用 docker 编译代码打包、使用 docker 将打包后的jar包制作成docker镜像，使用
           kubernetes（k8s） 进行发布。如何选择请使用者自行组合。
        2. 这些分支代码相同，CI/CD 根据分支名进行触发，即：想使用某个分支的某些执行器执行 CI/CD，就将代码 `PR`
           （推荐使用PR，方便一键回滚代码、将回滚的内容进行恢复） 到指定的分支。

## 批量添加远端仓库地址

<details>
<summary>点击展开</summary>

git remote add gitee https://gitee.com/xuxiaowei-cloud/xuxiaowei-cloud.git

git remote add gitlab https://gitlab.com/xuxiaowei-cloud/xuxiaowei-cloud.git

git remote add jihulab https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud.git

git remote add github https://github.com/xuxiaowei-cloud/xuxiaowei-cloud.git

git remote add gitcode https://gitcode.net/xuxiaowei-cloud/xuxiaowei-cloud.git

git remote add gitlink https://gitlink.org.cn/xuxiaowei-cloud/xuxiaowei-cloud.git
</details>

## 鸣谢

1. 感谢 [![墨菲安全](./docs/static/murphysec.png)](https://www.murphysec.com/) 提供安全技术支持
2. 感谢 [![jetbrains](./docs/static/jb_beam.svg)](https://www.jetbrains.com/)
   提供开发工具 [![IDEA](./docs/static/IntelliJ_IDEA_icon.svg)](https://www.jetbrains.com/idea) 的免费授权

## Stargazers over time

[![Stargazers over time](https://starchart.cc/xuxiaowei-cloud/xuxiaowei-cloud.svg)](https://starchart.cc/xuxiaowei-cloud/xuxiaowei-cloud)
