- 新增 deploy/ 目录包含 Docker 部署配置、数据库脚本、部署脚本 - 更新 .gitignore 忽略 deploy 构建产物 - 添加 AGENTS.md AI Agent 指南 - 添加项目构建脚本 build.sh
189 lines
5.8 KiB
Bash
Executable File
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 ""
|