搭建Minecraft空岛服务器:基于docker和CarpetSkyAdditions

引言

前几天无聊的时候,偶然在视频平台刷到了我小时候,可能上至小学五六年级,最喜欢玩的游戏之一——我的世界,minecraft。想当初在手机上长按第二个格子便可以刷出很多物品的乐趣,现在长大了,对于儿时的记忆仍然尤新,还是能切身体会到那种“逃课”的快乐(当然,现在在塞尔达里面也经常能体验到)。

然而,儿时较大的遗憾是没有技术,不会自己组建服务器,通常都是在别人的服务器里肝得开开心心,转头关服又灰心丧气,所以,儿时的快乐总是极致而又短暂的。不过到了现在,自己已经有了技术,对服务器也了解一二,反而对这种游戏没有太大兴趣了。因此自己开服玩游戏其实一直都没有很多机会。这段时间偶尔的“上号”,才按照最好的方式部署了一次 Minecraft 服务器。因此,本文在我成功部署之后,将此步骤作为记录,以提供给想要自行部署服务器玩的朋友们,愿你们能在这个世界中玩的开心。

本文将讲述如何使用 Linux 服务器,通过 docker 和 CarpetSkyAdditions 来搭建一个 minecraft 空岛服务器。对于 windows 开服的玩家来说,步骤可能有些许不同,如果有不懂的问题,请随时提问,我将在本文章评论区提供帮助。

准备工作

服务器

  • Linux 系统
  • 按照Wiki给出的配置菜单,用于 Unix 的 Minecraft 服务器不应当小于以下配置
需求玩家CPU内存硬盘上传带宽下载带宽[隐藏]注释
最低配置1-2Intel Pentium 4 1.8 GHz 或 AMD Athlon XP 1600+ 或 PowerPC 750 1000 MHz/G4 1 GHz 以上512 MB2 GB 可用空间 (5GB -如果经常备份服务器)3 Mbit/s2 Mbit/s(Minecraft 服务器能勉强在 1Mbit/s 的上传带宽上运行)
Acceptable2-4Intel Pentium 4 2.6 GHz 或 AMD Athlon XP 2000+ 或 G4/Frescale 7xxx 1.8 GHz 以上2 GB8 GB 可用空间6 Mbit/s3 Mbit/s
推荐配置4-5Intel Pentium 4 3.6 GHz 或 AMD Phenom 3600+ G4 2.0 GHz 或 IBM 970 以上3 GB16 GB 可用空间8 Mbit/s4 Mbit/s
优良配置5-7Intel Core-Based CPUs 或 AMD K8-Based CPUs IBM 970 2.0 GHz 以上5 GB25 GB 可用空间14 Mbit/s7 Mbit/s
最佳配置7+Intel Core-Based CPUs 或 AMD K8-Based CPUs at 3.6GHz 或 higher IBM 970 2.0 GHz 以上6 GB35 GB 可用空间30 Mbit/s15 Mbit/s推荐使用高读写速度的机械磁盘或 SLC SSD。
  • 我个人建议,应当保持不小于 2G 的内存空间,不小于 20G 的存储空间,上下行带宽不应小于 5Mbps 即可

所需软件和工具

  • 必要的指令
  apt install curl tar zip
  • Docker 的安装与配置
  curl -fsSL https://get.docker.com | bash -s docker

对于国内服务器,可以使用--mirror参数设置镜像源进行安装,例如:

  curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

创建并运行 docker compose 生成默认配置文件

  • 创建 docker-compose.yml
    我们选用的 Docker 镜像为广受使用的itzg 的 docker-minecraft-server,由于 CarpetSkyAdditions 是基于Fabric的,所以我们配置文件需要使用 Fabric 对应的 docker 镜像。当然如果你并不是想游玩空岛地图,你可以在官方给出的环境示例或者直接在Github 配置文件示例选择你想要的 server type 并使用即可。 mkdir mc && cd $_ 当然,此处我直接给出我自己的配置文件
services:
    mc:
      image: itzg/minecraft-server
      stdin_open: true
      tty: true
      restart: unless-stopped
      environment:
        EULA: "true"
        TYPE: FABRIC
        VERSION: 1.20.1
        MEMORY: 3G
      ports:
        - "25565:25565"
      volumes:
        - ./data:/data
  
  volumes:
    fabric: {}

注意,上面的内容请不要照抄,请修改自己对应的内存MEMORY。如果你想跟我一样玩空岛并想自己写配置文件的话,请先参考CarpetSkyAdditions对应的MC的最新版本,由于写这篇文章时最新版为1.20.1,因此本文以版本为主。

按下Esc键并输入:wq回车保存

  • 运行 docker compose 并创建默认文件
  docker compose up

等待运行完成,会生成默认世界,世界生成完毕后 Ctrl+C 退出 docker 页面并停止容器

  docker compose down

至此,我们对于 docker 和 mc 的创建就已经完成,如果你想要体验原汁原味的生存,就可以开始了。

空岛配置

配置 CarpetSkyAdditions

cd data/mods && curl -L -o carpetskyadditions-1.20.1-4.4.1.jar https://github.com/jsorrell/CarpetSkyAdditions/releases/download/v1.20.1-4.4.1/carpetskyadditions-1.20.1-4.4.1.jar>
  • 下载必须的模组,由于 Curseforge 的原因,并不方便通过curl或者wget命令进行下载。通过手动访问下载并通过 ftp 上传到服务器 (上传到data文件夹下的./mods文件夹中)
  • 从本站下载
