feat(deploy): Task 14 完成 docker-compose 扩展 + 环境变量双态部署

- deploy/docker-compose.dev.yml 新增 media-server 服务 + coturn(profiles:public),
  全部服务参数改为 env 变量注入,go-service 依赖 media-server
- deploy/.env.example / .env.local.example / .env.public.example 三份模板,
  公网模板用 _REPLACE_WITH_*_ 占位符防"示例值上生产"
- scripts/start.sh / stop.sh / status.sh 新增 full 子命令对接 docker compose --profile public
- scripts/deploy-public.sh 新建:env 校验 + 端口 checklist + Docker 自检 +
  --profile public up -d --build + 健康检查闭环
- docs/deployment/meeting-mvp.md 新建:双态部署全流程 + 强密码生成 + 防火墙 + FAQ
- 双模式 docker compose config 校验通过;deploy-public.sh 三种错误场景按预期退出

同步更新 CURRENT_STATUS / implementation.plan / project-context
Task 0-14  / 剩余 Task 15-16

Made-with: Cursor
This commit is contained in:
bujinyuan
2026-04-22 17:59:48 +08:00
parent ba8c72aae0
commit a01e973335
12 changed files with 946 additions and 33 deletions

76
deploy/.env.example Normal file
View File

@@ -0,0 +1,76 @@
# ============================================================
# EchoChat 部署环境变量示例(通用)
# 本文件为主模板,含所有可配置项 + 默认值说明
# 选择部署形态时请复制为 .env.local 或 .env.public然后按需修改
# ------------------------------------------------------------
# 本机 Democp deploy/.env.local.example deploy/.env
# 公网部署cp deploy/.env.public.example deploy/.env
# ============================================================
# ============================================================
# 1. 部署形态切换
# ============================================================
# 部署形态标识(仅用于人眼识别,不影响运行时)
# 可选值local | public
DEPLOY_MODE=local
# ============================================================
# 2. Postgres / Redis / MinIO中间件
# ============================================================
POSTGRES_DB=echochat
POSTGRES_USER=echochat
POSTGRES_PASSWORD=echochat_dev_2026
REDIS_PASSWORD=
MINIO_ROOT_USER=echochat
MINIO_ROOT_PASSWORD=echochat123456
# ============================================================
# 3. Go backend
# ============================================================
GO_SERVICE_PORT=8085
# JWT 签名密钥(生产环境必须改)
JWT_SECRET=echochat-dev-jwt-secret-2026-please-change-in-production
# ============================================================
# 4. mediasoup 媒体服务器Node
# ============================================================
# Go ↔ Node 内部鉴权 token生产必须改
MEDIA_INTERNAL_TOKEN=dev-internal-token-change-me
# mediasoup RTC 监听 IPDocker 内部一律 0.0.0.0
MEDIASOUP_LISTEN_IP=0.0.0.0
# mediasoup RTC 对外通告 IP本决策见设计 §D01
# - 本机 Demo留空浏览器走 127.0.0.1 / 局域网 IP 直连)
# - 公网部署:必须填 **服务器公网 IP** 或解析到公网 IP 的域名
# 错误示例127.0.0.1(远端浏览器只能拿到回环地址,无法建连)
MEDIASOUP_ANNOUNCED_IP=
# mediasoup UDP/TCP 端口范围MVP 200 端口足够 ~25 用户级 Transport
MEDIASOUP_RTC_MIN_PORT=40000
MEDIASOUP_RTC_MAX_PORT=40199
# ============================================================
# 5. coturn TURN 服务器(仅公网部署启用)
# ============================================================
# 是否启用 TURN`docker compose --profile public up` 才拉起 coturn
# - 本机 Demofalse
# - 公网部署:推荐 true对称 NAT 用户的 fallback 通路)
TURN_ENABLED=false
# coturn 提供的 realm、用户名、密码
# 生产务必改TURN 账号泄漏可被滥用
TURN_REALM=echochat
TURN_USERNAME=echouser
TURN_PASSWORD=echopass
# TURN 外部监听端口(标准 3478 STUN/TURN5349 TLS
# coturn 走 network_mode: host端口一般沿用默认
TURN_LISTEN_PORT=3478
TURN_TLS_PORT=5349
# TURN 为中继流量分配的端口范围
TURN_MIN_PORT=49160
TURN_MAX_PORT=49200