在 Compute Engine 上设置 Minecraft 服务器

本教程未经 Mojang 或 Minecraft 批准,也与其无关。

如需运行专用的 Minecraft 服务器,您需要具有专用的服务器、充足的 RAM 和足够的带宽。何不让 Google 代劳,帮您满足这些需求呢?在本教程中,您将学习如何在 Compute Engine 上安装、配置和运行标准 Java Minecraft 服务器。此服务器兼容基于 Java 的标准桌面 Minecraft 客户端。

您的 Minecraft 服务器软件将在 Compute Engine 实例上运行,该实例是基于 Google 基础架构运行的虚拟机。本教程使用 Compute Engine 实例的默认机器类型 n1-standard-1n1-standard-1 机器类型包括 10 GB 启动磁盘、1 个虚拟 CPU (vCPU) 和 3.75 GB RAM。默认情况下,此机器类型运行 Debian Linux

为了确保有足够的空间容纳您的 Minecraft 服务器的世界数据,您还将为实例附加高性能 50 GB 永久性固态硬盘 (SSD)。通过添加这种永久性 SSD,您的示例即可满足专用 Minecraft 服务器的系统要求,轻松支持多达 50 个玩家。

目标

  • 创建 Compute Engine 虚拟机实例
  • 安装和配置 Minecraft 服务器
  • 设置 Minecraft 世界数据的自动备份

费用

本教程使用 Google Cloud Platform 的以下收费组件:

  • Compute Engine 虚拟机
  • Compute Engine 永久性磁盘
  • Cloud Storage

您可以使用价格计算器根据您的预计使用情况来估算费用。 GCP 新用户可能有资格申请免费试用

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册新帐号

  2. 选择或创建 Google Cloud Platform 项目。

    转到“管理资源”页面

  3. 确保您的 Google Cloud Platform 项目已启用结算功能。

    了解如何启用结算功能

创建和配置 Compute Engine 实例

首先创建和配置新的 Compute Engine 实例。

  1. 在 GCP Console 中,转到虚拟机实例页面:

    转到“虚拟机实例”页面

    系统将打开一个对话框,提示您创建新的 Compute Engine 实例。

  2. 点击创建开始。

  3. 创建实例页面上,按如下方式配置实例:

    • 指定实例名称。本教程始终使用实例名称 mc-server
    • 选择要在其中托管实例的区域和地区。本教程始终使用区域 us-central1 (Iowa) 和地区 us-central1-f
    • 启动磁盘部分中,点击更改。此时会弹出启动磁盘对话框。
    • 将磁盘类型更改为 SSD 永久性磁盘
  4. 点击选择以提交更改并关闭对话框。

基本配置就是这样!但是,目前还不要创建新实例。为了满足专用 Minecraft 服务器的要求,您还需要配置一些高级设置。

为您的实例启用 Cloud Storage 访问权限

在本教程后面部分,您将学习如何将世界数据备份到 Cloud Storage 中,此操作需要您的实例对 Cloud Storage 具有读写权限。为了启用访问权限,请执行如下操作:

  1. 身份和 API 访问权限下,点击服务帐号下拉列表,然后选择 Compute Engine 默认服务帐号
  2. 访问权限范围下,点击针对每个 API 设置访问权限
  3. 存储下拉列表中,选择读写

标记您的实例

接下来,标记您的实例。在本教程后面部分,您将使用此标记创建一条防火墙规则,允许外部 Minecraft 客户端访问您的服务器。

  1. 点击管理、安全、磁盘、网络、单独租用以显示一组高级设置标签页。
  2. 网络标签页中,为网络标记字段添加 minecraft-server 标记。

为您的实例设置静态 IP 地址

为了能够将传入请求可靠地转发到您的实例,您的实例需要具备静态 IP 地址。如需为您的实例添加静态 IP 地址,请执行如下操作:

  1. 网络标签的网络接口部分中,点击默认。系统会显示网络接口配置菜单。
  2. 点击外部 IP 下拉列表,从中选择创建 IP 地址。此时会弹出一个对话框:

    创建一个新的静态 IP 地址

  3. 将您的 IP 地址命名为 mcs-ip

  4. 单击预留以创建地址。

  5. 点击完成以提交更改并关闭网络接口配置菜单。

向实例添加永久性磁盘

接下来,您要将一个永久性磁盘挂接到实例。与启动磁盘不同,永久性磁盘与 Compute Engine 实例的生命周期无关。例如,如果您的托管需求随时间而变化,您可以稍后将磁盘移到更合适的机器类型。

