本文属于「自托管 Docker 部署实战」系列(共 35 篇),第 19 篇。 示例中的 IP(192.0.2.10)、域名(example.com)、密码均为占位符,请按实际环境替换。

它是什么

面向 Steam 游戏(帕鲁、CS、MC 等)的服务器管理面板,自带 SteamCMD、实例管理、文件管理、定时任务。

前置条件

  • 一台 Linux 服务器(1C1G 起步;Java 类应用建议 2C4G 以上);
  • 已安装 Docker 与 Compose v2,执行 docker compose version 有版本号输出;
  • 所有示例里的 IP / 域名 / 密码都是占位符,实际部署请替换成自己的。
# 安装 Docker(已安装可跳过)
curl -fsSL https://get.docker.com | sh

# 目录约定:一个服务一个目录,后文的 ./data 均指栈目录内
mkdir -p /srv/docker/active/<stack> && cd /srv/docker/active/<stack>

镜像地址

xiaozhu674/gameservermanager:latest

目录结构

/srv/docker/active/gsm/
├── docker-compose.yml
├── game_data/            # Steam 用户配置(.config/.local)
└── game_file/            # 游戏服务端文件

部署步骤

# docker-compose.yml
services:
  management_panel:
    image: xiaozhu674/gameservermanager:latest
    container_name: GSManager3
    restart: unless-stopped
    network_mode: host
    user: root
    environment:
      - TZ=Asia/Shanghai
      - SERVER_PORT=3068
    volumes:
      # Steam 用户目录(面板内部约定,不建议改)
      - ./game_data:/home/steam/.config
      - ./game_data:/home/steam/.local
      - ./game_file:/home/steam/games
      - ./game_data:/root/.config
      - ./game_data:/root/.local
      - ./game_file:/root/steam/games
      # 面板自身数据:账号、配置、实例元数据
      - gsm3_data:/root/server/data
    stdin_open: true
    tty: true

volumes:
  gsm3_data:
docker compose up -d
# 访问 http://<SERVER_IP>:3068

关键配置

  • 面板用 host 网络,所以 SERVER_PORT 就是宿主机端口,不用做映射;
  • game_file 会非常大(一个帕鲁服务端十几 G),建议单独挂一块盘;
  • 面板要下载 Steam 创意工坊内容,服务器需要能访问 Steam CDN;
  • 游戏实例的端口由面板分配,开服前在防火墙放行对应 TCP/UDP。

注意事项

  • 内存:面板 + 游戏服很容易吃满 16G,先算好再开实例;
  • 面板本身没有强认证,不要直接暴露公网,至少套一层反向代理 + Basic Auth;
  • game_data 和 game_file 权限错乱会导致 SteamCMD 下载失败,保持容器内 root/steam 一致;
  • 定期备份 gsm3_data 卷和存档目录。

备份与升级

# 游戏文件 + 面板用户目录
tar czf "gsm-files-$(date +%F).tar.gz" ./game_data ./game_file

# 面板数据在命名卷里,先确认卷名再备份
docker volume ls | grep gsm
docker run --rm -v <项目名>_gsm3_data:/src -v "$PWD":/backup alpine \
  tar czf /backup/gsm3-data-$(date +%F).tar.gz -C /src .

# 升级
docker compose pull
docker compose up -d
  • 升级前先在面板里停掉所有游戏实例,避免存档损坏;
  • game_file 体积大,备份前确认磁盘余量。