cd data/mods && curl -L -o mods.tar.gz https://api.zty.ink/api/v2/objects/file/4k41dx7iv5onapouj7.zip && unzip mods.tar.gz

配置服务器属性文件(server.properties

  • 在前面创建 docker compose 文件的时候我们已经运行过一次了,因此会在data目录下生成我们的server.properties文件,直接修改即可
    level-type=minecraft\:normal(世界生成类型:默认)修改为level-type=carpetskyadditions\:skyblock(世界生成类型:空岛),并启用数据包carpetskyadditions:skyblock ... initial-enabled-packs=carpetskyadditions\:skyblock level-type=carpetskyadditions\:skyblock ...
  • 如果你不清楚如何修改,直接运行下面命令即可。


请进入./data 目录下运行该指令。

sed -i 's/^level-type=minecraft\\:normal/level-type=carpetskyadditions\\:skyblock/' server.properties && awk -F= '/^initial-enabled-packs=/ {print $0",carpetskyadditions:skyblock"; next} 1' server.properties > server.properties.tmp && mv server.properties.tmp server.properties
  • (可选)指定种子:
    • level-seed中填写你对应的种子即可。

(可选)添加其他模组

以下模组均可直接下载 MC 对应版本的 mod 后添加到./data/mods文件夹,重启服务器即可docker compose restart

  • GugleCarpetAddition
  • 假人模组,可以不用在空岛这么肝
  • Servus
  • 服务器端提供结构边界框给客户端 MiniHUD 的工具

创建世界并添加数据包

在做完以上工作后,我们便可以正常创建一个空岛世界,并添加适合空岛玩法的数据包。

删除原有世界并创造新的世界

由于我们之前的世界并不是根据 CarpetSkyAdditions 生成的,所以我们需要先删掉之前生成的 world 世界,重新由 carpetskyadditions\:skyblock 生成一个世界。

rm -rf world && cd .. && docker compose up -d

添加并启用数据包

  • 下载数据包到 datapacks 文件夹中
  • 从官网下载

cd data/world/datapacks && curl -L -o carpetskyadditions-1.20.1-4.4.1-datapack.zip https://github.com/jsorrell/CarpetSkyAdditions/releases/download/v1.20.1-4.4.1/carpetskyadditions-1.20.1-4.4.1-datapack.zip
  • 启用数据包
  • 进入控制台 docker ps 会输出类似于以下内容,找到其 NAMES CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1fca3576a47f itzg/minecraft-server “/start” 4 days ago Up 4 days (healthy) 0.0.0.0:25565->25565/tcp, :::25565->25565/tcp mc-mc-1 docker exec -i <NAMES> rcon-cli 将其中的< NAMES >更换为上面的内容
  • 启用数据包
    首先,通过以下命令查看哪些数据包没有被启用 > datapack list 类似于以下输出 There are 4 data pack(s) enabled: [carpetskyadditions:skyblock (built-in: Carpet Sky Additions)], [fabric (Fabric mod)], [vanilla (built-in)], [file/carpetskyadditions-1.20.1-4.4.1-datapack.zip (world)]There are 1 data pack(s) available: [carpetskyadditions:skyblock_acacia (built-in: Carpet Sky Additions)] 启用对应数据包即可 (一般来说是 carpetskyadditions-1.20.1-4.4.1-datapack.zip) datapack enable carpetskyadditions-1.20.1-4.4.1-datapack.zip

测试服务器

外部连接测试

由于开放的是 Minecraft 标准的 25565 端口,因此在服务器地址一栏中直接输入服务器地址即可直接连接。

客户端配置

同样,您需要将datapack文件和language文件放入客户端的datapacks文件夹中,并且在游戏配置中启用,才能获得更好的体验。

此外,我强烈建议您在客户端安装MiniHUDmod,这在空岛生存中非常有用

常见问题解答

  • 为何我连接不上?
  • 首先,通过docker ps检查容器是否正常运行,如果容器发生错误,请根据 log 自行排查
  • 若容器运行正常,大概率为网络问题,请先检查防火墙是否阻断,一般我习惯用 ufw 来管理防火墙。您应当检查 iptables
  • 版本问题

服务器维护与管理

常见问题及解决方法

  • 容器重启和停止命令
  重启:
  docker compose restart
  停止:
  docker compose down
  • 日志查看与错误排查
    Minecraft 日志存放于./data/logs文件夹中
  cat data/logs/latest.log

备份与恢复

  • 数据备份策略
    一般来说,我们只需要备份world文件夹(或者你创建的其他世界的名称)即可,如果 mod 使用过多或者使用了不常见的 datapacks,建议备份对应文件夹以及server.properties
  tar -zcf bak.tar.gz world datapacks mods server.properties
  • 恢复备份数据的方法
    将备份文件解压到data目录下即可
  tar -zxf bak.tar.gz

结论

总体来说,通过 docker 的搭建方式让我觉得比使用其他方式更加便携和更加模块化,我更喜欢通过 docker 来部署 Minecraft 服务器,当然我也在此鼓励各位尝试更加个性化的部署方式,一方面能够体验更多的乐趣,另一方面也希望各位不要总是遵循文档办事。我相信,有自己的创造力是每一个 mc 玩家最值得骄傲的事情。

附录

这些资源可以帮助您更深入地了解如何使用 Docker 和 Minecraft 模组来定制和优化自己的游戏服务器。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注