本篇文章尽量让小白看懂,我使用Debian 12系统,其他的Linux发行版大体上是差不多的,我这里的Minecraft版本是1.20.1
首先使用apt(Ubuntu/Debian默认用的这个包管理器)安装openjdk,我这里的JDK是17版本的
1
| apt install -y openjdk-17-jdk
|
如果是CentOS系统,可以用yum安装openjdk,还要关闭SELinux
以下命令建议根据自己的需求来操作
如果你的服务器在国内的话,你得考虑科学上网了,要不然可能下载失败,假设你在IP为192.168.31.1的机器上有路由设备控制http/socks代理(并且在10809端口允许外网连接)且能够与这台设备通信,那么可以用这个命令暂时设置http代理
1 2 3
| export http_proxy="http://192.168.31.1:10809/"; export https_proxy="http://192.168.31.1:10809/"; export no_proxy="localhost, 127.0.0.1, ::1";
|

使用Fabric
我用mkdir命令在/www/wwwroot/目录新建了fabric文件夹,
然后cd命令切换到了这个文件夹,
然后使用curl命令从Fabric官网下载了服务端的jar文件,这个curl可能需要额外安装(Debian系统的话apt install -y curl
就行了,其他的依葫芦画瓢就行了)
1 2 3
| mkdir -p /www/wwwroot/fabric cd /www/wwwroot/fabric curl -o fabric.jar -LJ https://meta.fabricmc.net/v2/versions/loader/1.20.1/0.14.21/0.11.2/server/jar
|
然后我使用systemctl工具来控制程序的启动(你也可以使用service等等工具来控制),我这里偷懒使用cat命令一键写入了,你也可以使用vim,nano等等编辑器写入
注意java那里带的参数,其中-Xms指定了堆的内存初始大小,-Xmx指定了内存使用上限,需要根据实际需求更改(我这里是拿64G内存的服务器来跑了)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| cat>/usr/lib/systemd/system/fabric.service<<EOF [Unit] Description=fabric service After=network.target syslog.target Wants=network.target
[Service] Type=simple ExecStart=java -Xms1G -Xmx64G -XX:+UseG1GC -jar ./fabric.jar WorkingDirectory=/www/wwwroot/fabric/
[Install] WantedBy=multi-user.target EOF
|
启动应用:systemctl start fabric
设置自启动:systemctl enable fabric
,fabric 将在系统启动时自动启动。
如果需要重启应用,可以使用这个命令:systemctl restart fabric
如果要停止应用,可以使用这个命令:systemctl stop fabric
要查看应用的日志,可以使用这个命令:systemctl status fabric
好了,接下来就是漫长的初始化等待了
首次启动还要把eula.txt的false改成true然后重启应用(也就是同意他的协议)
到这里基本的服务器就能跑起来了,有关配置信息的详细说明可以查阅https://minecraft.fandom.com/zh/wiki/Server.properties

上面的这个

(是心奈的100昏哎)图标可以找一张64*64的png图片命名为server-icon.png上传到fabric的目录下
接下来是mod的安装
比如我需要兼容基岩版的连接,那么我需要去下载能够支持这样的插件,比如Geyser
首先,既然我是用Fabric跑起来的,那我还需要它的API插件即fabric-api,
https://www.curseforge.com/minecraft/mc-mods/fabric-api
Fabric 专用的的Geyser mod在这里下载:
https://ci.opencollab.dev/job/GeyserMC/job/Floodgate-Fabric/job/master/
下载完后将jar文件放在/www/wwwroot/fabric/mods/目录下,使用systemctl restart fabric
重启fabric服务就行了
如果需要支持非正版的玩家加入,你还需要Geyser的Floodgate插件,
https://ci.opencollab.dev/job/GeyserMC/job/Floodgate-Fabric/job/master/
下载后也是放在那里的mods目录下,有关它的详细配置说明我就不再详细赘述了,自己去Geyser的wiki看吧
如果要在基岩版聊天,你可能需要在server.properties文件里配置enforce-secure-profile=false
,
不然的话:

