# g2rain-cms(内容管理微服务)

g2rain-cms 是面向多租户 SaaS 的 内容管理(CMS) 后端微服务:提供站点、空间、栏目、页面、文章与分类、标签及文章—标签关系等能力的 REST API。持久化使用 MyBatis + MySQL,运行期通过 Nacos 做服务发现与动态配置,并集成 Redis 与平台侧 Starter(如 MyBatis 扩展、分页、Web 层统一行为等);默认启用 虚拟线程spring.threads.virtual.enabled: true)。

能力会持续迭代,接口与表结构以仓库代码及 OpenAPI 为准。

源码仓库github.com/g2rain/g2rain-cms (opens new window)

# 与平台能力的衔接

  • 服务发现与配置:与平台其他 Spring Cloud 服务一致,依赖 Nacos;可将数据源、Redis 等敏感配置放在 Nacos 的 g2rain-cms.yml(与 spring.config.import 用法对齐)。
  • 多租户g2rain.data.isolation.enabled 与业务表中的租户/组织字段(如 organ_id)配合,实现数据隔离。
  • Web 层g2rain.web.* 控制登录守卫、身份注入、统一 JSON 异常、Result Mixin 等与基座一致的行为。
  • 前端配套:控制台中的 CMS 能力由子应用 g2rain-cms-app 承载,经网关访问本服务 API。

# 功能域概览

领域 HTTP 前缀(示例) 说明
站点 /web_site 站点维护
空间 /space 内容空间(类型见库表与代码)
栏目 /channel 栏目树;列表 / 页面 / 外链等类型
页面 /page 页面内容
文章 /article 文章主数据
文章分类 /article_category 文章与分类关系
标签 /tag 标签
文章—标签 /article_tag_relation 关联关系

文档与调试:集成 springdoc-openapi;默认 Swagger UI 路径 /swagger-ui.htmlspringdoc.api-docs.path 常为 /v3/api-docs

# 模块结构

g2rain-cms/
├── g2rain-cms-api/       # 对外契约:DTO、校验、OpenAPI 注解等
├── g2rain-cms-biz/       # Controller、Service、DAO、MyBatis XML
├── g2rain-cms-startup/   # 可执行应用入口
└── scripts/cms.sql       # MySQL 建库建表示例

主类位于 startup 模块(如 com.g2rain.Application)。

# 环境要求与构建

  • JDK 25Maven 3.9+
  • 运行期:MySQLRedisNacos
  • 工程依赖若干 com.g2rain 内部构件与 Maven 仓库;本地需能解析对应坐标。
git clone https://github.com/g2rain/g2rain-cms.git
cd g2rain-cms
mvn clean package -DskipTests

运行可执行包或 mvn spring-boot:run(在 g2rain-cms-startup 模块):

  • 默认 HTTP 端口见 g2rain-cms-startup/src/main/resources/application.yml(常见为 8080,可通过 SERVER_PORT 覆盖)。
  • spring.application.name 一般为 g2rain-cms,用于 Nacos 注册名。

# 数据库初始化

在 MySQL 中执行仓库内脚本(按环境修改库名与账号):

mysql -u root -p < scripts/cms.sql

脚本会创建 CMS 相关库表,与 Mapper 命名一致。

# 配置要点

变量 / 配置 说明
SERVER_PORT HTTP 端口
SPRING_PROFILES_ACTIVE Profile,如 dev
NACOS_SERVER_ADDR Nacos 地址
SPRING_CLOUD_NACOS_* 命名空间、分组、鉴权等
g2rain.web.* Web 层开关
g2rain.data.isolation.enabled 多租户数据隔离

数据源与 Redis 等建议放在 Nacos 或环境变量中,勿将生产凭据写入仓库。

# 镜像(Jib)

g2rain-cms-startup 可配置 Jib 构建容器镜像(基础镜像与镜像名以仓库 pom 为准)。典型流程为对 startup 模块执行 package 后再执行 jib:dockerBuild(需本机或 CI 已登录镜像仓库)。

# 相关文档