Files
pit-router/auto-update.sh
yunxiafei 03a68c982e feat: 添加登录页面,支持外网访问 Web UI
- 新增 /web/login 登录页面
- 修改路由使用 optional JWT 认证
- 前端自动检测 token 并跳转登录
- 更新 .gitignore 排除 venv
2026-03-15 07:28:20 +08:00

108 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# 智队中枢自动更新脚本
# 当 Gitea 仓库有新提交时自动部署
set -e
# 配置
LOG_FILE="/var/log/pit-router-update.log"
REPO_DIR="/www/wwwroot/pit-router"
BACKUP_DIR="/www/wwwroot/pit-router-backups"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# 创建备份
backup() {
if [ -d "$REPO_DIR" ]; then
mkdir -p "$BACKUP_DIR"
BACKUP_NAME="pit-router-$(date '+%Y%m%d-%H%M%S').tar.gz"
tar -czf "$BACKUP_DIR/$BACKUP_NAME" -C "$(dirname $REPO_DIR)" "$(basename $REPO_DIR)" 2>/dev/null || true
log "备份创建: $BACKUP_NAME"
# 只保留最近 5 个备份
cd "$BACKUP_DIR"
ls -t | tail -n +6 | xargs rm -f 2>/dev/null || true
cd "$REPO_DIR"
fi
}
# 回滚函数
rollback() {
log "⚠️ 开始回滚..."
LATEST_BACKUP=$(ls -t "$BACKUP_DIR" | head -1)
if [ -n "$LATEST_BACKUP" ]; then
cd "$BACKUP_DIR"
tar -xzf "$LATEST_BACKUP" -C "$(dirname $REPO_DIR)"
cd "$REPO_DIR"
docker-compose -f docker-compose.prod.yaml up -d
log "✅ 回滚完成"
else
log "❌ 没有可用的备份"
fi
}
# 主流程
main() {
log "========== 🚀 开始自动更新 =========="
cd "$REPO_DIR" || exit 1
# 1. 创建备份
log "📦 创建备份..."
backup
# 2. 拉取最新代码
log "📥 拉取最新代码..."
git fetch origin
git reset --hard origin/main
# 记录当前 commit
COMMIT=$(git rev-parse --short HEAD)
log "当前版本: $COMMIT"
# 3. 停止旧容器
log "🛑 停止旧容器..."
docker-compose -f docker-compose.prod.yaml down 2>/dev/null || true
# 4. 构建新镜像
log "🔨 构建新镜像..."
docker-compose -f docker-compose.prod.yaml build --no-cache 2>&1 | tail -5
# 5. 启动新容器
log "🚀 启动新容器..."
docker-compose -f docker-compose.prod.yaml up -d
# 6. 等待健康检查
log "⏳ 等待服务启动..."
sleep 15
# 7. 健康检查
log "🏥 健康检查..."
MAX_RETRIES=5
RETRY_COUNT=0
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
if curl -sf http://localhost:1999/health > /dev/null 2>&1; then
log "✅ 更新成功!服务运行正常"
log "========== 🎉 更新完成 =========="
exit 0
fi
RETRY_COUNT=$((RETRY_COUNT + 1))
log "重试 $RETRY_COUNT/$MAX_RETRIES..."
sleep 5
done
# 健康检查失败,回滚
log "❌ 健康检查失败!"
rollback
log "========== ⚠️ 更新失败,已回滚 =========="
exit 1
}
# 执行
main "$@"