本教學中將透過手把手的方式,一步步地幫助您建立屬於您自己的Java版伺服器。在該教學中,我們使用Mojang發布的供玩家免費下載的伺服器端程式,該程式在大部分操作系統(比如Windows、Mac OS、GNU/Linux和BSD)上都可以執行。 Show
如需查看更多教學,請查看此頁面底部或教學頁。更多有關Minecraft伺服器的資訊,參見伺服器。 注意:
註: 也有其他一些可用的客製化伺服器軟件,這些軟件一般被大型伺服器所使用,但是這些軟件並不受Mojang官方支持。 警告[]注意 如果您對自己所做的事情沒有清楚的認知,那麼在自己的電腦上執行伺服器軟件會導致您的電腦更容易受到來自外部網路的非法人士或有害程式(例如駭客和病毒)的攻擊。因此,請謹慎使用伺服器軟件。 鑑於您正在一步步地開啟您自己的伺服器,您應該要注意所有可能出現的危險性。執行下面的所有教學(應該)不會導致您的系統出錯,但是由於本wiki是所有人都可編輯的,且我們並不知道您的系統配置與軟件執行情況,我們並不能保證您的系統不會出現問題。 為了確保您根據下面的教學架設伺服器而不會出現問題,我們強烈推薦您至少要知道以下的內容:
Java[]Java是一種靜態類型的編程語言,用於編寫在Java虛擬機(JVM)上執行的程式。JVM支持很多種不同的平台。為了做到這一點,開發者為JVM編寫代碼,而所有被JVM支持的平台都能執行這樣的程式。進一步了解 此章節用於回答一些經常被問到的關於Java的問題,也會指導您作出有關Java的決定。 OpenJDK與OracleJDK的區別[]OpenJDK與OracleJDK非常相似。OpenJDK是對Java的一種官方的開源參考實現。OpenJDK是一個開源代碼庫,幾乎所有其他JDK都基於此構建。除了打包方式、許可證和一些表面上的差別外,OpenJDK與OracleJDK是一樣的。 請注意:如果用於商業和生產用途,OracleJDK的OTN(Oracle技術網路)構建版本就需要一份付費的訂閱才能使用。這似乎包含了執行Minecraft伺服器的情況,即便是非盈利目的的。Oracle會提供他們自己的OpenJDK構建版,但是不會打包成那種易於安裝的安裝包格式。 JRE與JDK的區別[]JRE指的是「Java執行環境」。JDK指的是「Java開發工具包」。JRE被設計用來執行Java程式,而JDK則是被設計用來開發Java程式的。JDK中包含了JRE,而JRE中包含了JVM。這意味著如果您已經有了JDK,那樣也同時有了JRE和JVM。原版Minecraft不需要JDK,但是有一些外掛可能需要。 無頭Java[]無頭Java實際上是普通Java的刪減版。它去除了對圖形介面或滑鼠、鍵盤方面的支持。無頭Java通常被用在伺服器或其他不需要圖形介面的場合。 “ 在Debian上,有幾種Java虛擬軟件包被使用。這些軟件包都支持Java執行環境,且具有以下兩種類型:無頭的(沒有圖形介面)以及普通的。 ” 一般步驟[]執行Minecraft伺服器的基本步驟是:安裝
現在,您應該已經啟動了一個基本的伺服器了。更多關於配置伺服器的內容,參見配置環境。關於如何編寫啟動腳本的內容,參見編寫腳本用於啟動伺服器。 Java選項[]命令列中,Java選項應該加入在
Minecraft選項[]關於伺服器端JAR檔案的選項要寫在指令中的
一些選項能在舊版中使用,但是已在新版本中被移除或被替換了。
示例命令列[]
Windows操作指導[]安裝Java[]執行Minecraft伺服器需要Java執行環境(JRE,或者直接叫Java)。考慮到安全,您應該使用最新版的Java。您可以按照下列方法之一檢查是否是最新版:
如果您沒有安裝Java或您的Java版本較舊,您可以下載OpenJDK或Oracle 「OTN」 JDK。 macOS操作指導[]請注意:在MacOS 10.4或更老的版本上,伺服器不能正常執行,且有可能導致您的機器崩潰。 安裝Java[]打開終端。
設定Minecraft伺服器[]參見一般步驟。 使用Time Capsule[]有些家庭使用的無線路由器是AirPort Time Capsule。此章節教您如何在不搞壞檔案伺服器的情況下做相應設定。 註:您需要知道您的管理員帳號和密碼。
您現在可以配置您的伺服器了。 Linux操作指導[]Linux有許多被稱為「發行版」的變種。有一些發行版是專門為伺服器設計的,或更適合執行在伺服器上的。如果您正在架設一台專用伺服器,我們建議您使用這些發行版中的其中一個。 一般來講,Linux更歡迎開源軟件。因此,在適用的情況下,建議您使用開源程式,例如OpenJDK。 安裝Java[]大多數發行版中都有OpenJDK。您可以直接安裝。對於Oracle Java,請參考Oracle的下載頁。 註:儘管不影響Minecraft伺服器,JavaFX以及其他專有部分可能需要單獨安裝。 Solus[]執行 安裝Oracle JDK,請參考Solus說明中心。 註:OpenJDK 11不在Solus的倉庫中。 Debian、Ubuntu和Raspbian[]為了正常使用 由於許可證方面的問題,常用來安裝Oracle Java的軟件庫已經停止維護。推薦您安裝OpenJDK 8及更高版本。 OpenJDK可以使用此指令安裝: 去掉指令中的「-headless」可以安裝完整的Java。 註:此方法已在Ubuntu 18.04中測試有效。 openSUSE[]註:由於openSUSE Tumbleweed可能的不穩定性,不建議使用此系統架設專用伺服器。 在終端內執行指令: 註:此方法已在openSUSE Leap 15.1中測試有效。 Arch Linux[]官方只支持OpenJDK 7 到 OpenJDK 12。 執行 如果遇到問題,請參考ArchWiki。 Gentoo[]執行 Gentoo Wiki 其他發行版[]查看您使用發行版的文件。它們應該會告訴您如何安裝OpenJDK。 另外,您還可以直接造訪Java網站下載適用於Linux的安裝包。對於大部分發行版都有用(無論32位還是64位)。在網站上提供了不同安裝包的安裝指導。 如果您在安裝的過程中詢問了密碼,請輸入它。如果您被問到「Is this OK [Y/N]」,(如果需要的話)請回答「Y」然後回車。Java現在應該已經安裝好了。 一個簡單的安裝腳本(同時會安裝Java)[]https://github.com/silvertriclops/MCSLI 註:這是一個非常早期的項目,設計時考慮了脫機安裝,並將定期更新以使其對使用者更加友好。 FreeBSD操作指導[]此部分需要更新 Java 7已經過時,因為官方已經使用Java 17了。 此部分已在FreeBSD 10.0 amd64上測試有效(JRE使用的是: 安裝Java[]由於OpenJDK與Minecraft伺服器的效能和崩潰問題,我們會安裝為Linux設計的Oracle JRE。 在安裝JRE前,您需要安裝FreeBSD的Linux二進制檔案相容層,您可以按照此文件操作。 kldload linprocfs mount -t linprocfs linprocfs /compat/linux/proc 並向 linprocfs /compat/linux/proc linprocfs rw 0 0 Oracle JRE的一個依賴被標成「禁止」,所以安裝這個依賴會失敗。切換到 由於許可證問題,您需要從Java官網上手動下載Linux的tar包(例如「jre-7u65-linux-i586.tar.gz」),並把它複製到 註:前一部分以前的說法(適用於FreeBSD 9.2 amd64)是:您必須在Makefile檔案中設定 嘗試執行 ln -s /usr/local/linux-sun-jre1.7.0/lib/i386 /compat/linux/usr/lib/java 然後在 /usr/lib/java /usr/lib/java/jli 執行 啟動Minecraft伺服器[]建立一個資料夾,然後把Minecraft伺服器端jar檔案複製進去。 java -Xmx1024M -Xms1024M -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider -jar minecraft_server.1.7.10.jar nogui
Plan 9[]alien-convert PATH_TO_YOUR_JRE.deb chmod ~/~ rwx # for current user snarf java -jar PATH_TO_SERVER_JAR.jar xvmf in acme Hostman[]Hostman是用於雲託管應用程式的應用程式託管提供商。Minecraft可作為Hostman上的一鍵式應用程式使用。安裝大約需要2分鐘,有個關於如何配置伺服器並開始遊玩的說明。您可以在一台伺服器上擁有多個Minecraft服務。在此處免費試用。 Cloudron[]Cloudron是一個在伺服器上自託管應用程式的平台。在Cloudron上,Minecraft是一個一鍵應用。它允許您透過瀏覽器上的Web介面管理Minecraft伺服器。您也可以在同一台伺服器上安裝多個Minecraft實例。您可以嘗試此示例(使用者名稱:cloudron,密碼:cloudron)。 Docker[]Docker是一種開源的容器平台,可以使不同的Minecraft伺服器實例和主機相互隔離開來。Docker本身和其容器倉庫的所有者與Mojang沒有任何隸屬關係。 安裝Docker(適用於Linux、Mac和Windows)[]參見https://docs.docker.com/install Docker鏡像[]關於完整的Docker鏡像文件,請參見:https://github.com/itzg/docker-minecraft-server/blob/master/README.md。 在一個名為「mc」的容器中執行一個簡單的最新版本伺服器,可以在shell中執行以下指令: docker run -d -p 25565:25565 --name mc -e EULA=TRUE itzg/minecraft-server 在Docker鏡像中指定Minecraft版本[] 如果要指定特定的版本,請在指令後加入 docker run -d -p 25565:25565 --name mc -e VERSION=SNAPSHOT -e EULA=TRUE itzg/minecraft-server 指定為Minecraft 1.7.9: docker run -d -p 25565:25565 --name mc -e VERSION=1.7.9 -e EULA=TRUE itzg/minecraft-server 伺服器端口[]要變更監聽的端口,需要用到Docker的端口映射功能。這可以把主機上的指定端口映射到容器的25565端口上。可以使用下面的指令執行一個非25565端口的伺服器: docker run -d -p <port>:25565 --name mc -e EULA=TRUE itzg/minecraft-server 更新Docker鏡像[]使用下面的指令更新Docker鏡像。請注意,此指令不會更新Minecraft,它只會更新鏡像本身。 docker pull itzg/minecraft-server 配置環境[]編寫腳本用於啟動伺服器[]實際上,我們不需要在每次啟動伺服器的時候輸入指令。我們可以把指令寫進一個檔案裡,然後執行它。 Windows[]在Windows中,腳本稱為「批處理檔案」。在伺服器jar檔案所在的資料夾中,建立一個文字文件,命名為 @ECHO OFF java -Xms1024M -Xmx2048M -jar minecraft_server.jar --nogui pause 然後雙擊這個檔案啟動您的伺服器。您可能會收到「Class_Not_Found」和「ServerGuiConcole」錯誤資訊,直接忽略這些錯誤。然後您就可以看到「Server Thread/INFO」這樣的內容,這表示您的伺服器啟動了。 腳本中的 macOS、Linux和FreeBSD[]這些系統在命令列中都使用一種被稱為「POSIX shell script」的腳本語言。在放伺服器jar檔案的資料夾中建立一個文字檔案,命名為 #!/bin/sh cd "$(dirname "$0")" exec java -Xms1G -Xmx1G -jar server.jar --nogui 然後儲存檔案。執行 如果您想像Windows中一樣能在伺服器關閉後保留窗口,請刪除腳本中的 啟動和維護腳本[]另外,您也可以嘗試使用下面列出的腳本實現對Minecraft伺服器的管理和啟動、關閉自動化:
端口轉發[]如果您有一台路由器,並且想讓使用者透過路由器連接進來時,就需要使用端口轉發。如果您只是想架設一台內部伺服器,那麼您就不需要做這樣的事。請注意:端口轉發可能會導致安全風險。 不同路由器設定端口轉發的方式不同。如果您不知道如何在您的路由器設定端口轉發,可以嘗試在網路上找適用於您路由器型號的教學。 此示例適用於TP-Link家庭路由器的新版介面。 進入您路由器的管理介面,找到端口轉發頁,然後點擊新建服務或自訂服務。選擇一個「協議類型」,「TCP」表示只轉發TCP協議,「UDP」只轉發UDP協議,而「ALL」則兩者都轉發。內部端口和外部端口都填寫25565(如果您伺服器不是標準端口,可以按需填寫)。IP地址則填寫您Minecraft伺服器的內部IP地址,其餘保持不變即可。 要取得您電腦的IP地址,請按以下步驟操作: Windows按⊞ Win + R打開「執行」,輸入cmd 然後↵
Enter,打開指令提示字元。在指令提示字元中輸入ipconfig 然後↵ Enter。找到對應您使用的網路適配器上的IPv4地址(有線連接的一般是「以太網」,無線連接的一般是「WLAN」)。一個IP地址的形式應該是xxx.xxx.xxx.xxx ,然後把這樣的內容記錄下來。注意不要包含任何除了數字或點的部分。
OS X上IP地址的顯示位置 Mac打開在logo下的選單,找到「系統首選項」,然後選擇「網路」。您的IP地址應該會顯示在右側(應該是xxx.xxx.xxx.xxx形式)。將它複製下來即可。 Linux 您可以使用網路診斷中心(有一些發行版有)。或者在終端中執行ifconfig ,此指令會輸出您所有網路接口的IP地址,找到例如inet addr:xxx.xxx.xxx.xxx 的內容,將xxx.xxx.xxx.xxx的部分複製下來即可。如果您獲得了您的IP地址,請把它輸入到前面轉發設定中的「IP地址」中。 填寫好這些需要的資訊後,請點擊「儲存」(或者其他類似意思的按鈕)。這樣您就成功的設定了端口轉發。當您啟動Minecraft伺服器時,需要把 接下來可以配置並連接了。 設定VPN[]注意 使用虛擬專用網路可能對連接至Mojang伺服器,Minecraft伺服器,或者您的互聯網造成影響。 在您和您的朋友之間設定伺服器的另一種方法是設定虛擬專用網路。由於希望連接到伺服器的所有使用者必須下載外部軟件以加入或建立伺服器,因此該方法可能會被認為是不推薦而且不方便的。另外一種可行的辦法是端口轉發。可用於建立虛擬專用網路的免費簡單程式是Hamachi和Radmin虛擬專用網路。這是另外一種免費開源且支持大多數操作系統的方案,但是配置較困難。Hamachi免費版只允許5個玩家連接。 設定Hamachi[]
設定Radmin VPN[]其配置方法和Hamachi的很相像。
配置Minecraft伺服器[]
[ { "uuid": "", "name": "", "level": 4, "bypassesPlayerLimit": false } ]
連接到Minecraft伺服器[]
關於IP地址的一些注意事項[]
伺服器端網路設定[]
伺服器有可能會遭到惡意攻擊,在伺服器投入使用以前,請務必做好物理保護及資料備份工作,否則有可能會帶來經濟及精神上的損失。 針對接入NAT的家庭網路的伺服器[]
這種情況,您可以使用內網貫穿類應用,如花生殼,或協商運營商請求許可取得公網IP的資格。 針對使用家庭路由器的伺服器[]
針對使用動態IP的伺服器[]
使用動態DNS需要一定網路理論及實踐的基礎,新手在做出決定前,請先諮詢熟悉的業內人士。
局域網中的專用伺服器[]這一段的內容只適用於Classic(v0.30)伺服器。 管理員不能在內網中透過一台另一台機器進入那台架設了伺服器的機器,這是一個普遍性的問題。典型的情景是:您有一台專用伺服器,而且有另一台供您玩遊戲的機器。而它們同時連接到同一個路由器或交換機下,且內部IP為「192.168.x.x」。通常,透過伺服器生成的URL連接時,會返回「伺服器離線」的錯誤資訊。 要解決這個問題,您需要在您的URL、書籤以及其他您用來連接的東西後面加上 以前(1.8 beta和網站更新前)上面要加的東西是 註:Beta伺服器沒有這樣的情況,您應該能透過內部或外部IP連接上伺服器。 SRV記錄[]從Java版1.3開始支持玩家可以在不輸入端口號的情況下連接到一個使用非標準端口號的伺服器。相關的資訊是作為一種服務被記錄在DNS上的SRV記錄中的。SRV記錄告知用戶端實際上應該連接的主機名和端口。一些動態DNS(DDNS)服務和大多數的靜態DNS服務都會允許您設定這樣的記錄。[1] 如果您要手動驗證SRV記錄是否生效,請參考下面的內容(假設給玩家的域名是「YOUR.DOMAIN.com」): > nslookup -q=srv _minecraft._tcp.YOUR.DOMAIN.com Server: UnKnown Address: [REDACTED] Non-authoritative answer: _minecraft._tcp.YOUR.DOMAIN.com SRV service location: priority = 5 weight = 5 port = 65312 svr hostname = ACTUAL.DOMAIN.com 常見問題[]問:如果我有一個沒在這裡提到的問題,我應該怎麼辦? 答:您可以在Minecraft Forums上發帖說明您的問題。為了能幫到您,請提供以下資訊:
如果我們解決了您的問題,請說明具體解決問題的地方和方法。這可以對其他人有所幫助(也能幫我們解決常見問題)! 問:在Windows上雙擊批處理檔案啟動伺服器,指令提示字元窗口閃退且伺服器沒有啟動。 答:請在您的批處理檔案最後加上 也可能是您沒有修改您的eula.txt檔案。在雙擊您的minecraft_sever.jar檔案後,您會看到資料夾內有個eula.txt檔案。用記事本打開這個檔案 (https://account.mojang.com/documents/minecraft_eula). Datum Uhrzeit eula=false 將最後一行修改為 eula=true 然後儲存並退出。重新雙擊伺服器啟動的批處理檔案應該就可以正常啟動了。 問:當我嘗試啟動伺服器時,伺服器顯示"Failed to bind to port!"。 答:可能是路由器端口映射設定有誤,確認路由器為Minecraft開放的端口(預設為25565)正確地映射到您的伺服器上。如果您的伺服器是直接接入網路的且網路服務商不開放您所設定的端口,將 或者是您在server.properties檔案中的IP地址一項中設定了IP地址。如果這個IP地址不與您系統上任何接口上的地址一致,伺服器端會顯示這樣的資訊。如果把此項留空,您就可以在所有接口上綁定。這樣,您和內網內的人就可以透過localhost或內網IP地址連接到伺服器了。 此外,問題也可能是由於您嘗試使用一個已被占用或無權限綁定的端口(小於1024的端口需要root或管理員特權才能使用)導致的。要解決這個問題,您可以嘗試修改 註:您應該避免使用下列端口,這些端口在有些ISP那裡是被封鎖的。並且,為了安全考慮,最好不要用root使用者執行伺服器(適用於Linux系統且端口小於1024的情況):
一般要避免使用端口號低於1024的端口,因為這些端口是「公認端口」,用於在IANA處註冊的重要服務;另外因為安全原因,一些網路服務商還會屏蔽3306(MySQL伺服器預設使用)端口等。除此之外,49152-65535段端口屬於「動態端口」範圍,沒有被註冊占用。 此類問題亦有可能是操作者疏忽導致伺服器端未關閉就再次開啟了伺服器端,典型的錯誤操作有:Windows中直接雙擊了核心jar,Linux中使用守護進程執行Java等,導致伺服器端在後台執行而操作者未注意的情況。遇到此類問題可先檢查占用該端口的進程,取得控制或將其結束,再啟動伺服器端。 問:我嘗試在Solaris/OpenSolaris上執行伺服器,但是出現了以下錯誤: java.io.InterruptedIOException: Operation interrupted at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.net.SocketInputStream.read(SocketInputStream.java:182) at java.io.FilterInputStream.read(FilterInputStream.java:66) at gq.a(SourceFile:131) at ji.g(SourceFile:197) at ji.c(SourceFile:17) at oq.run(SourceFile:84) 2011-05-31 16:57:26 [INFO] /:44673 lost connection 答:只有Solaris系統線上程中斷連接時會發生這種異常,這種異常可以透過改變啟動指令來避免: java -Xmx1G -Xms32M -XX:-UseVMInterruptibleIO -XX:+UseConcMarkSweepGC \ -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts\ -jar minecraft.jar nogui 這樣的指令讓Java使用一種可中斷的IO棧來防止異常發生。 問:當我嘗試連接到我的伺服器上,伺服器顯示: Connection lost The server responded with an invalid server key 答:此錯誤通常在伺服器端發送了一個用戶端不能識別的功能時出現,這可能是由於使用了不能識別的伺服器軟件、不平衡的用戶端/伺服器版本或修改過的用戶端導致的。 問:為什麼我不能破壞或放置方塊!? 答:聯繫服主關閉保護重生點的功能,或離重生點遠一些,除非您是伺服器的op,否則在該功能開啟時您不能在重生點附近放置或破壞方塊。 問:我的伺服器執行正常,但是我不能連接上去! 答:這可能是由一連串問題導致的。請按照上方提供的模板發帖詢問。 問:如何給伺服器更多記憶體? 答:修改啟動命令列中的「-Xmx1G -Xms1G」部分中的數字。「-Xms」部分指定的是伺服器啟動時使用的記憶體量,而「-Xmx」部分指定的是伺服器最大可以使用的記憶體量。 問:為什麼伺服器CPU經常滿載? 答:這可能是由於GUI(圖形介面)窗口導致的。在啟動命令列加入 問:我要怎麼取得伺服器的IP地址? 答:請參閱連接到Minecraft伺服器一節。 問:我設定了端口轉發,並且允許java.exe透過防火牆,但仍然不起作用! 答:您的調製解調器有可能執行在路由模式下。您可能會從ISP處拿到調製解調器和路由器二合一的裝置。 要驗證這一點,請查看您路由器上顯示的WAN IP,如果這個IP是一個私有IP,那麼您需要登陸到ISP提供給您的調製解調器的管理介面,然後把端口轉發中的IP地址設定為您路由器的WAN IP。 效能最佳化Java參數[]對於各類JDK(Oracle或Open)使用者,使用JDK的一些參數進行最佳化是可行的。以下參數在一定程度上最佳化GC記憶體操作且利用了一些CPU指令集。 使用Java 8或之前的版本[]java -server -XX:-UseVMInterruptibleIO -XX:NewRatio=3 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+CMSParallelRemarkEnabled -XX:MaxGCPauseMillis=50 -XX:+UseAdaptiveGCBoundary -XX:-UseGCOverheadLimit -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=15 -XX:+DisableExplicitGC -Xnoclassgc -oss4M -ss4M -XX:CMSInitiatingOccupancyFraction=60 -XX:SoftRefLRUPolicyMSPerMB=2048 -Xms(视情况) -Xmx(视情况) -jar <jar文件> nogui 使用Java 9或之後的版本[]因為從1.17開始不支持Java 8,而在高版本Java上,上面的許多參數都被刪除,暫時沒有替代品,故可以使用以下參數: java -jar -Xms(视情况) -Xmx(视情况) -server -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M <jar文件> nogui 其他[]如果上述兩個用例都報錯的話,可以使用伺服器端所屬版本的官方用戶端參數,此參數可以在編輯「配置」介面上的「JVM參數」中找到,然後使用以下參數: java -jar -Xms(视情况) -Xmx(视情况) -server <在官方启动器中获得的参数> <jar文件> nogui 影片和替代教學[]這裡給出了一些其他的Minecraft伺服器架設教學:
參考[]
|