SERVER / QUICK START

Руководство по Linux-серверу

Пошаговое руководство по развёртыванию через Docker: подготовка, compose, запуск, обслуживание и частые вопросы.

本教程将引导您在 Linux 服务器上通过 Docker 快速部署游戏服务器,即使您没有太多技术背景,也可以按照步骤完成。

1. 准备工作

  • 可以是云服务器(阿里云、腾讯云、 AWS 等),也可以是本地虚拟机或物理机。
  • 确保服务器拥有 公网 IP(如果您希望其他玩家通过互联网连接)。
  • 系统推荐 Ubuntu 20.04Ubuntu 22.04

1.1 登录服务器

使用云服务商控制台提供的 SSH 工具,或者使用本地终端(Windows 的 PowerShell、macOS/Linux 的 Terminal)直接连接。

如果您更习惯图形化 SSH 客户端,也可以使用 WindTerm 等工具连接服务器。登录成功后,您会进入 Linux 命令行环境。

2. 安装 Docker 与 Docker Compose

2.1 安装 Docker

如果您使用的是云服务器自带的 Docker 容器服务,或当前系统已经预装并可正常使用 Docker,可以直接跳过本节,继续执行下一步。

执行以下命令下载并安装 Docker(适用于大多数 Linux 发行版):

Bash
curl -fsSL https://get.docker.com | bash

安装完成后,启动 Docker 并设置开机自启:

Bash
systemctl start docker
systemctl enable docker

验证安装是否成功:

Bash
docker --version

2.2 安装 Docker Compose

现代 Docker 通常已内置 docker compose 插件;如果没有,再安装独立的 docker-compose。本教程后续命令统一使用 docker-compose。如果您的系统仅支持插件形式,请自行替换为 docker compose

方法一:检查内置插件

Bash
docker compose version

方法二:安装独立二进制

Bash
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

3. 创建服务器目录与配置文件

3.1 直接使用登录后的默认目录

本教程默认直接使用登录后的默认目录存放 docker-compose.yml.env,无需额外创建项目文件夹。如果您使用 root 登录,这个目录通常就是 /root

3.2 创建 .env 环境变量文件

.env 文件用于存放服务器参数。请直接使用系统默认的 vi 编辑器创建:

Bash
vi .env

在打开的文件中,粘贴并修改以下内容(至少修改 GAME_TOKEN 和 GAME_IP):

INI
# 游戏授权 TOKEN(必须向官方申请)
GAME_TOKEN=请填写您申请的TOKEN

# 服务器名称
GAME_NAME=我的服务器

# 公网 IP(务必填写实际公网 IP,不要用 127.0.0.1)
GAME_IP=203.0.113.10

# 端口(确保防火墙放行)
GAME_PORT=26666

# 最大玩家数
GAME_MAX_PLAYERS=64

# 设为公开服务器(出现在大厅列表)
GAME_PUBLIC=1

# 区域节点
GAME_NODE=AS

# 游戏规则(按需填写,不填则使用默认值)
# 例如:尸体消失时间、成长速度、队伍人数等
GAME_DEAD_TIME=1200
GAME_TEAM=4
GAME_CHILD=2
GAME_SAFE=30
GAME_MAP=Oasis

# 游戏模式,任选其一
# GAME_MODE_SANDBOX=1
# GAME_MODE_EVOL=1
# GAME_MODE_PRIMEVAL=1

保存并退出:先按 i 进入编辑模式,编辑完成后按 Esc,输入 :wq 并回车。完整参数说明请参考 《游戏服务器开服配置手册》。对于开关型参数,只要写变量名并赋值任意值(例如 1)就表示开启。

3.3 创建 docker-compose.yml 文件

