技术教程:在Linux系统里搭建Minecraft服务器
-2:说明
这个操作我已经做了视频版放在Bilibili,如果希望跟着视频操作的话可以看这个和这个
-1:一个问题
有人可能要问:为什么不用Windows Server?Linux这东西看着就头疼
我自己的观点如下:
- 如果你在Linux领域是纯小白,我并不建议你使用Linux,Windows Server可能会是更好的选择
- Linux服务器的优点:资源占用少,比RDP流畅(用过远程桌面的都知道我这是什么意思,相对来说流畅些)
- Linux的缺点:入门门槛相对较高
- Windows Server的优点: 门槛简直不要再低一点,只要你会用Windows电脑开服那你肯定就能用Windows Server开服,全程图形化界面
- Windows Server的缺点:贵(因为这货是个商业软件,如果你买的是云服务器你可能会发现同配置Windows Server会比Linux贵出来一截,这就是许可证费用,当然某些不用付许可证费用的异类除外啊),RDP不流畅,容易被攻击(相对)
- 建议各位按需选择,拒绝盲从,从自己做起
0:准备工作
你需要:
- 一台Linux,带公网IPv4的服务器(我演示的是Ubuntu,Debian因为官方仓库里只有JDK11所以会更麻烦一些,这两种系统之外的话建议去找其他文章,至于IPv4,如果只有IPv6也不是不行,只是所有玩家都需要IPv6地址罢了)
- 一些时间
- 不怕困难敢于折腾的心
- 一个顺手的终端
- 一个传输文件的方式
- Root权限
- 礼貌地提问,并说声谢谢(如果需要的话)
1:正片
首先连接服务器(我用虚拟机和MobaXtern演示)


如果你不能直接访问Root用户,你可以先用普通用户的身份登录,然后sudo -i或者sudo su提权


我们需要OpenJRE16来运行Minecraft服务器,就像你在自己电脑上想玩Minecraft需要装Java一样
更新:Minecraft 1.18+需要OpenJRE 17
apt install openjdk-16-jre
注意:这个指令在Debian下面用不了,因为Debian的官方仓库里只有OpenJDK 11,而Minecraft 1.17服务器需要JRE16
如果你用的是Debian,需要用软件包(或压缩文件)安装JDK16后手动配置环境变量,这篇文章暂不介绍


然后我们需要传一份Minecraft服务器核心文件进去,可以用这个:

在此之前我建议创建一个专门存放服务器文件的文件夹,不然文件满天飞看着不好看找也不好找
mkdir /home/MinecraftServer cd /home/MinecraftServer

/home/MinecraftServer
回车就行


这个时候终端内直接输入下面的指令就可以开服了
java -jar minecraft_server.1.17.jar

第一次会报错,正常的,需要同意最终用户许可协议才能继续使用,用这个指令打开文件
nano eula.txt

这个文件有两个地方需要注意
将下面的设置更改为 TRUE,即表示您同意我们的 EULA(Translate By Google)
By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
几乎所有的教程都直接让你把下面的false改成true,但我没看到任何一个教程解释这是为什么,我觉得我有必要说一下

将eula=false改为eula=true是必须的,但一旦你这么做,即表示你同意EULA
虽然这个不重要,但我有必要进行说明

之后再次运行启动服务器的指令

当出现Done (*.*s)! For help, type “help”之后就完成了(*代表通配,通配任意多个任意字符)
java -jar *.jar nogui
有些教程这么写(参数可能更多,大部分是设置最大最小内存,小部分其他用途),后面nogui的作用是不要开X11转发启动上面这个窗口(会有这一段说明同样是因为很多教程只教你怎么做,不告诉你为什么),如果你服务器上X11开不起来的话就要加这个参数(选项),如果开的起来我也不建议你多弄一个窗口,原因等下会说
这个时候你可能会发现把终端(或上面这个窗口)一关服务器也会被马上关掉,这样导致的一个严重问题就是必须有一台电脑一直开着终端,服务器不关这台电脑就不能关
这好吗?这不好。所以我们需要screen软件包的帮助,使用这个指令安装
apt install screen
首先介绍一下常用指令的语法:
screen -S 名称 // 创建指定名称的后台会话 screen -ls // 显示所有会话 screen -r 名称 // 进入指定会话
创建一个会话后会自动进入
在会话内输入exit则会删除这个会话并返回主终端
在后台会话内按Ctrl+A+D可以把会话挂在后台而不退出里面的进程
所以我们只需要:
- screen -S MinecraftServer
- java -jar *.jar nogui
- Ctrl+A+D
- 关闭终端(可选)
再提醒一次!*代表通配符,通配任意多个任意字符,实际指令不能这么写!*.jar要换成自己的服务器核心名称!
这么做过后你就可以把终端关了,需要在服务器层面执行指令的时候可以用这个指令返回:
screen -r MinecraftServer
2:常见问题
0:连不上
这一个情况需要具体问题具体分析,因为可以导致连不上的可能性实在是太多了,包括但不限于:
- ufw没放行端口
- 服务器配置中的端口不是标准的25565
- ISP层面的防火墙没配置
- ISP封端口
- 开了白名单但是没把自己加进去
- 开了CDN但是没加SRV记录(这个搞得我也很头疼,因为一旦加入SRV记录源服务器IP就会被暴露,CDN白开了)
- 服务器根本就没开起来(报错包括但不限于:X11开不起来,端口无法绑定,内存不够用,没同意EULA)
2:服务器核心上哪里去搞

3:Minecraft服务器侧重于吃什么资源
我不知道,但据我的观察得出的结论是:全部。特别是处理器,内存和网络,如果玩家多硬盘消耗也很猛,可能唯一不需要的是显卡?我不知道,没试过
4:能不能不用JRE16
能但不完全能,如果服务器版本大于等于1.17的话你可以用旧版本JRE试试,保证试试就逝世(其实是会报错而已),小于1.17的话随你便
5:用OracleJDK还是OpenJDK?
随意
6:为什么不用apt install default-jre?
主要是避免争议,至于能不能用,为什么不能呢?那肯定能啊!但要注意这个包指向的是JRE11(通过apt info default-jre 可以查看),如果是1.17的服务器你大可试试,保证试试就逝世