feat(scripts): start.sh 启动完成时自动展示前端 / 管理端局域网访问地址

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
This commit is contained in:
bujinyuan
2026-04-22 16:50:43 +08:00
parent d218b84843
commit ea28549a5f

View File

@@ -117,14 +117,61 @@ start_media() {
spawn_bg "media" "$media_dir" npm run dev 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() { 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 " 媒体服务器 (SFU): http://localhost:3300 (healthz: /healthz)\n"
printf " MinIO 控制台: http://localhost:9001 (echochat / echochat123456)\n\n" printf " MinIO 控制台: http://localhost:9001 (echochat / echochat123456)\n"
printf " 日志目录: %s\n" "$LOG_DIR"
# 前端 / 管理端 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 " PID 目录: %s\n" "$RUN_DIR"
printf " 查看状态: ./scripts/status.sh\n" printf " 查看状态: ./scripts/status.sh\n"
printf " 停止全部: ./scripts/stop.sh\n" printf " 停止全部: ./scripts/stop.sh\n"