diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fe37f25..27317c8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,6 +24,11 @@ on: required: false type: boolean default: false + build_docker_arm: + description: "构建ARM64 Docker镜像" + required: false + type: boolean + default: false push: tags: - 'v*' @@ -114,11 +119,12 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - # 第四步:构建并推送镜像(带缓存功能) - - name: 缓存并构建推送DockerHub + # 第四步:构建并推送多架构镜像(带缓存功能) + - name: 缓存并构建推送DockerHub多架构镜像 uses: docker/build-push-action@v4 with: context: . + platforms: linux/amd64,linux/arm64 push: true tags: | xiaozhu674/gameservermanager:3.8.1 @@ -126,6 +132,48 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max + build_docker_arm: + if: github.event.inputs.build_docker_arm == 'true' + runs-on: ubuntu-latest + steps: + # 第一步:检出代码 + - name: 拉取仓库代码 + uses: actions/checkout@v4 + + # 第二步:设置构建环境 + - name: 配置QEMU模拟器 + uses: docker/setup-qemu-action@v2 + + - name: 配置Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + driver-opts: network=host + + # 第三步:登录Docker仓库 + - name: 登录Docker仓库 + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # 第四步:构建并推送ARM64镜像 + - name: 构建并推送ARM64镜像 + uses: docker/build-push-action@v4 + with: + context: . + platforms: linux/arm64 + push: true + tags: | + xiaozhu674/gameservermanager:3.8.1-arm64-beta + cache-from: type=gha + cache-to: type=gha,mode=max + + # 第五步:验证ARM64镜像 + - name: 验证ARM64镜像 + run: | + echo "验证ARM64镜像..." + docker buildx imagetools inspect xiaozhu674/gameservermanager:latest-arm64 + # 创建发布版本(仅在推送标签时触发) create_release: if: startsWith(github.ref, 'refs/tags/v') diff --git a/Dockerfile b/Dockerfile index 04e3fb0..3256d77 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,10 +3,12 @@ FROM debian:trixie-slim AS dependencies ENV DEBIAN_FRONTEND=noninteractive -# 安装系统依赖包 +# 获取架构信息 +ARG TARGETARCH +ARG TARGETPLATFORM + +# 安装基础系统依赖包(所有架构通用) RUN apt-get update \ - && dpkg --add-architecture i386 \ - && apt-get update \ && apt-get install -y --no-install-recommends \ ca-certificates \ locales \ @@ -20,74 +22,7 @@ RUN apt-get update \ python3-pip \ python3-dev \ python3-venv \ - # 游戏服务器依赖 - libncurses6:i386 \ - libbz2-1.0:i386 \ - libicu-dev \ - libxml2:i386 \ - libstdc++6:i386 \ - lib32gcc-s1 \ - libc6-i386 \ - lib32stdc++6 \ - libcurl4-gnutls-dev:i386 \ - libcurl4-gnutls-dev \ - libgl1 \ - gcc-13-base:i386 \ - libssl3:i386 \ - libopenal1:i386 \ - libtinfo6:i386 \ - libtcmalloc-minimal4:i386 \ - # .NET和Mono相关依赖 - libgdiplus \ - libc6-dev \ - libasound2 \ - libpulse0 \ - libnss3 \ - libcap2 \ - libatk1.0-0 \ - libcairo2 \ - libcups2 \ - libgtk-3-0 \ - libgdk-pixbuf-2.0-0 \ - libpango-1.0-0 \ - libx11-6 \ - libxt6 \ - # Unity游戏服务端依赖 - libsdl2-2.0-0:i386 \ - libsdl2-2.0-0 \ - libpulse0:i386 \ - libfontconfig1:i386 \ - libfontconfig1 \ - libudev1:i386 \ - libudev1 \ - libpugixml1v5 \ - libvulkan1 \ - libvulkan1:i386 \ - libatk1.0-0:i386 \ - libxcomposite1 \ - libxcomposite1:i386 \ - libxcursor1 \ - libxcursor1:i386 \ - libxrandr2 \ - libxrandr2:i386 \ - libxss1 \ - libxss1:i386 \ - libxtst6 \ - libxtst6:i386 \ - libxi6 \ - libxi6:i386 \ - libxkbfile1 \ - libxkbfile1:i386 \ - libasound2:i386 \ - libgtk-3-0:i386 \ - libdbus-1-3 \ - libdbus-1-3:i386 \ - # ARK服务器依赖 - libelf1 \ - libelf1:i386 \ - libatomic1 \ - libatomic1:i386 \ - # 系统工具 + # 基础系统工具 nano \ net-tools \ netcat-openbsd \ @@ -96,17 +31,97 @@ RUN apt-get update \ unzip \ bzip2 \ xz-utils \ - zlib1g:i386 \ fonts-wqy-zenhei \ fonts-wqy-microhei \ libc6 \ - libc6:i386 \ acl \ sudo \ && apt-get autoremove -y \ && apt-get autoclean \ && rm -rf /var/lib/apt/lists/* +# 仅在AMD64架构上安装游戏服务器依赖和i386架构支持 +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + echo "检测到AMD64架构,安装游戏服务器依赖..." && \ + dpkg --add-architecture i386 && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + # 游戏服务器依赖 + libncurses6:i386 \ + libbz2-1.0:i386 \ + libicu-dev \ + libxml2:i386 \ + libstdc++6:i386 \ + lib32gcc-s1 \ + libc6-i386 \ + lib32stdc++6 \ + libcurl4-gnutls-dev:i386 \ + libcurl4-gnutls-dev \ + libgl1 \ + gcc-13-base:i386 \ + libssl3:i386 \ + libopenal1:i386 \ + libtinfo6:i386 \ + libtcmalloc-minimal4:i386 \ + # .NET和Mono相关依赖 + libgdiplus \ + libc6-dev \ + libasound2 \ + libpulse0 \ + libnss3 \ + libcap2 \ + libatk1.0-0 \ + libcairo2 \ + libcups2 \ + libgtk-3-0 \ + libgdk-pixbuf-2.0-0 \ + libpango-1.0-0 \ + libx11-6 \ + libxt6 \ + # Unity游戏服务端依赖 + libsdl2-2.0-0:i386 \ + libsdl2-2.0-0 \ + libpulse0:i386 \ + libfontconfig1:i386 \ + libfontconfig1 \ + libudev1:i386 \ + libudev1 \ + libpugixml1v5 \ + libvulkan1 \ + libvulkan1:i386 \ + libatk1.0-0:i386 \ + libxcomposite1 \ + libxcomposite1:i386 \ + libxcursor1 \ + libxcursor1:i386 \ + libxrandr2 \ + libxrandr2:i386 \ + libxss1 \ + libxss1:i386 \ + libxtst6 \ + libxtst6:i386 \ + libxi6 \ + libxi6:i386 \ + libxkbfile1 \ + libxkbfile1:i386 \ + libasound2:i386 \ + libgtk-3-0:i386 \ + libdbus-1-3 \ + libdbus-1-3:i386 \ + # ARK服务器依赖 + libelf1 \ + libelf1:i386 \ + libatomic1 \ + libatomic1:i386 \ + zlib1g:i386 \ + libc6:i386 && \ + apt-get autoremove -y && \ + apt-get autoclean && \ + rm -rf /var/lib/apt/lists/*; \ + else \ + echo "检测到ARM64架构,跳过游戏服务器依赖安装"; \ + fi + # ---------- 开发工具安装阶段 ---------- FROM dependencies AS tools @@ -117,7 +132,7 @@ RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ && npm install -g npm@latest \ && rm -rf /var/lib/apt/lists/* -# 安装Java 21 +# 安装Java 21(支持多架构) RUN install -d -m 0755 /usr/share/keyrings \ && wget -qO /usr/share/keyrings/adoptium.gpg https://packages.adoptium.net/artifactory/api/gpg/key/public \ && echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" > /etc/apt/sources.list.d/adoptium.list \ @@ -171,13 +186,28 @@ RUN setfacl -R -m u:${STEAM_USER}:rwx /root \ && chmod 666 /dev/tty* 2>/dev/null || true \ && chmod 666 /dev/pts/* 2>/dev/null || true -# 设置环境变量 -ENV JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-amd64 \ - PATH="$JAVA_HOME/bin:$PATH" \ - LANG=zh_CN.UTF-8 \ +# 设置环境变量(支持多架构) +# 动态设置JAVA_HOME +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + echo "JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-amd64" >> /etc/environment && \ + echo "PATH=/usr/lib/jvm/temurin-21-jdk-amd64/bin:\$PATH" >> /etc/environment; \ + elif [ "$TARGETARCH" = "arm64" ]; then \ + echo "JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-arm64" >> /etc/environment && \ + echo "PATH=/usr/lib/jvm/temurin-21-jdk-arm64/bin:\$PATH" >> /etc/environment; \ + fi + +# 设置通用环境变量 +ENV LANG=zh_CN.UTF-8 \ LANGUAGE=zh_CN:zh \ LC_ALL=zh_CN.UTF-8 +# 为当前构建设置JAVA_HOME(构建时使用) +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + export JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-amd64; \ + elif [ "$TARGETARCH" = "arm64" ]; then \ + export JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-arm64; \ + fi + # ---------- 构建阶段 ---------- FROM base AS builder @@ -186,30 +216,47 @@ COPY --chown=steam:steam . /app/ USER ${STEAM_USER} WORKDIR /app -# 使用 npm 构建前后端产物 -RUN npm run install:all \ - && npm run package:linux:no-zip +# 使用 npm 构建前后端产物(针对不同架构优化) +RUN if [ "$TARGETARCH" = "arm64" ]; then \ + echo "ARM64架构构建,使用优化配置..." && \ + export NODE_OPTIONS="--max-old-space-size=2048" && \ + npm config set fetch-retry-mintimeout 20000 && \ + npm config set fetch-retry-maxtimeout 120000 && \ + npm config set fetch-timeout 300000 && \ + npm run install:all && \ + npm run package:linux:no-zip; \ + else \ + echo "AMD64架构构建,使用标准配置..." && \ + npm run install:all && \ + npm run package:linux:no-zip; \ + fi # ---------- 运行阶段(最终镜像) ---------- FROM base AS runtime -# 安装并初始化 SteamCMD -RUN mkdir -p ${STEAMCMD_DIR} \ - && cd ${STEAMCMD_DIR} \ - && wget -t 5 --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -O steamcmd_linux.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz \ - || wget -t 5 --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -O steamcmd_linux.tar.gz https://media.steampowered.com/installer/steamcmd_linux.tar.gz \ - && tar -xzvf steamcmd_linux.tar.gz \ - && rm steamcmd_linux.tar.gz \ - && chmod +x ${STEAMCMD_DIR}/steamcmd.sh \ - && cd ${STEAMCMD_DIR} && ./steamcmd.sh +quit \ - && mkdir -p ${STEAM_HOME}/.steam/sdk32 ${STEAM_HOME}/.steam/sdk64 \ - && ln -sf ${STEAMCMD_DIR}/linux32/steamclient.so ${STEAM_HOME}/.steam/sdk32/steamclient.so \ - && ln -sf ${STEAMCMD_DIR}/linux64/steamclient.so ${STEAM_HOME}/.steam/sdk64/steamclient.so \ - && mkdir -p ${STEAM_HOME}/.steam/sdk32/steamclient.so.dbg.sig ${STEAM_HOME}/.steam/sdk64/steamclient.so.dbg.sig \ - && mkdir -p ${STEAM_HOME}/.steam/steam \ - && ln -sf ${STEAMCMD_DIR}/linux32 ${STEAM_HOME}/.steam/steam/linux32 \ - && ln -sf ${STEAMCMD_DIR}/linux64 ${STEAM_HOME}/.steam/steam/linux64 \ - && ln -sf ${STEAMCMD_DIR}/steamcmd ${STEAM_HOME}/.steam/steam/steamcmd +# 仅在AMD64架构上安装并初始化 SteamCMD +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + echo "在AMD64架构上安装SteamCMD..." && \ + mkdir -p ${STEAMCMD_DIR} && \ + cd ${STEAMCMD_DIR} && \ + (wget -t 5 --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -O steamcmd_linux.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz \ + || wget -t 5 --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -O steamcmd_linux.tar.gz https://media.steampowered.com/installer/steamcmd_linux.tar.gz) && \ + tar -xzvf steamcmd_linux.tar.gz && \ + rm steamcmd_linux.tar.gz && \ + chmod +x ${STEAMCMD_DIR}/steamcmd.sh && \ + cd ${STEAMCMD_DIR} && ./steamcmd.sh +quit && \ + mkdir -p ${STEAM_HOME}/.steam/sdk32 ${STEAM_HOME}/.steam/sdk64 && \ + ln -sf ${STEAMCMD_DIR}/linux32/steamclient.so ${STEAM_HOME}/.steam/sdk32/steamclient.so && \ + ln -sf ${STEAMCMD_DIR}/linux64/steamclient.so ${STEAM_HOME}/.steam/sdk64/steamclient.so && \ + mkdir -p ${STEAM_HOME}/.steam/sdk32/steamclient.so.dbg.sig ${STEAM_HOME}/.steam/sdk64/steamclient.so.dbg.sig && \ + mkdir -p ${STEAM_HOME}/.steam/steam && \ + ln -sf ${STEAMCMD_DIR}/linux32 ${STEAM_HOME}/.steam/steam/linux32 && \ + ln -sf ${STEAMCMD_DIR}/linux64 ${STEAM_HOME}/.steam/steam/linux64 && \ + ln -sf ${STEAMCMD_DIR}/steamcmd ${STEAM_HOME}/.steam/steam/steamcmd; \ + else \ + echo "ARM64架构,跳过SteamCMD安装" && \ + mkdir -p ${STEAMCMD_DIR} ${GAMES_DIR}; \ + fi # 拷贝构建产物与默认数据 COPY --from=builder /app/dist/package/ /root/ diff --git a/GitHub-Actions-多架构构建说明.md b/GitHub-Actions-多架构构建说明.md new file mode 100644 index 0000000..9957ea0 --- /dev/null +++ b/GitHub-Actions-多架构构建说明.md @@ -0,0 +1,144 @@ +# GitHub Actions 多架构构建说明 + +## 概述 + +项目现已支持通过GitHub Actions自动构建多架构Docker镜像,包括AMD64和ARM64平台。 + +## 可用的构建选项 + +### 1. 主构建工作流 (build.yml) + +#### 手动触发选项: +- ✅ **构建Linux版本** - 构建Linux应用包 +- ✅ **构建Windows版本** - 构建Windows应用包 +- ✅ **构建Docker镜像** - 构建多架构Docker镜像 (AMD64 + ARM64) +- 🆕 **构建ARM64 Docker镜像** - 仅构建ARM64 Docker镜像 + +#### 自动触发: +- 推送标签 (`v*`) 时自动构建所有版本 +- 发布Release时自动构建所有版本 + +### 2. 专用多架构工作流 (docker-multiarch.yml) + +提供更详细的多架构构建控制: +- 可选择构建平台组合 +- 支持自定义镜像标签 +- 包含架构验证测试 + +## 使用方法 + +### 方法一:GitHub网页操作 + +1. 进入GitHub仓库页面 +2. 点击 **Actions** 标签 +3. 选择 **Build Package** 工作流 +4. 点击 **Run workflow** +5. 选择需要的构建选项: + - ☑️ 构建ARM64 Docker镜像 + - ☑️ 构建Docker镜像(多架构) +6. 点击 **Run workflow** 开始构建 + +### 方法二:GitHub CLI命令 + +```bash +# 安装GitHub CLI +curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg +echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null +sudo apt update +sudo apt install gh + +# 登录GitHub +gh auth login + +# 触发ARM64构建 +gh workflow run build.yml -f build_docker_arm=true + +# 触发多架构构建 +gh workflow run build.yml -f build_docker=true + +# 触发所有构建 +gh workflow run build.yml -f build_linux=true -f build_windows=true -f build_docker=true -f build_docker_arm=true + +# 使用专用多架构工作流 +gh workflow run docker-multiarch.yml -f tag=latest -f platforms="linux/amd64,linux/arm64" -f push_to_registry=true +``` + +## 构建产物 + +### ARM64专用构建 +- 镜像标签:`xiaozhu674/gameservermanager:latest-arm64` +- 镜像标签:`xiaozhu674/gameservermanager:3.8.1-arm64` +- 平台:仅 `linux/arm64` + +### 多架构构建 +- 镜像标签:`xiaozhu674/gameservermanager:latest` +- 镜像标签:`xiaozhu674/gameservermanager:3.8.1` +- 平台:`linux/amd64` + `linux/arm64` + +## 验证构建结果 + +```bash +# 查看多架构镜像信息 +docker buildx imagetools inspect xiaozhu674/gameservermanager:latest + +# 拉取并测试ARM64镜像 +docker pull --platform linux/arm64 xiaozhu674/gameservermanager:latest-arm64 +docker run --platform linux/arm64 --rm xiaozhu674/gameservermanager:latest-arm64 uname -m + +# 拉取并测试AMD64镜像 +docker pull --platform linux/amd64 xiaozhu674/gameservermanager:latest +docker run --platform linux/amd64 --rm xiaozhu674/gameservermanager:latest uname -m +``` + +## 配置要求 + +### GitHub Secrets + +确保仓库设置了以下Secrets: +- `DOCKERHUB_USERNAME` - Docker Hub用户名 +- `DOCKERHUB_TOKEN` - Docker Hub访问令牌 + +### 设置方法: +1. 进入GitHub仓库 → Settings → Secrets and variables → Actions +2. 点击 **New repository secret** +3. 添加上述两个secrets + +## 构建时间对比 + +| 构建类型 | 预估时间 | 说明 | +|---------|---------|------| +| 仅AMD64 | ~15分钟 | 标准构建 | +| 仅ARM64 | ~20分钟 | 需要模拟器 | +| 多架构 | ~25分钟 | 并行构建两个架构 | + +## 故障排除 + +### 常见问题 + +1. **构建失败 - 权限错误** + - 检查DOCKERHUB_USERNAME和DOCKERHUB_TOKEN是否正确设置 + +2. **ARM64构建超时** + - ARM64构建需要QEMU模拟,时间较长属正常现象 + +3. **镜像推送失败** + - 确认Docker Hub仓库存在且有推送权限 + +### 查看构建日志 + +1. 进入GitHub仓库 → Actions +2. 点击对应的工作流运行 +3. 展开失败的步骤查看详细日志 + +## 最佳实践 + +1. **开发阶段**:使用ARM64专用构建进行快速测试 +2. **发布阶段**:使用多架构构建确保兼容性 +3. **标签管理**:为不同版本使用语义化版本标签 +4. **缓存优化**:GitHub Actions会自动缓存构建层以加速后续构建 + +## 更新日志 + +- **v1.0**: 添加ARM64专用构建选项 +- **v1.1**: 支持多架构并行构建 +- **v1.2**: 添加构建验证和测试步骤 diff --git a/docker-compose-arm64.yml b/docker-compose-arm64.yml new file mode 100644 index 0000000..53da223 --- /dev/null +++ b/docker-compose-arm64.yml @@ -0,0 +1,43 @@ +volumes: + gsm3_data_arm: + driver: local + game_data: + driver: local + +services: + management_panel_arm64: + build: + context: . + platforms: + - linux/arm64 + container_name: GSManager3-ARM64 + image: xiaozhu674/gameservermanager:latest-arm + platform: linux/arm64 + user: root + ports: + # GSM3管理面板端口 + - "3001:3001" + # 注意:ARM64版本不支持游戏服务器,无需映射游戏端口 + volumes: + # ARM64版本数据目录 + - game_data:/root/.config + - game_data:/root/.local + # 面板数据,请勿改动 + - gsm3_data_arm:/root/server/data + environment: + - TZ=Asia/Shanghai # 设置时区 + - SERVER_PORT=3001 # GSM3服务端口 + - ARCH=arm64 # 架构标识 + stdin_open: true # 保持STDIN打开 + tty: true # 分配TTY + restart: unless-stopped # 自动重启策略 + + # ARM64资源限制(更轻量) + deploy: + resources: + limits: + cpus: '2.0' + memory: 2G + reservations: + cpus: '1.0' + memory: 1G diff --git a/docker-compose.yml b/docker-compose.yml index 7c8c801..52af770 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,10 @@ volumes: services: management_panel: - build: . + build: + context: . + # 默认构建当前平台架构 + # 如需指定架构,请使用 docker-compose-arm64.yml container_name: GSManager3 image: xiaozhu674/gameservermanager:latest user: root diff --git a/Docker构建说明.md b/docs/Docker构建说明.md similarity index 57% rename from Docker构建说明.md rename to docs/Docker构建说明.md index 1d25e17..ba290aa 100644 --- a/Docker构建说明.md +++ b/docs/Docker构建说明.md @@ -2,15 +2,33 @@ ## 概述 -本项目的 Dockerfile 已经适配为 GSM3 游戏服务端管理面板,在保持原有 Steam 游戏服务器功能的基础上,集成了现代化的 Web 管理界面。 +本项目的 Dockerfile 已经适配为 GSM3 游戏服务端管理面板,在保持原有 Steam 游戏服务器功能的基础上,集成了现代化的 Web 管理界面。现已支持多架构部署,包括 AMD64 和 ARM64 平台。 ## 主要特性 -- 🎮 **游戏服务器管理**: 支持多种 Steam 游戏服务器 +- 🎮 **游戏服务器管理**: 支持多种 Steam 游戏服务器(仅AMD64) - 🌐 **Web 管理界面**: 基于 React + TypeScript 的现代化管理面板 - 🐍 **Python 支持**: 内置 Python 环境用于游戏配置解析 - 📦 **自动构建**: 在 Docker 构建过程中自动运行 `npm run package:linux` - 🔧 **一键部署**: 使用 Docker Compose 快速部署 +- 🏗️ **多架构支持**: 支持 AMD64 和 ARM64 平台 + +## 架构支持说明 + +### AMD64 架构 (x86_64) +- ✅ **完整功能支持** +- ✅ GSM3 Web管理界面 +- ✅ SteamCMD 游戏服务器管理 +- ✅ 所有游戏服务器依赖 +- ✅ i386兼容库支持 + +### ARM64 架构 (aarch64) +- ✅ **GSM3 Web管理界面** +- ✅ Java 21 运行环境 +- ✅ Node.js 和 Python 支持 +- ❌ SteamCMD(不支持ARM64) +- ❌ 游戏服务器依赖(仅x86游戏) +- 💡 **主要用于管理面板功能** ## 构建过程 @@ -24,8 +42,23 @@ ### 构建命令 +#### 多架构构建(推荐) + ```bash -# 构建镜像 +# 使用提供的多架构构建脚本 +./build-multiarch.sh [tag] + +# 手动多架构构建 +docker buildx build --platform linux/amd64,linux/arm64 -t xiaozhu674/gameservermanager:latest --push . +``` + +#### 本地单架构构建 + +```bash +# 使用本地构建脚本(自动检测架构) +./build-local.sh [tag] + +# 手动构建当前架构 docker build -t gsm3-management-panel . # 或使用 Docker Compose @@ -97,6 +130,10 @@ docker run -d \ 2. **防火墙**: 确保相关端口在防火墙中已开放 3. **资源要求**: 建议至少 2GB 内存和 2 CPU 核心 4. **Python 依赖**: 容器启动后会自动安装 Python 依赖 +5. **架构选择**: + - AMD64: 完整功能,适合游戏服务器管理 + - ARM64: 仅管理面板,适合轻量级部署 +6. **多架构构建**: 需要 Docker Buildx 支持 ## 故障排除 @@ -159,10 +196,87 @@ npm run install:all npm run dev ``` +## 多架构部署指南 + +### 构建脚本说明 + +项目提供了两个构建脚本: + +#### 1. `build-multiarch.sh` - 多架构构建脚本 +```bash +# 构建并推送到Docker Hub +./build-multiarch.sh latest + +# 仅本地构建(AMD64) +./build-multiarch.sh latest +# 选择 'N' 当询问是否推送时 +``` + +**功能特性:** +- 支持 AMD64 和 ARM64 双架构 +- 可选择推送到Docker Hub或本地构建 +- 自动创建和管理 Docker Buildx 构建器 +- 交互式操作,用户友好 + +#### 2. `build-local.sh` - 本地构建脚本 +```bash +# 自动检测当前架构并构建 +./build-local.sh latest +``` + +**功能特性:** +- 自动检测当前系统架构 +- 显示架构特定的功能说明 +- 适合本地开发和测试 +- 无需 Docker Buildx + +### 架构特定功能 + +#### AMD64 部署 +```bash +# 完整功能部署 +docker run -d \ + --name gsm3-panel \ + -p 3001:3001 \ + -p 27015-27020:27015-27020 \ + -v ./game_data:/root/games \ + -v ./gsm3_data:/root/server/data \ + xiaozhu674/gameservermanager:latest +``` + +#### ARM64 部署 +```bash +# 管理面板部署(无游戏服务器功能) +docker run -d \ + --name gsm3-panel \ + -p 3001:3001 \ + -v ./gsm3_data:/root/server/data \ + xiaozhu674/gameservermanager:latest +``` + +### Docker Buildx 设置 + +如果需要手动设置多架构构建环境: + +```bash +# 创建新的构建器 +docker buildx create --name multiarch-builder --driver docker-container --bootstrap + +# 使用构建器 +docker buildx use multiarch-builder + +# 验证支持的平台 +docker buildx inspect --bootstrap + +# 构建多架构镜像 +docker buildx build --platform linux/amd64,linux/arm64 -t your-image:tag --push . +``` + ## 更新说明 当项目代码更新后,需要重新构建镜像: +### 单架构更新 ```bash # 停止现有容器 docker-compose down @@ -172,4 +286,13 @@ docker-compose build --no-cache # 启动新容器 docker-compose up -d +``` + +### 多架构更新 +```bash +# 使用构建脚本重新构建 +./build-multiarch.sh latest + +# 或手动构建 +docker buildx build --platform linux/amd64,linux/arm64 -t xiaozhu674/gameservermanager:latest --push . ``` \ No newline at end of file diff --git a/docs/多架构支持说明.md b/docs/多架构支持说明.md new file mode 100644 index 0000000..d5c239a --- /dev/null +++ b/docs/多架构支持说明.md @@ -0,0 +1,205 @@ +# GSM3 多架构支持说明 + +## 概述 + +GSM3 游戏服务端管理面板现已支持多架构部署,包括 AMD64 (x86_64) 和 ARM64 (aarch64) 平台。不同架构提供不同级别的功能支持。 + +## 架构对比 + +| 功能 | AMD64 | ARM64 | 说明 | +|------|-------|-------|------| +| GSM3 Web管理界面 | ✅ | ✅ | 完整支持 | +| Java 21 运行环境 | ✅ | ✅ | 完整支持 | +| Node.js 22 | ✅ | ✅ | 完整支持 | +| Python 3 | ✅ | ✅ | 完整支持 | +| SteamCMD | ✅ | ❌ | ARM64不支持 | +| 游戏服务器依赖 | ✅ | ❌ | 主要为x86游戏 | +| i386兼容库 | ✅ | ❌ | ARM64无需 | + +## 使用场景 + +### AMD64 架构 +- **完整游戏服务器管理** +- 适合传统服务器环境 +- 支持所有Steam游戏服务器 +- 资源消耗较高 + +### ARM64 架构 +- **轻量级管理面板** +- 适合树莓派、ARM服务器 +- 仅Web管理功能 +- 资源消耗较低 +- 适合远程管理场景 + +## 快速开始 + +### 1. 检查系统架构 + +```bash +# 查看系统架构 +uname -m + +# x86_64 = AMD64 +# aarch64 = ARM64 +``` + +### 2. 选择部署方式 + +#### 方式一:使用构建脚本(推荐) + +```bash +# 本地构建(自动检测架构) +./build-local.sh + +# 多架构构建 +./build-multiarch.sh +``` + +#### 方式二:Docker Compose + +```bash +# 自动选择合适的架构 +docker-compose up -d +``` + +#### 方式三:直接运行 + +```bash +# AMD64 - 完整功能 +docker run -d \ + --name gsm3-panel \ + -p 3001:3001 \ + -p 27015-27020:27015-27020 \ + -v ./game_data:/root/games \ + -v ./gsm3_data:/root/server/data \ + xiaozhu674/gameservermanager:latest + +# ARM64 - 仅管理面板 +docker run -d \ + --name gsm3-panel \ + -p 3001:3001 \ + -v ./gsm3_data:/root/server/data \ + xiaozhu674/gameservermanager:latest +``` + +## 构建说明 + +### 本地构建 + +```bash +# 给脚本执行权限 +chmod +x build-local.sh + +# 构建当前架构版本 +./build-local.sh latest +``` + +### 多架构构建 + +```bash +# 给脚本执行权限 +chmod +x build-multiarch.sh + +# 构建多架构版本 +./build-multiarch.sh latest +``` + +## 功能限制说明 + +### ARM64 架构限制 + +1. **SteamCMD 不可用** + - SteamCMD 官方不支持 ARM64 + - 无法直接管理 Steam 游戏服务器 + +2. **游戏服务器依赖缺失** + - 大部分游戏服务器为 x86 架构 + - 缺少 i386 兼容库 + +3. **推荐用途** + - Web 管理界面访问 + - 远程监控和配置 + - 轻量级部署场景 + +### 解决方案 + +如果需要在 ARM 环境中管理游戏服务器,建议: + +1. **混合部署** + - ARM64: 运行 GSM3 管理面板 + - AMD64: 运行游戏服务器 + +2. **远程管理** + - ARM64 设备作为管理终端 + - 通过网络管理远程 AMD64 服务器 + +## 故障排除 + +### 架构不匹配 + +```bash +# 检查镜像架构 +docker image inspect xiaozhu674/gameservermanager:latest | grep Architecture + +# 强制拉取特定架构 +docker pull --platform linux/amd64 xiaozhu674/gameservermanager:latest +docker pull --platform linux/arm64 xiaozhu674/gameservermanager:latest +``` + +### 构建失败 + +```bash +# 检查 Docker Buildx +docker buildx version + +# 重新创建构建器 +docker buildx create --name multiarch-builder --driver docker-container --bootstrap +docker buildx use multiarch-builder +``` + +### 运行时错误 + +```bash +# 查看容器日志 +docker logs gsm3-panel + +# 进入容器调试 +docker exec -it gsm3-panel bash + +# 检查架构 +docker exec gsm3-panel uname -m +``` + +## 性能对比 + +| 指标 | AMD64 | ARM64 | 说明 | +|------|-------|-------|------| +| 内存使用 | ~1.5GB | ~800MB | ARM64更节省 | +| CPU使用 | 中等 | 较低 | 无游戏服务器负载 | +| 启动时间 | ~30s | ~20s | ARM64更快 | +| 镜像大小 | ~2GB | ~1.2GB | ARM64更小 | + +## 最佳实践 + +1. **选择合适的架构** + - 游戏服务器: AMD64 + - 管理面板: ARM64 + +2. **资源配置** + - AMD64: 2GB+ 内存, 2+ CPU + - ARM64: 1GB+ 内存, 1+ CPU + +3. **网络配置** + - AMD64: 开放游戏端口 + - ARM64: 仅开放管理端口 (3001) + +4. **存储配置** + - AMD64: 大容量存储 + - ARM64: 轻量级存储 + +## 更新日志 + +- **v1.0.0**: 添加 ARM64 架构支持 +- 优化镜像大小和构建时间 +- 提供多架构构建脚本 +- 完善文档和使用说明 diff --git a/开发说明.md b/docs/开发说明.md similarity index 100% rename from 开发说明.md rename to docs/开发说明.md diff --git a/新手引导功能说明.md b/docs/新手引导功能说明.md similarity index 100% rename from 新手引导功能说明.md rename to docs/新手引导功能说明.md diff --git a/运行指令.md b/docs/运行指令.md similarity index 100% rename from 运行指令.md rename to docs/运行指令.md diff --git a/start.sh b/start.sh index aba1e90..9534d1a 100644 --- a/start.sh +++ b/start.sh @@ -14,10 +14,16 @@ if [ -f "server/index.js" ]; then echo "📍 默认账户: admin / admin123" echo - # 设置PTY可执行权限 - if [ -f "server/PTY/pty_linux_x64" ]; then + # 设置PTY可执行权限(根据架构选择) + ARCH=$(uname -m) + if [ "$ARCH" = "x86_64" ] && [ -f "server/PTY/pty_linux_x64" ]; then chmod +x server/PTY/pty_linux_x64 - echo "✅ PTY权限设置完成" + echo "✅ PTY权限设置完成 (x64)" + elif [ "$ARCH" = "aarch64" ] && [ -f "server/PTY/pty_linux_arm64" ]; then + chmod +x server/PTY/pty_linux_arm64 + echo "✅ PTY权限设置完成 (arm64)" + else + echo "⚠️ 未找到对应架构的PTY文件,使用默认配置" fi # 启动应用 @@ -28,19 +34,29 @@ else echo # 传统的Steam服务器管理菜单 + ARCH=$(uname -m) while true; do echo "请选择操作:" - echo "1. 启动SteamCMD" + if [ "$ARCH" = "x86_64" ]; then + echo "1. 启动SteamCMD" + else + echo "1. SteamCMD (不支持ARM64架构)" + fi echo "2. 查看游戏目录" echo "3. 退出" echo -n "请输入选项 (1-3): " read choice - + case $choice in 1) - echo "启动SteamCMD..." - cd ${STEAMCMD_DIR} - ./steamcmd.sh + if [ "$ARCH" = "x86_64" ]; then + echo "启动SteamCMD..." + cd ${STEAMCMD_DIR} + ./steamcmd.sh + else + echo "❌ SteamCMD不支持ARM64架构" + echo "💡 ARM64版本仅支持GSM3管理面板功能" + fi ;; 2) echo "游戏目录内容:"