Ubuntu 20.04架設Minecraft伺服器

Minecraft 一直是最流行的遊戲之一。它是一個沙盒視訊遊戲,使用者可以體驗無限的世界,並且可以構建不同的結構,從簡單的房子到高聳的摩天大樓。

這個指南解釋如何在 Ubuntu 20.04 上搭建我的世界伺服器。我們將會使用 Systemd 來執行我的世界伺服器以及mcrcon工具來連線執行的實例。我們也將向你展示如何建立一個計劃任務,執行常規的伺服器備份。

一、前提

根據 Minecraft 官方網站,4GB RAM 記憶體是最基本的配置。

安裝必要的軟體包來構建mcrcon工具:

sudo apt update
sudo apt install git build-essential

二、安裝 Java 執行環境

Minecraft 需要 Java 8 或者更高版本。 我的世界 伺服器不需要圖形用戶界面,因此我們將會安裝 Java 的無頭模式版本。這個版本更適合伺服器應用,因為它有更少的依賴,並且使用更少的系統資源。

執行下面的命令,安裝 OpenJRE 11 無頭模式軟體包:

sudo apt install openjdk-11-jre-headless

驗證安裝,列印 Java 版本:

java -version
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)

三、建立 Minecraft 使用者

因為安全原因, Minecraft 不應該在 root 使用者下執行。我們將會建立一個新的系統使用者和使用者組,使用者主目錄/opt/minecraft。這個使用者有最小許可權,來執行 Minecraft 伺服器:

sudo useradd -r -m -U -d /opt/minecraft -s /bin/bash minecraft

我們不會為這個使用者設定密碼。這樣,這個使用者將不能通過 SSH 登錄。想要修改minecraft使用者,你將需要使用 root 登錄伺服器,或者其他有 sudo 許可權的使用者。

四、在 Ubuntu 上安裝 Minecraft

在開始安裝過程之前,切換到minecraft使用者:

sudo su - minecraft

執行下面的命令在使用者主目錄下建立三個新的目錄:

mkdir -p ~/{backups,tools,server}

backups目錄將會儲存 伺服器備份。你可以同步這個目錄到你的遠端備份伺服器。
tools 目錄將會託管mcrcon客戶端和備份指令碼。
server目錄將會包含實際的 Minecraft 伺服器和它的數據。

4.1 下載並且編譯mcrcon

RCON 是一個協議,它允許你連線到 Minecraft 伺服器,並且執行命令。mcron是一個 RCON 客戶端,使用 C 語言編寫而成。

我們將會從 Github 下載最新的原始碼,並且構建mcrcon二進制檔案。

從 Github 克隆Tiiffi/mcrcon源到~/tools/mcron目錄:

git clone https://github.com/Tiiffi/mcrcon.git ~/tools/mcrcon

一旦完成,驗證mcrcon編譯成功,列印它的版本:

./mcrcon -v

輸出看起來像是這樣:

mcrcon 0.7.1 (built: Jun 23 2020 15:49:44) - https://github.com/Tiiffi/mcrcon
Bug reports:
    tiiffi+mcrcon at gmail
    https://github.com/Tiiffi/mcrcon/issues/

4.2 下載 Minecraft 伺服器

有一些 Minecraft 伺服器 mods 例如 Craftbukkit 或者 Spigot ,允許你在你的伺服器上新增特性(外掛)以及定製,以及調整伺服器設定。

在這個指南中,我們將會安裝最新的 Mojang 官方 vanilla 我的世界伺服器。同樣的指令,同樣適合於其他的伺服器 mods。

去 Minecraft 下載頁面 下載最新的 Minecraft 伺服器 Java 壓縮包(JAR)。在寫作的時候,最新的版本是1.16。

使用wget下載 jar 檔案到~/server目錄。

wget https://launcher.mojang.com/v1/objects/a0d03225615ba897619220e256a266cb33a44b6b/server.jar -P ~/server

4.3 配置 Minecraft 伺服器

一旦下載完成,切換到~/server目錄,並且啟動 Minecraft 伺服器:

cd ~/server
java -Xmx1024M -Xms1024M -jar server.jar nogui

第一次啟動的時候,伺服器執行一些操作,建立server.properties和eula.txt檔案,並且停止。

[17:35:14] [main/ERROR]: Failed to load properties from file: server.properties
[17:35:15] [main/WARN]: Failed to load eula.txt
[17:35:15] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

想要執行伺服器,你需要同意Minecraft EULA,就像上面輸出所有提示的。

打開eula.txt檔案,並且修改 eula=false 為 eula=true:

nano ~/server/eula.txt

輸出:

eula=true

關閉並且儲存檔案。

下一步,打開server.properties檔案,並且啟動rcon協議,並且設定 rcon 密碼:

nano ~/server/server.properties

定位到下面的行,並且更新它們的值,就像下面顯示的一樣:

rcon.port=25575
rcon.password=strong-password
enable-rcon=true

不要忘記將strong-password修改爲一些更安全的密碼。如果你不想從遠端位置訪問 Minecraft 伺服器,確保 rcon 埠被防火墻所阻塞。
在這裡,你可以調整伺服器的預設屬性。想要獲取更多關於伺服器設定的資訊,瀏覽server.properties頁面。

五、建立 Systemd 單元檔案

與手動啟動 Minecraft 伺服器相比,我們將會建立一個 Systemd 單元檔案,並且將 Minecraft 當作服務來執行。

通過exit來切換回你的 sudo 使用者。

打開你的文字編輯器,並且在/etc/systemd/system/目錄下建立一個名為minecraft.service的檔案:

sudo nano /etc/systemd/system/minecraft.service

貼上下面的配置:

[Unit]
Description=Minecraft Server
After=network.target

[Service]
User=minecraft
Nice=1
KillMode=none
SuccessExitStatus=0 1
ProtectHome=true
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java -Xmx1024M -Xms1024M -jar server.jar nogui
ExecStop=/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password stop

[Install]
WantedBy=multi-user.target

根據你的伺服器資源來調整Xmx和Xms標誌。Xmx標誌定義 Java 虛擬機器的最大申請記憶體。而Xms定義了初始申請記憶體。目前,確保你使用了正確的rcon埠和密碼。

儲存檔案,並且重新載入 systemd 管理配置:

sudo systemctl daemon-reload

你還可以輸入下面的命令,啟動 Minecraft 伺服器:

sudo systemctl start minecraft

當你第一次啟動服務的時候,它將會產生伺服器配置檔案和目錄,包括 我的世界。

使用下面的命令,檢查服務狀態:

sudo systemctl status minecraft

輸出:

● minecraft.service - Minecraft Server
     Loaded: loaded (/etc/systemd/system/minecraft.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-06-23 17:48:44 UTC; 8s ago
   Main PID: 1338035 (java)
      Tasks: 15 (limit: 1074)
     Memory: 465.3M
     CGroup: /system.slice/minecraft.service
             └─1338035 /usr/bin/java -Xmx1024M -Xms1024M -jar server.jar nogui

最後,啟動 Minecraft 服務開機啟動。

sudo systemctl enable minecraft

六、調整防火墻

Ubuntu 附帶防火墻工具 UFW。如果在你的系統上啟用了防火墻,你想從你的本地網路訪問 Minecraft 伺服器,你需要打開埠25565:

sudo ufw allow 25565/tcp

七、配置備份

在這一節,我們建立一個備份 shell 指令碼和計劃任務,以便自動備份 Minecraft 伺服器。
切換到minecraft:

sudo su - minecraft

打開你的文字編輯器,並且建立下面的檔案:

nano /opt/minecraft/tools/backup.sh

貼上下面的配置:

#!/bin/bash

function rcon {
  /opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password "$1"
}

rcon "save-off"
rcon "save-all"
tar -cvpzf /opt/minecraft/backups/server-$(date +%F-%H-%M).tar.gz /opt/minecraft/server
rcon "save-on"

## Delete older backups
find /opt/minecraft/backups/ -type f -mtime +7 -name '*.gz' -delete

儲存檔案,並且將指令碼設定為可執行:

chmod +x /opt/minecraft/tools/backup.sh

下一步,建立一個定時任務,每天自動在一個固定時間執行一次。

打開你的 crontab 檔案,輸入:

crontab -e

每天 23:00 執行備份指令碼,貼上下面的文字:

0 23 * * * /opt/minecraft/tools/backup.sh

八、訪問 Minecraft 終端

想要訪問 Minecraft 終端,使用mcrcon工具。你需要指定主機,rcon 埠,rcon 密碼並且使用-t(啟動mcrcon終端模式):

/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password -t

輸出:

Logged in. Type "Q" to quit!
> 

從遠端位置訪問 Minecraft 終端,確保 rcon 埠沒有被阻塞。

如果你正常連線到 Minecraft 終端,不想輸入一大串命令,你可以建立一個 bash 關聯。

九、總結

我們已經向你展示如何在 Ubuntu 20.04 上搭建一個 Minecraft(我的世界)伺服器,並且設定每天備份。
現在你可以啟動你的 Minecraft 客戶端,連線到伺服器,並且開始 Minecraft 冒險。