#!/usr/bin/env bash # MiroSociety 一键部署脚本 (依赖安装) # - 用 uv 创建后端 venv 并安装依赖 # - 用 npm 安装前端依赖 # 可重复执行,已安装会跳过。 set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" BACKEND_DIR="$SCRIPT_DIR/backend" FRONTEND_DIR="$SCRIPT_DIR/frontend" cd "$SCRIPT_DIR" GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' log() { echo -e "${GREEN}[deploy.sh]${NC} $*"; } warn() { echo -e "${YELLOW}[deploy.sh]${NC} $*"; } err() { echo -e "${RED}[deploy.sh]${NC} $*" >&2; } # --- 检查命令依赖 --- for cmd in uv npm node; do if ! command -v "$cmd" >/dev/null 2>&1; then err "缺少依赖命令: $cmd" exit 1 fi done VENV_DIR="$BACKEND_DIR/.venv" VENV_PY="$VENV_DIR/bin/python3" # --- 后端: uv venv + pip install --- log "检查后端环境..." if [[ ! -x "$VENV_PY" ]]; then warn "未检测到 $VENV_DIR,使用 uv 创建 venv..." (cd "$BACKEND_DIR" && uv venv) fi log "安装/更新后端依赖 (uv pip install -e .)..." (cd "$BACKEND_DIR" && uv pip install -e .) # --- 前端: npm install --- log "检查前端环境..." if [[ ! -d "$FRONTEND_DIR/node_modules" ]]; then warn "未检测到 $FRONTEND_DIR/node_modules,开始 npm install..." (cd "$FRONTEND_DIR" && npm install) else log "$FRONTEND_DIR/node_modules 已存在,跳过 (如需重装请删除该目录)" fi echo log "部署完成 ✓" echo -e " ${GREEN}后端 venv:${NC} $VENV_DIR" echo -e " ${GREEN}前端依赖:${NC} frontend/node_modules" echo log "现在可以执行 ./start.sh 启动服务"