#!/bin/bash # 健壮的服务启动脚本 set -e LOG_FILE="/var/log/kaopeilian_start.log" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } cd /root/aiedu log "=== 开始启动考培练系统服务 ===" # 1. 检查Docker服务 log "1. 检查Docker服务状态..." if ! systemctl is-active --quiet docker; then log "启动Docker服务..." systemctl start docker sleep 10 fi # 2. 清理可能的问题容器 log "2. 清理问题容器..." docker compose down --remove-orphans 2>/dev/null || true # 3. 分步启动服务(避免前端构建失败影响其他服务) log "3. 启动基础服务..." docker compose up -d mysql redis sleep 30 log "4. 启动后端服务..." docker compose up -d backend sleep 20 log "5. 尝试构建前端..." if docker compose build frontend; then log "前端构建成功,启动前端服务..." docker compose up -d frontend else log "前端构建失败,使用旧镜像启动..." docker compose up -d frontend || log "前端启动失败,跳过前端服务" fi log "6. 启动Nginx..." docker compose up -d nginx # 7. 检查服务状态 log "7. 检查服务状态..." sleep 20 docker compose ps # 8. 健康检查 log "8. 执行健康检查..." if curl -f -s https://aiedu.ireborn.com.cn/health > /dev/null; then log "✅ 后端服务正常" else log "❌ 后端服务异常" fi if curl -f -s -I https://aiedu.ireborn.com.cn > /dev/null; then log "✅ 前端服务正常" else log "❌ 前端服务异常" fi log "=== 服务启动完成 ==="