
继上次的Ubuntu Desktop平台的Minecraft Server搭建教程已经过了很长时间过去了,在局域网基于本机搭建离线服务器确实是无正版验证的好友联机方式的一种最优解,但是该教程仍然无法解决远程连接的隧道穿越等问题,如果你的好朋友和你不在同一局域网下,这确实是一个比较大的问题。另外,一些同学的内存可能不是很大,无法同时带起一个客户端和一个服务端,故本次更新已经鸽了好久的SSH连接搭建Minecraft Server连带部分内网穿透的教程。
设备介绍
这种基于SSH连接的Server搭建需要你有一台联网的小主机,并不要求具备图形性能,考虑到搭建小型服务器的用途多半是和朋友远程开黑,不需要承担上百人的流量和压力,而且因为需要提供一台主机,价格应该尽可能控制得当。
Minecraft 服务端是一个注重单核性能的客户端,一般来说,选取一个好一点的四核处理器已经足够满足多人联机另外带一些mod,一些插件服务器甚至都能跑在树莓派4B上面。
本次的受害机型是我剩下的一个HTPC机箱搭建的服务器,机箱原本是长这个样子的:

该机原配置,就是图片里面的被我配了一块板载D2550 SoC,搭配4GB DDR3笔记本内存和128GB的杂牌Msata固态,以前被我用作NAS服务器
很显然双核的D2550对于Minecraft Server,尤其是我要带Mod运行的条件太过苛刻,所以略加改造:

因为后期需要核显的原因,我选用了i3 3240T,如果你只想用作Minecraft Server主机,购买四核的E3 1231V3是个更划算的选择。
Ubuntu Server占用的内存非常少,除非你使用大型整合包,4GB内存是一个合适的选择。Minecraft对于内存速度需求不大,但是强烈建议增添一块SSD作为系统盘。如果你的数据量不大,甚至一块16GB的傲腾M10加速也可以满足需求。我是从家里找到一块已经拆开外壳保修丢失的120GB台电极光SATA SSD,这样一套很廉价的平台就搭建完成。如果你的折腾心足够强的话,理论上X79也能做到一样的性价比,可能你的机箱要买大一点。
为了体现出教材的时效性,本次搭建使用系统Ubuntu Server 24.02LTS,JAVA21 以及NeoForge 1.20.1版本。
安装OS
搭建完硬件平台后,肯定第一时间就是安装系统了。在上一次的教程中我假设读者已经学会自己安装linux,所以这次关于BIOS选项我不再赘述,这一方面也是因为不同主板的设置不同的原因。在Ubuntu官网下载服务器版本,使用Rufus安装到U盘或者移动硬盘上,在BIOS中选取启动菜单即可安装Ubuntu Server。
这里建议的是进行完整的推荐安装,这种安装会将常用的vim,wget和curl等软件自动安装,如果你的空间有限,比如使用了16GB的傲腾M10作为系统盘,可以尝试最小安装,然后安装自己需要的软件。
另,请手动勾选安装OpenSSH服务:(除非你想每次打开服务器都要连接屏幕和键盘。)

重要的一点是,Ubuntu会尝试预装一些你可能会用到的软件,该项目是一个子菜单,如图:

(原谅我没带HDMI采集卡)
千万不要自己勾选自动安装docker,Ubuntu安装的docker不完全,在配置frpc隧道的时候会非常麻烦!
如果看不懂Ubuntu Server的bash界面和部分指令,可以先看一下上期教程熟悉一下:
在Ubuntu使用jEnv管理MC不同服务器的java需求(附加Ubuntu上MC安装教程) - 哔哩哔哩 (bilibili.com)
安装完毕,配置完主机名称和用户名和用户密码,重启之后,我们就可以拔下键盘屏幕,通过SSH进行远程连接配置了。在连接之前,尤其是Windows电脑,确保你的电脑安装了OpenSSH服务,对于Windows11 24H2来说,这一服务可以在 设置》系统》可选功能中找到,如果你没有找到,可以点击”添加可选功能“自行安装。
同时,在大多数情况下,如果你使用的是家庭网络和普通路由器,大概率你目前的主机的IP地址是DCHP自行分配的,为了访问方便,我们需要让IP固定化。在任一浏览器中访问你的路由的管理界面,一般为:192.168.1.1,不同路由厂商会有不同设置。尝试在有线连接中找到你的主机,主机名称可能和你设置的一样,记住该主机ip,并尝试将其固定化,即跟随MAC地址,不随每次开机路由的DCHP随机分配。
SSH的端口一般为22,按下Windows徽标键+R,输入powershell回车,打开命令行,我们即可通过SSH进行连接:

输入指令:
ssh 【你的服务器管理员用户名】@【服务器ip地址】 -p 【端口号】
即可进行SSH连接,第一次连接会有安全提示,这时候请打出完整的”yes“并回车。这时候该主机会提示你输入密码,同样,密码不会进行显示,输入后请按回车,您就会来到该服务器的home目录。
如果你在之前在同一服务器或同一IP地址搭建过服务器,访问过同一端口的SSH连接,因为SSH是通过密钥进行握手,当密钥不符时,会显示该图像:

这时候需要使用指令对主机储存的密钥进行一个清除:
ssh-keygen -R 【服务器IP地址】

Java install
连接到服务器后,我们才刚成功了1/4,首先最重要的事情就是安装Java,我们不需要通过wget去上官网上扒它的deb的包,直接输入Java或者随便一个Java指令,比如:
java -version
Ubuntu Server会自动检测你的代码为未识别的软件包,并为你提供恰当的软件包安装指令:

对于此次安装,我们选择Java21包,输入:
sudo apt install openjdk-21-jre-headless
即可,是不是非常简单,你连对应版本的Java的包的名字都不用记。安装完跑一遍:
java -version
即可检验安装是否成功,理论上最后的显示应该是这样的:

Server Install
接下来的步骤就是安装NeoForge。来到Neoforge官网,找到1.20.1的包,右键复制url。

右键复制其url。因为Neoforge刚刚成立,很多支持文档都没有完善建立,同理,如果安装出现一些问题,你可能需要到原Forge网站进行参考,这些网站一般会为Server install提供完整的支持,这方面做的最好的就是Spigot服务端。在SSH窗口可以直接使用复制和wget指令将包直接下载到你的当前目录。为了更好的管理,我建议新建一个文件夹,将该文件下载到文件夹中,最好建立在用户home文件夹中,这样很方便查找。使用mkdir指令新建文件夹,这里的示例我将该服务器命名为:alphaserver
mkdir alphaserver
使用ls指令查看当前目录的文件,使用cd指令转到指定文件夹:
ls
cd /alphaserver
在实际输入时,不必进行完整输入,只需要输入当前文件夹中文件名不重复的部分,按Tab键即可自动补全,很多指令就是这个样子的。比如cd指令,你可以只输入一个”a“,然后按Tab键,Tab会自动补全”/alphaserver“。进入目录后,使用wget或者curl指令将文件下载到目录,这里使用的是wget指令:
wget 【粘贴你的url,最好使用快捷键,在windows中可以直接使用Ctrl+V】

然后输入指令运行该jar文件。Forge和Neoforge的server install是最意想不到的。jar已经调整为方便在GUI画面安装,为了不使用GUI画面,在Spigot就很人性化的添加-nogui参数就可以,Neoforge和Forge非要把这种选项的东西做到参数里面,连大小写输错了都不行:
java -jar forge【按Tab自动补全】 --installServer

如果一切没有问题,最终的output将会是这样的:

当然,你也可以按照他说的,放心删除该原文件和文件日志,Neoforge在国内的服务器虽然可用但是速度比较垃圾,你可能要等老一会。使用rm指令即可删除该文件:
rm forge【按Tab自动补全】
运行ls指令,你会发现目前文件夹内的结构大致是这个样子的,我没有删除该文件和日志:

按照上次教程的传统删除run.bat文件,为run.sh赋权:
chmod 777 run.sh
然后运行该脚本即可:
./run.sh
指令前的./是必须项,为了安全性,Ubuntu并不允许你直接输入文件名运行当前目录内的脚本。该脚本是Neoforge为方便启动自行创建的,这一点要比Spigot做的好,Spigot需要自己编写启动脚本。你也可以使用vim调整其内部调用内存的参数,这一点随便一查都有很多教程,这一点在后面会说明。
运行脚本后,由于我们尚未同意协议,服务器构建会暂停,此时的mod文件夹已创建成功,但是未创建world文件夹:

在同意eula之前,我们可以先把mod和服务器icon丢进去。向服务器传输文件有三种方法,一种是基于ssh的scp指令,一种是传输到exfat格式的u盘或者移动硬盘中,用mount指令挂载,然后再使用cp指令一个一个复制过来。最后一种就是直接wget curgeforge的url,这个我没用过。很显然前者的方式更简单明了,我会简单说明两种方法:
scp指令传输:在你存放mod的文件夹中右键,点击在终端中打开,你会在新的powershell窗口中自动导向到该目录,你也可以通过cd指令逐级访问。确定你安装的mod和服务器mod文件夹的详细地址,即可倒入或批量导入。
scp 【文件名1】【文件名2】 【文件名3】 【......后续用空格隔开,可以用Tab补全,但必须输入扩展名】 【管理员用户名】@【主机ip地址】:【mod文件夹目录】
比如我想将当前目录中的mod包:jei-1.20.1-forge-15.11.2.44.jar 导入服务器mod文件夹,可以在powershell中这样写:
scp jei-1.20.1-forge-15.11.2.44.jar oooiii222@192.168.3.230:/home/oooiii222/alphaserver/mods/
或者可以使用~代替home目录进行简化:
scp jei-1.20.1-forge-15.11.2.44.jar oooiii222@192.168.3.230:~/alphaserver/mods/
同样需要输入密码。传输完成后可通过ls命令进行验证,我搭建的是群峦传说服务器,理论上最后的呈现是这样的:

对于cd指令,输入后缀为..即可返回上一目录:
cd ..
另一种方式就是挂载硬盘了,这种方法只会在scp指令出错的时候采用,因为是硬件连接,会相对靠谱一些。首先你需要将你的mod jar放在exfat格式的u盘或移动硬盘中,并记住其目录。然后连接到你的主机上面。
与Desktop不同的是,UbuntuServer不会直接加载你的设备,你需要手动挂载磁盘。在挂载之前,首先要确认该磁盘在那个dev目录下,运行fdisk指令:
fdisk -l
假设该磁盘设备在/dev/sdb1上,需要通过mount指令挂载到文件夹中,虽然很多教程默认挂载在/mnt目录,为了方便,还是建议在home目录中mkdir一个文件夹,这里假设mkdir了/usbdriver目录,mount指令应该这样写:
sudo mount /dev/sdb1 ~/usbdriver
挂载成功后,理论不会输入任何信息,你即可cd入目录,进而通过cp指令将mod文件复制到mod文件夹中,cp指令的用法为:
cp 【文件名1】 【文件名2】【etc......】 【复制目录】
针对该情况,参考为:
cp jei-1.20.1-forge-15.11.2.44.jar ~/alphaserver/mods/
复制完请执行ls进行验证。
另一种就是直接cd入目录wget jar的url,我不知道直接wget curgeforge的url是否会成功,故未尝试。
原则:你应该保留mod必要的文件名和版本信息,以便进行排障和升级mod版本。服务器mod仍需要你进行手动更新,同样,你需要保证这些mod在本地启动器在同版本同版本号的jre下能正常启动,能正常兼容,在SSH中进行排障可能比你想象中的麻烦。
一些mod是可以服务端客户端选装的,一些辅助类mod比如mousetweak就没必要添加至服务器中,添加前请仔细阅读mcmod或curgeforge的介绍界面。
复制完mod后,就需要修改eula条款了,在GUI界面可以通过文档编辑器,但是在ssh,我们就要用上强大的vim了。输入指令:
vim eula.txt
即可在vim中编辑该文件,按照惯例,将其中的false改为true即可:

敲击”i“按键即可进入insert模式,使用方向键将光标移动到修改的位置,修改完毕敲击esc按键退出insert模式,输入”:wq“进行保存,一定不能遗忘这个英文冒号!保存完毕后再执行一下服务器脚本:
./run.sh
当服务器输出Done!输出后理论上你就可以在局域网多人游戏中看到该服务器,如果连接了正版账号,即可通过服务器ip+端口号进行连接。
server.properties
如果想进一步自定义,包括允许离线模式的玩家进入,则必须修改server.properties文件,使用vim修改该文件即可,下面是建议修改的服务器类别:
设置世界的游戏难度:
difficulty= (该选项可填peaceful,easy,normal,hard等,分别对应和平,简单,普通,困难等难度)
设置服务器能同时容纳的最大玩家数:
max-players= (请填整数)
启用服务器白名单(OP默认为白名单):
white-list= (请填布尔值,true或者false)
【对于对外开放ip的服务器,如果不使用第三方验证插件,白名单是必要的。应当说明的是,OP默认为白名单内,level3及以上的OP权限即可通过指令添加白名单,你也可以在服务端输入指令添加,或者通过vim直接修改白名单配置文件。】
是否启用命令方块:
enable-command-block= (请填布尔值,true或者false)
【在一些没有插件的服务器中,可以通过命令方块简单实行一些传送或者掉落物清除的指令,该选项默认为false。】
更新实体范围最大值,即模拟区块大小:
simulation-distance= (请填整数)
【该大小将影响CPU性能,该选项是玩家与周围区块交互的距离,单位是区块。默认大小为10,为进行优化,您可以将其调整为8,这是个合适的数值。该选项会覆盖客户端的模拟区块范围。】
玩家响应时间,如果不为零,相应时间达到设置的时间后会将其踢出服务器,单位为分钟:
player-idle-timeout= (请填整数,默认为0)
世界种子,留空随意:
level-seed=
在线验证:
online-mode= (请填布尔值)
【该选项开启后使用微软账号认证,使用离线账号的用户将无法加入游戏。】
渲染距离:
view-distance= (请填整数)
【该数值会对传输带宽产生影响,服务端会发送该玩家为中心的方块数据,距离单位为区块,提高该值可提升视距范围,使玩家可以渲染更远的方块。默认为10。当您的服务器仅有小于10人,可将该选项调整为16获得更佳的视距范围。具体设置请根据服务器带宽,该设置会覆盖超过该数值的客户端的设置。】
motd= (请填字符串)
【该选项是服务器的标识,即添加服务器后显示的副信息。除了直接输入英文信息,您还可以自定义各种效果,比如随机,黑体,改变颜色,斜体,划线等,您可以很方便的通过该网站自定义motd:
MOTD creator · Minecraft Server Tools (mctools.org)
另一些插件可以提供更高级的定制方式,比如提供中文支持或彩虹色变换文字等。】
注:服务器icon设置:在未添加插件的情况下,服务器的头图可以被自定义,方法是在服务器目录下放置server-icon.png图片,需要注意的是图片必须为png格式,分辨率必须为64*64。您可以很方便的通过powertoys或者gimp等进行调节。
将服务器运行到后台
SSH连接遵循的逻辑是,当你关闭SSH连接后,该窗口内运行的程序也随机关闭,为保证服务器在后台运行,您可以有两个选择:
1.手动连接键盘显示屏,运行该程序,然后关闭显示屏,很显然这不太现实。
2.选择添加一用户为level4 OP,该权限的OP可以使用stop指令关闭服务器,再使用nohup指令将服务器运行至后台。当服务器运行至后台后,程序的输出将会转移到文件中,您不用在意该文件,因为当服务器崩溃您将会有单独的报错日志。具体的指令如下:
nohup ./run.sh &
如果一切正常,输出将会转接给另一文件。
关于Spigot服务端
对于不需要运行mod的服务端来说,Spigot是一个比较好的支持原版Minecraft的选择,该服务端的安装更为简易。Spigot做了很多性能方面的优化,同时支持非常多的插件,比如非常有名的粘液科技等等。
为了规避版权,该服务端使用一个BuildTools.jar文件对服务端安装包进行编译。你需要在官网找到该文件的url,使用wget或者curl指令下载到你准备的文件夹中。
使用该指令运行该程序:
java -jar BuildTools.jar --rev 【版本号】
比如构建1.20.1的Minecraft Server,可以这样输入:
java -jar BuildTools.jar --rev 1.20.1
不使用rev参数将默认下载最新版本服务端。
在编译完成后,你即可当即删除该构建工具。不同于Forge,你需要自行编写启动脚本。使用touch指令完成创建命令,后缀名需为”.sh“,但文件名可任意,这里使用start.sh:
touch start.sh
使用vim输入以下,具体操作参考上面的操作:
#!/bin/sh
java -Xms#G -Xmx#G -XX:+UseG1GC -jar spigot.jar nogui
应该说明的是,其中的”#“标识请替换为你的服务器为服务端划分的内存大小。如果你为其划分3GB,请如下修改:
#!/bin/sh
java -Xms3G -Xmx3G -XX:+UseG1GC -jar spigot.jar nogui
最后不要忘记为其附加权限:
chmod 777 start.sh
剩下的流程请参考Neoforge部分。具体问题请参考支持文档,都有对应的解释,直接翻译一般情况都能看懂。
配置隧道穿越,frpc与docker
这里使用的服务为SakuraFrp提供的服务,该网站为免费用户提供有限流量和节点,为保证正常的流畅度,你可以考虑购买青铜会员。该网站为其提供详细的支持文档,这一点比很多其他服务商要好很多。
为保证远程配置,请在同一局域网下进行操作。
首先,我们需要在服务端安装Docker,像之前安装java一样,直接在bash中打入docker,系统会提供相应的安装包,使用apt指令进行安装,一般这一步都不会出什么问题。
(。。。懒得写了,反正是抄他们的支持文档,该看懂的照着做就行,看不懂的我抄一遍也没用。我干脆直接把网址放出来,粘贴的时候注意我插的空格,b现在不让直接添加站外url。)
ht tps://doc.natfrp.c om/ frpc/usage.html#frpc-基本使用指南
关于Minecraft Server搭建的一些建议和展望
可以说的是,Minecraft Server目前的环境只能说是糟糕,除非你的服务器是微软官方表态把ip放到基岩版中的那种,而且那种腐竹也不会看我写的这些小垃圾,在这种环境运营第三方服务器出人头地,我的建议不如给微软送钱玩一下realms,可能还靠谱一些。
我的建议如下:
——认清自己的需求和目标:我看过很多励志要开千人服的新手腐竹发愤图强买了双路e5的云服务器,真正能做下去的只能说少之又少,自建服务器最多的应用场景还是和几个现实中的朋友一起游玩,对于普通人,没有经历也没有必要运营大型的多世界插件服务器。
——低调:不要一直高调的宣传你的服务器,玩这个圈子的人心眼很小,说不准哪天你的服务器就被ddos了。
——保护你的IP地址:不要轻视服务器安全,你的小主机很容易在没有安全措施的公网环境下被轻松劫持,如果你将ssh端口穿透,请务必保护好它。
——玩游戏就图一乐:不管你有多雄心壮志,切记折腾这些东西确实很有乐趣,但是不要很盲目的把很多money都砸进去,那你还不如给我。
——尽量使用官网,不要通过帖子看世界:在任何情况下官方的支持永远是最正确的,不要轻易直接套用帖子里面无由头的参数和url,这些很可能在后期造成不可控的麻烦,真正的做法应该是总结帖子的经验进行实践,尽量明确每个参数代表的含义,现在是ai时代,哪怕把日志输给ai都能获得一些很有用的结论。
——不要极端敛财:使用高昂的VIP价格和不合理的多档用户设置的服务器是不受欢迎的。
对于Minecraft Server的未来展望:
、国内第三方服务器的环境已经不再如当年,在目前轻度娱乐的环境下,自组服务器可能为一种更划算更自主的运营方式。Minecraft Server的上行依然岁月静好,在微软的帮助下慢慢成为完善社区的大型服务器,国内第三方服务器因为没有主心骨仍然充斥着你汝我诈的互相攻击,事实上,如果把正版验证打开,能很有效的清除一部分搞破坏的人,但是谁有愿意运营收益很少的服务器呢?它已经难回巅峰,更多的是我们曾经失去的那种快乐的一种象征。
——允许转载,转载请说明出处