SSD Nodes Learn
指南 Matt Connor作者: Matt Connor · 已更新 2026-07-24

如何在 Ubuntu 24.04 VPS 架設 Minecraft Paper 伺服器

本指南教您在 Ubuntu 24.04 VPS 上使用 Java 21 架設 Paper 伺服器。包含正確的 RAM 配置建議、systemd 服務設定、開啟 25565 埠以及安全的檔案備份流程,確保您的 Minecraft 伺服器運行穩定並避免常見的記憶體溢出錯誤。

建立目標

建立一個穩定運行的 Minecraft Java Edition 伺服器:在 Ubuntu 24.04 上使用 Paper,以 Restart=on-failure 透過 systemd 於專用 minecraft 使用者下執行。需開啟 whitelist,並在玩家與 JVM 之間的兩層防火牆中皆開放 25565 埠。此外,備份機制必須確保不會損壞世界檔案。伺服器本身僅由一個 jar 檔與一個 java 指令組成;決定伺服器能穩定運行一年,還是在第一個週末就崩潰的關鍵就在於該指令,本指南將重點說明此部分。

在您投入資金前,有兩點重要提醒。首先,Minecraft 極度消耗記憶體且主要為單執行緒運作:1 GB 的 VPS 無法運行可玩的伺服器,且單核心的高頻率優於四個低頻率的核心。其次,這是 Java Edition。Bedrock 版本玩家(包含主機、手機、Windows Bedrock App)無法加入 Java 伺服器;若要讓 Bedrock 玩家加入,需在 UDP 19132 埠執行不同的伺服器軟體,或安裝 Geyser 插件,但本指南不包含此範圍。

您需要一台擁有 root 或 sudo 權限的全新 Ubuntu 24.04 KVM VPS,並預留約 30 分鐘時間。

規格配置:朋友伺服器實際需求

RAM 是關鍵指標,實際需求通常比模組包論壇建議的數值更低:

  • 2 GB:適用於 2–5 名玩家在適中視距下進行 Vanilla 遊戲。效能尚可,但沒有餘裕。
  • 4 GB:適合朋友伺服器的理想配置:在 Paper 上可支援約 10 名同時在線玩家並安裝少量 plugins,且仍有足夠空間供 OS 使用。
  • 8 GB 或以上:適用於模組包或 20 名以上玩家的環境。此時應同時關注單核心 CPU 頻率,因為遊戲主迴圈僅在單一執行緒執行。

隨著玩家探索,世界檔案會佔用更多磁碟空間——一個探索程度高的生存世界會達到數 GB——因此請為世界檔案 其備份預留空間。

Vanilla 或 Paper? Paper 是官方 jar 檔的直接替代方案:世界檔案與客戶端皆通用,無需安裝客戶端模組。它重寫了效能最慢的伺服器路徑(如 chunk loading、entity ticking、hoppers)並增加了 plugin API。若你需要完全符合 Vanilla 機制的技術性紅石農場(Paper 的優化可能會改變機制),則僅需執行 Vanilla;對其他人而言,Paper 能提供更高的單位 RAM 玩家承載量。以下所有內容皆同時適用於兩者。

Step 1: 安裝 Java 21

Minecraft 1.20.5 及之後的所有版本(包含所有 1.21.x)皆需要 Java 21。Ubuntu 24.04 的預設軟體庫已包含此版本,且 headless 版本會跳過伺服器不會使用的桌面函式庫:

sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -version

正確結果:第一行應顯示 openjdk version "21.0.x"。若顯示 17 或 11,代表系統優先使用其他已安裝的 JRE;請使用 sudo update-alternatives --config java 進行修正,並選擇包含 java-21 的選項。

跳過此檢查會導致後續發生最常被搜尋的 Minecraft 伺服器錯誤。若使用 Java 17,伺服器 jar 會立即崩潰並顯示:

Error: LinkageError occurred while loading main class net.minecraft.bundler.Main
	java.lang.UnsupportedClassVersionError: net/minecraft/bundler/Main has been
	compiled by a more recent version of the Java Runtime (class file version 65.0),
	this version of the Java Runtime only recognizes class file versions up to 61.0

數字代表版本不匹配:class file version 65.0 為 Java 21,61.0 為 Java 17,60.0 為 Java 16。無論看到哪種組合,解決方法相同:安裝較新版本的 JRE 並重新執行 update-alternatives

Step 2: 使用專用使用者,切勿使用 root

伺服器會執行 plugin 程式碼,並解析任何可連線至該 port 之使用者的網路輸入。若發生安全性漏洞,以 root 權限執行將導致整個 VPS 被控制;若以 minecraft 執行,則僅會影響單一遊戲世界。

sudo adduser --system --group --home /opt/minecraft minecraft

