本教程中将通过手把手的方式,一步步地帮助您建立属于您自己的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服务器架设教程:
参考[]
|