#!/usr/bin/env sh set -eu ROOT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$ROOT_DIR" MODE="${1:-up}" if ! command -v docker >/dev/null 2>&1; then echo "Docker 未安装或不可用。请先安装 Docker Desktop。" >&2 exit 1 fi if ! docker info >/dev/null 2>&1; then echo "Docker daemon 未启动。请先启动 Docker Desktop。" >&2 exit 1 fi if ! command -v docker >/dev/null 2>&1 || ! docker compose version >/dev/null 2>&1; then echo "docker compose 不可用,请升级 Docker Desktop。" >&2 exit 1 fi if [ ! -f "backend/.env" ]; then cp "backend/.env.example" "backend/.env" echo "已生成 backend/.env(请把 MYSQL_PASSWORD / OPENAI_API_KEY 改成你的值)" fi case "$MODE" in up) echo "启动中:构建并启动所有容器(随后将跟随日志,按 Ctrl+C 退出跟随)..." docker compose up --build -d ;; -d|detached) echo "启动中:构建并后台启动所有容器..." docker compose up --build -d ;; down) docker compose down exit 0 ;; ps) docker compose ps exit 0 ;; logs) docker compose logs --tail=200 backend frontend exit 0 ;; follow|f) docker compose logs -f --tail=200 backend frontend exit 0 ;; *) echo "用法:" echo " sh dev.sh # 启动并跟随日志(默认)" echo " sh dev.sh -d # 后台启动" echo " sh dev.sh follow # 跟随日志" echo " sh dev.sh logs # 打印最近日志" echo " sh dev.sh ps # 查看容器状态" echo " sh dev.sh down # 停止并清理" exit 1 ;; esac echo "" echo "容器状态:" docker compose ps echo "" echo "后端最近日志(backend,tail=120):" docker compose logs --tail=120 backend || true echo "" echo "前端最近日志(frontend,tail=120):" docker compose logs --tail=120 frontend || true echo "" echo "快速自检(HTTP):" ( curl -fsS "http://localhost:8000/docs" >/dev/null 2>&1 && echo "- backend: OK (http://localhost:8000/docs)" || echo "- backend: FAIL (检查 backend 日志/数据库连通性)" curl -fsS "http://localhost:3001" >/dev/null 2>&1 && echo "- frontend: OK (http://localhost:3001)" || echo "- frontend: FAIL (检查 frontend 日志)" curl -fsS "http://localhost:3001/api/metrics/overview" >/dev/null 2>&1 && echo "- api-proxy: OK (/api/metrics/overview)" || echo "- api-proxy: FAIL (通常是 backend 500)" ) || true echo "" echo "已启动:" echo "- 前端: http://localhost:3001" echo "- 后端 Swagger: http://localhost:8000/docs" echo "- Milvus: localhost:19530" echo "" echo "跟随日志:sh dev.sh follow (或 docker compose logs -f --tail=200 backend frontend)" echo "停止:docker compose down" if [ "$MODE" = "up" ]; then echo "" echo "开始跟随日志(Ctrl+C 可退出跟随,不会停止容器)..." docker compose logs -f --tail=200 backend frontend fi