--system 會建立一個不需密碼且無法透過 SSH 登入的帳號,並將 /opt/minecraft 設定為其 home 與工作目錄。從現在起,所有與伺服器互動的指令都將以該使用者身份執行。

Step 3: 從官方來源下載 server jar

僅有兩個來源提供 server jar:Vanilla 版本請前往 minecraft.net 官方下載頁面;Paper 版本請前往 papermc.io 下載頁面。第三方「下載中心」重新封裝的 server jar 經常包含惡意軟體。由於 server jar 是會在連網主機上 24/7 持續執行的任意程式碼,請務必謹慎。

從官方頁面複製目前版本的下載連結(URL 會隨版本與 build 更新,因此不建議在此寫死連結),接著執行:

cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'

正確結果:取得一個約 50 MB 且由 minecraft 擁有的 server.jar,並透過 ls -lh /opt/minecraft/server.jar 確認。

Step 4: 首次執行、EULA 以及取得管理員權限

在設定 systemd 之前,請先進行一次互動式執行 — 首次執行有兩項任務,僅能透過即時主控台完成。

cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar nogui

程式會在數秒內結束執行 — Paper 會先花一點時間套用 patch — 接著日誌會停在每個人都會遇到的這行:

[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

這並非錯誤;這是授權檢查。執行過程會在 jar 檔案旁寫入 eula.txt。若尚未閱讀,請閱讀連結中的 EULA,然後修改該 flag:

sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txt

再次執行相同的 java 指令。此時會開始產生世界(首次啟動約需 1 到 2 分鐘),並停在:

[Server thread/INFO]: Done (9.204s)! For help, type "help"

您現在已擁有即時主控台。請執行第二項任務:輸入 op YourMinecraftName(您的遊戲內正確使用者名稱),伺服器會將您寫入 ops.json,如此一來 — 當之後沒有連接主控台時 — 您就能在遊戲內執行所有管理員指令。接著輸入 stop 以儲存並正常結束。

Step 5: server.properties,以及為何 online-mode 應保持為 true

首次執行時也會產生 server.properties。大多數預設值皆可直接使用;以下項目建議謹慎設定:

online-mode=true
white-list=true
enforce-whitelist=true
view-distance=8
max-players=10
motd=A private server for people I actually know

online-mode=true 會讓伺服器向 Mojang 的 session servers 驗證每個玩家的名稱,以確認玩家擁有該帳號。將其設為 false(即「盜版伺服器」開關)代表伺服器將完全信任客戶端提供的身份資訊:任何人都可以使用任何名稱加入,包括您的名稱。由於 op 與 whitelist 是以名稱作為識別基準,冒充者將能直接取得您的管理權限。唯一需要將其設為 false 的合法情境,是伺服器位於 Velocity 等驗證代理伺服器後方,由代理伺服器負責驗證玩家。在一般伺服器中,此項應保持為 true。

view-distance 是此檔案中影響效能最大的參數——CPU 與 RAM 的消耗量與其平方值成正比。VPS 建議預設值為 8;Vanilla 預設值為 10,且效能負擔明顯較重。

white-list=true 搭配 enforce-whitelist=true 可限制陌生玩家加入,下方的安全性章節會說明這並非選配項目。若要新增玩家,請以 op 身份在遊戲內使用 /whitelist add TheirName

Step 6: memory flags — 為什麼 -Xms 與 -Xmx 應該設定相同

JVM 會在 -Xms(起始大小)與 -Xmx(上限)之間配置 heap。在專用的遊戲伺服器上,請將兩者設定為相同數值:因為 heap 最終一定會達到上限,而分階段增加 heap 會在遊戲期間增加 garbage-collector 的負擔。在 4 GB 的 VPS 上,建議的組合為:

/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui

-Xmx 並非該 process 使用的總記憶體。JVM 會增加 off-heap 開銷(包含 thread stacks、JIT caches、direct buffers),大約需要 0.5 GB 或更多,且 Ubuntu 系統本身也需要空間。原則是:-Xmx 最大值為 VPS RAM 減去 1 GB。若超過此值,會導致以下兩種錯誤之一。若配置在啟動時失敗,伺服器會直接報錯並停止啟動:

Error: Could not reserve enough space for object heap

這是最直接的錯誤。較嚴重的狀況是伺服器能正常啟動,但在負載增加且 heap 填滿時,kernel 的 OOM killer 會挑選系統中佔用資源最大的 process(即 JVM)進行刪除。此時伺服器日誌不會顯示任何訊息;錯誤證據會記錄在 sudo dmesg | grep -i oom,例如 Out of memory: Killed process 1234 (java) 這樣的行。如果你的服務「隨機」重啟,請先檢查該處,並調低 -Xmx

對於 Paper,官方文件建議使用 Aikar's flags — 這是一套經過優化的 G1GC 設定(包含 -XX:+UseG1GC -XX:MaxGCPauseMillis=200 及其他參數),能平滑大型 heap 的 garbage-collection 停頓。請根據 Paper 文件生成完整的指令行;在 2–4 GB 的 heap 環境下,效能提升有限,但這些 flags 是安全的。

Step 7: 使用 Restart=on-failure 的 systemd unit

手動啟動的伺服器會在 SSH 連線中斷時停止,且重啟後不會自動啟動。請撰寫 /etc/systemd/system/minecraft.service

[Unit]
Description=Minecraft server (Paper)
After=network-online.target
Wants=network-online.target

[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui
Restart=on-failure
RestartSec=10
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft
journalctl -u minecraft -f

正確結果:status 會顯示 active (running),且包含伺服器主控台輸出的 journal 會再次在 Done 行結束。

此 unit 有兩項刻意的設定。Restart=on-failure 讓伺服器在崩潰後自動重啟,但在正常的 stop 情況下不會重啟,以便進行維護。此外 TimeoutStopSec=120 的重要性超出預期:systemctl stop 會發送 SIGTERM,Minecraft 伺服器接收後會在退出前儲存所有世界,而大型世界的儲存需要時間。systemd 預設的逾時設定可能會在儲存中途對 JVM 發送 SIGKILL,這正是導致 region 檔案損毀的原因。請給予兩分鐘時間。

如果服務頻繁重啟(flapping)且 journal 顯示:

[Server thread/WARN]: **** FAILED TO BIND TO PORT!
[Server thread/WARN]: The exception was: io.netty.channel.unix.Errors$NativeIoException: bind(..) failed: Address already in use
[Server thread/WARN]: Perhaps a server is already running on that port?

代表已有程序佔用 25565 埠號 —— 這通常是因為之前的 foreground 執行程序仍存在於另一個 SSH 連線中。請使用 sudo ss -tlnp | grep 25565 找出該程序並將其停止;切勿在同一個 port 上執行兩個伺服器。

Step 8: 在兩個防火牆上開啟 25565

Minecraft Java 僅使用 TCP 25565(UDP 僅用於選用的 query protocol,且預設關閉)。在 VPS 上:

sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enable

這是第一個防火牆。大多數 VPS 提供商會在控制面板中執行第二層網路級防火牆,這通常是使用者最容易忽略的部分。請務必在那裡也開啟 TCP 25565。若僅開啟其中一個防火牆,錯誤現象會非常模糊:用戶端會卡在 "Connecting to the server..." 並顯示 Connection timed out: no further information 錯誤——沒有拒絕連線,沒有伺服器錯誤,日誌中也沒有任何紀錄,因為封包根本沒有送達。請從 VPS 外部 的機器使用 nc -vz your.server.ip 25565 進行驗證;若顯示 succeeded 代表兩個防火牆皆已開啟;若連線卡住則代表至少有一個防火牆未開啟。

在使用 ufw 時,由於該主機在公用 IP 上執行 SSH,暴力破解的日誌雜訊會在數小時內開始出現——請在忘記前 在 Ubuntu 24.04 上為 SSH 設定 Fail2ban

現在進行連線:點選 Multiplayer,選擇 Direct Connection,輸入伺服器 IP。由於您已在步驟 4 完成了權限設定,遊戲內指令可立即使用——每位玩家可獲得 /whitelist add FriendName,若符合該計畫則為 /gamemode creative

Step 9: 設定白名單,因為網路會掃描 25565 埠

將 Minecraft 伺服器直接暴露於網際網路並非僅是理論上的風險:自動化掃描器會持續掃描整個 IPv4 空間的 25565 埠。許多惡意破壞專案已透過此方式找出數十萬台開放的伺服器。若未設定白名單,伺服器可能在幾天甚至幾小時內就遭到不明訪客入侵。使用第 5 步提到的白名單即可解決此問題:online-mode=true 用於驗證身份,而白名單則限制僅允許您指定的身份進入。這套組合即是完整的安全模型,對於私人朋友伺服器而言已足夠。

若需在不啟動遊戲的情況下進行主控台操作(例如執行自動備份腳本或 cron job),請在 server.properties 中啟用 RCON(需設定 enable-rcon=true、強密碼 rcon.password,並使用 25575 埠),並直接在 VPS 上從 GitHub 原始碼編譯輕量級的 mcrcon 客戶端;Ubuntu 的官方軟體庫中並不包含此套件。請勿在任何防火牆中開啟 25575 埠:由於 RCON 會以明文傳送密碼,因此該埠應僅限於 loopback 使用。

Step 10: 不會導致毀滅性錯誤的備份

唯一準則:絕對不要在伺服器寫入資料時複製 world 目錄。 在遊戲過程中,Region 檔案會持續被重寫;若 tar 與寫入程序發生競爭,產生的封存檔會包含寫入一半的 chunk。當你最終嘗試還原時(這是備份唯一必須成功的時刻),日誌會充滿 chunk 載入錯誤,且地形會出現空洞。有兩種方法可以避免此問題。

Stop-copy-start 是最簡單的方法,代價是需要停機一分鐘:

sudo systemctl stop minecraft
sudo mkdir -p /opt/backups
sudo tar czf /opt/backups/world-$(date +%F-%H%M).tgz \
  -C /opt/minecraft world world_nether world_the_end
sudo systemctl start minecraft

(Paper 會將維度拆分為 worldworld_netherworld_the_end;vanilla 伺服器會將所有內容存放在 world,因此請將其他兩個維度也放入該目錄。)

Save-off 進行熱備份:透過 RCON 執行 save-off (停止自動儲存),接著執行 save-all flush (強制將所有資料寫入磁碟並等待),接著打包 tar,最後執行 save-on。這是適合設定在凌晨 5 點 cron 任務的版本。

無論使用哪種方法,存放在與伺服器相同的 VPS 上的備份並不算真正的備份 —— 請使用 scprclone 將封存檔移出主機,並保留多份備份。此外,當系統故障時你不會一直盯著 console,因此請針對連接埠進行外部檢查:使用 另一台機器上的 Uptime Kuma 對 25565 進行 TCP 檢查,能在玩家發現之前就得知伺服器已斷線。

Plugins 與升級

在 Paper 中,安裝 plugin 的步驟僅需將 jar 檔放入 /opt/minecraft/plugins/ 並重啟伺服器。請務必僅從官方專案頁面(Hangar、Modrinth、SpigotMC)下載 plugin,原因與伺服器 jar 檔相同:每個 plugin 都是以 minecraft 使用者權限執行的任意程式碼。

升級伺服器的步驟為:停止、備份、將 server.jar 替換為新 Minecraft 版本的 build、啟動。請注意兩點:世界檔案升級是不可逆的,由新版本開啟的世界無法在舊版本開啟,因此必須依賴備份。此外,plugin 對 Minecraft 新版本的支援通常會有數天或數週的延遲,在版本發布首日請先確認相容性。

若您偏好使用 container 管理所有項目(例如將版本鎖定、EULA 接受與 memory flags 設定為 environment variables),廣泛使用的 itzg/minecraft-server 映像檔可透過 您 VPS 上的 Docker Compose 執行相同的 Paper 伺服器,並維持相同的防火牆與備份規範。

FAQ

Minecraft 伺服器需要多少 RAM?

2 GB 可供 2–5 名玩家運行 vanilla 版本;若使用 Paper 並安裝少量 plugins,4 GB 可供約 10 名好友穩定運行;若使用 modpacks 或超過 20 名玩家,則需要 8 GB 或更多。無論 VPS 規格為何,請將 -Xmx 設定為總 RAM 減去 1 GB 以內 — JVM 會使用 heap 以外的記憶體,設定過高會導致 Error: Could not reserve enough space for object heap 或無預警的 OOM kill。

為什麼我的朋友無法連線到我的 Minecraft 伺服器?

若客戶端卡住並出現 Connection timed out: no further information,通常是防火牆問題。防火牆包含兩層:VPS 上的 ufw 以及供應商控制台中的網路防火牆。兩者都必須開啟 TCP 25565。請先在主機上使用 sudo ss -tlnp | grep 25565 確認伺服器正在監聽,接著從外部使用 nc -vz your.server.ip 25565 進行測試。

我應該在 server.properties 設定 online-mode=false 嗎?

不建議。設定 online-mode=false 會讓伺服器完全跳過 Mojang 驗證,導致任何人都能使用任何使用者名稱加入(包括冒充 op 權限),且 skins 與穩定的 UUID 會失效。唯一的合法用途是在 Velocity 等驗證代理伺服器後方,由代理伺服器負責驗證玩家。一般伺服器應保持 true

Paper 是否優於 vanilla Minecraft 伺服器?

對大多數人來說,是的:Paper 是一個可直接替換的 jar 檔,能載入 vanilla 世界並接受未經修改的客戶端,其處理 entities 與載入 chunks 的效率更高,並提供 plugin 生態系統。例外是需要完全符合 vanilla 行為的技術紅石(technical-redstone)社群,因為部分 Paper 優化會改變行為。在小型 VPS 上,Paper 的高效率等同於額外的可用 RAM。

如何備份 Minecraft 世界而不導致檔案損壞?

切勿在伺服器寫入資料時封存世界目錄 — 檔案寫入與複製同時進行會導致 region-file 損壞,且直到還原時才會發現。請先停止伺服器,使用 tar 封存世界目錄後再重新啟動;或者在伺服器運行時,透過 save-offsave-all flush、tar 與 save-on 進行操作。接著將封存檔移出 VPS。

#minecraft#game-server#java#ubuntu#self-hosting