Skip to content

Steam-ARK/ark-server-docker

Repository files navigation

ARK-server-docker

docker 一键部署 ARK(方舟-生存进化)


0x00 介绍

此为 steam 版 ARK 的 docker 服务端,可用于搭建私人联机服务器。

搭建过程只用到官方原生的 SteamCMD dockerARK Server configuration 配置。

此工程没有引入网上其他比较热门的 ARK 部署工具,所以它们的配置项均不适用

0x10 运行环境

0x10 硬件要求

硬件 最低配置 推荐配置 流畅配置
CPU 2C 4C 8C
内存 6G 8G 16G
虚拟内存 4G 4G 4G
硬盘 50G 100G 100G

ARK 当前版本的服务端大小为 18812537984 bytes,约 18G,因为要从 steam 服务器下载,所以国内非常慢甚至连接不上。建议使用香港或韩国的云主机,从海外下载速度较快且不会被 GFW 拦截、国内也有不错的访问速度

0x30 部署步骤

0x31 预操作

  1. 使用 root 用户安装 python3、 docker、 docker-compose、 git
  2. 使用 root 用户设置虚拟内存(推荐 4G)
  3. 添加 id=1000 的用户到 docker 组: usermod -aG docker $(grep 1000 /etc/passwd | awk -F: '{print $1}')
  4. 切换到 id=1000 的用户: su - $(grep 1000 /etc/passwd | awk -F: '{print $1}')
  5. 之后所有步骤使用 id=1000 的用户执行

之所以要使用 id=1000 的用户,是因为下面构建的 SteamCMD docker 镜像内也强制使用了 id=1000 的用户(steam)。

由于 docker 需要从宿主机挂载服务端的游戏目录,如果宿主机使用 root 用户挂载,会导致 docker 内的用户没有权限而无法读写。所以宿主机需要使用 id=1000 的用户启动 docker。

在 Linux 中, root 的 id=0, 而 1-999 是保留给系统用户的,普通用户的 id 从 1000 开始,docker 内一般只有一个普通用户,故默认 id=1000。

