遊戲宅必看丨把《我的世界》伺服器搬進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。豐富的介面,充足的盤位,夠用的效能可以滿足你檔案儲存、影音播放、架設服務等需求。當然,如果折騰的比較厲害的話,先把記憶體加夠。
我的世界的玩法豐富多彩,本文所涉獵的內容也是很有限的。而且,我還沒有進行內網穿透,所以這個伺服器目前只能被我獨享。後面,我也會再研究研究,將更多有趣的內容加入到自建的我的世界伺服器中。