| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #!/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
|