Files
EchoChat/README.md
bujinyuan f41e63ba6b docs(phase2e-2): 补齐顶层文档进度同步,Phase 2e-2 会议 MVP 全面切
用户准备开始真实用户测试,此 commit 对"六份文档同步"之外遗漏的上层/入口文档
做二次补齐,保证所有出现阶段状态描述的文档都与 CURRENT_STATUS.md 一致。

补齐范围:
- README.md
  · "MVP 功能规划" 原把 Phase 2 / Phase 3 标记为"待开始",与实际进度严重偏离
  · 整段重写为"开发进度"小节,按 Phase 1 / 2a-d / 2e-1 / 2e-2 分别列出 
    已完成状态与关键交付;2e-3 / Phase 3 / P2 推迟项独立列为"待启动(规划中)"
  · "文档导航"扩展 5 条新入口:Phase 2e 路线图 / 2e-2 设计 / 2e-2 实施 /
    2e-2 代码审查 / 2e-2 验收报告 / 会议 MVP 部署指南
- docs/plans/2026-02-27-echochat-system-design.md(整体系统设计方案)
  · §Phase 2e 行:追加"2e-1  / 2e-2  / 2e-3 📋 待启动"状态徽标
  · §Phase 2e-2:从"📋 设计阶段完成,代码开发待启动"改为
    " 已完成(2026-04-24,Task 0-16 全量落地 + 代码审查 4 P0 + 8 P1 + 7 P2 + 7 Nit 闭环)"
- docs/plans/2026-04-21-phase2e-2-design.md(Phase 2e-2 设计文档)
  · 顶部"状态 / 最后更新"由"📋 设计阶段(待评审后进入代码开发)"切 
  · §一 文档定位的"本文档"行同步切 
- docs/plans/2026-04-24-phase2e-2-task15-ui-polish.plan.md(Task 15 计划)
  · 顶部"状态"由"📋 设计阶段(等待用户 Review)"切 
  · 追加"交付记录"行指向 CURRENT_STATUS.md Task 15/16 交付条目
- docs/deployment/meeting-mvp.md(会议 MVP 部署指南)
  · 顶部元信息追加阶段  标记 + Task 16 追加的 REDIS_PASSWORD × redis.conf
    requirepass 联动校验指引

