diff --git a/deploy/lib/common.sh b/deploy/lib/common.sh index 29bfa46..63aef01 100644 --- a/deploy/lib/common.sh +++ b/deploy/lib/common.sh @@ -287,6 +287,8 @@ compose_up_build() { step "docker compose up -d --build" mkdir -p /root/market_intel_backups 2>/dev/null || true compose up -d --build + # 给容器一点启动时间,再进入健康检查 + sleep 3 } compose_stop() { @@ -324,17 +326,24 @@ verify_health() { port="$(read_mi_port)" local url="http://127.0.0.1:${port}/health" step "健康检查 ${url}" + # 先等 api 容器起来,避免 rebuild 窗口误报 local i - for i in $(seq 1 30); do - if curl -fsS "${url}" >/dev/null 2>&1; then - log "health OK" - curl -fsS "${url}" || true - echo "" + for i in $(seq 1 60); do + if compose ps --status running 2>/dev/null | grep -qE 'mi_api|api'; then + break + fi + sleep 1 + done + for i in $(seq 1 45); do + # -sS 静默;丢弃正文,避免 JSON 与后续菜单输出粘连 + if curl -fsS --connect-timeout 2 --max-time 5 "${url}" >/dev/null 2>&1; then + log "health OK (${url})" return 0 fi sleep 2 done log "警告: health 暂未就绪,请检查: docker compose -f ${REPO_ROOT}/docker-compose.yml logs api --tail 80" + log "也可手动验证: curl -fsS ${url}" return 1 } @@ -351,14 +360,15 @@ print_post_install_guide() { local ip port ip="$(detect_server_ip)" port="$(read_mi_port)" - echo "" + # 清掉可能残留的 \r,避免和 docker/curl 进度条粘行 + printf '\n' echo "══════════════════════════════════════" echo " 比特骆驼行情采集分析 部署完成" echo " 目录: ${INSTALL_ROOT}" - echo " 本机: http://${ip}:${port}/health" + echo " 健康检查: http://${ip}:${port}/health" echo " 看板: http://${ip}:${port}/" echo " 管理: bash ${INSTALL_ROOT}/deploy/manage.sh" echo " 配置: ${INSTALL_ROOT}/.env" echo "══════════════════════════════════════" - echo "" + printf '\n' }