flnxi-Wu/scripts/tools/healthcheck.sh
WuYongJie d1c6efc79d
Some checks failed
CI Check / check (push) Has been cancelled
feat: NAS 部署与 Harbor 推送流程
2025-12-03 14:39:06 +08:00

125 lines
3.5 KiB
Bash

#!/bin/bash
# ============================================
# FLNXI素材库 - 健康检查脚本
# ============================================
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
echo "========================================"
echo " 系统健康检查"
echo "========================================"
echo ""
# 检测 docker-compose 命令
if docker compose version &> /dev/null 2>&1; then
DOCKER_COMPOSE="docker compose"
elif command -v docker-compose &> /dev/null; then
DOCKER_COMPOSE="docker-compose"
else
echo -e "${RED}错误: 未找到 docker-compose 命令${NC}"
exit 1
fi
# 加载环境变量
if [ -f .env ]; then
source .env
else
echo -e "${YELLOW}警告: 未找到 .env 文件${NC}"
fi
# 检查服务状态
echo -e "${BLUE}[1/6]${NC} 检查服务状态..."
echo ""
$DOCKER_COMPOSE ps
echo ""
# 检查 PostgreSQL
echo -e "${BLUE}[2/6]${NC} 检查数据库..."
if docker compose exec -T postgres pg_isready -U postgres &> /dev/null; then
echo -e "${GREEN}✓ PostgreSQL 运行正常${NC}"
# 检查数据库连接
DB_COUNT=$(docker compose exec -T postgres psql -U postgres -d flnxi -t -c "SELECT COUNT(*) FROM users;" 2>/dev/null | xargs)
echo " 用户数: $DB_COUNT"
else
echo -e "${RED}✗ PostgreSQL 未运行或无法连接${NC}"
fi
echo ""
# 检查 MinIO
echo -e "${BLUE}[3/6]${NC} 检查对象存储..."
if curl -f http://localhost:${MINIO_API_PORT:-9000}/minio/health/live &> /dev/null; then
echo -e "${GREEN}✓ MinIO 运行正常${NC}"
# 检查 bucket
if docker compose exec -T minio mc alias set local http://localhost:9000 ${MINIO_ROOT_USER:-minioadmin} ${MINIO_ROOT_PASSWORD:-minioadmin123456} &> /dev/null; then
BUCKETS=$(docker compose exec -T minio mc ls local 2>/dev/null | wc -l)
echo " Bucket 数量: $BUCKETS"
fi
else
echo -e "${RED}✗ MinIO 未运行或无法访问${NC}"
fi
echo ""
# 检查应用
echo -e "${BLUE}[4/6]${NC} 检查应用服务..."
if curl -f http://localhost:${APP_PORT:-4320}/api/health &> /dev/null; then
echo -e "${GREEN}✓ 应用运行正常${NC}"
else
echo -e "${RED}✗ 应用未运行或无法访问${NC}"
fi
echo ""
# 检查磁盘空间
echo -e "${BLUE}[5/6]${NC} 检查磁盘空间..."
df -h | grep -E "Filesystem|/$"
echo ""
DISK_USAGE=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 80 ]; then
echo -e "${YELLOW}⚠ 警告: 磁盘使用率超过 80%${NC}"
else
echo -e "${GREEN}✓ 磁盘空间充足${NC}"
fi
echo ""
# 检查 Docker 资源
echo -e "${BLUE}[6/6]${NC} 检查 Docker 资源..."
docker system df
echo ""
# 检查容器内存使用
echo "容器资源使用:"
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
echo ""
# 总结
echo "========================================"
echo -e "${GREEN} 健康检查完成${NC}"
echo "========================================"
echo ""
# 检查是否有停止的容器
STOPPED=$(docker compose ps -q | xargs docker inspect -f '{{.State.Status}}' 2>/dev/null | grep -c "exited" || true)
if [ $STOPPED -gt 0 ]; then
echo -e "${YELLOW}⚠ 检测到 $STOPPED 个已停止的容器${NC}"
echo " 运行以下命令重启: docker compose restart"
else
echo -e "${GREEN}✓ 所有服务运行正常${NC}"
fi
echo ""
echo "访问地址:"
echo " 应用: http://${SERVER_IP:-localhost}:${APP_PORT:-4320}"
echo " MinIO: http://${SERVER_IP:-localhost}:${MINIO_CONSOLE_PORT:-9001}"
echo ""