#!/usr/bin/env bash # book-mcp 一键部署 — 在 codelab 上跑 # # 用法(在 codelab 上): # cd ~/book-mcp # bash deploy/install.sh # # 准备: # 1. docker 已装 # 2. python3.11+ 已装 # 3. nginx/caddy 二选一(可选,本脚本用 caddy 配反代) # # 部署: # - book-mcp-mongo(27018) # - book-mcp-server(8100,由 launchd 守护) # - frontend(vite dev 5176 or 生产构建) set -euo pipefail cd "$(dirname "$0")/.." ROOT="$(pwd)" log() { echo "[$(date +%H:%M:%S)] $*"; } # ============================================================ # 1. MongoDB 容器(已存在则跳过) # ============================================================ log "→ 检查 book-mcp-mongo" if ! docker ps -a --format '{{.Names}}' | grep -q '^book-mcp-mongo$'; then log " 启动 mongo 容器..." docker run -d \ --name book-mcp-mongo \ -p 27018:27017 \ -e MONGO_INITDB_ROOT_USERNAME=book_admin \ -e MONGO_INITDB_ROOT_PASSWORD=book_mongo_2026 \ -e MONGO_INITDB_DATABASE=book_mcp \ -v book-mcp-mongo-data:/data/db \ --restart unless-stopped \ mongo:8.0 log " ✓ 容器已起(密码:book_mongo_2026)" sleep 4 else log " ✓ 容器已存在" docker start book-mcp-mongo 2>/dev/null || true fi # ============================================================ # 2. Python venv + 依赖 # ============================================================ log "→ 准备 Python venv" VENV=/opt/book-mcp-venv if [ ! -d "$VENV" ]; then python3 -m venv "$VENV" log " ✓ venv 创建" fi $VENV/bin/pip install -q --upgrade pip $VENV/bin/pip install -q -r "$ROOT/requirements.txt" log " ✓ Python 依赖装好" # ============================================================ # 3. MongoDB 索引 # ============================================================ log "→ 建 MongoDB 索引" $VENV/bin/python "$ROOT/book_mcp_server.py" --init-db log " ✓ 索引建好" # ============================================================ # 4. 配置 # ============================================================ log "→ 写 .env(如果不存在)" if [ ! -f "$ROOT/.env" ]; then cat > "$ROOT/.env" < /dev/null <&1; then log " ✓ 健康" else log " ✗ 健康检查失败,看 /var/log/book-mcp/server.error.log" exit 1 fi log "" log "============================================================" log "✅ book-mcp 部署完成" log "============================================================" log " MCP endpoint: http://127.0.0.1:8100/mcp" log " MongoDB: mongodb://book_admin:book_mongo_2026@127.0.0.1:27018/book_mcp?authSource=admin" log " 日志: /var/log/book-mcp/server.log" log " 服务管理: sudo systemctl {start|stop|restart|status} book-mcp" log "" log " 部署前端:cd frontend && bash ../deploy/install-frontend.sh"