自 MUA 建立以来,各高校同好组织就将建立服务器作为组织的首要任务之一。
然而,架设和运维 Minecraft Java 版 服务器本身需要一定的技术知识,而大多数同学作为普通玩家并不具备相关知识和技能。
因此,MUA 决定推出一系列服务器运维教程以便组织成员进行查阅,作为系列的第一篇,本篇将讨论如何架设最基础的服务器,实现从无到有的跨越,如果您需要更进阶的服务器运维知识,可以在目录中自行寻找,我们会不断推出新的教程。
此外,编者水平有限,难免会出现错误和遗漏,如果您发现任何问题,敬请斧正。
当然,有任何问题您也可以随时在 MUA 各群聊中询问,或者在我们的 Q&A 文档中提问,我们非常乐意提供咨询和技术援助。
尽管架设 Minecraft 服务器并不需要任何编程知识,但其中依然会牵扯到大量的计算机基础知识,本教程会尽可能用简单的语言去叙述,但您依然需要有足够的耐心去阅读本教程。
您最好符合以下条件,再来阅读本教程。
拥有较强的理解能力和耐心
拥有较强的独立思考能力。
掌握搜索引擎的使用方法,能够自己寻找一定信息。
学习 提问的智慧 后,向技术人员寻求帮助。
足够的资金与时间。
无论您搭建的是怎样的服务器,搭建 Minecraft Java 版 服务器的一般步骤都是不变的。
你可以参照基本步骤,在本教程内寻找详细信息进行学习。
.jar
文件。.jar
文件新建一个文件夹,并把它放进去。这个文件夹会存储所有的配置和世界存档文件,所以不要在 “下载” 文件夹中直接运行。.jar
文件的文件夹中。如果你打开了一个图形界面,也可以把这个文件夹拖动到终端窗口中。java -jar <服务端文件名>.jar --nogui
用来首次启动服务器。eula=false
改为 eula=true
。这表示你已阅读并理解了 EULA(最终用户协议)的内容,并会在使用服务端时遵守它。如果不这样做,服务器会在你尝试启动时立即关闭。java -jar <服务端文件名>.jar
启动服务器了。如果你不想让服务器显示图形界面,在前面的命令后面添上一个空格和 --nogui
即可(有些人觉得这样做会让服务器更快,但是其实区别不大)。首先,无论如何我们都需要一台服务器以便运行服务端,服务器本质上就是一台数据处理能力更强,可靠性更高的电脑。因此如何挑选服务器将直接影响到游戏的流畅程度,游戏内可承载的最大人数等。而一般情况下,我们会从以下这些方面去选择服务器。
注:MUA 提供服务器出租,如果您已经是正式成员组织的负责人,可以联系群内西建-双双。
Minecraft Java版 服务端本身对于服务器 CPU 要求并不高,常见的 2 核心 CPU 足够带动 4 至 5 人的原版服务器流畅运行。但如果你想提高服务器性能,你需要的是注意的是 CPU 架构和更高的主频,而不是更多的核心数量。
如果你想长期开一个中大型服务器,Intel 的酷睿和 AMD 的锐龙并不是明智之选,你需要的是 Intel 的至强系列及至强可拓展处理器,或是 AMD 的线程撕裂者或霄龙处理器,这些适用于工作站或服务器的处理器一般稳定性强,但主频较低,在挑选时应选择较新且 主频(或者睿频)在 3GHz 以上 的处理器。
PL:就现阶段各校的实际情况与 CPU 的现状而言,Intel 的酷睿和 AMD 的锐龙反而是最适合的选择,Intel 的至强系列通常只是资金有限的无奈之举。所有学校都不会遭遇需要在同一台服务器上部署接近 100+ 的服务端实例的情况,普通 CPU 的 8 核完全足够。因此主频才是更关键的指标。
一般的,当你搭建是纯净的、不含模组的服务器时,对单核性能的要求较低;当你搭建是含模组的服务器或者生电服务器时,对单核性能的要求较高。当然,单个核心的负载能力始终有限,具体如何选择还需要根据具体情况。
此外,CPU 的时钟频率(IPC)越高,相同主频下性能越好,本篇对此不做深入讨论,但越新的架构,IPC 值一般越高。
简而言之,CPU 架构越新,主频(或者睿频)越高,核心数越多,服务器性能越好,购买前不妨先查询一下CPU 的主频。
运行内存是制约 Minecraft Java版 服务器承载能力的重要因素,我们只需要关注三个参数。
架设原版服,一般按照 1G 可承载 4 至 5 位玩家为标准进行购买即可。其余标准作为辅助参考进行挑选。
服务器网络是决定玩家游玩质量的另一大重要因素。在现实生活中,网络由多家网络运营商共同运营,因此不同运营商提供的 IP 对于用户来说连接质量并不相同。
例如,电信的玩家通过联通的 IP 地址进入服务器,延迟就比通过电信的 IP 地址进入服务器要高)。而一般认为,国内存在四大线路:移动,联通,电信和教育网。
对于 Minecraft 服务器来说,支持任意的一条线路即可,微量的延迟并不足以影响游戏体验。
但通常,服务器支持的线路越多,连接质量越好。如果服务器支持 BGP 线路,那么连接质量会更好,更稳定。(如果您并不知道这是什么也没关系,并不重要)
相对来说,带宽才是制约服务器游玩质量和承载人数的重要因素。我们这里不对带宽的具体概念做详细解释,简单来说,服务器需要向玩家发送数据,带宽决定的就是一次最多发送数据的量。
此外,对于很多玩家游玩的服务器,不建议将服务器连接到无线网络(WLAN,尤其是 WWAN),最好还是把服务器接入到有线网络,例如以太网。
经过测试,通常情况下,原版服务器在视距设置为 10 的情况下,请按照 1Mbps 带宽承载 1.5 人进行计算即可,如果您需要发送更多的数据(例如模组服),需要相应增加。
其余的硬盘等硬件指标根据服务器需求自行考虑即可,但请时刻牢记 图 1.1.1 的内容。
此外,我们十分不推荐初学者使用 Linux,虽然对于服务器来说 Linux 拥有更好的稳定性,更少的内存占用,但是对于初学者来说,Linux 的纯命令行依然有着较高的使用难度,本教程仅给出基本的使用方法。
另外,我们并不推荐新手使用家用电脑进行服务器架设,原因十分复杂,包括但不限于家用服务器无公网 IP,连接不稳定,服务器质量不佳等,基础篇不对家用服务器的架设方法进行详细讨论,您可以在进阶篇中寻找相关帮助。
此外,面板服的购买也需谨慎,部分无良服务器厂商会将服务器进行超开,即将一台主机同时出租给过多的用户进行服务器架设,而通过面板您并没有办法查出厂商是否进行相关操作,同时,面板的可配置性较小。因此,我们强烈推荐您直接购买虚拟专用服务器(VPS)或者云服务器进行服务器架设!
本小节我们将会来学习如何连接到你的服务器并进行环境配置(即安装 Java 和一些必要软件),以及一些其他的准备工作。
当您完成了服务器购买后,一般您将会收到服务器商发送给您的服务器连接信息。具体这些信息在哪,一般厂商会给予您相应的后台,或者直接给您发送服务器的连接地址和账号密码,如果您无法找到可以直接联系服务器厂商进行询问,一般会包含如下信息,接下来我们会对这些信息进行详细解读。
【连接地址】
ex.example.com:23333
=========================
【系统信息】
系统:WindowsServer 2012R2
用户名:Administrator
密码:Example
=========================
【游戏连接地址】
ex.example.com:端口
开放端口:23333-23343(对等端口)
=========================
如果您需要连接到服务器,您只需要查看连接地址、账户密码和系统信息。
连接地址一般为 <IP/域名>:<端口>
,如果厂商并没有给你端口,那么 Windows默认为 3389,Linux 系统默认为 22,当然您也可以直接尝试省略端口连接。
如果您使用的是一些专业的服务器厂商提供的服务器,那么您可能需要在后台防火墙/安全组放行对应端口(如 图 1.2.1 所示),您需要点击 防火墙 — 添加规则 — 协议(TCP)、端口(Windows 默认 3389、Linux 为 22),其它选项默认即可,其它云服务器厂商也可寻找到类似设定进行配置。
下面是具体的连接实例,仅供参考。
如果您本身使用的就是 Windows 系统,您只需要在键盘上按下 Windows徽标键 + R,您将打开 Windows 运行窗口(如 图1.2.2 所示)
输入 mstsc
然后回车,会弹出远程桌面连接(如 图1.2.3 所示),在 计算机 处填写刚才的连接地址,点击连接,按照提示填写账户名和密码,不出意外的话,此时您已经连接到远程计算机。同时在左下角 显示选项 中,您也可以自行去调整连接质量等,在此不做过多赘述。
您可以在 显示选项—本地资源—本地设备和资源—详细信息 中,勾选你的本地硬盘,方便您进行文件上传,但是请注意这可能会带来安全性问题,一旦服务器出现问题,您的 PC 将在连接到服务器的同时受到感染。
如果您使用的是 MACOS,您可以安装 Windows Remote Desktop,连接过程同上。
其它系统也可以参照微软给出的 帮助页 寻找到对应的连接客户端,并参照上方步骤进行连接。
我们十分不推荐初学者使用 Linux,虽然对于服务器来说 Linux 拥有更好的稳定性,更少的内存占用,但是对于初学者来说,Linux 的纯命令行依然有着较高的使用难度。
本教程仅给出 通过 SSH 客户端使用密码连接服务器 的基本方法。如果您的云服务器厂商需要使用密钥甚至其它可信连接方法,请自行寻找相关教程。
如果您的本地电脑为 Mac OS 系统,需先打开系统自带的终端(Terminal),再执行以下命令。
如果您的本地电脑为 Linux 系统,可直接执行以下命令。
如果您的本地电脑为 Windows 10 或 Windows Server 系统,首先需要打开命令提示符(CMD)(在运行窗口中输入cmd并回车),再执行以下命令。
ssh <username>@<hostname or IP address>:<端口>
username
即为前提条件中获得的默认账号。Linux 一般默认为 root。
hostname or IP address
为您的 Linux 公网 IP 或自定义域名。端口未给出默认可不填。
按照最上方我们给出的例子,那么您应该输入的就是
ssh root@ex.example.com:23333
回车之后,系统就会自动进行连接,此时按照提示输入密码并回车,您就已经连接至 Linux 服务器了。
当中可能会提示您是否需要确定安全性,输入yes
即可
当然您也可以使用第三方 SSH 客户端,如 OpenSSH 等,他们各自具有不同的功能,您可以自行寻找。
现在您已经可以开始使用服务器了,下一步,我们将带您安装 Minecraft Java 版的基础环境。同时我们将会为您推荐一下较为方便的软件,您可以选择性的进行安装。
在安装之前,我们先来了解一点 Java 知识,这些知识并不直接影响到安装流程,如果您只是希望安装 Java,可以跳过本段,但是这些知识对于 Minecraft 服务器运维来讲十分有必要进行学习,我们依然推荐您进行阅读。
Java 是一种静态类型的编程语言,用于编写在 Java 虚拟机(JVM)上运行的程序。本质上,运行 Minecraft 服务端和客户端都是启动了一个 Java 虚拟机,为了做到这一点,我们必须为服务器安装可以启动 JVM 的 Java 环境。
通常,我们可以安装的 Java 可以分为 JRE 和 JDK,JRE 指的是 Java 运行环境(Java Runtime Environment)。而 JDK 指的是 Java 开发工具包(Java Development Kit)。
JRE 被设计用来 运行 Java 程序,而 JDK 则是被设计用来 开发 Java 程序的。JDK 中包含了 JRE,而 JRE 中包含了 JVM 。这意味着如果你已经安装了JDK,那也同时安装了 JRE 和 JVM 。
原版 Minecraft 不需要 JDK,但是对于服务器部分插件可能需要 JDK。所以我们推荐您直接安装 JDK。
无头 Java:无头 Java 实际上是普通 Java 的删减版。它去除了对图形界面或鼠标、键盘方面的支持。无头 Java 通常被用在服务器或其他不需要图形界面的场合。
接下来,我们就会分别对 Windows 和 Linux 安装 Java 的步骤进行说明。无论何种系统,您都需要按照你想要启动的 MC 版本先选择对应的 Java 版本。
本篇教程推荐和使用的是 Azul Zulu Java,如果您需要其他 Java,请自行更换,下载安装步骤类似,汇总下载链接:https://www.azul.com/downloads
大体的版本对应如下:
Minecraft 版本 | JDK 版本 |
---|---|
1.20.5 + | JDK 21 |
1.20 - 1.20.4 | JDK 21(推荐) 或者 JDK 17 |
1.17 - 1.19.4 | JDK17 |
1.13 - 1.16.5 | JDK 11(推荐) 或者 JDK 8 部分整合包仅能使用 JDK 8 或 JDK 16 |
1.12.2 - | JDK 8 |
不建议使用 OracleJDK。OracleJDK 是闭源软件,使用它可能会遇到不必要的麻烦。建议使用 Adoptium、ZuluJDK、Dragonwell、Microsoft、Liberica 等开源 OpenJDK,下文使用 ZuluJDK 举例。
对于初学者,请下载 msi 安装包,按照提示安装即可。
JDK21 链接:https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-win_x64.msi
在Linux上安装Java通常有两种方法:使用包管理器或者手动安装。
对于基于 Debian 的系统(如 Ubuntu),可以使用 apt:
apt update
apt install default-jdk
sudo apt update
sudo apt install default-jdk
sudo dnf install java-21-openjdk-devel
java -version
如果 Java 版本正确显示,那么就已经安装完成。
编辑器:VisualStudio Code 或 Sublime Text 或 EditPlus 任选其一。
若安装上述软件出现问题,请查阅该软件的帮助文档,或通过该软件官方求助渠道取得帮助。
这里只提供一些最简单的方法,如果您希望按照其它方式上传请自行寻找教程。
打开远程连接窗口,左下角显示选项—本地资源—本地设备和资源—详细信息中,勾选你的本地硬盘,然后进行连接。此时在服务器上就可以看到您的磁盘了。
使用scp
命令进行文件传输,格式如下:
scp <本地文件路径> <username>@<server ip or host>:<端口>:<服务器路径>
下面是一个具体的例子,比方说我们需要移动本地文件D:/test.zip
至服务器/root
路径下,服务器地址及账号密码为上方连接所使用的例子,那么命令应该如下:
scp D:/test.zip root@ex.example.com:23333:/root
MacOS 和 Linux 往服务器中上传文件的方法类似。
当然您也可以使用宝塔面板、翼龙面板、MCSM等可视化管理工具进行文件管理,或者使用 ftp 和 sftp 进行文件传输。本教程不做详细探讨,请自行寻找相关教程。
看到这里,你已经完成了所有前期的准备工作,下一步,就是架设服务端。
首先我们需要了解Minecraft服务端究竟是什么?Minecraft服务器(Minecraft Server)可以使玩家通过互联网或本地局域网络和其他玩家一起玩Minecraft。而承载玩家进行游玩的正是与Minecraft客户端对应的Minecraft服务端。也就是说,我们需要在服务器上运行服务端软件以架设Minecraft服务器。
不过,除了官方提供的Minecraft服务端核心外,更常用的实际上是各类Minecraft第三方服务端核心,下面我们会一一介绍主流的Minecraft服务端,你可以根据自己开设的服务器类型进行挑选。
核心名称 | 介绍 | 网址 |
---|---|---|
官方服务端(Vanilla) | 由 Minecraft 官方提供的服务器核心,仅包含原版游戏内容,优化和性能较差。但未对游戏做任何修改,可以完美运行一些由数据包和命令方块制作的原版地图。属于最基础的服务端。 (注:最早的官方服务端被叫做 SMP,即 Survival Multiplayer 多人生存模式) |
🌏 |
Bukkit/CraftBukkit | 最早出现的插件端。由于版权问题,Bukkit 被 DMCA 移除,此后由 SpigotMC 接手。 | 🌏 |
Spigot | 稳定的插件端,目前全世界使用人数最多的 Minecraft 服务端。由 md_5 开发的Spigot 以及 Spigot 社区在 Bukkit 社区逐渐式微后成为当今最活跃的 Minecraft 多人游戏社区,API多,更新迅速,社区活跃,优化流畅,是目前较为推荐的插件服务端。 | 🌏 |
Paper | 目前优化最佳的插件端之一,也是最推荐新手使用的插件端。高效的优化,插件 api 的重构使得 Paper 拥有极佳的性能表现和稳定性。PaperMC 团队致力于在 Spigot 的基础上提供更好的优化,但这不可避免的会影响到原版的某些“特性”,如果您追求原版玩法请不要使用Paper。 | 🌏 |
BungeeCord | 由 SpigotMC 团队开发和维护的代理端,也是目前使用人数最多,插件市场最多的代理端,与 Spigot 完美兼容,是开设群组服的优秀选择。 | 🌏 |
Velocity | 由 PaperMC 团队开发和维护的代理端,在高版本受到很多服主的青睐,它拥有更快的连接速度,更好的网络稳定性,以及优秀的性能。同时,它也与 Paper 完美兼容,但目前支持其的插件相较于BungeeCord更少。但依然是非常不错的代理端。 | 🌏 |
Forge/Neoforge | Forge 是最主流的 Minecraft Mod 加载器,如果您需要架设 Forge Mod 服务器,那么您需要为原版服务端安装 Forge 以架设 Forge 服务器。 2023年,Forge 团队中大量开发人员出走,建立分支项目 Neoforge,与 Forge 类似。 |
🌏🌏 |
Cleanroom | Cleanroom 是 CleanroomMC 开发的一个 Minecraft Forge 分支,致力于在 1.12.2 延续 Forge 的开发。由于使用JDK21并内置了mixin。 部分整合包可以尝试使用Cleanroom来获取极大的性能提升。但是目前兼容性一般( 1.12.2 怪 mod 太多),对于开服者的能力要求极高。 |
🌏 |
Fabric | Fabric 是新兴的 Minecraft Mod 加载器,由一部分对 Forge 社区环境不满的开发者开发并维护。Fabric 拥有更好的兼容性和更快的加载速度,并且最大限度地保留了原版的特性。 | 🌏 |
Quilt | Quilt项目为由Fabric项目分支而来,兼容Fabricmod。由于其开发的不稳定性,极其不建议使用Quilt。 | 🌏 |
混合端 | 混合端可以同时使用 Forge mod 和 Bukkit 插件,是部分服主的选择。但是其稳定性与兼容性不佳,因此不建议新手腐竹上手。目前主流的混合端有:Mohist/Arclight/Catserver/Foxserver/Magma。建议 1.12.2 优先使用 Catserver,高版本优先使用 Arclight。 |
在上表提到的这些服务端之外,也有大量的其它类型的服务端可以选择,他们各自都有不同的优缺点。
PL:实际上由于Paper的架构,其拥有极高的变化性,它既能够破坏所有原版特性来获取极致的优化(Mirai),也能够保留绝大部分原版特性并获得远优于Fabric的优化(Purpur,Leaves)。不要总是把目光放在主流服务端上。具体可见开发教程。
但是简单的来说,他们只分为原版端,代理端,插件端,模组端和混合端。
原版端就是最基础的Minecraft,内置在Minecraft单人游戏中,所以其保证了单人游戏的内容和多人游戏的内容完全一致,但是官方服务端拥有极其糟糕的性能表现,所以除一些大量使用命令方块和数据包制作的地图必须使用官方服务端保证其稳定运行外,我们在任何情况下都不推荐您使用原版端。
PL:完全可以使用Fabric服务端平替原版端,因此永远不推荐使用原版端。
插件端和模组端的本质都是为多人游戏增加内容。
插件端的优点是原版的 Minecraft也可以进入游戏,通常不需要用户安装任何的东西。插件通常只能运行在支持 BukkitAPI 或 SpongeAPI 的服务端下,一般无法独立运行。但也有例外,例如 MyPet 插件单独打开后是可视化宠物编辑器。插件可以拓展服务端的功能,增强游戏性,给玩家更好的游戏体验。
模组端则是对游戏内容进行彻底的修改,所以模组端往往需要客户端安装相应的模组加载器与模组才可以进入。
混合端则是可以同时安装Mod和插件。
没有安装插件的插件端和没有安装模组的模组服务端虽然原版也可以进入,但是他们往往都会对游戏内容产生修改和影响,不完全与原版一致。但Fabric除外,这是Fabric的运作方式决定的。
不是所有的服务端模组都需要客户端安装,只有需要对游戏内容产生修改的模组才需要客户端安装,例如添加方块,生物等。反过来同理:只影响渲染的客户端模组不要装到服务端上。
另外,Fabric系的服务端仅仅安装一些优化Mod,只会对游戏内容进行极其难以察觉的修改,也可以让原版的 Minecraft 进入。因此也被大量服主拿来架设生电服。
与上面提到的服务端都不同,代理端本身并不实际运行Minecraft服务端,但是代理端可以将多个Minecraft服务器进行连接。
简单来说,您可以在游戏内使用命令直接切换至另一个Minecraft服务器,这个速度甚至可以快于您从主世界到下界的速度,而且用户不需要反复输入IP。
好处也是显而易见的,一个Minecraft服务器无论其性能如何优越,都是有一个最大的承载能力,而一些超大型的Minecraft服务器可以通过代理端将玩家分配至不同的子服务器,达到负载均衡的效果。
同时,由于Minecraft是单核游戏,对多核几乎毫无优化,多个服务器可以利用到CPU的所有核心,更好的发挥服务器性能。
终于,在了解了所有的内容后,我们可以开始着手架设一个可以进入的Minecraft服务器了。
这里本教程将以 1.20.1 的Paper服务端为例进行实际的服务器搭建,请注意,服务端本身的架设完全可以在本地开展,而 Linux 我们虽然也会给出 Paper 服务端的架设方式,**但我们依然推荐您在本地架设完成后再上传到服务器进行启动。**其他的服务端请参照 Paper 进行架设,整体流程大同小异。
并且基础篇不会提到任何插件和模组的安装,仅仅做到能够进入服务器,如果您需要更高级的教程,如架设Mod服,使用代理端架设群组服,请查看进阶篇。
首先先创建一个文件夹,这个文件夹内将会存放有关服务器的一切文件,这里假定这个文件夹为server
。
推荐使用纯英文路径,其他语言可能会出现意想不到的错误。此外不要直接放在桌面,尽量放在存储空间较大的磁盘内。
先来再次检查 Java 环境是否已经可用,在文件夹内Shift+右键
,您应该会看到在终端中打开
或在此处打开 Powershell 窗口
。点击它打开 Powershell。输入命令java -version
查看 Java 版本,如果 Java 环境配置正确,它应该如下方所示。
PS D:\> java -version
openjdk version "21.0.1" 2023-10-17 LTS
OpenJDK Runtime Environment (build 21.0.1+12-LTS)
OpenJDK 64-Bit Server VM (build 21.0.1+12-LTS, mixed mode, sharing)
其中的openjdk version "21.0.1" 2023-10-17 LTS
即代表本服务器安装(并默认使用) 2023.10.17 发布的 OpenJDK 21.0.1,对于不同的 Minecraft 版本,您需要对应安装对应 Java。如果没有看到相关信息,请参照这里安装Java。
如果版本不对或是没有与上方类似的版本信息出现,请参照前文进行 Java 安装;而如果同时需要多个 Java 则需要在后续使用绝对路径指定。
然后我们需要在Paper官网下载最新的 Paper 服务端,如果需要其他版本或是其他服务端请自行寻找。如图下载即可。(由于网络因素可能会下载非常慢,请自行寻找镜像站或者使用魔法)
下载完成后,我们这里得到了一个.jar
文件,这是一个可执行的 Java 程序,将其挪入到server
文件夹下,如果您的 Java 环境配置正确。您可以选择使用 Java 打开它,如图所示。
这个时候,双击.jar
程序,它就会自动开始运行并下载 Minecraft 所需要的文件,如图所示。
但是我们不推荐使用这种方式进行启动,它不会显示服务端运行时产生的各种信息,一旦发生崩溃和错误,难以定位问题的来源。所以,下面我们将编写一个简单的批处理文件来运行服务端。
在server
文件夹下新建一个文本文档,将其重命名为<名称>.bat
,这里的<名称>
可以随意,但我们通常命名为run.bat
或start.bat
。这时,它已经变成了一个批处理文件,下面我们将来编辑他的内容,右键此文件,您可以在菜单中看到编辑,点击打开编辑界面(如果您使用的是 Windows11,这个选项被折叠了,点击查看更多选项,在二级菜单中打开他)。
不要使用记事本!使用你前面下载的编辑器。
将以下内容复制进去:
java -jar <服务端名称>.jar
指令头java
标记了这是一个 Java 程序,他会调用前文你用java -version
看到的默认 Java 执行这一命令。
-jar
表示将该参数后面指定的文件作为.jar
文件来执行。
<服务端名称>.jar
,则是要被执行的.jar
文件,你需要替换成刚才下载的 Paper 服务端的文件名,例如paper-1.20.1-108.jar
。
java -jar paper-1.20.1-108.jar
请注意,指令头java
和<服务端名称>.jar
都是可以直接使用绝对路径指向文件本身的,如果您的计算机中存在多个 Java ,您需要调用特定的 Java 版本,可以直接使用路径指向java.exe
;如果你编写的批处理文件需要指向特定路径的.jar
文件,也可以进行替换。
这里给予一个替换实例,编者的java.exe
位于C:\Program Files\Java\jdk-17.0.1\bin
文件夹下,服务端的.jar
文件位于C:\Users\wotsg\Desktop\server
文件夹下,那么替换后的结果就应如下所示。
注意, Java 路径需要加上英文半角的" "
,而服务端不需要,这样做的好处是,只要你的路径正确,你的批处理文件可以位于任何一个位置,比如桌面,方便你快速启动,您也可以指定特定版本的 Java 启动游戏。
"C:\Program Files\Java\jdk-17.0.1\bin\java.exe" -jar C:\Users\wotsg\Desktop\server\paper-1.20.1-108.jar
保存并关闭编辑窗口,这个时候,双击您的批处理文件,它就会自动开始执行服务端程序。如果所示,他已经在下载Minecraft相关的库文件了。
不过在短暂执行后,这个窗口就自动关闭了,我们需要给批处理文件添加一个参数来使得发生错误时窗口仍保留,继续打开编辑界面,换行并输入pause
:
java -jar <服务端名称>.jar
pause
然后保存并退出,重新执行批处理文件。您应该会在末尾看到这些信息。
[11:22:56 INFO]: You need to agree to the EULA in order to run the server.
Go to eula.txt for more info.
C:\Users\wotsg\Desktop\server>pause
请按任意键继续. . .
这意味着您需要同意eula(最终用户协议),运行Minecraft服务端必须遵循Minecraft最终用户协议,它对服务器收费等内容做出了一些规定,你可以在这里查看协议的具体内容。
找到服务器文件夹中的eula.txt
,将其中的 eula=false
改为 eula=true
。再次运行服务器,您会看到批处理文件中出现了各种信息,直到您看到类似如下的信息,恭喜您,你已经成功的运行了服务器!
[11:29:21 INFO]: Done (13.591s)! For help, type "help"
当然,您也可以在批处理窗口中执行命令,与批处理窗口同步出现的还有一个可视化的管理窗口,如图所示
这里显示一些服务器的基本信息,但我们往往并不需要用到他,您可以在启动命令后加入nogui
关闭他,有些人认为这样做可以使得服务器更加流畅,其实只是不显示这个可视化界面,性能影响并不大。
java -jar <服务端名称>.jar nogui
连接到服务器,如果您还不会连接请查看这里。
默认情况下,您将以root
账户登陆到Linux,并位于/root/
路径下。
我们需要先检查Java环境是否可用,输入java -version
[root@server ~]# java -version
openjdk version "21.0.1" 2023-10-17 LTS
OpenJDK Runtime Environment (build 21.0.1+12-LTS)
OpenJDK 64-Bit Server VM (build 21.0.1+12-LTS, mixed mode, sharing)
这里的java version "21.0.1" 2023-10-17 LTS
代表您的计算机中安装了 2023.10.17 日发布的 Java 21.0.1 的 LTS(长期支持 Long term support)版本,如果没有看到相关信息,请参照这里安装Java。
首先我们先使用mkdir
命令创建一个文件夹,这个文件夹将会存放我们服务器的所有文件。编者这里将其命名为server
mkdir server
然后上传文件至这个文件夹下,路径为/root/server/
,如果您还不会上传文件,请查看这里。
上传完毕后,输入cd server
进入这个文件夹,使用ls
命令查看,此时文件应该已经在server文件夹下了。
[root@server ~]# cd server[root@server server]# ls
paper-1.20.1-108.jar
这个时候,我们需要使用java
命令进行启动
java -jar <服务端名称>.jar
指令头java
标记了这是一个Java程序,他会调用Java执行这一命令,-jar
代表这是一个可执行的Java文件,而<服务端名称>.jar
,则是要被执行的.jar
文件,你需要替换成刚才下载的Paper服务端的文件名,如下所示。编者下载的文件名为paper-1.20.1-108.jar
,那么就替换成paper-1.20.1-108.jar
即可
java -jar paper-1.20.1-108.jar
请注意,指令头java
和<服务端名称>.jar
都是可以直接使用绝对路径指向文件本身的,如果您的计算机中存在多个Java,您需要调用特定的Java版本,可以直接使用路径指向java
,如果你编写的批处理文件需要指向特定路径的.jar
文件,也可以进行替换。
这里给予一个替换实例,编者的java
位于/root/JDK17/bin
文件夹下,服务端的.jar
文件位于/root/server
文件夹下,那么替换后的结果就应如下所示。
注意,Java路径需要加上英文半角的" "
,而服务端不需要,您可以通过这种方式指定Java版本。
请注意,在哪里执行此命令服务器文件就会生成在哪里,所以请务必在server文件夹中执行。
"/root/JDK17/bin/java" -jar /root/server/paper-1.20.1-108.jar
此时服务器应当启动,但服务器会启动失败并报出如下信息
Loading libraries, please wait...
[12:02:28 INFO]: Could not find existing server.properties. Creating with default values...
[12:02:29 WARN]: Failed to load eula.txt
[12:02:29 INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
这意味着您需要同意eula(最终用户协议),运行Minecraft服务端必须遵循Minecraft最终用户协议,它对服务器收费等内容做出了一些规定,你可以在这里查看协议的具体内容。
(PL:下面使用面板提供的编辑器或者nano都是可以的。vim有不小的学习难度。)
找到服务器文件夹中的eula.txt
,输入vim eula.txt
,您将会进入到编辑界面
按i
进入编辑模式,使用方向键移动光标,将eula=false
改为 eula=true
,然后按Esc键
,输入:wq
并回车保存。
再次运行服务器,您会看到终端窗口中出现了各种信息,直到您看到类似如下的信息,恭喜您,你已经成功的运行了服务器!
[12:19:59 INFO]: Done (16.706s)! For help, type "help"
请注意,如果您关闭了终端窗口,服务器也会立刻停止运行,我们需要使用screen
来使得服务器在后台运行。我们需要先安装screen
,使用如下命令。
yum install screen -y
安装完成后输入screen -R
,此时您会发现之前执行的命令都已消失,这相当于打开了一个新的窗口。
以同样的方式运行Minecraft服务端,启动完毕后按下Ctrl+A+D
,这时再关闭终端窗口,服务器仍然会继续运行,下次打开服务器只需要执行screen -R
就可以看到服务器进程了。
实际上,我们不需要在每次启动服务器的时候输入命令。我们可以把命令写进一个文件里,然后执行它。
使用touch
创建一个启动脚本.sh
文件。
touch <文件名>.sh
<文件名>
可以自由替换,我们通常命名为start
或run
。如下方所示
touch start.sh
创建完毕后,输入ls
查看,您应当可以找到start.sh
文件,使用vim start.sh
后按i
键进行编辑,将您的服务器启动命令输入其中后,按下Esc键
后输入:wq
进行保存。
之后,您可能需要执行chmod u+x start.sh
为此脚本赋予权限。然后您只需要在服务器文件夹中执行如下命令即可启动。
sh start.sh
到了这里,我们已经架设了一台最基础的Minecraft,如果您是在本地计算机架设的,处于同一网络的计算机应该已经可以使用localhost
这一服务器地址连入此服务器了,我们成功的架设了一台Minecraft服务器。
在上一节中,我们第一次启动了一个Minecraft服务器,也用到了例如nogui
这种启动参数,那么这一节我们将会介绍一些基本的启动参数。
关于服务端 .jar
文件的选项要写在命令中的-jar <服务端名称>.jar
后面。你可以在后面加上--help
查看所有可以被传递给服务端的参数。一般来说,除了nogui
,Minecraft 服务端提供的其他参数都是不需要加上的。下方列出了一些可用的参数。
- `--bonusChest`
- 在初次生成世界时,是否生成奖励箱。
- `--demo`
- 指定服务器是否在演示模式下运行(给玩家显示一个“演示版”弹出信息。且演示结束后,玩家不能破坏、放置方块或者吃东西)。
- `--eraseCache`
- 清除光照缓存等。与优化单人游戏世界时的选项相同。
- `--forceUpgrade`
- 强制升级所有区块到服务器目前的版本(单人游戏世界也可用)。
- `--help`
- 显示此帮助。
- `--initSettings`
- 只初始化`server.properties`和`eula.txt`,然后退出。
- `--nogui`
- 启动服务器时不显示图形界面。
- 你仍然可以与你的服务器交互,但如果启用,必须使用cmd或终端。
- `nogui`与此选项作用相同,主要用于向后兼容非常旧的服务器版本,但更加推荐使用`--nogui`更可取,因为这与其他选项的格式匹配
- `--port <整数>`
- 指定服务器监听的端口,而无论在`server.properties`中设置的是什么(默认值为-1)。
- `--safeMode`
- 加载存档时只使用原版数据包。
- `--serverId <字符串>`
- 为服务器指定一个服务器ID。
- `--singleplayer <字符串>`
- 指定服务器以离线模式运行(<字符串>需要指定一个值,但此值的具体用途未知,可能是由Mojang内部所使用的)。
- `--universe <字符串>`
- 指定查找world文件夹的位置(默认为`.`,即当前目录)。
- `--world <字符串>`
- 指定一个`level.dat`所在文件夹的名称。
好的 Java 参数能够显著地提高服务器的性能,同时降低服务器的占用。在基础篇中我们只介绍两个参数,他们应当被添加在-jar
之前:
-Xms<内存数>
-Xmx<内存数>
强烈建议将Xms与Xmx设置成一样的数值,这样能大幅度提高服务端的性能,同时也方便管理。具体的的解释可以去看这篇文章。
如您需要分配8G内存给Minecraft服务端进行使用,命令如下:
java -Xms8G -Xmx8G -jar server.jar
在进阶篇有一些对服务端对 JVM 参数更深入的应用,如果你有兴趣可以去进阶篇学习。
在您第一次启动服务器之后,理论上就会生成大量的文件夹和文件,我们将挨个介绍其作用和内容。
banned-ips.json
json
格式的文件,在服务器中使用/banip
命令可以封禁来自某个IP的所有玩家,信息就会被记录在这个文件中。banned-players.json
banned-ips.json
大致相同,这是一个json
格式的文件,在服务器中使用/ban
命令可以封禁某个玩家id
,信息就会被记录在这个文件中。bukkit.yml
/cache
commands.yml
gm
代替gamemode
,通常是用不到的。/config
paper-global.yml
和paper-world-defaults.yml
,在较低版本中则为paper.yml
位于服务器主文件夹下,我们将会将配置放在本篇文章的最后。大部分Mod的配置文件也存放在这里。eula.txt
help.yml
help
所使用的信息,可以自由配置,但我们推荐您使用其它插件去代替,仅在纯原版官方服务端中使用此文件。/libraries
/logs
ops.json
json
文件。<server>.jar
permissions.yml
/plugins
spigot.yml
start.sh/start.bat
version_history.json
/versions
jar
程序,供服务端使用。whitelist.json
whitelist add <id>
将玩家添加至白名单中,信息就会被保存在这个文件中。world/world_nether/world_the_end
需要单独强调的是 server.properties
,这个文件直接存放了服务器的所有配置,您可以使用任意文本编辑器打开它。
由于这个文件经常变化,你应该在wiki上查看每个选项的具体含义。请务必对这些选项及其含义足够熟悉。
以上提到的所有文件也可以直接更改,但更改前请关闭服务器,同时要保证格式正确,否则服务器会报错。
在阅读了上面的所有内容之后,我们已经拥有了一个可以在本地访问的服务器,那么这一节我们就需要将服务器对公网开放,使得互联网上的所有玩家都可以访问你的服务器。
注意,在本节中我们默认你的服务器可以被公网直接访问,如果没有公网ip,您可以使用frp或者端口映射的方式使得公网用户可以访问,但基础篇不做讨论和教学,您可以在进阶篇中查询相关内容。
首先,我们先来看看之前连接服务器中所使用的案例。
【连接地址】
ex.example.com:23333
=========================
【系统信息】
系统:WindowsServer 2012R2
用户名:Administrator
密码:Example
=========================
【游戏连接地址】
ex.example.com:端口
开放端口:23333-23343(对等端口)
=========================
现在我们要使用的就是第三部分,游戏连接地址。
除了一些大型的云服务器厂商外,大部分厂商并不会给您一个专用的独立公网ip
,而是一个或者一段端口,当然有些商家也允许在后台自由放行端口和添加端口。
您首先需要注意端口是否内外对等,如案例所示,服务器为对等端口,那么您只需要将server.properties
中的server-port
改为23333-23343
中的某一个,如23333
。重启服务器,此时您就可以通过<域名/IP>:<端口>
的形式连接至服务器了。此时应为ex.example.com:23333
。
如果端口不对等,那么您只需要将server.properties
中的server-port
改为商家给出的内网端口,使用外网端口连接即可,如内网端口25565
,外网端口23333
,那么server-port
应填25565
,并使用ex.example.com:23333
进行连接。
如果您使用的是具有独立公网IP的服务器,那么您可以任选未被占用的端口进行服务器架设,但是您可能需要自行放行防火墙或者安全组。
Windows放行防火墙十分简单,按下Windows键,搜索找到如下所示的选项即可。
随后,点击左侧列表的高级设置——在弹出的窗口左侧选择入站规则——新建规则:
按照提示,选择端口——(TCP)并填写您希望放行的端口(如:23333),然后按照提示完成配置即可。
Linux放行防火墙的方法十分简单。
添加端口,Java版需要TCP,基岩版需要UDP协议:
firewall-cmd --zone=public --add-port=<端口号>/<协议> --permanent
关闭端口:
firewall-cmd --zone=public --remove-port=<端口号>/<协议> --permanent
注意,如果大部分服务商除了主机之外往往还需要在服务商后台放行安全组/防火墙。
此外如果您使用了宝塔面板等应用也需要在面板放行安全组。
基础篇花费了大概25000字的内容从零讲解了服务器的架设。
但本篇教程仍有大量未提到的技术细节和内容,如果您需要更深入的学习请阅读进阶篇,我们也会持续更新大量的文档供大家参考。
另外,编者水平有限,如有纰漏,请予斧正。
本篇编者为:JianMoOvO 扣扣号:1214300025
如果您有任何问题,无论是发现了文章的错误还是架设服务器遇到了问题,都可以随时联系我,也可以在MUA的大群中进行提问,我们会尽力解决您的问题。
在编写的过程中也感谢复旦的PL同学,燕大的顾梵同学和西交的岱岱同学提供的帮助。
本篇参考资料:
1、Minecraft Wiki:https://zh.minecraft.wiki
2、MCBBS 零基础开服指南 - MinecraftServerHostGuide:https://www.mcbbs.net/thread-980386-1-1.html
3、燕山大学Minecraft社文档:https://www.ysumc.club/