From ea28549a5f3e26c6e1ec7f65dea87cdf1eb5af12 Mon Sep 17 00:00:00 2001 From: bujinyuan Date: Wed, 22 Apr 2026 16:50:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(scripts):=20start.sh=20=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=97=B6=E8=87=AA=E5=8A=A8=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=20/=20=E7=AE=A1=E7=90=86=E7=AB=AF=E5=B1=80?= =?UTF-8?q?=E5=9F=9F=E7=BD=91=E8=AE=BF=E9=97=AE=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vite dev server 已绑定 host: '0.0.0.0' 支持局域网访问,但原来的 start.sh 只在 summary 里打印 localhost 地址,Vite 输出的多条 Network URL 被埋在日志里用户看不到。这里扩展 print_summary: - 新增 wait_and_collect_network_urls(log, timeout):等待日志出现 "Network:" 行(最多 N 秒),然后从中抽取所有 http://LAN_IP:PORT URL 并去重(排除 127.0.0.1 回环) - summary 输出最后追加「局域网访问地址」分块,分别展示前台 / 管理端 在当前机器所有网络接口上的可达地址 - 附注提示:后端 API(8085) / 媒体 (3300) 的跨设备访问需要在 前端 .env 改 baseURL 这样在同 WiFi 的手机 / 其它设备上可以直接从启动日志里拿到可用入口, 无需再去 .run/logs/frontend.log 里手动 grep。 Made-with: Cursor --- scripts/start.sh | 51 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/scripts/start.sh b/scripts/start.sh index c796d1d..80b7168 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -117,14 +117,61 @@ start_media() { spawn_bg "media" "$media_dir" npm run dev } +# 等待 vite/dev server 日志里出现 Network 行并提取其中的 LAN 地址 +# 最长等待 8 秒;失败时返回空字符串(不阻塞启动流程) +wait_and_collect_network_urls() { + local log_file="$1" + local max_wait="${2:-8}" + local i=0 + while (( i < max_wait )); do + if grep -q "Network:" "$log_file" 2>/dev/null; then + break + fi + sleep 1 + i=$((i + 1)) + done + grep -Eo "http://[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+/?" "$log_file" 2>/dev/null \ + | grep -v '127\.0\.0\.1' \ + | sort -u +} + 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 " MinIO 控制台: http://localhost:9001 (echochat / echochat123456)\n" + + # 前端 / 管理端 Vite dev server 启动时 host=0.0.0.0, + # 会输出多条 Network 行(本机每块网卡一条),这里从日志提取展示 + local fe_log="$LOG_DIR/frontend.log" + local admin_log="$LOG_DIR/admin.log" + local fe_urls admin_urls + fe_urls="$(wait_and_collect_network_urls "$fe_log" 8)" + admin_urls="$(wait_and_collect_network_urls "$admin_log" 4)" + + if [[ -n "$fe_urls" || -n "$admin_urls" ]]; then + printf "\n${COLOR_CYAN}局域网访问地址${COLOR_RESET}(同 WiFi/LAN 下其他设备可直接访问):\n" + if [[ -n "$fe_urls" ]]; then + printf " 前台用户端:\n" + while IFS= read -r line; do + [[ -z "$line" ]] && continue + printf " %s\n" "$line" + done <<< "$fe_urls" + fi + if [[ -n "$admin_urls" ]]; then + printf " 后台管理端:\n" + while IFS= read -r line; do + [[ -z "$line" ]] && continue + printf " %s\n" "$line" + done <<< "$admin_urls" + fi + printf " 提示:接口代理走前端 Vite,后端 API(8085) / 媒体(3300) 默认绑定 0.0.0.0,\n" + printf " 如需从其他设备访问 API/媒体,需要在前端 .env 里把 baseURL 改成本机 LAN IP。\n" + fi + + printf "\n 日志目录: %s\n" "$LOG_DIR" printf " PID 目录: %s\n" "$RUN_DIR" printf " 查看状态: ./scripts/status.sh\n" printf " 停止全部: ./scripts/stop.sh\n"