chore(scripts): start/stop/status 接入 media-server(port 3300)

- 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
This commit is contained in:
bujinyuan
2026-04-22 11:27:21 +08:00
parent f97fec24a8
commit 807e111cb9
3 changed files with 36 additions and 4 deletions

View File

@@ -3,7 +3,7 @@
# 用法: # 用法:
# ./scripts/start.sh # 启动全部Docker 中间件 + Go 后端 + 前台 + 管理端) # ./scripts/start.sh # 启动全部Docker 中间件 + Go 后端 + 前台 + 管理端)
# ./scripts/start.sh --no-docker # 仅启动应用层(假设 Docker 容器已在运行) # ./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避免单个服务启动失败中断其他服务 # 注意:不使用 set -e避免单个服务启动失败中断其他服务
# 失败时由 spawn_bg 内部打印日志末尾辅助排障 # 失败时由 spawn_bg 内部打印日志末尾辅助排障
set -uo pipefail set -uo pipefail
@@ -93,11 +93,36 @@ start_admin() {
spawn_bg "admin" "$ROOT_DIR/admin" npm run dev 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() { print_summary() {
printf "\n${COLOR_GREEN}=============== EchoChat 启动完成 ===============${COLOR_RESET}\n" printf "\n${COLOR_GREEN}=============== EchoChat 启动完成 ===============${COLOR_RESET}\n"
printf " 前台用户端 (H5): http://localhost:5173\n" printf " 前台用户端 (H5): http://localhost:5173\n"
printf " 后台管理端: http://localhost:3100\n" printf " 后台管理端: http://localhost:3100\n"
printf " Go 后端 API: http://localhost:8085\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 " MinIO 控制台: http://localhost:9001 (echochat / echochat123456)\n\n"
printf " 日志目录: %s\n" "$LOG_DIR" printf " 日志目录: %s\n" "$LOG_DIR"
printf " PID 目录: %s\n" "$RUN_DIR" printf " PID 目录: %s\n" "$RUN_DIR"
@@ -118,6 +143,7 @@ main() {
all) all)
$skip_docker || start_docker || log_err "Docker 中间件启动异常,请检查 Docker Desktop 是否运行" $skip_docker || start_docker || log_err "Docker 中间件启动异常,请检查 Docker Desktop 是否运行"
start_backend || true start_backend || true
start_media || true
start_frontend || true start_frontend || true
start_admin || true start_admin || true
print_summary print_summary
@@ -126,9 +152,10 @@ main() {
backend) start_backend ;; backend) start_backend ;;
frontend) start_frontend ;; frontend) start_frontend ;;
admin) start_admin ;; admin) start_admin ;;
media) start_media ;;
*) *)
log_err "未知参数: $target" log_err "未知参数: $target"
echo "用法: $0 [all|docker|backend|frontend|admin|--no-docker]" echo "用法: $0 [all|docker|backend|frontend|admin|media|--no-docker]"
exit 1 exit 1
;; ;;
esac esac

View File

@@ -45,6 +45,7 @@ check_container() {
echo "" echo ""
echo "===== EchoChat 应用层 =====" echo "===== EchoChat 应用层 ====="
check_port "Go 后端" 8085 "http://localhost:8085" check_port "Go 后端" 8085 "http://localhost:8085"
check_port "媒体服务器 SFU" 3300 "http://localhost:3300/healthz"
check_port "前台用户端" 5173 "http://localhost:5173" check_port "前台用户端" 5173 "http://localhost:5173"
check_port "后台管理端" 3100 "http://localhost:3100" check_port "后台管理端" 3100 "http://localhost:3100"

View File

@@ -3,7 +3,7 @@
# 用法: # 用法:
# ./scripts/stop.sh # 停止应用层Go 后端 + 前台 + 管理端),保留 Docker 容器 # ./scripts/stop.sh # 停止应用层Go 后端 + 前台 + 管理端),保留 Docker 容器
# ./scripts/stop.sh --all # 停止全部(含 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 -e即使某一项停止失败其他项也要继续尝试
set -uo pipefail set -uo pipefail
@@ -79,6 +79,7 @@ stop_named() {
stop_backend() { stop_named "backend" 8085; } stop_backend() { stop_named "backend" 8085; }
stop_frontend() { stop_named "frontend" 5173; } stop_frontend() { stop_named "frontend" 5173; }
stop_admin() { stop_named "admin" 3100; } stop_admin() { stop_named "admin" 3100; }
stop_media() { stop_named "media" 3300; }
stop_docker() { stop_docker() {
log_info "停止 Docker 中间件..." log_info "停止 Docker 中间件..."
@@ -93,12 +94,14 @@ main() {
case "$target" in case "$target" in
app|"") app|"")
stop_backend stop_backend
stop_media
stop_frontend stop_frontend
stop_admin stop_admin
log_ok "应用层服务已停止Docker 中间件保持运行)" log_ok "应用层服务已停止Docker 中间件保持运行)"
;; ;;
--all|all) --all|all)
stop_backend stop_backend
stop_media
stop_frontend stop_frontend
stop_admin stop_admin
stop_docker stop_docker
@@ -107,9 +110,10 @@ main() {
backend) stop_backend ;; backend) stop_backend ;;
frontend) stop_frontend ;; frontend) stop_frontend ;;
admin) stop_admin ;; admin) stop_admin ;;
media) stop_media ;;
docker) stop_docker ;; docker) stop_docker ;;
*) *)
echo "用法: $0 [app|--all|backend|frontend|admin|docker]" echo "用法: $0 [app|--all|backend|frontend|admin|media|docker]"
exit 1 exit 1
;; ;;
esac esac