refactor: 合并 deploy-monitor.sh 到 deploy-ai.sh

- 删除独立的 deploy-monitor.sh 脚本
- 构建新鲜度检查功能合并到 deploy-ai.sh
- 使用动态检测替代硬编码站点列表(自动检测 .next/standalone/server.js)
- 更新 README.md 移除 deploy-monitor.sh 相关内容
This commit is contained in:
aiyimickey 2026-07-08 17:09:15 +08:00
parent eb6182f222
commit c1a5174fd1
3 changed files with 11 additions and 99 deletions

View File

@ -12,7 +12,6 @@
| `sites-manage-cloud.sh` | 云服务器站点启停SSH / 服务器本地运行) | 云端 | | `sites-manage-cloud.sh` | 云服务器站点启停SSH / 服务器本地运行) | 云端 |
| `deploy-ai.sh` | 部署站点到 tlyq.aitxjp 服务器) | 云端 | | `deploy-ai.sh` | 部署站点到 tlyq.aitxjp 服务器) | 云端 |
| `deploy-cc.sh` | 部署站点到 tlyq.cctgz 服务器) | 云端 | | `deploy-cc.sh` | 部署站点到 tlyq.cctgz 服务器) | 云端 |
| `deploy-monitor.sh` | 独立部署 monitor-ai 告警监控 | 云端 |
| `edit-site-cc.sh` | www.tlyq.cc 官网内容管理 | 云端 | | `edit-site-cc.sh` | www.tlyq.cc 官网内容管理 | 云端 |
| `check-compliance.sh` | D1-D8 合规检查LESSONS-LEARNED 自动化) | 本地 | | `check-compliance.sh` | D1-D8 合规检查LESSONS-LEARNED 自动化) | 本地 |
| `docker-cache-cleanup.sh` | Docker 缓存清理(构建缓存、悬空镜像、测试镜像) | 本地/云端 | | `docker-cache-cleanup.sh` | Docker 缓存清理(构建缓存、悬空镜像、测试镜像) | 本地/云端 |

View File

@ -639,6 +639,17 @@ EOF
return 1 return 1
fi fi
# 构建新鲜度检查(自动检测 Node.js standalone 部署)
if ssh txjp "test -f $REMOTE_DIR/.next/standalone/server.js" 2>/dev/null; then
BUILD_MTIME=$(ssh txjp "stat -c %Y $REMOTE_DIR/.next/standalone/server.js" 2>/dev/null || echo 0)
SRC_MTIME=$(ssh txjp "find $REMOTE_DIR/src -type f \( -name '*.ts' -o -name '*.tsx' \) -exec stat -c %Y {} + 2>/dev/null | sort -rn | head -1" 2>/dev/null || echo 0)
if [ "$BUILD_MTIME" -lt "$SRC_MTIME" ] 2>/dev/null; then
warn "构建产物旧于源码!请确保 npm run build 已重新执行"
else
info "构建新鲜度检查通过"
fi
fi
# 静态导出站点wwwnext build 产出 out/,移至 html/ 供 nginx 托管 # 静态导出站点wwwnext build 产出 out/,移至 html/ 供 nginx 托管
if [[ "$SITE" == "www" ]]; then if [[ "$SITE" == "www" ]]; then
ssh txjp "cd ${REMOTE_DIR} && rm -rf html && mv out html 2>/dev/null" || { ssh txjp "cd ${REMOTE_DIR} && rm -rf html && mv out html 2>/dev/null" || {

View File

@ -1,98 +0,0 @@
#!/bin/bash
# deploy-monitor.sh — 部署 monitor-ai 到云服务器
# 用法: bash deploy-monitor.sh [--remote --host <IP>] [--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 <IP>"
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
# 构建新鲜度检查
BUILD_MTIME=$(ssh "$REMOTE_HOST" "stat -c %Y /root/docker/monitor-ai/.next/standalone/server.js" 2>/dev/null || echo 0)
SRC_MTIME=$(ssh "$REMOTE_HOST" "find /root/docker/monitor-ai/src -type f \( -name '*.ts' -o -name '*.tsx' \) -exec stat -c %Y {} + 2>/dev/null | sort -rn | head -1" 2>/dev/null || echo 0)
if [ "$BUILD_MTIME" -lt "$SRC_MTIME" ] 2>/dev/null; then
echo "⚠️ 构建产物旧于源码!请确保 npm run build 已重新执行"
else
echo "✅ 构建新鲜度检查通过"
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"