#!/bin/bash # BillAI 部署脚本 # 用于手动部署或 Gitea Actions 自动部署 set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${GREEN}=== BillAI 部署开始 ===${NC}" echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" # 获取脚本所在目录 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" echo -e "\n${YELLOW}[1/4] 拉取最新代码${NC}" git fetch origin master git reset --hard origin/master echo "当前版本: $(git log -1 --format='%h %s')" echo -e "\n${YELLOW}[2/4] 构建并部署服务${NC}" docker compose up -d --build --remove-orphans echo -e "\n${YELLOW}[3/4] 清理旧镜像${NC}" docker image prune -f echo -e "\n${YELLOW}[4/4] 健康检查${NC}" echo "等待服务启动..." sleep 15 # 检查服务状态(通过 Docker 健康检查状态) check_service() { local name=$1 local container=$2 local status=$(docker inspect --format='{{.State.Health.Status}}' "$container" 2>/dev/null) if [ "$status" = "healthy" ]; then echo -e " ${GREEN}✓${NC} $name 服务正常" return 0 else echo -e " ${RED}✗${NC} $name 服务异常 (状态: $status)" return 1 fi } FAILED=0 check_service "Web" "billai-web" || FAILED=1 check_service "Server" "billai-server" || FAILED=1 check_service "Analyzer" "billai-analyzer" || FAILED=1 check_service "MongoDB" "billai-mongodb" || FAILED=1 if [ $FAILED -eq 0 ]; then echo -e "\n${GREEN}=== 部署成功 ===${NC}" exit 0 else echo -e "\n${RED}=== 部署失败:部分服务异常 ===${NC}" docker compose ps exit 1 fi