您将在本教程中使用的具体永久性磁盘类型是永久性 SSD。这种类型的永久性磁盘支持超快速的 I/O 操作,这有助于减少服务器延迟。

如需向实例添加永久性磁盘,请执行如下操作:

  1. 磁盘标签页的额外磁盘部分中,点击添加新磁盘。此时会显示磁盘创建对话框:

    创建新磁盘

  2. 在该对话框的表单中填写如下信息:

    • 名称minecraft-disk
    • 磁盘类型:SSD 永久性磁盘
    • 来源类型:空白磁盘
    • 大小 (GB):50
  3. 点击完成。当您创建实例时,系统会自动创建并挂接磁盘。

创建实例

大功告成,实例配置完成!点击页面底部的创建按钮,以创建新实例。此操作也会带您返回虚拟机实例页面。

格式化并装载永久性磁盘

此时,磁盘已附加到您的实例,但尚未装载到该实例。不必担心 - 如果您现在装载了磁盘,也无法用它做太多事情。这是因为,与任何磁盘一样,永久性磁盘首先需要使用您的操作系统(本例中为 Debian Linux)可以理解的文件系统进行格式化。

首先与您的实例建立 SSH 连接。在虚拟机实例页面上的 mc-server 行中,点击 SSH 打开基于浏览器的 SSH 终端:

SSH 终端

打开 SSH 终端后,在实例的 home 目录下创建一个名为 minecraft 的新目录:

user@mc-server: sudo mkdir -p /home/minecraft

您将使用此目录作为永久性磁盘的装载点。

接下来,使用如下命令格式化您的磁盘:

user@mc-server: sudo mkfs.ext4 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/google-minecraft-disk

最后,使用如下命令装载磁盘:

user@mc-server: sudo mount -o discard,defaults /dev/disk/by-id/google-minecraft-disk /home/minecraft

在您的实例上安装并运行 Minecraft 服务器

您的永久性磁盘已正式装载完成。现在是时候完成您最初想要做的事情了:安装并运行您的 Minecraft 服务器。

设置 Java 运行时环境 (JRE)

Minecraft 服务器运行在 Java 虚拟机 (JVM) 之上,因此需要运行 Java 运行时环境 (JRE)。由于服务器不需要图形用户界面,因此本教程使用 JRE 的无头版本。这种方法减少了 JRE 在您的计算机上占用的资源,有助于确保 Minecraft 服务器有足够的空间在需要时扩展自己的资源用量。

您需要先更新 Debian 安装上的 Debian 代码库,之后才能下载和安装无头版 JRE。为此,请在 SSH 终端中运行以下命令:

user@mc-server: sudo apt-get update

更新代码库后,即可安装无头 JRE:

user@mc-server: sudo apt-get install -y default-jre-headless

安装 Minecraft 服务器

现在您已经设置好了 JRE,接下来该下载并安装 Minecraft 服务器了。首先导航到您的 minecraft 目录:

user@mc-server: cd /home/minecraft

因为 minecraft 目录包含已装载的永久性磁盘,所以您需要一个特殊的访问权限级别(称为根用户访问权限)才能在其中运行命令。运行以下命令以成为根用户:

user@mc-server: sudo su

接下来,将当前的 Minecraft 服务器的 Java 归档文件 (JAR) 下载到您的实例。访问 Minecraft 下载页面,从下载链接复制文件的网址,然后使用该网址替换以下命令中的网址。

root@mc-server: wget https://launcher.mojang.com/v1/objects/f1a0073671057f01aa843443fef34330281333ce/server.jar

首次启动服务器:

root@mc-server: java -Xms1G -Xmx3G -d64 -jar server.jar nogui

首次运行有几分虎头蛇尾:服务器启动,报告一些问题,然后就停止了。但如果运行以下命令,您会注意到系统在 minecraft 目录中创建了一些新文件:

root@mc-server: ls -l

在这些新文件中,您可以找到一个名为 eula.txt 的文件。打开此文件进行编辑:

root@mc-server: nano eula.txt

此文件包含一个布尔变量 eula。如需使用 Minecraft 服务器,您必须接受 Minecraft 最终用户许可协议 (EULA) 的条款。如果您接受 EULA 的条款,请将 eula 的值从 false 改为 true,然后保存并退出。

运行 Minecraft 服务器

如果此时再次启动 Minecraft 服务器,它将与 SSH 会话的生命周期相联系 - 也就是说,如果关闭 SSH 终端,服务器也会终止。为解决此问题,您可以使用 screen,该应用允许您创建可以“分离”的虚拟终端,分离后可作为后台进程或通过“重新附加”成为前台进程。在某个虚拟终端分离到后台时,无论您是否登录,它都会保持运行。