Bash
vi docker-compose.yml
YAML
services:
  gameserv:
    image: hkccr.ccs.tencentyun.com/mesozoicdawn/gameserver:latest
    container_name: gameserv
    env_file:
      - .env
    volumes:
      - /data/Database:/app/GameServ_Data/Database
      - /data/Mods:/app/GameServ_Data/StreamingAssets/Mods
      - /data/Logs:/app/GameServ_Data/Logs
    labels:
      - com.centurylinklabs.watchtower.scope=gameserv
      - com.centurylinklabs.watchtower.enable=true
    environment:
      - GAME_AUTO_RESTART=
    restart: unless-stopped
    stop_grace_period: 60s
    healthcheck:
      test: ["CMD", "pgrep", "-f", "GameServ.x86_64"]
      interval: 50s
      timeout: 5s
      retries: 3
      start_period: 60s
    network_mode: host
    mem_limit: 3500m
    cpus: 1.8

  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.docker/config.json:/config.json
    environment:
      - WATCHTOWER_POLL_INTERVAL=300
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_TIMEOUT=120s
    command:
      - "--label-enable"
      - "--scope"
      - "gameserv"
      - "--interval"
      - "300"
      - "--cleanup"
      - "--stop-timeout"
      - "120s"
    restart: unless-stopped
    mem_limit: 128m
    cpus: 0.2
  • network_mode: host 表示容器直接使用主机网络,因此 .env 中的 GAME_PORT 必须与防火墙放行的端口一致。
  • 数据目录 /data/Database/data/Mods/data/Logs 会保存在宿主机上。Docker 会自动创建这些目录,您无需手动创建。
  • mem_limit: 3500m 表示最多使用 3.5G 内存,cpus: 1.8 表示最多使用 1.8 核 CPU,请按服务器配置自行调整。

3.4 创建数据目录(可选)

虽然 Docker 会自动创建绑定目录,但手动创建可以帮助您更早确认权限是否正确:

Bash
mkdir -p /data/Database /data/Mods /data/Logs

4. 启动服务器

确认当前位于存放 docker-compose.yml.env 的目录后执行。按照本教程默认流程,直接在登录后的默认目录执行即可;如果您使用 root 登录,通常就是 /root

Bash
docker-compose up -d
  • -d 参数表示后台运行。
  • 首次启动会从镜像仓库拉取游戏服务器镜像,请耐心等待。
  • 可以使用 docker-compose logs -f 查看实时日志,按 Ctrl+C 退出日志查看,容器不会停止。

如果一切正常,服务器会完成启动并向官方大厅注册(前提是已配置有效的 GAME_PUBLICGAME_TOKEN)。

5. 防火墙放行端口

为了让其他玩家能够连接,请务必放行 .env 中设置的 GAME_PORT(默认 26666)对应的 UDP 端口。

  • 如果使用云服务器,请在安全组中添加 UDP 端口放行规则。
  • 如果服务器启用了系统防火墙(如 ufw),执行以下命令:
Bash
ufw allow 26666/udp

6. 日常管理命令

操作命令
启动服务器docker-compose up -d
停止服务器docker-compose down
重启服务器docker-compose restart
查看日志docker-compose logs -f --tail=100
更新镜像并重启docker-compose pull 然后 docker-compose up -d
进入容器内部docker exec -it gameserv bash
  • 停止服务器时,Docker 会预留 60 秒保存数据,请勿强制 kill
  • watchtower 容器会自动监测镜像更新,并在 5 分钟间隔内自动拉取新版本并重启服务。

7. 如何修改配置

  1. 执行 cd ~ 后,使用 vi .env 打开配置文件。
  2. 保存后执行 docker-compose down,再执行 docker-compose up -d 重新加载环境变量。

必须先 downup,直接 restart 可能不会重新读取新的环境变量。

8. 常见问题

8.1 服务器启动后在大厅搜不到?

  • 检查 .env 中的 GAME_TOKEN 是否填写正确,并确认已向官方申请。
  • 检查是否设置了 GAME_PUBLIC=1
  • 检查服务器公网 IP 是否与 GAME_IP 一致,可使用 curl ifconfig.me 查看。
  • 检查防火墙和安全组是否已经放行 UDP 端口。
  • 查看日志:docker-compose logs -f gameserv

8.2 端口被占用?

修改 .env 中的 GAME_PORT 为其他端口,并同步更新防火墙放行规则。

8.3 内存不足导致容器退出?

  • 修改 docker-compose.yml 中的 mem_limit
  • 适当降低 GAME_MAX_PLAYERS 等高消耗参数。

8.4 如何安装 MOD?

将 MOD 文件放入宿主机的 /data/Mods 目录,并在 .env 中添加 GAME_MODS=Mod名称1,Mod名称2,然后重启服务器。

8.5 数据如何备份?

备份宿主机的 /data/Database 目录即可,该目录包含玩家角色、巢穴、龙蛋等数据。建议定时打包并上传至云存储。

9. 获取帮助