Files
billai/deploy.sh
CHE LIANG ZHAO 05ab270677 feat: 添加 Gitea webhook 自动部署功能
- 新增独立的 webhook 服务 (Go, 端口 9000)
- HMAC-SHA256 签名验证
- 零停机热更新部署
- 自动清理旧镜像
- 完整配置文档 WEBHOOK_SETUP.md
- 精简 README 版本历史为表格形式
2026-01-13 14:37:01 +08:00

117 lines
2.7 KiB
Bash

#!/bin/bash
# BillAI 自动部署脚本
# 此脚本由 Gitea webhook 触发,自动执行 git pull 并重新构建部署
set -e
REPO_ROOT="/app"
LOG_FILE="/tmp/billai_deploy.log"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
log() {
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" | tee -a "$LOG_FILE"
}
error() {
echo -e "${RED}[错误]${NC} $1" | tee -a "$LOG_FILE"
exit 1
}
success() {
echo -e "${GREEN}[成功]${NC} $1" | tee -a "$LOG_FILE"
}
log "=========================================="
log "🚀 BillAI 自动部署开始"
log "=========================================="
# 进入仓库目录
cd "$REPO_ROOT" || error "无法进入仓库目录: $REPO_ROOT"
log "📁 工作目录: $(pwd)"
# 拉取最新代码
log "📥 正在拉取最新代码..."
if ! git fetch origin; then
error "git fetch 失败"
fi
if ! git reset --hard origin/master; then
error "git reset 失败"
fi
success "代码已更新"
# 显示当前提交信息
log "📝 当前提交:"
git log --oneline -1
# 检查 docker-compose 是否存在
if [ ! -f "docker-compose.yaml" ]; then
error "docker-compose.yaml 不存在"
fi
log "🐳 开始热更新部署(不停机)..."
# 定义需要重新部署的服务(排除 webhook 自身,否则会自杀)
SERVICES="web server analyzer"
# 拉取基础镜像更新
log "📦 检查基础镜像更新..."
docker-compose pull mongodb mongo-express || true
# 热更新:重新构建并替换容器(不停止旧服务,直接替换)
log "🔨 热更新服务(构建 + 替换)..."
if ! docker-compose up -d --build --force-recreate --no-deps $SERVICES; then
error "Docker 热更新失败"
fi
# 清理旧的未使用镜像
log "🧹 清理旧镜像..."
docker image prune -f || true
# 等待服务启动
log "⏳ 等待服务启动..."
sleep 5
# 检查服务健康状态
log "🏥 检查服务健康状态..."
for i in {1..30}; do
if curl -f http://localhost:8080/health > /dev/null 2>&1; then
success "后端服务已启动"
break
fi
if [ $i -eq 30 ]; then
error "后端服务启动超时"
fi
sleep 1
done
for i in {1..30}; do
if curl -f http://localhost:3000 > /dev/null 2>&1; then
success "前端服务已启动"
break
fi
if [ $i -eq 30 ]; then
error "前端服务启动超时"
fi
sleep 1
done
log "=========================================="
success "🎉 部署完成"
log "=========================================="
log "⏰ 完成时间: $(date +'%Y-%m-%d %H:%M:%S')"
log "✅ 所有服务已启动并正常运行"
log ""
log "📍 访问地址:"
log " 前端: http://localhost:3000"
log " 后端: http://localhost:8080"
log ""