setup.sh 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/env bash
  2. # hs-data 服务器一键环境准备(Debian/Ubuntu)。幂等,可重复执行。
  3. # 用法:在仓库根目录执行 bash infra/setup.sh
  4. set -euo pipefail
  5. cd "$(dirname "$0")/.." # 切到仓库根
  6. echo "==> 仓库根: $(pwd)"
  7. # --- Node 20 + pnpm(corepack) ---
  8. if ! command -v node >/dev/null 2>&1 || [ "$(node -v | cut -dv -f2 | cut -d. -f1)" -lt 20 ]; then
  9. echo "==> 安装 Node 20 (nvm)"
  10. export NVM_DIR="$HOME/.nvm"
  11. if [ ! -s "$NVM_DIR/nvm.sh" ]; then
  12. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
  13. fi
  14. # shellcheck disable=SC1091
  15. . "$NVM_DIR/nvm.sh"
  16. nvm install 20
  17. nvm use 20
  18. fi
  19. corepack enable
  20. echo "==> Node $(node -v) / pnpm $(corepack pnpm@10 -v)"
  21. # --- 前端依赖 ---
  22. echo "==> pnpm install(workspace)"
  23. corepack pnpm@10 install
  24. # --- Python 3.11 + 后端依赖 ---
  25. if ! command -v python3.11 >/dev/null 2>&1; then
  26. echo "==> 安装 Python 3.11"
  27. sudo apt-get update
  28. sudo apt-get install -y python3.11 python3.11-venv
  29. fi
  30. echo "==> 后端 venv + 依赖"
  31. cd apps/api
  32. python3.11 -m venv .venv
  33. .venv/bin/pip install -q --upgrade pip
  34. .venv/bin/pip install -q -e ".[dev]"
  35. cd ../..
  36. # --- 本地 env ---
  37. [ -f apps/web/.env ] || cp apps/web/.env.example apps/web/.env
  38. [ -f apps/api/.env ] || cp apps/api/.env.example apps/api/.env 2>/dev/null || true
  39. cat <<'EOF'
  40. ==> 完成。启动方式:
  41. # 后端(默认 USE_FAKE_DATA=true,无需 DB 即可起)
  42. cd apps/api && .venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
  43. # 前端(--host 暴露到局域网/远程访问)
  44. corepack pnpm@10 --filter @hs-data/web dev --host
  45. # 接真实 Postgres(可选):
  46. docker compose -f infra/docker-compose.yml up -d
  47. cd apps/api && .venv/bin/alembic upgrade head && .venv/bin/python -m scripts.seed
  48. # 然后把 apps/api/.env 的 USE_FAKE_DATA 设为 false 再起后端
  49. # 测试
  50. corepack pnpm@10 --filter @hs-data/web test
  51. cd apps/api && .venv/bin/pytest -q
  52. EOF