Skip to content

Repository files navigation

小哈书(XiaoHaShu)

小哈书是一个仿小红书的社交内容平台后端项目,基于 Java 17、Spring Boot 3 和 Spring Cloud Alibaba 构建。项目采用 Maven 多模块与微服务架构,覆盖用户认证、笔记发布、评论互动、关注关系、计数、搜索、对象存储和数据对齐等核心场景。

本仓库主要用于微服务架构与高并发业务实践。当前仓库不包含前端项目、数据库初始化脚本和中间件编排文件,首次运行前需要自行准备基础设施并完成本地配置。

功能概览

  • 手机号验证码、账号密码登录与 Sa-Token 鉴权
  • 用户资料、角色与权限管理
  • 图文笔记发布、编辑、删除、置顶与可见性设置
  • 笔记点赞、收藏及热点数据缓存
  • 评论、子评论与评论点赞
  • 用户关注、取关、粉丝和关注列表
  • 用户、笔记、评论等维度的计数服务
  • 基于 Elasticsearch 与 Canal 的搜索和数据同步
  • 基于 MinIO / 阿里云 OSS 的对象存储
  • 基于 Cassandra 的大文本 KV 存储
  • 基于 Leaf / Snowflake 的分布式 ID 生成
  • 基于 RocketMQ 的异步解耦与最终一致性处理
  • 基于 XXL-JOB 的数据对齐任务

系统架构

flowchart LR
    Client[客户端] --> Gateway[Gateway :8000]
    Gateway --> Auth[认证服务]
    Gateway --> User[用户服务]
    Gateway --> Note[笔记服务]
    Gateway --> Relation[关系服务]
    Gateway --> Comment[评论服务]

    Auth --> User
    User --> OSS[对象存储服务]
    User --> ID[分布式 ID 服务]
    Note --> KV[KV 服务]
    Note --> Count[计数服务]
    Note --> ID
    Comment --> KV
    Comment --> Count

    User -. 事件 .-> MQ[(RocketMQ)]
    Note -. 事件 .-> MQ
    Relation -. 事件 .-> MQ
    Comment -. 事件 .-> MQ
    MQ --> Count
    MQ --> Align[数据对齐服务]

    Search[搜索服务] --> ES[(Elasticsearch)]
    Canal[Canal] --> Search

    Auth & User & Note & Relation & Comment & Count --> Redis[(Redis)]
    User & Note & Relation & Comment & Count --> MySQL[(MySQL)]
    KV --> Cassandra[(Cassandra)]
    Auth & User & Note & Relation & Comment & Count & Search --> Nacos[(Nacos)]
Loading

技术栈

分类 技术
基础框架 Java 17、Spring Boot 3.0.2、Spring Cloud 2022.0.0
微服务 Spring Cloud Alibaba 2022.0.0.0、Nacos、OpenFeign、Gateway、Sentinel
认证鉴权 Sa-Token 1.38.0
数据访问 MyBatis、MySQL、Druid
缓存与存储 Redis、Caffeine、Cassandra、MinIO、阿里云 OSS
消息与任务 RocketMQ、XXL-JOB
搜索与同步 Elasticsearch 7.3.0、Canal
工程工具 Maven、Lombok、MapStruct、Jackson、Guava、Hutool

项目结构

模块 默认端口 说明
xiaoha-framework - 公共组件、统一响应、业务上下文、Jackson 与操作日志 Starter
xiaohashu-gateway 8000 API 网关、路由与统一鉴权
xiaohashu-auth 8080 登录、验证码与认证服务
xiaohashu-oss 8081 MinIO / 阿里云 OSS 文件服务
xiaohashu-user 8082 用户、角色与权限服务
xiaohashu-kv 8084 基于 Cassandra 的内容 KV 服务
xiaohashu-distributed-id-generator 8085 Leaf / Snowflake 分布式 ID 服务
xiaohashu-note 8086 笔记发布、点赞与收藏服务
xiaohashu-user-relation 8087 关注与粉丝关系服务
xiaohashu-count 8090 用户、笔记和评论计数服务
xiaohashu-data-align 8091 数据对齐与定时任务服务
xiaohashu-search 8092 Elasticsearch 搜索与 Canal 同步服务
xiaohashu-comment 8093 评论、子评论与评论点赞服务

带有 -api 后缀的子模块用于定义 Feign 接口和跨服务 DTO,带有 -biz 后缀的子模块包含具体业务实现。

环境要求

必需环境

  • JDK 17
  • Maven 3.8+
  • MySQL 8.x
  • Redis 6.x+
  • Nacos 2.x
  • RocketMQ 4.x

按模块启用的环境

  • Cassandra:xiaohashu-kv
  • MinIO 或阿里云 OSS:xiaohashu-oss
  • Elasticsearch 7.3.x、Canal:xiaohashu-search
  • ZooKeeper、Leaf 数据库:xiaohashu-distributed-id-generator
  • XXL-JOB:xiaohashu-data-align
  • Sentinel Dashboard:xiaohashu-count

本地开发配置默认使用以下地址:Nacos 127.0.0.1:8848、Redis 127.0.0.1:6379、RocketMQ 127.0.0.1:9876、MySQL 127.0.0.1:3307。如本机环境不同,请在启动前修改相应配置。

快速开始

1. 获取项目

git clone https://github.com/yangboxuan726/xiaohashu.git
cd xiaohashu

2. 准备基础设施

