项目结构
仓库组成
text
yubb-saas-pro/
├── shengyu-server/ # Spring Boot 启动模块
├── shengyu-module-platform/ # 平台运营业务
├── shengyu-module-system/ # 租户业务、组织权限、IM 业务
├── shengyu-module-infra/ # 文件、代码生成、任务、监控等基础设施
├── shengyu-framework/ # 安全、租户、缓存、WebSocket 等通用能力
├── shengyu-ui/
│ ├── shengyu-ui-platform-vue3/ # 平台管理 Vue 3 前端
│ ├── shengyu-ui-admin-vue3/ # 租户管理 Vue 3 前端
│ └── shengyu-ui-admin-flutter/ # 钰信 Flutter(Android、iOS、Web)
├── sql/mysql/1.0/ # 初始化与增量 SQL
├── deploy/aliyun/ # 生产 Docker、Nginx 与上线模板
└── deploy/livekit/ # LiveKit 私有化部署与网络校验运行关系
text
平台管理 Vue / 租户管理 Vue / 钰信 Flutter
│ HTTPS API + WSS
▼
shengyu-server
┌───────────┼───────────┐
▼ ▼ ▼
MySQL Redis LiveKit
业务数据 缓存与会话 音视频媒体与 TURN后端负责认证、授权、租户上下文、业务数据、IM 信令和通话状态;LiveKit 只承载实时媒体。Nginx 负责 HTTPS、各域名静态站点和反向代理,MySQL 与 Redis 是独立的基础服务。
通讯技术边界
项目自研 Netty WebSocket 通道、鉴权与心跳、设备会话管理、消息处理器、在线投递以及呼叫状态机。通话的业务事件以事务 outbox 方式先落库、后投递,并通过状态版本、受控重试和生命周期任务处理断线、超时与多端竞争;这部分不依赖第三方通讯信令 PaaS。
LiveKit 是可自部署的媒体层,只处理音频、视频、ICE 和 TURN。服务端按租户、用户、设备和通话房间签发短期连接凭据,媒体事件只用于审计和补偿观察,不能覆盖业务通话的最终状态。完整的商业技术说明见企业协同解决方案。
生产域名职责
| 域名 | 用途 |
|---|---|
saas.shengyukj.top | 租户管理端。 |
saasadmin.shengyukj.top | 平台管理端。 |
apisaas.shengyukj.top | 后端 API 与 IM WebSocket。 |
im.shengyukj.top | 钰信 Flutter Web 页面。 |
rtc.shengyukj.top | LiveKit WSS 信令。 |
preview.shengyukj.top | kkFileView 文件预览。 |
im.shengyukj.top 仅承载浏览器页面;钰信 App 的 API 和 WebSocket 必须分别使用 apisaas.shengyukj.top,不可混用。