docs(task14): 同步 Phase 2e-2 Task 14 进度至全量项目文档

- README.md:脚本表格新增 deploy-public.sh + full 子命令说明;
  "方式二" 改为 scripts/start.sh full + 指向 docs/deployment/meeting-mvp.md
- docs/api/README.md:meeting 模块状态标注 Task 5/6/7/13 + extra 8 字段
- docs/architecture/system-architecture.md:meeting 状态升至 Task 0-14 ;
  media-server / coturn 行同步标注 Task 14 双态编排落地
- docs/plans/2026-04-20-phase2e-design.md:最后更新 + 变更记录新增 04-24 条目
- media-server/README.md:后续任务新增 Task 9  + Task 14 ,指向部署指南

保证所有项目级 README / 架构 / 路线图文档都处于 Task 0-14  最新状态。

Made-with: Cursor
This commit is contained in:
bujinyuan
2026-04-22 18:04:20 +08:00
parent a01e973335
commit 6913b9e72f
5 changed files with 20 additions and 14 deletions

View File

@@ -60,8 +60,8 @@ EchoChat/
│ ├── config/ # 配置文件
│ ├── pkg/ # 公共包 (db / logs / middleware / utils)
│ └── router/ # 路由聚合
├── media-server/ # mediasoup Node 媒体服务 (Phase 2e-2 Task 0-2 已落地 9 REST APITask 7 起 Go 通过 HTTPMediaOrchestrator 接入)
├── deploy/ # 部署配置 (Docker Compose)
├── media-server/ # mediasoup Node 媒体服务 (Phase 2e-2 Task 0-2 已落地 9 REST APITask 7 起 Go 通过 HTTPMediaOrchestrator 接入Task 14 纳入 docker-compose 双态编排)
├── deploy/ # 部署配置 (Docker Compose + 三份 .env 双态模板)
├── design-system/ # UI 设计系统 (ui-ux-pro-max 生成)
├── docs/ # 项目文档
│ ├── progress/ # 开发进度
@@ -90,9 +90,10 @@ EchoChat/
| 脚本 | 用途 | 使用频率 |
|---|---|---|
| `scripts/dev-setup.sh` | **首次环境初始化**:检查 Docker、拉起 Postgres/Redis/MinIO、重试式健康检查 | 仅首次 clone 或重建卷时 |
| `scripts/start.sh` | **日常启动**:秒级拉起全部服务(容器 + 应用层) | 每天多次 |
| `scripts/stop.sh` | **日常停止**:优雅终止应用层,默认保留容器 | 每天多次 |
| `scripts/status.sh` | **状态查看**:端口 / PID / 容器一览 | 排障随时 |
| `scripts/start.sh` | **日常启动**:秒级拉起全部服务(容器 + 应用层)`full` 子命令拉起含 media-server 的全量栈 | 每天多次 |
| `scripts/stop.sh` | **日常停止**:优雅终止应用层,默认保留容器`full` 子命令停止全量栈 | 每天多次 |
| `scripts/status.sh` | **状态查看**:端口 / PID / 应用容器(含 media-server / coturn一览 | 排障随时 |
| `scripts/deploy-public.sh` | **公网部署**Phase 2e-2 Task 14env 校验 + 端口 checklist + Docker 自检 + `--profile public` 启动全栈 + media-server 健康检查 | 公网部署时 |
#### 首次使用(仅一次)
@@ -135,14 +136,16 @@ EchoChat/
| MinIO API | 9000 | 对象存储S3 兼容 |
| MinIO Console | 9001 | `http://localhost:9001`echochat / echochat123456 |
### 方式二Docker Compose 全量启动
### 方式二Docker Compose 全量启动(含 media-server
```bash
cd deploy
docker compose -f docker-compose.dev.yml up -d
cp .env.local.example .env # 本机 Demo 模板
cd ..
./scripts/start.sh full # 拉起 postgres + redis + minio + go-service + media-server 容器
```
> 注意:此方式下 Go 后端、前台、管理端需按下方「方式三」各自启动,或在 compose 中启用 `go-service` 服务
公网部署请参考 `docs/deployment/meeting-mvp.md``cp deploy/.env.public.example deploy/.env` → 替换占位符 → `./scripts/deploy-public.sh`,脚本会自动校验 `MEDIASOUP_ANNOUNCED_IP` / 端口 / Docker 环境,并按需拉起 coturn`--profile public`
### 方式三:分步手动启动(开发调试)

View File

@@ -17,7 +17,7 @@
| [frontend/websocket.md](frontend/websocket.md) | WebSocket | ✅ Phase 2a | 前端 WebSocket 连接管理、事件协议、心跳、重连 |
| [frontend/im.md](frontend/im.md) | 即时通讯 | ✅ Phase 2b | 7 个 API会话列表/置顶/删除/清空、历史消息、全局搜索、未读数 |
| [frontend/group.md](frontend/group.md) | 群聊管理 | ✅ Phase 2c | 16 个 API建群/管理/成员/角色/禁言/公告/搜索/入群审批 |
| [frontend/meeting.md](frontend/meeting.md) | 会议 | ✅ Phase 2e-2 Task 5/6/7 | 12 个 REST 接口(创建/加入/离开/结束/详情/列表/邀请/踢人/转让主持人/发起聊天/拉聊天历史/邀请链接兑换)+ 13 个 WebSocket 信令事件8 C→S + 5 核心 S→C 广播 + 会议内聊天/被踢定向推送Redis 媒体资源追踪 + host 权限校验Task 7 (2026-04-21) 已接入真实 mediasoup返回值为 Node media-server 真实 Transport/Router/DTLS 参数 |
| [frontend/meeting.md](frontend/meeting.md) | 会议 | ✅ Phase 2e-2 Task 5/6/7/13 | 12 个 REST 接口 + 13 个 WebSocket 信令事件8 C→S + 5 核心 S→C 广播 + 会议内聊天/被踢定向推送Redis 媒体资源追踪 + host 权限校验Task 7 已接入真实 mediasoupTask 13 (2026-04-23) `InviteUsers` 补齐 `extra`8 字段:`room_code/room_title/has_password/invite_token/inviter_id/inviter_name/inviter_avatar/expired_at`),支持通知中心 `meeting_invite` 卡片「立即加入 / 稍后」+ 过期态灰显 |
| [frontend/notify.md](frontend/notify.md) | 通知中心 | ✅ Phase 2e-1 | 5 个 API通知列表游标分页/未读数/标记已读/全部已读/管理员广播 + 2 个 WS 事件notify.new/notify.unread.total |
### 后台管理端 (`admin/`)

