我大概從2013年開始接觸到了 Minecraft ,算下來,今年正好是我接觸 Minecraft 的第十個年頭。
熟悉 Docker 以後,我着手開始把我現在跑的服務容器化,從某種意義上,這非常「優雅」——可以很方便的管理各個服務,還不用擔心各種環境不相容的問題。
暑假將至,為了方便和朋友們聯機玩 MC,遂自行搭建一個伺服器,順便進一步熟悉 Docker 和 Docker Compose。
伺服器選擇
伺服器有兩個要求,一是效能要足夠強,二是距離要足夠近,目前我手頭有三台機器,分別位於香港和洛杉磯,不是效能不夠就是距離太遠,延遲太高。所以,都無法滿足需求。
最近恰逢618,各大雲主機廠商都有活動,遂購入一台某大廠輕量伺服器,位於上海,2C4G5M,對於一個入門 MC 伺服器來説完全足夠。當然,買了這一個伺服器不可能只是跑跑 MC,別的一些對頻寬要求不高的服務我肯定也會放在上面。
那麼直接 Deploy,似乎用的還是 AMD 的新 EPYC,還行。
安裝 Docker
相比於一鍵指令碼,我個人還是偏好手動安裝 Docker。個人為了方便直接用了 Root,這不是最佳實踐,儘可能用普通用戶並在必要的時候用sudo。
新增 PGP 金鑰:
| |
向source.list新增軟件源:
| |
更新軟件包快取並安裝 Docker:
| |
啓動 Docker:
| |
至此 Docker 已經安裝完成,順遍裝好了 Docker Compose。
Docker 換源
國內伺服器這點非常蛋疼。
換源還要有一個命令列的文字編輯器,於是我決定先裝個 Vim:
| |
編輯/建立/etc/docker/daemon.json:
| |
編輯成如下內容:
| |
https://mirror.ccs.tencentyun.com是某大廠的內網映象,內網拉取速度極快,還不計流量,不在內網裏的伺服器無法使用,應當換成下列映象:
https://hub-mirror.c.163.comhttps://ustc-edu-cn.mirror.aliyuncs.comhttps://mirror.baidubce.com
隨後重啓 Docker 服務即可完成換源:
| |
粗略部署
我部署服務的原則是先 Get it to work,再 Polish。
對於 MC 這種 community driven 的遊戲來説,社羣的力量是強大的,基本上什麼樣的需求都能在社羣裏找到對應的解決方案。我直接採用了 itzg/docker-minecraft-server。
不得不吐槽的是,這個專案的文件寫得實在是沒有那麼友好,摸索了一下,總算是把這個服務基本的跑起來了。這時我的docker-compose.yml如下:
| |
這樣的 Docker Compose 配置能以最新的版本把一個基礎的 Vanilla Server 跑起來,只能勉強滿足幾個人的聯機需求,肯定也沒幾個人會將這樣的配置用到生產環境。
進一步調整
要進一步調整,要先確認調整的方向,否則就是無頭蒼蠅,誤打誤撞,沒有目標,十分痛苦。實際感受一番後,我大致整理出了此時配置的問題,有些是 Vanilla 客户端的問題:
- 版本不固定
- 缺少基本的效能資料
- 圖示和 MOTD 需要調整
- 沒有白名單
- 不能裝外掛
- 有正版驗證(無所謂,我有正版)
有了這個方向,我就可以有目標的去調整這個 Server 的配置。接下來要做的,就是查閲這個專案的文件,做出自己需要的修改。
固定版本
説實話 MC 的版本更新還挺頻繁的,前一個版本尚未體驗下一個版本就會出現。我暫時先固定這伺服器的 MC 版本為1.19.4,日後充分遊玩再慢慢升級。
同時 Vanilla Server 實在是太垃圾,順便將其換成 PAPER 豈不美哉?分別設定VERSION和TYPE兩個環境變數即可。藉由 Paper 的優點,這樣也同時解決了伺服器外掛和效能資料的問題。
白名單
設定ENABLE_WHITELIST和ENFORCE_WHITELIST兩個環境變數,即可強制伺服器核查白名單。同時,不要忘記將自己加入白名單,由於伺服器的 OP 會被自動加入白名單,只需要將自己提前設定為 OP 即可,設定OPS即可做到這一點。
圖示和 MOTD
設定ICON和MOTD兩個環境變數即可自定義伺服器的圖示和標語。
正版驗證
設定ONLINE_MODE變數即可控制正版驗證的開關。
需要注意的是,關閉ONLINE_MODE後,伺服器會根據玩家的離線 UUID 判斷身份,離線 UUID 和線上 UUID 不同,此時新增 OP 和黑白名單都需要改用離線 UUID 進行。
最終的 docker-compose.yml
| |
一些雜七雜八的事情
RCON 的連線
伺服器執行後,若要在不進入遊戲的情況下管理伺服器,就需要用到 RCON。方法很簡單,使用這個專案繫結的 rcon-cli 即可:
| |
注意將<name_of_container>換成自己的容器名。
作者還推薦了一個叫做rcon-web-admin的專案,打算過一陣子嘗試。
安裝外掛
Paper 支援 Bukkit 的外掛,還有自己的外掛,外掛數量上完全無需擔心。
我們在配置docker-compose.yml時,已經做了 bind 操作,會在docker-compose.yml所在目錄的相對路徑下建立一個叫做minecraft-data的資料夾,並繫結到容器的data目錄,將下載好的外掛.jar檔案丟進./minecraft-data/plugins目錄就完成了外掛的安裝。
我選用了 World Edit,Grief Prevention 和 Dead Chest 三個外掛,保證原汁原味的生存體驗。
最後
如果你有開服經驗並且偏向手動修改server.properties,將OVERRIDE_SERVER_PROPERTIES設定為FALSE即可將server.properties的控制權交還到我們手中,這也是一種配置的手段。
Docker 開服還是相對容易的,社羣已經造好了輪子,免去了很多不必要的麻煩。稍後我會繼續 play around with the server,繼續探索這個遊戲無限的可能性。

評論已停用,直到您接受功能性 Cookie。