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:
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user