View File

@@ -94,7 +94,7 @@ EchoChat 采用 **「精简单体 + 媒体微服务」** 架构,核心思想
| im | 即时消息收发(单聊)、会话管理、消息存储、撤回、搜索、离线推送 | ✅ Phase 2b |
| group | 群聊管理(建群/加入/退出/角色/禁言/@提醒/群公告/入群审批 | ✅ Phase 2c |
| file | 文件上传MinIO 对象存储 + 通用上传 API | ✅ Phase 2c |
| meeting | 会议创建/管理、WebSocket 信令转发、mediasoup 资源编排Go→Node HTTP、**会议生命周期状态机host 宽限期 + 自动转让 + 空房 TTL**、会议内聊天、主持人控制 | 🚧 Phase 2e-2 代码开发中Task 0-812 REST + 13 WS 事件 + HTTPMediaOrchestrator 真实媒体链路 + MeetingLifecycleService + MeetingCleanupTask + Router 幂等双层防御Task 9-16 待执行);专用设计:`docs/plans/2026-04-21-phase2e-2-design.md` |
| meeting | 会议创建/管理、WebSocket 信令转发、mediasoup 资源编排Go→Node HTTP、**会议生命周期状态机host 宽限期 + 自动转让 + 空房 TTL**、会议内聊天、主持人控制 | 🚧 Phase 2e-2 代码开发中Task 0-1412 REST + 13 WS 事件 + HTTPMediaOrchestrator 真实媒体链路 + MeetingLifecycleService + MeetingCleanupTask + Router 幂等双层防御 + 前端 mediasoup-client + 会议主页面全量 + meeting_invite 通知卡片 + docker-compose 双态部署Task 15-16 待执行);专用设计:`docs/plans/2026-04-21-phase2e-2-design.md` |
| notify | 统一通知中心、好友/群聊事件 + 系统广播推送、11 种类型枚举、跨模块 Pusher 接口注入 | ✅ Phase 2e-110 种落地 + 2 种预留 `meeting_invite` / `meeting_reminder` |
| admin | 后台管理(用户管理 + 角色权限管理 + 在线监控 + 好友关系管理 + 群聊管理、会议监控、系统配置) | ✅ Phase 1/2a/2c |
@@ -242,8 +242,8 @@ mediasoup C++ SFU 的 **"遥控器"**,不懂业务、不懂用户、只懂媒
```yaml
services:
go-service: # Go 后端 → :8085 ✅ 已实现(多阶段构建 Dockerfile
media-server: # mediasoup Node → :3300 + :40000-40199/udp 🚧 Phase 2e-2 Task 0-2TypeScript + Fastify + mediasoup v39 REST API + observer-close 自清理Task 7 ✅ Go 侧 HTTPMediaOrchestrator 接入 `/internal/v1/*`
coturn: # TURN 服务(可选) → :3478/:5349 📋 Phase 2e-2 公网部署 profile=public
media-server: # mediasoup Node → :3300 + :40000-40199/udp Phase 2e-2 Task 0-2/7/14TypeScript + Fastify + mediasoup v39 REST API + observer-close 自清理HTTPMediaOrchestrator 接入 `/internal/v1/*`Task 14 纳入 docker-compose 双态编排)
coturn: # TURN 服务(可选) → :3478/:5349 Phase 2e-2 Task 14`profiles: ["public"]` + `network_mode: host`env 驱动 realm/user/credential/端口段 49152-65535
postgres: # PostgreSQL 17 → :5432 ✅ 已实现
redis: # Redis 7 → :6379 ✅ 已实现
nginx: # 反向代理 → :80/:443 📋 生产环境部署

View File

@@ -3,7 +3,7 @@
> **状态:** 🚧 进行中2e-1 ✅ 已完成2e-2 📋 **设计阶段完成待进入编码**2e-3 📋 待开发)
> **分支:** `feature/phase2e-meeting-notification`2e-1`feature/phase2e-2-meeting-mvp`2e-2基于 `origin/feature/phase2c-group-read-receipt`
> **前置依赖:** Phase 2a联系人 + WS、Phase 2b即时通讯、Phase 2c群聊+已读、Phase 2d消息类型扩展全部完成
> **最后更新:** 2026-04-21§四精简为引用链 + §五缩小 2e-3 范围 + 2e-2 专用设计/实施计划落盘
> **最后更新:** 2026-04-24Phase 2e-2 Task 0-14 ✅ 已完成PoC / media-server 骨架 / REST / DDL / Go 骨架 / 会议 REST / WS 信令 / Go↔Node HTTP / 生命周期 / 前端 mediasoup / 会议前后端页面 / 会议聊天 / meeting_invite 卡片 / docker-compose 双态;剩 Task 15 UI 打磨 + Task 16 E2E 收官
> **子阶段专用文档:**
> - 2e-1`docs/plans/2026-04-20-phase2e-1-design.md` + `docs/plans/2026-04-20-phase2e-1-implementation.plan.md`(✅ 已完成,含 TabBar「我的」未读红点优化
> - 2e-2`docs/plans/2026-04-21-phase2e-2-design.md`16 章节)+ `docs/plans/2026-04-21-phase2e-2-implementation.plan.md`17 个 Task约 17 人日)
@@ -375,3 +375,4 @@ export const useNotifyStore = defineStore('notify', () => {
|---|---|
| 2026-04-20 | Phase 2e 规划完成:拆分为 2e-1/2e-2/2e-3 三个子阶段;本文档落盘 |
| 2026-04-20 | Phase 2e-1 实施完成:落实 notify 模块(后端 11 种类型 / 5 REST + 2 WS / 30 天清理)+ 前端通知中心§3.1/§3.5/§八/§九 同步修订「单端 WS 连接」约束与推迟项 |
| 2026-04-24 | Phase 2e-2 推进 Task 0-14 全部完成mediasoup PoC / media-server 9 REST / 3 表 DDL + DAO / Go 12 REST + WS 13 事件 / HTTPMediaOrchestrator / 生命周期状态机host 宽限 + 自动转让 + 空房 TTL/ 前端 mediasoup-client + Pinia store / 会议主页面Hub/Create/Join/Preview/Room+ 核心组件 / 会议内聊天 / meeting_invite 通知卡片(含过期态 + deep-link/ docker-compose 双态扩展media-server + coturn public profile+ 三份 .env 模板 + deploy-public.sh + 部署指南。剩 Task 15 UI 打磨 + Task 16 E2E 收官 |

View File

@@ -126,4 +126,6 @@ docker run --rm \
- **Task 2 ✅**`/internal/v1/routers``/transports``/produce``/consume` 等 9 个内部 REST API 全部落地58 单元/集成测试,覆盖率 80.89%)。
- **Task 7 ✅**2026-04-21Go 侧 `HTTPMediaOrchestrator` 通过 `X-Internal-Token` 已完整接入本服务的 `/internal/v1/*`Go↔Node 媒体链路在端到端脚本 `docs/verify/meeting_t7_verify.mjs`**16/16 PASS**,媒体 Router/Transport/Producer/Consumer 生命周期均由 Go 驱动。
- 后续:Task 9(前端 mediasoup-client)接入时若暴露 `meeting.consume.resume` 事件,需由 Go 侧调用本服务 `POST /internal/v1/consumers/:id/resume`已实现。Task 10 将新增 `GET /internal/v1/transports/:id/stats` 供 Go 定时拉取
- **Task 9 ✅**2026-04-21前端接入 mediasoup-client 完成,`meeting.consume.resume` WS 事件全链路打通;本服务 `/internal/v1/consumers/:id/resume` 已被 Go 侧使用
- **Task 14 ✅**2026-04-24纳入 `deploy/docker-compose.dev.yml` 双态部署编排Dockerfile 镜像由 compose 直接 build配套 `deploy/.env.local.example`(本机 Demo`MEDIASOUP_ANNOUNCED_IP=""` 自动走内网)与 `deploy/.env.public.example`(公网部署,强制填写公网 IP + 可选 coturn。本服务现在通过 `scripts/start.sh full` 以容器身份启动,公网部署走 `scripts/deploy-public.sh`。详见 `docs/deployment/meeting-mvp.md`
- 后续Task 10 将新增 `GET /internal/v1/transports/:id/stats` 供 Go 定时拉取。