在 SSH 终端中,运行以下命令以安装 screen

root@mc-server: apt-get install -y screen

接下来,在 screen 虚拟终端中启动 Minecraft 服务器。使用 -S 标志为终端 mcs 命名:

root@mc-server: screen -S mcs java -Xms1G -Xmx3G -d64 -jar server.jar nogui

Ctrl + a,然后输入 d,以分离 screen 终端。该终端会继续在后台运行。如需重新附加终端,请运行 screen -r <terminal_name>,如下所示:

root@mc-server: screen -r mcs

最后,如果需要,您可以再次分解 screen 终端。输入 exit 一次以退出 root 用户模式,然后再次输入 exit 关闭 SSH 连接。

恭喜!您现在获得了一个正在运行的 Minecraft 服务器。但它尚未准备好共享。在共享服务器之前,您需要设置一条允许用户访问服务器的防火墙规则。

允许客户访问 Minecraft 服务器

您需要先创建防火墙规则,之后才能可靠地将传入的请求转发到您的实例。为此,请执行以下操作:

  1. 在 GCP Console 中,转到防火墙规则页面。

    转到“防火墙规则”页面

  2. 点击创建防火墙规则

  3. 创建防火墙规则页面上,在表单中填写如下内容:

    • 名称:minecraft-rule
    • 目标标记:minecraft-server
    • 来源过滤条件:IP 地址范围
    • 来源 IP 地址范围0.0.0.0/0
    • 协议或端口:选择 tcp,然后在提供的字段中输入端口 25565
  4. 点击创建以创建新的防火墙规则。用户现在即可通过其本地 Minecraft 客户端访问您的服务器。

配置 Minecraft 服务器

您可能想修改服务器的默认属性。为此,请执行以下操作:

  1. 请重新连接服务器的 screen 终端。

    root@mc-server: screen -r mcs
  2. 输入 \stop 以停止 Minecraft 服务器。

  3. 修改文件 server.properties。如需了解每种属性类型及其可能值的信息,请参阅 Minecraft Wikiserver.properties 页面。

    $ nano server.properties
  4. 重启服务器。

    root@mc-server: screen -S mcs java -Xms1G -Xmx3G -d64 -jar server.jar nogui
  5. 分离 screen 终端。

安排定期备份

无论您是运行本地 Minecraft 客户端还是运行 Minecraft 服务器,最好定期备份 Minecraft 世界数据。本部分演示如何使用 Cloud Storage 设置您的世界数据的定期备份。

Cloud Storage 提供了几种针对不同用例优化的不同存储类别。本教程使用的 Regional 存储空间每月免费提供 5 GB。

创建备份脚本

首先,在 GCP Console 的虚拟机实例页面中与您的实例建立 SSH 连接。在终端打开后,成为根用户。

user@mc-server: sudo su

创建一个新的 Cloud Storage Regional 存储分区,并将 us-central1 替换为离您最近的 Cloud Storage 区域,将 [PROJECT_ID] 替换为您的项目 ID。您将使用此存储分区来存储备份。

root@mc-server: gsutil mb -c regional -l us-central1 gs://[PROJECT_ID]-minecraft-backup

接下来,在 minecraft 文件夹中创建一个新的 shell 脚本文件 backup.sh,然后将其打开以进行修改。

root@mc-server: nano /home/minecraft/backup.sh

将以下脚本粘贴到此文件中。将 [BUCKET_NAME] 替换为您的 Cloud Storage 存储分区名称:

