#!/bin/bash # deploy-monitor.sh — 部署 monitor-ai 到云服务器 # 用法: bash deploy-monitor.sh [--remote --host ] [--dev] set -e MODE="${1:-local}" REMOTE_HOST="" PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)" MONITOR_DIR="$PROJECT_DIR/monitor-ai" SHARED_DIR="$PROJECT_DIR/shared" TIMESTAMP=$(date +%Y%m%d_%H%M%S) # 解析参数 while [[ $# -gt 0 ]]; do case $1 in --remote) MODE="remote"; shift ;; --host) REMOTE_HOST="$2"; shift 2 ;; --dev) MODE="dev"; shift ;; *) shift ;; esac done echo "=== deploy-monitor.sh === Mode: $MODE ===" # 打包源码 echo "[1/5] 打包源码..." TARBALL="/tmp/monitor-ai-${TIMESTAMP}.tar.gz" cd "$PROJECT_DIR" tar czf "$TARBALL" --exclude='node_modules' --exclude='.next' --exclude='data/*.db' \ shared/lib/ monitor-ai/ echo "[2/5] 上传..." if [ "$MODE" = "remote" ]; then if [ -z "$REMOTE_HOST" ]; then echo "Error: --remote 模式需要 --host " exit 1 fi ssh "$REMOTE_HOST" "mkdir -p /root/docker" scp "$TARBALL" "$REMOTE_HOST:/root/docker/" ssh "$REMOTE_HOST" "cd /root/docker && tar xzf monitor-ai-${TIMESTAMP}.tar.gz && rm monitor-ai-${TIMESTAMP}.tar.gz" else # local 模式: 部署到当前服务器的 /root/docker/ sudo mkdir -p /root/docker sudo cp "$TARBALL" /root/docker/ cd /root/docker sudo tar xzf "monitor-ai-${TIMESTAMP}.tar.gz" sudo rm "monitor-ai-${TIMESTAMP}.tar.gz" fi echo "[3/5] 构建..." if [ "$MODE" = "remote" ]; then ssh "$REMOTE_HOST" "cd /root/docker/monitor-ai && npm install && npm run build" else cd /root/docker/monitor-ai sudo npm install sudo npm run build fi echo "[4/5] 配置首次部署..." if [ "$MODE" = "remote" ]; then # 生成密钥 OIDC_SECRET=$(openssl rand -hex 32) LOCALADMIN_PWD=$(openssl rand -hex 16) ssh "$REMOTE_HOST" "cd /root/docker/monitor-ai && \ echo 'NODE_ENV=production' > .env && \ echo 'DATABASE_PATH=/data/monitor.db' >> .env && \ echo 'MONITOR_MODE=local' >> .env && \ echo 'AUTHELIA_URL=https://sso.tlyq.ai' >> .env && \ echo 'OIDC_CLIENT_ID=monitor-oidc' >> .env && \ echo 'OIDC_CLIENT_SECRET=${OIDC_SECRET}' >> .env && \ echo 'OIDC_REDIRECT_URI=https://monitor.tlyq.ai/api/auth/callback' >> .env && \ echo 'JWT_SECRET=<与全站一致>' >> .env && \ echo 'COOKIE_DOMAIN=.tlyq.ai' >> .env && \ echo 'LDAP_URL=ldap://ldap-ai:3890' >> .env && \ echo 'LOCALADMIN_PASSWORD=${LOCALADMIN_PWD}' >> .env && \ echo 'NODE_TLS_REJECT_UNAUTHORIZED=0' >> .env" fi echo "[5/5] 启动容器..." if [ "$MODE" = "remote" ]; then ssh "$REMOTE_HOST" "cd /root/docker/monitor-ai && docker compose up -d --build" else cd /root/docker/monitor-ai sudo docker compose up -d --build fi echo "=== 部署完成 ===" echo "monitor-ai: https://monitor.tlyq.ai" echo "健康检查: curl https://monitor.tlyq.ai/api/health"