遊戲宅必看丨把《我的世界》服務器搬進NAS
來源:新浪眾測
作者:超高校級的囧小平
前言
NAS本身並不適合作為遊戲的客户端玩遊戲,但是藉助於其空閒的運算能力,卻可以用作一些遊戲的服務端使用。MineCraft我的世界這款遊戲想必大家都不會陌生吧。這款沙盒式建造遊戲從2009年發售至今,已經經歷了10多個年頭,而且經久不衰,目前已經登頂世界上最暢銷遊戲的寶座。我的世界的遊戲魅力我在這裏就不必多做介紹了。我玩我的世界的歷程可能和大部分玩家不一樣。雖然PC版本的我的世界是我最早嘗試這款遊戲的平台,但是我實際花心思投入大量時間遊玩的卻是PSV版本的我的世界。只可惜PSV的時運不濟,我的世界PSV版目前已經停止更新了,還好我也有PS4版本的我的世界,並且其存檔可以通用。
經過很長時間的空檔期,我最近又重新拾起這款遊戲,發現其玩法和最初相比已經進化到令人驚歎的程度。我的世界不但可以單人遊玩,還可以自建服務器,安裝各種豐富多彩的MOD,這也是這款遊戲最大的魅力之一。我的世界遊戲版本很多,大致可以分為網易版和國際版。中國特色的網易版想要自建服務器需要租賃網易的主機。國際版我的世界又分為JAVA版和基岩版,都是可以使用自己的主機搭建遊戲服務器。本文就以JAVA版我的世界為例,講解遊戲服務器的搭建。本來以為很簡單,但是卻有不少坑,還好都被我踏平了。基岩版服務器搭建的方法是類似的。至於MOD的安裝,內網穿透等話題,篇幅限制本文暫不涉及。
MineCraft服務器搭建
其實,大部分軟件服務端的搭建都不是一個簡單的過程。畢竟大家使用的主機的系統不一樣,版本不一樣,軟件環境不一樣。為了能讓服務端穩定運行,常常需要進行繁瑣的系統環境配置和軟件依賴下載。好在Docker的出現改變了這一情況,它讓服務端的搭建變得快捷、簡便、輕量、整潔。搭建MineCraft服務器的方法有很多,但是基於Docker的搭建方法可能是最適合NAS的方法。在QNAP NAS上使用Docker就要用到Container Station這個大型組件了,因此要求必須是X86 CPU的NAS。如果你用NAS只是簡單的影片照片的存儲和播放,以及文件的備份等簡單功能,那麼ARM架構的NAS便宜也夠用。如果你的要求更多一點,除了常規的存儲備份需求,還喜歡玩各種各樣的網絡服務和應用程序,那麼X86架構的NAS就必不可少了。在QNAP的QTS系統中,Container Station、Virtualization Station、Linux Station絕對是玩轉NAS,發掘新鮮事物,榨乾機器機能的三大利器。那麼,要做的第一步,就是在應用商店直接搜索Container Station,下載安裝即可。
接着,就是找合適的Docker鏡像了。目前人氣最高,更新及時的我的世界服務端Docker鏡像,應該就是下面這個了:
https://hub.docker.com/r/itzg/minecraft-server
如果要搭建基岩版我的世界服務器,可以選擇這個鏡像:
https://hub.docker.com/r/itzg/minecraft-bedrock-server
兩個版本鏡像的作者都是同一個人,請放心使用。
在“創建”頁面的搜索框裏,直接搜索“minecraft-server”,也可以找到這個Docker鏡像。此時點擊安裝的話,就會直接進入容器配置、鏡像下載安裝、容器運行的流程,但是我不建議這麼做。一方面,容器配置頁面的內容相對繁瑣,也不夠直觀,估計很多用户看着都會一頭霧水。另一方面,鑑於牆內的網絡環境,Docker鏡像下載失敗是十分常見的事情。這種一條龍的執行步驟看似簡便,但前提是有着通暢無阻的網絡和準確無誤的配置,否則任何一步出錯都會增加排查問題解決問題的時間成本。
所以,我建議一步一步來,先把鏡像文件準確無誤地拉下來再説吧。點擊“鏡像文件”那一頁,點擊“提取”,鏡像文件名稱輸入“itzg/minecraft-server”,版本就選latest,等待一段時間,看看能否成功把鏡像下載下來。如果失敗了,多試幾次看看行不行。如果還是不行,心中默默罵上幾句GFW,然後接着往下看。
根據我的經驗,從hub.docker.com拉取鏡像,失敗的概率挺高的,尤其是那些體積比較大鏡像。所以,作為替代,我使用了阿里雲提供的鏡像加速服務。如果你也想使用阿里雲的鏡像加速服務,首先要註冊一個阿里雲的賬號。然後在產品列表裏面找到容器鏡像服務,點擊“鏡像加速器”,就可以看到類似下面的一個地址。以後拉取Docker鏡像的時候使用這個地址就行。
https://xxxxxxxx.mirror.aliyuncs.com
在QTS的Container Station裏面想要使用這個地址,要把它添加到Registry服務器中。具體步驟如下:在上面拉取鏡像的時候,填寫鏡像名稱的那個頁面,在Registry服務器那一列右邊點擊新增。
在彈出頁面填入名稱和地址即可,用户名和密碼不用填寫,其它選項也不用修改。填寫完畢後測試一下,沒問題的話,點擊新增即可。
然後再拉取鏡像的時候,其他填寫內容不變,Registry服務器選擇自己添加的阿里雲容器鏡像服務器即可。有了容器鏡像加速服務,下載速度快多了。
有了docker鏡像之後,下面我們就要用這個鏡像創建自己的Docker應用了。在QTS裏面創建並運行Docker應用有三種方式:1。直接使用Container Station的UI界面創建應用。2。使用Container Station的Docker Compose的文件編輯器創建應用。3.ssh連接到NAS的shell,命令行下創建運行應用。
我個人的話比較推薦Docker Compose和shell下直接命令行的方式,因為這樣子最靈活和直觀。畢竟我是程序員出身,Docker用的也比較久,所以對於官方支持的這兩種方式接受程度比較高。至於UI界面的方式,本質上也是對命令行參數的封裝和UI展示,只是我用不習慣而已。下面的操作,我就直接按照我最喜歡的方式進行了。先確保NAS的ssh服務是開啓的,
然後,使用你喜歡的ssh客户端,個人推薦Termius,界面簡潔,功能豐富,用着很順手。在Termius中新建一個HOST端,輸入NAS的IP地址,以及用户名密碼即可。
雙擊進入NAS的shell,下面的環節應該是整個我的世界服務器搭建最容易出問題的地方了。我們要輸入正確的命令創建和運行Docker應用。這裏我要糾正一下許多人的誤區,我們在命令行中輸入的一串串字符是程序封裝的指令加上指令需要的必要參數,這些字符不叫代碼。另外,在許多其他服務器的搭建教程中,出現的類似xml、config、properties、json、yaml等後綴的文件裏面的內容,是服務器的配置參數,這些配置也不叫代碼。每次看到許多用户把指令和配置稱作代碼我就有點強迫症接受不了。話歸正題,https://hub.docker.com/r/itzg/minecraft-server這裏詳細介紹了運行minecraft-server這個Docker鏡像需要的指令以及各個參數的具體含義。因為不涉及MOD的配置,所以一個最簡單的純淨版我的世界服務器的運行理論上只需要執行下面的指令即可。如果你用了前面介紹的阿里雲鏡像加速服務,還需要將最後一個參數修改為xxxxxx.mirror.aliyuncs.com/itzg/minecraft-server。
docker run -d -p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
Docker應用啓動之後,就會開始下載服務器文件了。如果你是牆內用户,這個jar文件我估計你是大概率沒法下載下來的,最後很容易導致Docker啓動失敗。小白用户的話,很可能根本不知道為什麼就失敗了。
其實這個文件用迅雷並不難下載下來,文件的下載地址在這裏可以找到。我的世界其他遊戲資源也可以在這個論壇裏面找到。https://www.mcbbs.net/thread-946592-1-1.html
把這個server.jar文件下載下來後,只需要在docker命令中通過參數指定這個jar文件,就可以跳過下載步驟,直接使用這個文件。這樣,我們的命令就變成了:
docker run -d -p 25566:25566 -e EULA=TRUE -e TYPE=CUSTOM -e CUSTOM_SERVER=/data/server.jar -v /share/Public:/data --name mc xxxxxxx.mirror.aliyuncs.com/itzg/minecraft-server
注意幾個關鍵參數,下面逐個解釋一下。
TYPE=CUSTOM,表示要使用自己的服務端文件。
-v /share/Public:/data,將NAS的/share/Public路徑映射為Docker內部的/data路徑,這樣服務器運行時產生的配置文件和存檔文件也會一併存放到NAS的指定路徑,即使Docker重啓這些文件也不會丟失。
CUSTOM_SERVER=/data/server.jar,指定了Docker內部加載服務器文件的路徑,/data/server.jar就意味着你要將server.jar文件放到NAS的/share/Public/下,具體可以根據自己的情況調整。
再次運行這個命令,通過觀察控制枱log,可以發現我的世界服務端已經可以正常運行起來了。
我本以為一切都大功告成了,急切地使用服務器對應版本的我的世界Java客户端嘗試了一下。卻發現客户端完全無法連接到服務器。
後來我靈機一動,在命令中加了-net=host,服務器終於被客户端發現了。
你以為這樣就結束了?並沒有,雖然客户端探尋到了服務器,但是連接的時候卻出現了下面這樣的錯誤。還好這個問題屬於常見問題,網上搜索一下報錯的log,就可以找到解決方法。解決方法也很簡單,進入Docker的shell終端修改個配置文件即可。
如下圖標出的字符串,就是你Docker應用的ID,使用下面的命令進入Docker應用的shell。
docker exec -it 9e04f87e94f7 /bin/bash
然後在Docker的shell中執行vi server.properties。先按i,找到online-mode=true改成flase,按Esc,然後按shift 冒號,輸入wq,回車。哈哈,不會用vi的話就用nano吧。
修改完畢,重啓服務器,再次嘗試用客户端連接,終於可以正常進入了。真是不容易啊。
看起來是不是很複雜,其實一點不復雜,總結起來就下面三步:
1。手動下載server.jar文件,並放到NAS的指定路徑了。
2。執行下面的命令啓動Docker。注意各個參數的配置。
docker run -d -p 25566:25566 -e EULA=TRUE -e TYPE=CUSTOM -e CUSTOM_SERVER=/data/server.jar -v /share/Public:/data --name mc xxxxxxx.mirror.aliyuncs.com/itzg/minecraft-server
3。進Docker的shell,修改vi server.properties配置,將online-mode改成flase。重啓Docker
以上,大功告成。目前只是實現了一個最簡單的,只能在內網遊玩的純淨版服務器,更多玩法我目前也在探索之中。有了現在這個基礎,後面增加MOD,以及實現內網穿透將服務器提供給更多玩家玩耍也不是不可能。
QNAP TVS-951N介紹
最後再來介紹一下我用來搭建我的世界服務器的這款NAS吧。這是一款九盤位的NAS,其中五個3.5寸硬盤盤位,四個2.5寸硬盤盤位。TVS-951N的整體造型十分緊湊,雖然是九盤位,但是實際體積也沒有感覺很大。外殼採用黑色的磨砂材質,看起來很穩重。
TVS-951N背部的散熱風扇佔據了不小的空間,畢竟是九盤位,散熱能力一定要足。接口方面,TVS-951N具備一個千兆網口,一個5GBASE-T網口,一個USB3.0接口、兩個USB2.0接口,以及一個HDMI接口。5GBASE-T網口可以輕鬆讓你的內網傳輸速度達到機械硬盤上限。HDMI接口的存在,也使得這款NAS具備了視頻輸出的能力。
硬盤方面,我採用機械硬盤加固態硬盤的配置。利用QTS獨有的Qtier技術,可以在存儲容量和讀寫速度上得到很好的平衡。
TVS-951N的CPU採用Intel Celeron 3865U處理器,內置了Intel HD 610 顯示芯片,標配了4GB內存。這款3865U處理器採用Kaby Lake架構,具備兩個核心,主頻為1.8GHz,相比我們熟悉的J3455,單核性能和圖形性能要好一些,多核性能因為後者是4核心,就沒有什麼優勢了。我開啓了我的世界服務器之後,客户端進入服務器遊玩,大部分時間CPU佔用率在20%~50%之間,偶爾會飆到70%。內存方面,因為我安裝了一些重量級應用,所以4GB內存快被吃光了。如果喜歡折騰NAS的用户,加到8GB以上才夠用。總之,TVS-951N的性能在加夠內存的前提下,運行我的世界服務器,再跑幾個常見服務,還是可以撐得住的。服務器本身估計容納三五個玩家應該也是可以的,雖然我沒有實際試過,但可以肯定的是再多估計就撐不住了。
總結
作為一款NAS,平時用於存儲、下載、影音、網絡等用途的比較多。然而藉助於強大的Container Station,我們甚至可以把它作為遊戲服務器來使用。作為24小時運行的NAS,天生就是被當作服務器的命。TVS-951N也是一款性價比比較高的九盤位NAS。豐富的接口,充足的盤位,夠用的性能可以滿足你文件存儲、影音播放、架設服務等需求。當然,如果折騰的比較厲害的話,先把內存加夠。
我的世界的玩法豐富多彩,本文所涉獵的內容也是很有限的。而且,我還沒有進行內網穿透,所以這個服務器目前只能被我獨享。後面,我也會再研究研究,將更多有趣的內容加入到自建的我的世界服務器中。