至少启动 MySQL、Redis、Nacos 和 RocketMQ。若需要运行全部服务,还需按上文准备 Cassandra、对象存储、Elasticsearch、Canal、ZooKeeper、XXL-JOB 和 Sentinel。

仓库暂未提供数据库初始化 SQL。请根据各模块 domain/dataobject、MyBatis Mapper 与 generatorConfig.xml 准备对应表结构,并为 Leaf 单独创建数据库。

3. 修改配置

各服务的配置主要位于:

<service>/src/main/resources/config/
├── bootstrap.yml
├── application.yml
├── application-dev.yml
└── application-prod.yml

网关配置位于 xiaohashu-gateway/src/main/resources/。请重点检查:

  • Nacos 注册中心与配置中心地址
  • MySQL、Redis、Cassandra 连接信息
  • RocketMQ NameServer 地址
  • MinIO / 阿里云 OSS 配置
  • Elasticsearch、Canal、XXL-JOB、Sentinel 与 ZooKeeper 地址

阿里云短信、阿里云 OSS 和 MinIO 的访问凭据不再写入配置文件,请在启动服务前设置环境变量:

环境变量 用途 获取方式
ALIYUN_SMS_ACCESS_KEY_ID 短信服务 AccessKey ID 为短信服务创建独立 RAM 用户,在凭证管理中创建 AccessKey
ALIYUN_SMS_ACCESS_KEY_SECRET 短信服务 AccessKey Secret 创建上述 AccessKey 时显示一次,请立即安全保存
ALIYUN_OSS_ACCESS_KEY_ID OSS 服务 AccessKey ID 为 OSS 创建独立 RAM 用户并授予目标 Bucket 的最小权限
ALIYUN_OSS_ACCESS_KEY_SECRET OSS 服务 AccessKey Secret 创建上述 AccessKey 时显示一次,请立即安全保存
MINIO_ACCESS_KEY MinIO 客户端 Access Key 由 MinIO 管理员在部署服务时设置
MINIO_SECRET_KEY MinIO 客户端 Secret Key 由 MinIO 管理员在部署服务时设置

阿里云 AccessKey 是 SDK 调用云 API 时使用的程序访问凭据,由 AccessKey ID 和 AccessKey Secret 组成,不是控制台登录密码。请优先使用 RAM 用户而非主账号,并遵循最小权限原则。具体创建步骤参见阿里云官方文档:创建 AccessKey

PowerShell 临时设置示例:

$env:ALIYUN_SMS_ACCESS_KEY_ID = "<短信服务 RAM AccessKey ID>"
$env:ALIYUN_SMS_ACCESS_KEY_SECRET = "<短信服务 RAM AccessKey Secret>"
$env:ALIYUN_OSS_ACCESS_KEY_ID = "<OSS 服务 RAM AccessKey ID>"
$env:ALIYUN_OSS_ACCESS_KEY_SECRET = "<OSS 服务 RAM AccessKey Secret>"
$env:MINIO_ACCESS_KEY = "<MinIO Access Key>"
$env:MINIO_SECRET_KEY = "<MinIO Secret Key>"

安全提示:不要把真实密码、AccessKey、Token 或私钥提交到 Git。建议使用环境变量、Nacos 加密配置或专用密钥管理服务;已经进入 Git 历史的凭据必须先在服务商控制台中轮换或吊销。

4. 构建项目

在项目根目录执行:

mvn clean package -DskipTests

也可以只构建指定模块及其依赖,例如:

mvn -pl xiaohashu-auth -am clean package -DskipTests
mvn -pl xiaohashu-note/xiaohashu-note-biz -am clean package -DskipTests

5. 启动服务

建议先启动 Nacos 与其他基础设施,再按依赖关系启动:

  1. 分布式 ID、OSS、KV
  2. 用户、认证
  3. 笔记、用户关系、评论、计数
  4. 搜索、数据对齐
  5. 网关

开发环境可直接在 IDE 中运行各模块的 *Application 启动类。完成上一步全量构建后,也可以指定服务的 POM 使用 Maven 启动,例如:

mvn -f xiaohashu-auth/pom.xml spring-boot:run
mvn -f xiaohashu-gateway/pom.xml spring-boot:run

启动完成后,通过网关访问:

http://localhost:8000

网关当前提供 /auth/**/user/**/note/**/relation/**/comment/** 路由。登录后的请求使用以下认证头:

Authorization: Bearer <token>

开发说明

  • 默认激活 dev 配置,生产部署前请切换配置并完成安全加固。
  • 服务通过 Nacos 完成注册发现,内部调用主要使用 OpenFeign。
  • Redis 同时用于认证会话、业务缓存、布隆过滤器、Bitmap 和 ZSet 等场景。
  • RocketMQ 用于点赞、收藏、关注、评论及计数等异步事件。
  • 仓库中的 .flattened-pom.xml 由 Flatten Maven Plugin 生成,不建议手工编辑。

贡献

欢迎通过 Issue 或 Pull Request 提交问题、改进建议与代码变更。提交前请确保:

  1. 未包含密码、云服务密钥、Token、私钥或本地日志。
  2. 相关模块能够通过构建与测试。
  3. 新增配置提供安全的示例值或环境变量引用。

About

基于 Java 17、Spring Boot 3 与 Spring Cloud Alibaba 构建的仿小红书微服务后端,涵盖认证、笔记、评论、关注、搜索、对象存储与数据同步。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages