mirror of
https://github.com/GSManagerXZ/GameServerManager.git
synced 2026-06-01 10:29:37 +08:00
增加arm构建
This commit is contained in:
52
.github/workflows/build.yml
vendored
52
.github/workflows/build.yml
vendored
@@ -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')
|
||||
|
||||
243
Dockerfile
243
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/
|
||||
|
||||
144
GitHub-Actions-多架构构建说明.md
Normal file
144
GitHub-Actions-多架构构建说明.md
Normal file
@@ -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**: 添加构建验证和测试步骤
|
||||
43
docker-compose-arm64.yml
Normal file
43
docker-compose-arm64.yml
Normal file
@@ -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
|
||||
@@ -8,7 +8,10 @@ volumes:
|
||||
|
||||
services:
|
||||
management_panel:
|
||||
build: .
|
||||
build:
|
||||
context: .
|
||||
# 默认构建当前平台架构
|
||||
# 如需指定架构,请使用 docker-compose-arm64.yml
|
||||
container_name: GSManager3
|
||||
image: xiaozhu674/gameservermanager:latest
|
||||
user: root
|
||||
|
||||
@@ -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 .
|
||||
```
|
||||
205
docs/多架构支持说明.md
Normal file
205
docs/多架构支持说明.md
Normal file
@@ -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 架构支持
|
||||
- 优化镜像大小和构建时间
|
||||
- 提供多架构构建脚本
|
||||
- 完善文档和使用说明
|
||||
32
start.sh
32
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 "游戏目录内容:"
|
||||
|
||||
Reference in New Issue
Block a user