验证:workspace grep "📋 设计阶段|🚧 代码开发|待开始" 在顶层 README/docs 下
已无遗留进度描述与实际状态冲突(仅 README 新增的"Phase 2e-3 / Phase 3 — 待启动
(规划中)"章节为规划项,符合预期)。

Made-with: Cursor
2026-04-23 17:59:32 +08:00

261 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# EchoChat - 音视频会议直播系统
EchoChat 是一套跨端可用、可扩展、可演进的实时音视频会议直播系统。支持即时聊天、多人音视频会议、互动直播等核心功能,采用控制面与媒体面彻底分离的架构设计。
---
## 技术栈
| 层级 | 技术 | 说明 |
|------|------|------|
| 前台前端 | uniapp (Vue 3) + mediasoup-client | 多端适配H5/App/小程序) |
| 后台管理端 | Vue 3 + Vite + Element Plus | PC Web 管理后台 |
| 后端服务 | Go (Gin + GORM + Wire + zap) | 业务逻辑、信令控制 |
| 媒体服务 | Node.js + mediasoup | SFU 媒体控制与转发 |
| 数据库 | PostgreSQL 17 | 持久化数据存储 |
| 缓存 | Redis 7 | 实时状态、会话缓存 |
| 部署 | Docker Compose / Nginx | 容器化部署,预留 K8s |
---
## 系统架构
```
客户端 (uniapp / Vue3 管理端)
│ WebSocket + HTTP
Go 单体服务 (模块化)
│ ├── auth 用户认证鉴权
│ ├── im 即时通讯
│ ├── contact 联系人管理
│ ├── meeting 会议控制/信令
│ ├── notify 消息通知
│ └── admin 后台管理
├── PostgreSQL (持久化数据)
├── Redis (实时状态)
│ HTTP
mediasoup Node 服务
│ IPC
mediasoup Worker (C++ SFU)
```
核心设计思想:**控制面与媒体面分离**。Go 处理所有业务逻辑和信令控制mediasoup 专注音视频媒体转发,音视频流直连 SFU Worker不经过 Go 服务。
---
## 项目结构:
```
EchoChat/
├── frontend/ # 前台用户端 (uni-app + Vue 3.4)
├── admin/ # 后台管理端 (Vue 3.5 + Element Plus)
├── backend/
│ └── go-service/ # Go 后端服务 (Gin + GORM + Wire)
│ ├── app/ # 业务模块 (auth / admin)
│ ├── cmd/server/ # 服务入口
│ ├── config/ # 配置文件
│ ├── pkg/ # 公共包 (db / logs / middleware / utils)
│ └── router/ # 路由聚合
├── 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/ # 开发进度
│ ├── plans/ # 实施计划
│ ├── api/ # API 接口文档
│ └── architecture/ # 架构设计文档
└── README.md
```
---
## 快速开始
### 环境要求
- Go 1.23+
- Node.js 18+
- Docker & Docker Compose
- PostgreSQL 17通过 Docker 自动启动)
- Redis 7通过 Docker 自动启动)
### 方式一:一键脚本(推荐)
项目在 `scripts/` 目录遵循「**首次初始化 / 日常启停**」职责分离模式,参考 Rails / Django / Next.js 社区通用做法:
| 脚本 | 用途 | 使用频率 |
|---|---|---|
| `scripts/dev-setup.sh` | **首次环境初始化**:检查 Docker、拉起 Postgres/Redis/MinIO、重试式健康检查 | 仅首次 clone 或重建卷时 |
| `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 健康检查 | 公网部署时 |
#### 首次使用(仅一次)
```bash
# 首次 clone 后执行一次,完成 Docker 中间件初始化 + 健康检查
./scripts/dev-setup.sh
```
#### 日常启停
```bash
# 启动全部服务
./scripts/start.sh
# 查看服务状态(端口/PID/容器)
./scripts/status.sh
# 停止应用层(保留 Docker 中间件)
./scripts/stop.sh
# 停止全部(含 Docker 中间件)
./scripts/stop.sh --all
# 只启停单项(可选 docker|backend|frontend|admin
./scripts/start.sh backend
./scripts/stop.sh frontend
```
后台进程的 PID 与日志默认写入 `.run/`(已加入 gitignore排障时可直接查看 `.run/logs/*.log`
启动后各服务地址:
| 服务 | 端口 | 说明 |
|---|---|---|
| 前台用户端 (H5) | 5173 | `http://localhost:5173` |
| 后台管理端 | 3100 | `http://localhost:3100` |
| Go 后端 API | 8085 | `http://localhost:8085``/health` 健康检查) |
| PostgreSQL | 5432 | Docker 容器 `echochat-postgres` |
| Redis | 6379 | Docker 容器 `echochat-redis` |
| MinIO API | 9000 | 对象存储S3 兼容 |
| MinIO Console | 9001 | `http://localhost:9001`echochat / echochat123456 |
### 方式二Docker Compose 全量启动(含 media-server
```bash
cd deploy
cp .env.local.example .env # 本机 Demo 模板
cd ..
./scripts/start.sh full # 拉起 postgres + redis + minio + go-service + media-server 容器
```
公网部署请参考 `docs/deployment/meeting-mvp.md``cp deploy/.env.public.example deploy/.env` → 替换占位符 → `./scripts/deploy-public.sh`,脚本会自动校验 `MEDIASOUP_ANNOUNCED_IP` / 端口 / Docker 环境,并按需拉起 coturn`--profile public`)。
### 方式三:分步手动启动(开发调试)
**1. 启动基础设施(数据库 + 缓存)**
```bash
cd deploy
docker compose -f docker-compose.dev.yml up -d postgres redis
```
**2. 启动 Go 后端**
```bash
cd backend/go-service
go mod tidy
go run cmd/server/main.go
```
后端启动在 `http://localhost:8085`,健康检查:`GET /health`
**3. 启动前台用户端uni-app H5**
```bash
cd frontend
npm install --legacy-peer-deps
npm run dev:h5
```
前台 H5 启动在 `http://localhost:5173`(端口可能递增)
**4. 启动后台管理端Vue 3**
```bash
cd admin
npm install
npm run dev
```
管理端启动在 `http://localhost:3100`(自动代理 `/api` 到后端 8085
---
## 开发进度
> 最新进度、里程碑与技术决策以 [docs/progress/CURRENT_STATUS.md](docs/progress/CURRENT_STATUS.md) 为准(本节为概览)。
### Phase 1 — 基础设施与用户认证 ✅2026-03 完成)
- [x] 设计方案与架构文档 · Docker ComposePostgreSQL + Redis + MinIO
- [x] Go 后端骨架Gin + GORM + Wire + Zap+ JWT + RBAC
- [x] 前台 uni-app 骨架 + 后台 Vue 3 管理端 + Docker 化
### Phase 2a / 2b / 2c / 2d — 即时通讯全量 ✅2026-03 完成)
- [x] 联系人 / 好友管理2a
- [x] WebSocket 长连接 + 单聊即时通讯2b
- [x] 群聊 + 已读回执2c
- [x] 消息类型扩展(图片 / 文件 / 语音,含 MinIO S3 存储2d
### Phase 2e-1 — 统一通知中心 ✅2026-04-20 完成)
- [x] 通知数据模型 + `notify.Pusher` 统一推送抽象
- [x] 前端通知中心页 + 卡片渲染 + WS 实时推送
- [x] `meeting_invite` 预留类型(供 Phase 2e-2 联动)
### Phase 2e-2 — 多人音视频会议 MVP ✅2026-04-24 完成)
- [x] 技术栈mediasoup Node 媒体控制层 + C++ SFU Worker + mediasoup-clientWebRTC
- [x] 控制面Go 会议 service + 9 REST API + 14 WS 事件(创建 / 加入 / 离开 / 主持人四件套 / 邀请 / 聊天 / 生命周期)
- [x] 媒体面Node 媒体服务 12 内部 RESTRouter / Transport / Producer / Consumer / Stats+ Token 内部鉴权
- [x] 前端会议闭环Hub → 预览 → 房间(网格 / 演讲者 / 工具栏 / 聊天 / 成员列表 / 主持人菜单)
- [x] 会议生命周期host 掉线 2 分钟宽限 + 自动转让 + 空房 5 分钟 TTL + 定时兜底清理
- [x] 双态部署:本机 Docker Compose 即装即用 + 公网announcedIp + coturn `--profile public`
- [x] 原创 UI 特色 6 条(桌面端恒浮窗 / 加入时视频块滑入等)+ 主持人权限四件套(静音他人 / 移除 / 转让 / 结束)
- [x] 代码审查闭环4 P0 + 8 P1 + 7 P2 + 7 Nit 全部修复5 项WS token 迁出 URL / Chat 服务拆分等)登记推迟到 Phase 2f/3
- [x] 验收产物:[test-report-phase2e-2-meeting.md](test-report-phase2e-2-meeting.md)(八章完整报告)+ 5 份 Playwright MCP E2E 剧本
### Phase 2e-3 / Phase 3 — 待启动(规划中)
- [ ] 预约会议 + 会议提醒 + 等候室 + 预览高级参数2e-3
- [ ] 屏幕共享 + 会议录制与回放3
- [ ] 互动直播(主播 / 观众 / 弹幕3
- [ ] WS token 从 URL 迁出 + MeetingChatService 拆分P2 推迟项)
## 后续规划
- 微信授权登录
- 微服务拆分 + K8s 部署
- AI 辅助功能(语音转文字、会议纪要)
---
## 文档导航
| 文档 | 路径 | 说明 |
|------|------|------|
| 项目进度 | [docs/progress/CURRENT_STATUS.md](docs/progress/CURRENT_STATUS.md) | 当前开发进度与技术决策SSOT |
| 整体设计方案 | [docs/plans/2026-02-27-echochat-system-design.md](docs/plans/2026-02-27-echochat-system-design.md) | 系统完整设计方案 |
| Phase 2e 路线图 | [docs/plans/2026-04-20-phase2e-design.md](docs/plans/2026-04-20-phase2e-design.md) | Phase 2e-1 / 2e-2 / 2e-3 三子阶段总览 |
| Phase 2e-2 设计 | [docs/plans/2026-04-21-phase2e-2-design.md](docs/plans/2026-04-21-phase2e-2-design.md) | 会议 MVP 专项设计(✅ 已完成) |
| Phase 2e-2 实施 | [docs/plans/2026-04-21-phase2e-2-implementation.plan.md](docs/plans/2026-04-21-phase2e-2-implementation.plan.md) | Task 0-16 实施计划 |
| Phase 2e-2 代码审查 | [docs/reviews/2026-04-23-phase2e-2-code-review.md](docs/reviews/2026-04-23-phase2e-2-code-review.md) | 26 项审计结果 + Task 16 修复追踪 |
| Phase 2e-2 验收报告 | [test-report-phase2e-2-meeting.md](test-report-phase2e-2-meeting.md) | 八章完整测试报告 |
| 会议 MVP 部署指南 | [docs/deployment/meeting-mvp.md](docs/deployment/meeting-mvp.md) | 本机 Demo + 公网双态部署手册 |
| 系统架构文档 | [docs/architecture/system-architecture.md](docs/architecture/system-architecture.md) | 架构分层与技术选型 |
| API 接口文档 | [docs/api/](docs/api/) | 按端+模块拆分的 REST API + WebSocket 事件定义 |
---
## 开源协议
MIT License