From 807e111cb98c1477b5a8254c36f08c83dd7b67b9 Mon Sep 17 00:00:00 2001 From: bujinyuan Date: Wed, 22 Apr 2026 11:27:21 +0800 Subject: [PATCH] =?UTF-8?q?chore(scripts):=20start/stop/status=20=E6=8E=A5?= =?UTF-8?q?=E5=85=A5=20media-server=EF=BC=88port=203300=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - start.sh:新增 start_media(),端口 3300,缺 .env 时自动从 .env.example 复制; 缺 node_modules 时给出提示不跑命令;加入 all/独立子命令 - stop.sh:新增 stop_media(),通过 PID 文件 + 端口兜底停止媒体服务器 - status.sh:状态面板增加 "媒体服务器 SFU (:3300)" 行 - 完整用法:./scripts/start.sh [all|backend|frontend|admin|media|docker|--no-docker] Made-with: Cursor --- scripts/start.sh | 31 +++++++++++++++++++++++++++++-- scripts/status.sh | 1 + scripts/stop.sh | 8 ++++++-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/scripts/start.sh b/scripts/start.sh index b0a47fc..c796d1d 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -3,7 +3,7 @@ # 用法: # ./scripts/start.sh # 启动全部(Docker 中间件 + Go 后端 + 前台 + 管理端) # ./scripts/start.sh --no-docker # 仅启动应用层(假设 Docker 容器已在运行) -# ./scripts/start.sh backend # 仅启动指定服务(backend|frontend|admin|docker) +# ./scripts/start.sh backend # 仅启动指定服务(backend|frontend|admin|media|docker) # 注意:不使用 set -e,避免单个服务启动失败中断其他服务; # 失败时由 spawn_bg 内部打印日志末尾辅助排障 set -uo pipefail @@ -93,11 +93,36 @@ start_admin() { spawn_bg "admin" "$ROOT_DIR/admin" npm run dev } +# 启动 Node 媒体服务器(mediasoup SFU,默认端口 3300) +# 首次启动若缺少 .env,则从 .env.example 拷贝一份,避免 config 校验失败 +start_media() { + local media_dir="$ROOT_DIR/media-server" + if [[ ! -d "$media_dir" ]]; then + log_warn "media-server 目录不存在,跳过" + return 0 + fi + if port_in_use 3300; then + log_warn "端口 3300 已被占用,跳过媒体服务器启动" + return 0 + fi + if [[ ! -f "$media_dir/.env" && -f "$media_dir/.env.example" ]]; then + log_info "media-server/.env 不存在,从 .env.example 复制" + cp "$media_dir/.env.example" "$media_dir/.env" + fi + if [[ ! -d "$media_dir/node_modules" ]]; then + log_warn "media-server 依赖未安装,请先在 media-server 目录执行 npm install" + return 1 + fi + log_info "启动媒体服务器 (port 3300)..." + spawn_bg "media" "$media_dir" npm run dev +} + print_summary() { printf "\n${COLOR_GREEN}=============== EchoChat 启动完成 ===============${COLOR_RESET}\n" printf " 前台用户端 (H5): http://localhost:5173\n" printf " 后台管理端: http://localhost:3100\n" printf " Go 后端 API: http://localhost:8085\n" + printf " 媒体服务器 (SFU): http://localhost:3300 (healthz: /healthz)\n" printf " MinIO 控制台: http://localhost:9001 (echochat / echochat123456)\n\n" printf " 日志目录: %s\n" "$LOG_DIR" printf " PID 目录: %s\n" "$RUN_DIR" @@ -118,6 +143,7 @@ main() { all) $skip_docker || start_docker || log_err "Docker 中间件启动异常,请检查 Docker Desktop 是否运行" start_backend || true + start_media || true start_frontend || true start_admin || true print_summary @@ -126,9 +152,10 @@ main() { backend) start_backend ;; frontend) start_frontend ;; admin) start_admin ;; + media) start_media ;; *) log_err "未知参数: $target" - echo "用法: $0 [all|docker|backend|frontend|admin|--no-docker]" + echo "用法: $0 [all|docker|backend|frontend|admin|media|--no-docker]" exit 1 ;; esac diff --git a/scripts/status.sh b/scripts/status.sh index dace81e..a846faa 100755 --- a/scripts/status.sh +++ b/scripts/status.sh @@ -45,6 +45,7 @@ check_container() { echo "" echo "===== EchoChat 应用层 =====" check_port "Go 后端" 8085 "http://localhost:8085" +check_port "媒体服务器 SFU" 3300 "http://localhost:3300/healthz" check_port "前台用户端" 5173 "http://localhost:5173" check_port "后台管理端" 3100 "http://localhost:3100" diff --git a/scripts/stop.sh b/scripts/stop.sh index f458ac5..5792414 100755 --- a/scripts/stop.sh +++ b/scripts/stop.sh @@ -3,7 +3,7 @@ # 用法: # ./scripts/stop.sh # 停止应用层(Go 后端 + 前台 + 管理端),保留 Docker 容器 # ./scripts/stop.sh --all # 停止全部(含 Docker 中间件) -# ./scripts/stop.sh backend # 仅停止指定服务(backend|frontend|admin|docker) +# ./scripts/stop.sh backend # 仅停止指定服务(backend|frontend|admin|media|docker) # 不使用 set -e:即使某一项停止失败,其他项也要继续尝试 set -uo pipefail @@ -79,6 +79,7 @@ stop_named() { stop_backend() { stop_named "backend" 8085; } stop_frontend() { stop_named "frontend" 5173; } stop_admin() { stop_named "admin" 3100; } +stop_media() { stop_named "media" 3300; } stop_docker() { log_info "停止 Docker 中间件..." @@ -93,12 +94,14 @@ main() { case "$target" in app|"") stop_backend + stop_media stop_frontend stop_admin log_ok "应用层服务已停止(Docker 中间件保持运行)" ;; --all|all) stop_backend + stop_media stop_frontend stop_admin stop_docker @@ -107,9 +110,10 @@ main() { backend) stop_backend ;; frontend) stop_frontend ;; admin) stop_admin ;; + media) stop_media ;; docker) stop_docker ;; *) - echo "用法: $0 [app|--all|backend|frontend|admin|docker]" + echo "用法: $0 [app|--all|backend|frontend|admin|media|docker]" exit 1 ;; esac