#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$ROOT_DIR" echo "==> 构建并启动所有服务..." docker compose up --build -d echo "==> 当前容器状态" docker compose ps if [[ -f ".env" ]]; then echo "==> 检测到 .env(将覆盖 .env.example 中的同名 AI 变量)" else echo "==> AI 配置来自 .env.example(请填写 QWEN_API_KEY;亦可复制为 .env 再填写)" fi wait_http() { local url=$1 local label=$2 local i=0 while [[ $i -lt 45 ]]; do if curl -sf "$url" >/dev/null 2>&1; then echo "${label}: ok" return 0 fi sleep 1 i=$((i + 1)) done echo "${label}: unreachable(请确认容器已就绪,或执行: curl -v ${url})" return 1 } echo "==> 健康检查(后端 8866,前端 Nginx 8173;最多等待约 45s)" wait_http "http://localhost:8866/health" "backend" || true wait_http "http://localhost:8173/health" "frontend (nginx)" || true echo "==> 启动完成"