docker 一键部署 ARK(方舟-生存进化)
此为 steam 版 ARK 的 docker 服务端,可用于搭建私人联机服务器。
搭建过程只用到官方原生的 SteamCMD docker 和 ARK Server configuration 配置。
此工程没有引入网上其他比较热门的 ARK 部署工具,所以它们的配置项均不适用
硬件 | 最低配置 | 推荐配置 | 流畅配置 |
---|---|---|---|
CPU | 2C | 4C | 8C |
内存 | 6G | 8G | 16G |
虚拟内存 | 4G | 4G | 4G |
硬盘 | 50G | 100G | 100G |
ARK 当前版本的服务端大小为 18812537984 bytes,约 18G,因为要从 steam 服务器下载,所以国内非常慢甚至连接不上。建议使用香港或韩国的云主机,从海外下载速度较快且不会被 GFW 拦截、国内也有不错的访问速度
usermod -aG docker $(grep 1000 /etc/passwd | awk -F: '{print $1}')
su - $(grep 1000 /etc/passwd | awk -F: '{print $1}')
之所以要使用 id=1000 的用户,是因为下面构建的 SteamCMD docker 镜像内也强制使用了 id=1000 的用户(steam)。
由于 docker 需要从宿主机挂载服务端的游戏目录,如果宿主机使用 root 用户挂载,会导致 docker 内的用户没有权限而无法读写。所以宿主机需要使用 id=1000 的用户启动 docker。
在 Linux 中, root 的 id=0, 而 1-999 是保留给系统用户的,普通用户的 id 从 1000 开始,docker 内一般只有一个普通用户,故默认 id=1000。
git clone --depth 1 --branch master https://github.com/lyy289065406/ark-server-docker.git
cd ark-server-docker
bin/build.[sh|ps1]
(镜像中不含游戏本体,只有用于下载游戏的 SteamCMD )bin/run_docker.[sh|ps1]
如果不想自己构建镜像,可以使用现成的镜像: expm02/ark-server-docker:latest
安装游戏: bin/install_game.[sh|ps1]
,此为命令执行后会打开 SteamCMD 交互终端,依次输入:
force_install_dir /home/steam/games/ark
login anonymous
app_update 376030
(游戏约 18G,超级慢而且可能失败)
app_update 376030
可能会因为网络原因多次失败,重新执行即可,会断点下载
在 steam 中每个游戏都有一个唯一且固定的 APP ID,可以在商店页面地址中查看(跟在 /app/
后的数字):
APP ID | 游戏名称 | 描述 |
---|---|---|
346110 | ARK: Survival Evolved | ARK 游戏客户端 |
376030 | ARK: Survival Evolved Dedicated Server | ARK 专用服务端 |
当 SteamCMD 通道无法安装成功时,可使用此方法(否则应该跳过):
https://github.com/lyy289065406/ark.git
volumes/steam/games
git clone --depth 1 --branch master git@github.com:${你的用户名}/ark.git
cd ark
bin/unpack_7zip.[sh|ps1]
(需要预装 7-zip 命令行)协议 | 端口 | 是否必要 | 用途 |
---|---|---|---|
UDP | 7777 | 是 | 服务端对玩家开放的端口,已硬编码不可修改 |
UDP | 7778 | 是 | 同上 |
UDP | 27015 | 是 | 被 steam 服务器列表搜索服务端所用的端口,已硬编码不可修改 |
TCP | 32330 | 否 | RCON 服务器在线管理工具的端口 |
以上端口均需要:
bin/run_ark.[sh|ps1] -p ${服务器密码}
(默认密码已经公开,建议重新指定)bin/terminal.[sh|ps1]
netstat -nua
查看当前监听的 UDP 端口,只要把 7777 和 7778 端口刷出来则表示已成功启动->
服务器 ->
收藏夹->
填写 ${云主机公网 IP}:27015
-> 在此地址上寻找游戏 ...->
收藏->
输入 服务器密码
通过 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.ini
和 Game.ini
配置文件,可以参考 ARK Server configuration 的参数说明修改这些配置文件。
除了上表的可控配置项,均可在配置文件中修改。否则需要修改脚本 bin/ark.sh
。
bin/stop.[sh|ps1]
bin/ark.sh
,还需要重新构建镜像: bin/build.[sh|ps1]
bin/run_docker.[sh|ps1]
bin/run_ark.[sh|ps1]
只有第一次需要执行上述的步骤,配置好之后,只需要简单 3 条命令即可:
bin/stop.[sh|ps1]
bin/run_docker.[sh|ps1]
(参数见脚本内)bin/run_ark.[sh|ps1]
(参数见脚本内)服务启动后会自动生成以下 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 天前的存档记录,避免服务器硬盘溢出
在 ark-mods 仓库中列出了推荐的 MOD。
把期望要安装的 MOD 复制到 ./volumes/steam/games/ark/ShooterGame/Content/Mods
目录后,在使用 bin/run_ark.[sh|ps1]
脚本启动服务器时,通过 -i ${MOD_IDS}
按需指定即可。
详见 《在 ARK 安装 MOD 指引》
虽然用 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"
因为 steam 的客户端会自动升级,当版本不匹配时,客户端无法找到服务端,此时需要使用 steam 通道在线升级:
bin/build.[sh|ps1] -c OFF
bin/run_docker.[sh|ps1]
bin/install_game.[sh|ps1]
login anonymous
app_update 376030 validate
(游戏约 18G,超级慢而且可能失败)bin/build.[sh|ps1]
bin/deploy.[sh|ps1]
bin/run_docker.[sh|ps1]
(参数见脚本内)bin/install_game.[sh|ps1]
bin/run_ark.[sh|ps1]
(参数见脚本内)bin/terminal.[sh|ps1]
(参数见脚本内)bin/stop.[sh|ps1]
bin/backup.[sh|ps1]
bin/recover.[sh|ps1]
bin/clean.[sh|ps1]
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。