63 lines
1.6 KiB
Bash
63 lines
1.6 KiB
Bash
#!/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
|