3588AdminBackend/scripts/deploy/check-env.sh
2026-02-25 11:00:55 +08:00

192 lines
4.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 3588AdminBackend 环境检查脚本
# 用于检查目标系统是否满足运行要求
echo "========== 3588AdminBackend 环境检查 =========="
echo ""
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
PASS=0
FAIL=0
WARN=0
check_pass() {
echo -e "${GREEN}${NC} $1"
((PASS++))
}
check_fail() {
echo -e "${RED}${NC} $1"
((FAIL++))
}
check_warn() {
echo -e "${YELLOW}${NC} $1"
((WARN++))
}
# 1. 检查操作系统
echo "[系统信息]"
echo " 主机名: $(hostname)"
if [ -f /etc/os-release ]; then
. /etc/os-release
echo " 操作系统: $NAME $VERSION"
if [[ "$NAME" == *"Ubuntu"* ]] && [[ "$VERSION_ID" == "22.04" ]]; then
check_pass "Ubuntu 22.04 detected"
else
check_warn "非 Ubuntu 22.04,可能兼容但未经测试"
fi
else
check_warn "无法检测操作系统版本"
fi
# 2. 检查架构
echo ""
echo "[硬件信息]"
ARCH=$(uname -m)
echo " 架构: $ARCH"
if [ "$ARCH" = "x86_64" ]; then
check_pass "x86_64 架构"
elif [ "$ARCH" = "aarch64" ]; then
check_warn "ARM64 架构,请使用 ARM64 版本二进制"
else
check_warn "未知架构: $ARCH"
fi
echo " CPU: $(nproc)"
echo " 内存: $(free -h | awk '/^Mem:/ {print $2}')"
# 3. 检查网络工具
echo ""
echo "[网络工具]"
if command -v curl >/dev/null 2>&1; then
check_pass "curl 已安装"
else
check_warn "curl 未安装 (建议使用: apt-get install curl)"
fi
if command -v wget >/dev/null 2>&1; then
check_pass "wget 已安装"
else
check_warn "wget 未安装"
fi
if command -v netstat >/dev/null 2>&1 || command -v ss >/dev/null 2>&1; then
check_pass "网络工具(netstat/ss)已安装"
else
check_warn "建议安装 net-tools 或 iproute2"
fi
# 4. 检查端口占用
echo ""
echo "[端口检查]"
PORT_18080=false
PORT_35688=false
if command -v ss >/dev/null 2>&1; then
PORT_18080=$(ss -tln | grep -q ':18080 ' && echo true || echo false)
PORT_35688=$(ss -uln | grep -q ':35688 ' && echo true || echo false)
elif command -v netstat >/dev/null 2>&1; then
PORT_18080=$(netstat -tln 2>/dev/null | grep -q ':18080 ' && echo true || echo false)
PORT_35688=$(netstat -uln 2>/dev/null | grep -q ':35688 ' && echo true || echo false)
fi
if [ "$PORT_18080" = true ]; then
check_warn "端口 18080 已被占用"
else
check_pass "端口 18080 可用"
fi
if [ "$PORT_35688" = true ]; then
check_warn "端口 35688 已被占用"
else
check_pass "端口 35688 可用"
fi
# 5. 检查防火墙
echo ""
echo "[防火墙]"
if command -v ufw >/dev/null 2>&1; then
UFW_STATUS=$(ufw status 2>/dev/null | grep -i status | awk '{print $2}')
echo " UFW 状态: $UFW_STATUS"
if [ "$UFW_STATUS" = "active" ]; then
if ufw status | grep -q '18080'; then
check_pass "UFW 已开放 18080 端口"
else
check_warn "UFW 已启用但未开放 18080 端口"
echo " 建议执行: sudo ufw allow 18080/tcp"
fi
if ufw status | grep -q '35688'; then
check_pass "UFW 已开放 35688 端口"
else
check_warn "UFW 已启用但未开放 35688 端口"
echo " 建议执行: sudo ufw allow 35688/udp"
fi
fi
elif command -v firewall-cmd >/dev/null 2>&1; then
check_warn "检测到 firewalld请手动配置端口"
else
echo " 未检测到防火墙"
fi
# 6. 检查磁盘空间
echo ""
echo "[磁盘空间]"
DISK_AVAIL=$(df -BG /opt 2>/dev/null | tail -1 | awk '{print $4}' | tr -d 'G')
if [ -z "$DISK_AVAIL" ]; then
DISK_AVAIL=$(df -BG / 2>/dev/null | tail -1 | awk '{print $4}' | tr -d 'G')
fi
if [ "$DISK_AVAIL" -ge 1 ]; then
check_pass "磁盘空间充足 (${DISK_AVAIL}G 可用)"
else
check_warn "磁盘空间不足 (${DISK_AVAIL}G 可用,建议至少 1GB)"
fi
# 7. 检查权限
echo ""
echo "[权限检查]"
if [ "$EUID" -eq 0 ]; then
check_pass "当前为 root 用户"
else
check_warn "当前非 root 用户,安装需要 root 权限"
fi
# 8. 检查 Python用于配置验证
echo ""
echo "[其他工具]"
if command -v python3 >/dev/null 2>&1; then
check_pass "Python3 已安装 ($(python3 --version))"
else
check_warn "Python3 未安装 (用于配置验证)"
fi
if command -v jq >/dev/null 2>&1; then
check_pass "jq 已安装 (JSON 处理工具)"
else
echo " jq 未安装 (可选,用于 JSON 处理)"
fi
# 总结
echo ""
echo "========== 检查总结 =========="
echo -e "通过: ${GREEN}$PASS${NC} 警告: ${YELLOW}$WARN${NC} 失败: ${RED}$FAIL${NC}"
echo ""
if [ $FAIL -gt 0 ]; then
echo -e "${RED}环境检查未通过,请解决上述问题后再安装${NC}"
exit 1
elif [ $WARN -gt 0 ]; then
echo -e "${YELLOW}环境基本满足,但有一些警告需要注意${NC}"
exit 0
else
echo -e "${GREEN}环境检查全部通过,可以安装${NC}"
exit 0
fi