#!/bin/bash # 远程服务器架构检查脚本 # 用法: ./check-remote.sh REMOTE_SERVER="${1:-root@192.168.10.150}" echo "=========================================" echo "检查远程服务器: $REMOTE_SERVER" echo "=========================================" echo "" # 检查 SSH 连接 echo "[1/8] 检查 SSH 连接..." if ! ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$REMOTE_SERVER" "echo 'SSH 连接成功'" 2>/dev/null; then echo "❌ SSH 连接失败" echo "" echo "请检查:" echo " 1. SSH 免密登录是否配置?" echo " 2. 是否可以手动: ssh $REMOTE_SERVER" echo " 3. 远程服务器 IP 是否正确?" exit 1 fi echo "✅ SSH 连接正常" echo "" # 检查架构 echo "[2/8] 检查系统架构..." ARCH=$(ssh "$REMOTE_SERVER" "uname -m" 2>/dev/null) echo "✅ 系统架构: $ARCH" # 映射到 Docker 平台 case "$ARCH" in x86_64) DOCKER_PLATFORM="linux/amd64" echo "✅ Docker 平台: linux/amd64 (Intel/AMD 64位)" ;; aarch64) DOCKER_PLATFORM="linux/arm64" echo "✅ Docker 平台: linux/arm64 (ARM 64位)" ;; armv7l) DOCKER_PLATFORM="linux/arm/v7" echo "✅ Docker 平台: linux/arm/v7 (ARM 32位)" ;; *) DOCKER_PLATFORM="unknown" echo "⚠️ 未知架构: $ARCH" ;; esac echo "" # 检查操作系统 echo "[3/8] 检查操作系统..." OS_INFO=$(ssh "$REMOTE_SERVER" "cat /etc/os-release | grep -E '^(NAME|VERSION)=' 2>/dev/null || cat /etc/issue" 2>/dev/null) echo "✅ 操作系统:" echo "$OS_INFO" echo "" # 检查 Docker echo "[4/8] 检查 Docker..." if DOCKER_VERSION=$(ssh "$REMOTE_SERVER" "docker --version" 2>/dev/null); then echo "✅ $DOCKER_VERSION" # 检查 Docker 是否能拉取镜像 echo " 测试镜像拉取能力..." if ssh "$REMOTE_SERVER" "docker pull hello-world:latest > /dev/null 2>&1"; then echo " ✅ Docker Hub 访问正常" CAN_PULL_IMAGES="yes" else echo " ❌ 无法拉取镜像 (可能需要配置镜像加速器)" CAN_PULL_IMAGES="no" fi else echo "❌ Docker 未安装" echo "" echo "请先安装 Docker:" if echo "$OS_INFO" | grep -qi "ubuntu"; then echo " curl -fsSL https://get.docker.com | sh" elif echo "$OS_INFO" | grep -qi "centos"; then echo " curl -fsSL https://get.docker.com | sh" fi exit 1 fi echo "" # 检查 Docker Compose echo "[5/8] 检查 Docker Compose..." if COMPOSE_VERSION=$(ssh "$REMOTE_SERVER" "docker compose version 2>/dev/null"); then echo "✅ $COMPOSE_VERSION (docker compose v2)" elif COMPOSE_VERSION=$(ssh "$REMOTE_SERVER" "docker-compose --version" 2>/dev/null); then echo "✅ $COMPOSE_VERSION (docker-compose v1)" else echo "❌ Docker Compose 未安装" echo "" echo "请先安装 Docker Compose:" echo " sudo curl -L \"https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-\$(uname -s)-\$(uname -m)\" -o /usr/local/bin/docker-compose" echo " sudo chmod +x /usr/local/bin/docker-compose" exit 1 fi echo "" # 检查磁盘空间 echo "[6/8] 检查磁盘空间..." DISK_INFO=$(ssh "$REMOTE_SERVER" "df -h / | tail -1") echo "✅ 磁盘使用情况:" echo "$DISK_INFO" AVAILABLE=$(ssh "$REMOTE_SERVER" "df -BG / | tail -1 | awk '{print \$4}' | sed 's/G//'") if [ "$AVAILABLE" -lt 10 ]; then echo " ⚠️ 磁盘空间不足: ${AVAILABLE}G 可用,建议至少 20G" else echo " ✅ 磁盘空间充足" fi echo "" # 检查内存 echo "[7/8] 检查内存..." MEM_INFO=$(ssh "$REMOTE_SERVER" "free -h | grep Mem") echo "✅ 内存使用情况:" echo "$MEM_INFO" TOTAL_MEM=$(ssh "$REMOTE_SERVER" "free -g | grep Mem | awk '{print \$2}'") if [ "$TOTAL_MEM" -lt 2 ]; then echo " ⚠️ 内存不足: ${TOTAL_MEM}G,建议至少 4G" else echo " ✅ 内存充足" fi echo "" # 检查端口占用 echo "[8/8] 检查端口占用..." PORTS_TO_CHECK="3306 6379 48080 80" echo "检查端口: $PORTS_TO_CHECK" PORTS_OCCUPIED=() for port in $PORTS_TO_CHECK; do if ssh "$REMOTE_SERVER" "netstat -tlnp 2>/dev/null | grep -E \":$port\s\" || ss -tlnp 2>/dev/null | grep -E \":$port\s\"" 2>/dev/null; then echo " ⚠️ 端口 $port 已被占用" PORTS_OCCUPIED+=("$port") else echo " ✅ 端口 $port 可用" fi done if [ ${#PORTS_OCCUPIED[@]} -gt 0 ]; then echo "" echo "⚠️ 以下端口已被占用: ${PORTS_OCCUPIED[*]}" echo "请修改 .env 文件中的端口配置或停止占用端口的服务" fi echo "" echo "=========================================" echo "检查完成" echo "=========================================" echo "" echo "架构信息总结:" echo " 系统架构: $ARCH" echo " Docker 平台: $DOCKER_PLATFORM" echo " Docker Hub: $([ "$CAN_PULL_IMAGES" = "yes" ] && echo "✅ 可访问" || echo "❌ 受限")" echo "" echo "Docker镜像下载建议:" if [ "$CAN_PULL_IMAGES" = "yes" ]; then echo " ✅ 服务器可以直接拉取镜像" echo " 推荐使用: ./deploy.sh (在线部署)" else echo " ❌ 服务器无法直接拉取镜像" echo " 推荐使用: ./save-images.sh (离线部署)" fi echo "" echo "所需镜像及平台支持:" echo " mysql:8.0 支持 $DOCKER_PLATFORM ✅" echo " redis:7-alpine 支持 $DOCKER_PLATFORM ✅" echo " nginx:1.25-alpine 支持 $DOCKER_PLATFORM ✅" echo " node:20-alpine 支持 $DOCKER_PLATFORM ✅" echo " eclipse-temurin:21-jre 支持 $DOCKER_PLATFORM ✅" echo "" echo "下一步操作:" if [ "$CAN_PULL_IMAGES" = "yes" ]; then echo " 1. 在线部署: ./deploy.sh" echo " 2. 或远程构建: ./remote-build.sh" else echo " 1. 本地打包: ./save-images.sh" echo " 2. 上传镜像: cd images-archive && ./upload.sh" echo " 3. 远程构建: ./remote-build.sh" fi echo ""