一个GCP初学者在GCE上搭建Minecraft服务器的故事
首先
这是一个关于一位学习不到半年的GCP初学者为了学习而尝试搭建我的世界服务器的故事。
达成的目标
-
- GCEでマイクラサーバを構築
-
- Discordからインスタンスの制御
- GCPの操作に慣れる
形式、構造、構成、組成、構建
-
- VMインスタンス1(マイクラサーバ)
-
- VMインスタンス2(discord bot)
-
- クラウドストレージ(バックアップ用)
- サービスアカウント1(discordからの制御用)
构成图
程序
1. 创建用于Minecraft服务器的实例
不管怎样,如果不创建用于Minecraft服务器的实例,什么都无法开始。基本上,我们将参考以下官方文档进行创建。
GCP的官方文档非常易懂,对于初学者来说非常有帮助。
在Compute Engine上设置Minecraft服务器。
关于实例的设置,我按照这样的配置进行了创建。
启用可抢先实例的优点是,实例的成本仅为通常成本的三分之一。对于这次的Minecraft服务器,我认为几乎没有登录并保持在线的情况,所以优先考虑降低成本并采用可抢先实例。正如目标中所述,只有在通过Discord玩游戏时才启动实例,完成后即停止,所以我认为不会有太多问题。
关于缺点的详细内容,请参考官方文件。
可抢占式实例的限制
添加永久磁盘。
以下是关于添加磁盘的创建步骤。
2. Minecraft服务器的安装和运行
虽然这里的基本进展会根据上述的官方文件进行,但是由于我使用的是CentOS,而官方文件是使用Debian操作系统,所以一些命令可能会有所不同。我已经在下面的内容中标明了有差异的地方,希望您能与官方文件一起阅读。
设置Java运行环境(JRE)。
#まずは既存パッケージの最新版へアップデート
$ yum update
#JREのインストール
$ yum install -y default-jre-headless
下载和安装Minecraft服务器
官方使用wget进行下载,但CentOS默认没有wget,所以需要安装。
请从Minecraft的下载页面复制最新的下载链接,替换掉Minecraft服务器的下载链接。
#wgetのインストール
$ yum install wget
#マイクラサーバのインストール
$ wget https://launcher.mojang.com/v1/objects/f1a0073671057f01aa843443fef34330281333ce/server.jar
服务器首次启动
下面的命令中有”-Xms1G -Xmx3G”,这是用于分配内存的内容,
可以根据机器规格进行调整。
#マイクラサーバの実行
$ java -Xms1G -Xmx3G -d64 -jar server.jar nogui
使用Minecraft服务器需要同意以下条件:
当第一次启动完成后,在相同的目录下会生成一些文件,其中包括一个名为eula.txt的文件。通过下面的命令打开并进行编辑。
如果同意EULA的条件,请将eula的值从false改为true,并保存文件后退出。
$ vi eula.txt
#以下eula.txtの内容
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Thu Nov 21 18:02:54 UTC 2019
eula=true <-- ここを「false」から「true」に変更する
到目前为止,最低限必要的设置已经完成了。
但是,如果现在从服务器注销,会导致会话断开并且Minecraft服务器停止运行。
为了解决这个问题,我们将使用screen。
首先,需要安装screen。
#screenのインストール
$ yum install screen
我将使用安装的screen命令来运行我的Minecraft服务器。
我参考了以下页面来了解screen命令的用法。
Linux的screen命令使用方法。
#screenを使いマイクラサーバの実行
$ screen -S mcs java -Xms1G -Xmx3G -d64 -jar server.jar nogui
让客户端能够登录到我的Minecraft服务器。
根据公式文档所述,Minecraft服务器默认使用25565作为监听端口,因此需要创建防火墙规则来允许该端口。如果想要更改端口,可以通过编辑同一目录下的server.properties文件来进行修改。此外,server.properties文件还可以修改其他各种Minecraft服务器的设置。
服务器配置文件(server.properties)
如果计划定期停止服务器,可以通过给实例添加启动脚本和关闭脚本来自动化常用的启动和停止操作。
由于将来在 Discord 上进行实例控制时需要,现在先进行设置。
在GCP控制台的[VM实例]->[点击实例名称]->[编辑]->[自定义元数据]部分中,添加一个名为”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
要将关机过程自动化,需要添加另一个键shutdown-script,并将以下脚本复制到其值字段中。
#!/bin/bash
/home/minecraft/backup.sh
sudo screen -r mcs -X stuff '/stop\n'
3. 设置并执行定期备份 de jí
我在玩Minecraft的时候突然崩溃了,数据也丢失了。我也经历过这样的悲伤情况好几次。
为了这种情况,定期备份是必不可少的。
我們將根據官方文件中的「定期備份排程」部分進行操作。
首先,按照官方文件的指示,创建一个新的 Cloud Storage 区域性存储桶。
您可以根据自己的喜好选择要创建桶的区域。
我选择在asia-northeast1(东京)创建。
创建用于备份的脚本,并使用cron定期执行。
#バックアップ用スクリプトの作成
$ vi /home/minecraft/backup.sh
#以下backup.shの内容
#!/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'
#作成したスクリプトの権限を変更
$ chmod 755 /home/minecraft/backup.sh
要安排cron作业,需要将其写入crontab。
$ crontab -e
#以下crontabの内容
0 */4 * * * /home/minecraft/backup.sh
设置以上的配置后,backup.sh将每4小时执行一次。
虽然官方文档建议每4小时执行一次,但是我觉得在崩溃和恢复时回到4小时之前的状态会让人心理上感觉很困难,所以我把执行频率改成了每小时一次(笑)。
在进行备份时,为了防止文件过大,我们会设置只保留一定数量的备份。云存储提供了对象的生命周期管理功能,简单来说,它可以自动删除旧的备份。
关于设置,将按照官方文档中的”自动删除旧备份”一项进行操作。
对于与官方文档不同的设置项,
在”选择对象条件”部分,选择”年龄”,将其设置为3天,而非7天。
由于我每小时进行一次备份,如果保留7天的话,将会有24次备份,共计168个备份。考虑到成本,我决定将其设置为3天。
总而言之
在这里,我的Minecraft服务器搭建已经完成了,你对这个结果满意吗?下次我们将继续让Discord可以控制这个Minecraft服务器。
在下一次中,我尝试通过Discord操作GCP实例的故事。