0x31 部署镜像

  1. 下载此仓库: git clone --depth 1 --branch master https://github.com/lyy289065406/ark-server-docker.git
  2. 进入根目录: cd ark-server-docker
  3. 构建镜像: bin/build.[sh|ps1](镜像中不含游戏本体,只有用于下载游戏的 SteamCMD
  4. 运行镜像: bin/run_docker.[sh|ps1]

如果不想自己构建镜像,可以使用现成的镜像: expm02/ark-server-docker:latest

0x32 部署 ARK 服务端(SteamCMD 通道)

安装游戏: bin/install_game.[sh|ps1],此为命令执行后会打开 SteamCMD 交互终端,依次输入:

  1. 创建 ARK 游戏目录: force_install_dir /home/steam/games/ark
  2. 匿名登录 steam : login anonymous
  3. 下载 ARK 服务端: app_update 376030(游戏约 18G,超级慢而且可能失败)

app_update 376030 可能会因为网络原因多次失败,重新执行即可,会断点下载

关于 steam app id 376030 ...

在 steam 中每个游戏都有一个唯一且固定的 APP ID,可以在商店页面地址中查看(跟在 /app/ 后的数字):

APP ID 游戏名称 描述
346110 ARK: Survival Evolved ARK 游戏客户端
376030 ARK: Survival Evolved Dedicated Server ARK 专用服务端

0x32 部署 ARK 服务端(Github 通道)

SteamCMD 通道无法安装成功时,可使用此方法(否则应该跳过):

展开
  1. 创建 Github 账号(若已有则跳过)
  2. 配置 Github SSH
  3. Frok 此仓库(目的是使用 SSH 下载): https://github.com/lyy289065406/ark.git
  4. 创建并切换工作目录: volumes/steam/games
  5. 使用 SSH 下载到该目录: git clone --depth 1 --branch master git@github.com:${你的用户名}/ark.git
  6. 切换工作目录: cd ark
  7. 解压大文件: bin/unpack_7zip.[sh|ps1](需要预装 7-zip 命令行)

更多细节详见 ARK 的 README.md 说明

0x40 暴露服务

协议 端口 是否必要 用途
UDP 7777 服务端对玩家开放的端口,已硬编码不可修改
UDP 7778 同上
UDP 27015 被 steam 服务器列表搜索服务端所用的端口,已硬编码不可修改
TCP 32330 RCON 服务器在线管理工具的端口

以上端口均需要:

  • docker 映射到宿主机(已配置到 docker-compose.yml
  • 主机防火墙准入(Linux 若没有安装 iptables 则不需要)
  • 云主机配置安全组策略

0x50 运行 ARK 服务端

  1. 启动 ARK 服务端: bin/run_ark.[sh|ps1] -p ${服务器密码}(默认密码已经公开,建议重新指定)
  • ARK 启动约需 10 ~ 15 分钟,如果想验证是否启动成功,可以进入 docker 终端: bin/terminal.[sh|ps1]
  • 输入命令 netstat -nua 查看当前监听的 UDP 端口,只要把 7777 和 7778 端口刷出来则表示已成功启动

  1. steam 添加服务器:
  • 查看 -> 服务器 -> 收藏夹
  • 添加服务器 -> 填写 ${云主机公网 IP}:27015 -> 在此地址上寻找游戏 ...
  • 当在列表中看到自己的服务器名字后,点击 将选定游戏服务器添加至收藏夹

  1. steam 开始游戏:
  • 加入线上方舟
  • 筛选服务器 -> 收藏
  • 加入 -> 输入 服务器密码
  • 和小伙伴愉快游戏吧 ~

0x60 关于定制 ARK 启动配置

通过 bin/run_ark.[sh/ps1] 实际上是调用了 ARK 的核心启动脚本 bin/ark.sh,它默认配置了一些常用配置项:

分类 配置项 默认值 用途
可控 SessionName EXP_ARK_Server 在 steam 服务器列表上看到的名称
可控 MaxPlayers 10 能进入服务器的最大玩家数量
可控 ServerPassword EXP123456 玩家进入服务器时需要提供的密码
可控 ServerAdminPassword ADMIN654321 管理员激活 RCON 控制台的密码。
游戏内按 Tab打开控制台输入命令,游戏外可以安装 RCON Web Admin 输入命令。
ARK 的 RCON 命令详见这里,物品 ID 详见这里
可控 ServerMap TheIsland 服务器地图
可控 GameModIds 服务器已安装支持的 MOD ID 列表
可控 ActiveMods 服务器当前激活的 MOD ID 列表
可控 DifficultyOffset 0.2 游戏难度。难度越高、怪物等級越高
可控 HarvestAmountMultiplier 1.0 资源获得倍率,最大值 3 。
影响行为包括:砍伐树木、采摘浆果、分解尸体、开采岩石等
可控 TamingSpeedMultiplier 1.0 驯服恐龙倍率,最大值未知。此项越大、驯服速度越快
可控 ResourcesRespawnPeriodMultiplier 1.0 资源重生倍率。此项越小、重生速率越快。资源包括:树木、岩石、灌木等
可控 CropGrowthSpeedMultiplier 1.0 作物生长倍率。此项越大、作物成长越快
可控 XPMultiplier 1.0 指定玩家、部落和恐龙在各种行动中获得的经验获得倍率。此项越大、获得经验越多
硬编码 serverPVE True PVE 模式
硬编码 RCONEnabled True 是否启用 RCON 协议管理游戏
硬编码 RCONPort 32330 RCON 的服务端口
硬编码 servergamelog 记录 Admin 在 RCON 的操作日志
硬编码 ShowFloatingDamageText True 类似 RPG 游戏浮现伤害文字
硬编码 AllowFlyerCarryPvE True 在 PvE 模式中,允许玩家在骑乘翼龙时、捡起其他恐龙和玩家
硬编码 bAllowPlatformSaddleMultiFloors True 允许建筑多个平台楼层
硬编码 ServerAutoForceRespawnWildDinosInterval 服务器重启时强制刷新野生恐龙
硬编码 AutoDestroyStructures 随着时间推移,自动销毁附近废弃的部落建筑
硬编码 NoBattlEye 不启动 BattleEye 反作弊工具
硬编码 crossplay 允许跨平台(Epic 和 Steam 互通)
硬编码 usecache 加快 70% 的加载速度
硬编码 server 作为服务器启动(可有可无)
硬编码 log 在游戏内记录部落日志(默认按 L 查看)

启动过一次服务端后,会在 ShooterGame/Saved/Config/LinuxServer/ 目录下自动创建 GameUserSettings.iniGame.ini 配置文件,可以参考 ARK Server configuration 的参数说明修改这些配置文件。

除了上表的可控配置项,均可在配置文件中修改。否则需要修改脚本 bin/ark.sh

  1. 修改完成后,需要停止镜像: bin/stop.[sh|ps1]
  2. 如果修改过 bin/ark.sh,还需要重新构建镜像: bin/build.[sh|ps1]
  3. 再次运行镜像: bin/run_docker.[sh|ps1]
  4. 然后运行 ARK 服务端: bin/run_ark.[sh|ps1]

0x70 重启服务

只有第一次需要执行上述的步骤,配置好之后,只需要简单 3 条命令即可:

  1. 停止镜像: bin/stop.[sh|ps1]
  2. 运行镜像: bin/run_docker.[sh|ps1](参数见脚本内)
  3. 运行 ARK: bin/run_ark.[sh|ps1](参数见脚本内)

0x80 迁移服务

服务启动后会自动生成以下 3 个目录:

  • 配置目录: ./volumes/steam/games/ark/ShooterGame/Saved/Config/*
  • 存档目录: ./volumes/steam/games/ark/ShooterGame/Saved/SavedArks/*
  • 日志目录: ./volumes/steam/games/ark/ShooterGame/Saved/Logs/*

迁移前可以执行脚本 bin/backup.[sh|ps1] 将其备份到 backup 目录。

建议设置 crontab -e 定时任务自动备份 :

# 每小时备份一次存档
# 其中把 ${ARK_DIR} 换成实际 ark-server-docker 工程的绝对路径
# 例如: /home/steam/workspace/github/ark-server-docker
0 */1 * * * cd ${ARK_DIR} && bin/backup.sh > /tmp/backup.log

bin/backup.[sh|ps1] 脚本会自动删除 3 天前的存档记录,避免服务器硬盘溢出

0x90 安装 MOD

ark-mods 仓库中列出了推荐的 MOD。

把期望要安装的 MOD 复制到 ./volumes/steam/games/ark/ShooterGame/Content/Mods 目录后,在使用 bin/run_ark.[sh|ps1] 脚本启动服务器时,通过 -i ${MOD_IDS} 按需指定即可。

详见 《在 ARK 安装 MOD 指引

0xA0 定制个性化脚本

虽然用 bin/run_ark.[sh|ps1] 脚本可以一键启动,但是定制个性化服务时的启动参数还是太多,不方便记忆。

所以可以自行再添加一些封装脚本在 sbin 目录(此目录不会把文件同步到 Git 仓库),可以参考样例 sbin/onekey_demo.sh

#!/bin/bash
# sbin/onekey_demo.sh
#------------------------------------------------
# 示例:sbin/onekey_demo.sh 
#           [-s ${ServerName}]                  # 服务器名称(在 steam 服务器上看到的)
#           [-m ${MapName}]                     # 地图名
#           [-c ${PlayerAmount}]                # 最大玩家数
#           [-p ${ServerPassword}]              # 服务器密码
#           [-a ${AminPassword}]                # 管理员密码
#           [-d ${Difficulty}]                  # 游戏难度
#           [-h ${HarvestAmount}]               # 资源获得倍率
#           [-t ${TamingSpeed}]                 # 驯服恐龙倍率
#           [-r ${ResourcesRespawnPeriod}]      # 资源重生倍率
#           [-g ${CropGrowthSpeed}]             # 作物生长倍率
#           [-x ${XPMultiplier}]                # 经验获得倍率
#           [-i ${ModIds}]                      # 地图 MOD ID 列表,用英文逗号分隔
#------------------------------------------------

# 启动容器
bin/run_docker.sh
sleep 5

# 启动 ARK 服务端
bin/run_ark.sh  -s "EXP_ARK_Server" -p "EXP123456" -a "ADMIN654321" \
                -h "3" -t "5" -r "0.5" -g "2" -x "10" -c "10" \
                -m "Ragnarok" -i "1404697612,928102085,2885013943,751991809,731604991,889745138,902616446,1211297684,893904615,895711211,1232362083,618916953,722649005"

0xB0 升级服务端

因为 steam 的客户端会自动升级,当版本不匹配时,客户端无法找到服务端,此时需要使用 steam 通道在线升级:

  1. 重新构建镜像(因为新版本需要更新 SteamCMD 才能下载): bin/build.[sh|ps1] -c OFF
  2. 启动容器: bin/run_docker.[sh|ps1]
  3. 打开 steam 交互终端: bin/install_game.[sh|ps1]
  4. 匿名登录 steam : login anonymous
  5. 更新 ARK 服务端: app_update 376030 validate(游戏约 18G,超级慢而且可能失败)

0xC0 更多脚本说明

  • 构建 ARK 环境镜像: bin/build.[sh|ps1]
  • 发布 ARK 环境镜像: bin/deploy.[sh|ps1]
  • 运行 ARK 环境容器: bin/run_docker.[sh|ps1](参数见脚本内)
  • 安装 ARK 服务端: bin/install_game.[sh|ps1]
  • 运行 ARK 服务端: bin/run_ark.[sh|ps1](参数见脚本内)
  • 进入 ARK 环境容器终端: bin/terminal.[sh|ps1](参数见脚本内)
  • 停止 ARK 服务端与环境容器: bin/stop.[sh|ps1]
  • 备份 ARK 服务端存档: bin/backup.[sh|ps1]
  • 恢复 ARK 服务端存档: bin/recover.[sh|ps1]
  • 清除 ARK 服务端存档、配置和日志文件: bin/clean.[sh|ps1]

0xFF 参考文档