#!/bin/bash
screen -r mcs -X stuff '/save-all\n/save-off\n'
/usr/bin/gsutil cp -R ${BASH_SOURCE%/*}/world gs://[BUCKET_NAME]/$(date "+%Y%m%d-%H%M%S")-world
screen -r mcs -X stuff '/save-on\n'

此脚本首先保存世界数据的当前状态,并暂停服务器的自动保存功能。接下来,该脚本将备份服务器的世界数据目录 (world),并将其内容放在 Cloud Storage 存储分区中带时间戳的目录 ([TIMESTAMP]-world) 中。该脚本在完成数据备份之后,就会恢复 Minecraft 服务器上的自动保存功能。

保存并退出,然后运行以下命令以使脚本可执行:

root@mc-server: chmod 755 /home/minecraft/backup.sh

测试脚本:

root@mc-server: /home/minecraft/backup.sh

脚本执行完成后,在 GCP Console 中访问 Storage 浏览器,并点击您的存储分区。您应该看到 world 目录的带时间戳的备份。

安排一项 cron 作业

除非您更愿意手动初始化每次备份,否则您可能希望以可预测的时间间隔自动运行脚本。为此,您需要安排一项新的 cron 作业

如需安排 cron 作业,首先打开 cron 表进行编辑:

root@mc-server: crontab -e

滚动到文件底部并粘贴以下代码行,此代码指定 backup.sh 每隔 4 小时运行一次:

0 */4 * * * /home/minecraft/backup.sh

保存并退出。

大功告成!现在,Compute Engine 实例会自动将您的世界数据备份到 Cloud Storage 存储分区中,每 4 小时备份一次。

自动移除旧备份

如果您每 4 小时备份一次世界数据,也就意味着每天备份 6 次、每周备份 72 次、每月备份大约 300 次。您可以使用名为对象生命周期管理的 Cloud Storage 功能自动移除旧备份。此功能允许您将 Cloud Storage 存储分区配置为在一定时间之后或者有更新的备份之时,自动归档或删除旧备份。

如需设置 Cloud Storage 存储分区以自动移除备份,请执行以下操作:

  1. 在 GCP Console 中打开 Cloud Storage 浏览器:

    转到 Cloud Storage 浏览器

  2. 在存储分区列表中,找到您的 Minecraft 备份存储分区。

  3. 在存储分区的生命周期列中点击。系统会显示查看对象生命周期规则页面。

  4. 点击添加规则

  5. 选择对象条件部分中,选择存在时间。将存在时间设置为 7 天,然后点击继续

  6. 选择操作部分中,选择删除,然后再次点击继续

  7. 点击保存,保存您的设置。您将返回到查看对象生命周期规则页面。

现在,在备份脚本将各备份发送到 Cloud Storage 满一周之后,系统就会删除相应的备份。

关停 Minecraft 服务器

如果您不需要运行 Minecraft 服务器,则应将其关停,以免产生不必要的费用。

首先,在 GCP Console 的虚拟机实例页面中与您的实例建立 SSH 连接。终端打开后,请将 \stop 命令传递到运行 Minecraft 服务器的 screen 终端,从而停止 Minecraft 服务器。

user@mc-server: sudo screen -r -X stuff '/stop\n'

现在您已经停止了 Minecraft 服务器,接下来即可安全关停实例。在虚拟机实例页面上,点击实例名称,然后点击页面顶部的停止按钮。您将退出 SSH 会话。

若要再次启动实例,请访问实例页面,然后点击页面顶部的启动按钮。如需再次启动 Minecraft 服务器,您可以与实例建立 SSH 连接,重新装载永久性磁盘,并在新的 screen 终端中启动 Minecraft 服务器,具体如运行 Minecraft 服务器部分所述。

自动启动和关停过程

如果您计划定期关停服务器,请考虑向实例添加启动和关停脚本,以自动执行常见的启动和关停过程。您可以按如下方式实现启动过程的自动化:

  1. 转到 GCP Console 中的“虚拟机实例”页面:

    转到“虚拟机实例”页面

  2. 点击您的实例名称。

  3. 点击修改

  4. 自定义元数据部分中,添加一个名为 startup-script 的新键,并将以下脚本复制到其字段中:

    #!/bin/bash
    mount /dev/disk/by-id/google-minecraft-disk /home/minecraft
    (crontab -l | grep -v -F "/home/minecraft/backup.sh" ; echo "0 */4 * * * /home/minecraft/backup.sh")| crontab -
    cd /home/minecraft
    screen -d -m -S mcs java -Xms1G -Xmx3G -d64 -jar server.jar nogui
    

在您重启实例时,此脚本会自动将您的 Minecraft 磁盘装载到相应的目录,根据需要重新安装您的 cron 作业,在 screen 会话中启动您的 Minecraft 服务器,然后分离会话。

如需自动执行关停过程,请添加另一个名为 shutdown-script 的键,并将以下内容复制到其字段中:

#!/bin/bash
/home/minecraft/backup.sh
sudo screen -r mcs -X stuff '/stop\n'

在页面底部,点击保存以提交更改。在您停止实例时,此脚本将在实例关停之前备份最新的游戏数据并关停您的 Minecraft 服务器。

后续步骤

访问 Minecraft Wiki

Minecraft Wiki 为 Minecraft 玩家和 Minecraft 服务器管理员提供了大量有用的资源。

尝试替代 Minecraft 服务器

您在本教程中安装的原版 Minecraft 服务器只是众多可用的 Minecraft 服务器之一。访问 Minecraft Wiki 中的自定义服务器,查看针对游戏类型、机器要求、简单修改等进行了优化的备用服务器列表。

尝试其他教程

亲自试用其他 Google Cloud Platform 功能。查阅我们的教程

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Solutions