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