xlcp/deploy/scripts/check-remote.sh
tangweijie bc40155ef0 chore: 添加部署配置及文档
- 新增 deploy/ 目录包含 Docker 部署配置、数据库脚本、部署脚本
- 更新 .gitignore 忽略 deploy 构建产物
- 添加 AGENTS.md AI Agent 指南
- 添加项目构建脚本 build.sh
2026-01-22 21:10:49 +08:00

189 lines
5.8 KiB
Bash
Executable File

#!/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 ""