如果你玩生电,那我推荐你去试试投影(Litematica)mod和地毯(Carpet)mod,保证会让你爱不释手
如果你要兼容更低一点的客户端版本进入你的服务器,你还需要ViaVersion mod
到这里一个基本的使用Fabric的Minecraft服务器就搭建好了
对了,不要忘记放行端口(怎么操作看你的服务器提供商了),Minecraft Java默认的端口是tcp 25565,Minecraft 基岩版的默认端口是udp 19132
如果你想给自己一个op,你可以先使用systemctl stop fabric
将上面的服务停止,然后cd切换到/www/wwwroot/fabric/目录使用,这样的命令手动运行一下java -jar ./fabric.jar
,然后自动会进入程序的控制台,使用op 你的游戏用户名
赋予权限,完事了之后你就可以quit退出这个程序,然后继续使用systemctl来控制程序,你可以在游戏内给别的用户赋予权限
我大概的的文件夹结构(供参考)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| root@Debian-12:/www/wwwroot/fabric . -- banned-ips.json -- banned-players.json -- config -- Geyser-Fabric -- cache -- config.yml -- custom_mappings -- extensions -- locales `-- packs `-- floodgate -- config.yml `-- key.pem -- eula.txt -- fabric.jar -- libraries -- com -- github -- google `-- mojang -- commons-io `-- commons-io -- io `-- netty -- it `-- unimi -- net -- fabricmc -- java `-- sf `-- org -- apache -- joml -- ow2 `-- slf4j -- logs -- 2023-07-23-1.log.gz -- 2023-07-23-2.log.gz -- 2023-07-23-3.log.gz -- 2023-07-23-4.log.gz -- 2023-07-23-5.log.gz -- 2023-07-23-6.log.gz -- 2023-07-23-7.log.gz `-- latest.log -- mods -- Geyser-Fabric.jar -- ViaVersion-4.7.0.jar -- appleskin-fabric-mc1.20-rc1-2.4.3.jar -- fabric-api-0.85.0+1.20.1.jar -- fabric-carpet-1.20-1.4.112+v230608.jar -- fabric-language-kotlin-1.9.4+kotlin.1.8.21.jar -- floodgate-fabric.jar `-- litematica-fabric-1.20.1-0.15.0.jar -- ops.json -- server-icon.png -- server.properties -- usercache.json -- versions `-- 1.20.1 `-- server-1.20.1.jar -- whitelist.json `-- world -- DIM-1 `-- data -- DIM1 `-- data -- advancements -- 00000000-0000-0000-0009-01f644437326.json -- 02cfc44a-a7ff-4ada-94e9-23d9fee52e68.json -- 5899fcaf-2983-44f1-8339-2b3f1863e762.json -- 5bd53475-9562-375a-9dc8-a701f4a36395.json -- 7a145152-d9c8-377f-b501-0601f9c0d747.json -- c765aaae-5179-433c-875e-35cbe5a6a24a.json `-- f280f42d-690b-3272-ad36-baed97c2a96d.json -- carpet.conf -- data -- raids.dat `-- random_sequences.dat -- datapacks -- entities -- r.-1.-1.mca -- r.-1.0.mca -- r.0.-1.mca `-- r.0.0.mca -- level.dat -- level.dat_old -- playerdata -- 00000000-0000-0000-0009-01f644437326.dat -- 00000000-0000-0000-0009-01f644437326.dat_old -- 02cfc44a-a7ff-4ada-94e9-23d9fee52e68.dat -- 5899fcaf-2983-44f1-8339-2b3f1863e762.dat -- 5899fcaf-2983-44f1-8339-2b3f1863e762.dat_old -- 5bd53475-9562-375a-9dc8-a701f4a36395.dat -- 5bd53475-9562-375a-9dc8-a701f4a36395.dat_old -- 7a145152-d9c8-377f-b501-0601f9c0d747.dat -- 7a145152-d9c8-377f-b501-0601f9c0d747.dat_old -- c765aaae-5179-433c-875e-35cbe5a6a24a.dat -- c765aaae-5179-433c-875e-35cbe5a6a24a.dat_old -- f280f42d-690b-3272-ad36-baed97c2a96d.dat `-- f280f42d-690b-3272-ad36-baed97c2a96d.dat_old -- poi -- r.-1.-1.mca -- r.-1.0.mca -- r.0.-1.mca `-- r.0.0.mca -- region -- r.-1.-1.mca -- r.-1.0.mca -- r.0.-1.mca `-- r.0.0.mca -- scripts -- session.lock `-- stats -- 00000000-0000-0000-0009-01f644437326.json -- 02cfc44a-a7ff-4ada-94e9-23d9fee52e68.json -- 5899fcaf-2983-44f1-8339-2b3f1863e762.json -- 5bd53475-9562-375a-9dc8-a701f4a36395.json -- 7a145152-d9c8-377f-b501-0601f9c0d747.json -- c765aaae-5179-433c-875e-35cbe5a6a24a.json `-- f280f42d-690b-3272-ad36-baed97c2a96d.json
47 directories, 74 files
|
使用paper
一开始我是使用paper搭建的Minecraft服务器,搭建操作也和上面的大同小异,而且性能我感觉要比Fabric好很多,但是它不支持大部分Fabric的mod,所以我就换过来了,
paper默认禁用了Java原版的TNT、地毯复制,破基岩,需要手动在paper-global.yml开启:
1 2 3 4 5 6 7
| unsupported-settings: allow-grindstone-overstacking: true allow-headless-pistons: true allow-permanent-block-break-exploits: true allow-piston-duplication: true compression-format: ZLIB perform-username-validation: true
|
paper搭建也是依葫芦画瓢,我就不细说了:
vim /usr/lib/systemd/system/paper.service
1 2 3 4 5 6 7 8 9 10 11 12
| [Unit] Description=paper service After=network.target syslog.target Wants=network.target
[Service] Type=simple ExecStart=java -Xms1G -Xmx64G -XX:+UseG1GC -jar ./paper.jar WorkingDirectory=/www/wwwroot/paper/
[Install] WantedBy=multi-user.target
|
设置自启动:
systemctl enable paper
使用以上命令,paper 将在系统启动时自动启动。如果需要重启应用,可以使用以下命令:
systemctl restart paper
如果要停止应用,可以使用以下命令:
systemctl stop paper 要查看应用的日志,可以使用以下命令:
systemctl status paper
paper的插件放在plugins文件夹里,细节可以查阅paper的wiki,这里不再赘述
文件夹结构参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
| root@Debian-12:/www/wwwroot/paper . -- banned-ips.json -- banned-players.json -- bukkit.yml -- cache `-- mojang_1.20.1.jar -- commands.yml -- config -- paper-global.yml `-- paper-world-defaults.yml -- eula.txt -- help.yml -- libraries -- com -- github -- google -- googlecode -- lmax -- mojang -- mysql `-- velocitypowered -- commons-codec `-- commons-codec -- commons-io `-- commons-io -- commons-lang `-- commons-lang -- io -- leangen -- netty `-- papermc -- it `-- unimi -- javax `-- inject -- net -- fabricmc -- java -- kyori -- md-5 -- minecrell `-- sf `-- org -- apache -- checkerframework -- codehaus -- eclipse -- fusesource -- jline -- joml -- ow2 -- slf4j -- spongepowered -- xerial `-- yaml -- logs -- 2023-07-23-1.log.gz -- 2023-07-23-2.log.gz -- 2023-07-23-3.log.gz -- 2023-07-23-4.log.gz -- 2023-07-23-5.log.gz -- 2023-07-23-6.log.gz -- 2023-07-23-7.log.gz -- 2023-07-23-8.log.gz -- 2023-07-23-9.log.gz `-- latest.log -- ops.json -- paper.jar -- permissions.yml -- plugins -- Geyser-Spigot -- cache -- config.yml -- custom_mappings -- extensions -- locales `-- packs -- Geyser-Spigot.jar -- ViaVersion `-- config.yml -- ViaVersion-4.7.0.jar -- bStats `-- config.yml -- floodgate -- config.yml `-- key.pem `-- floodgate-spigot.jar -- server.properties -- spigot.yml -- usercache.json -- version_history.json -- versions `-- 1.20.1 `-- paper-1.20.1.jar -- whitelist.json -- world -- advancements -- 00000000-0000-0000-0009-01f644437326.json `-- c765aaae-5179-433c-875e-35cbe5a6a24a.json -- data -- raids.dat `-- random_sequences.dat -- datapacks `-- bukkit -- entities -- r.-1.-1.mca -- r.-1.0.mca -- r.0.-1.mca `-- r.0.0.mca -- level.dat -- level.dat_old -- paper-world.yml -- playerdata -- 00000000-0000-0000-0009-01f644437326.dat -- c765aaae-5179-433c-875e-35cbe5a6a24a.dat `-- c765aaae-5179-433c-875e-35cbe5a6a24a.dat_old -- poi -- r.-1.-1.mca -- r.-1.0.mca -- r.0.-1.mca `-- r.0.0.mca -- region -- r.-1.-1.mca -- r.-1.0.mca -- r.-2.-1.mca -- r.-2.0.mca -- r.0.-1.mca `-- r.0.0.mca -- session.lock -- stats -- 00000000-0000-0000-0009-01f644437326.json `-- c765aaae-5179-433c-875e-35cbe5a6a24a.json `-- uid.dat -- world_nether -- DIM-1 -- data -- entities `-- region -- level.dat -- level.dat_old -- paper-world.yml -- session.lock `-- uid.dat `-- world_the_end -- DIM1 -- data -- entities `-- region -- level.dat -- level.dat_old -- paper-world.yml -- session.lock `-- uid.dat
79 directories, 74 files
|
终于写完喽~