基于Ubuntu+systemctl+mcrcon+frp的Minecraft forge(fabric) mod服服务端无界面搭建

说明

我将以1.20.1 forge服务端为例进行教程,Ubuntu版本为24.04桌面版(选用Linux操作系统主要是因为系统内存占用低,可以节省宝贵的内存)

mod服的话最好电脑的内存配置能达到16G及以上,因为mod服所占用的内存开销很大。以280+的大型mod服为例(异界战斗幻想),服务器在加载时最高内存占用能达到12G,在服务器无人时运行占用能达到4G,当服务器存在3名玩家时内存占用能达到13G。而Ubuntu系统运行本身就需要大概2G的运行内存,所以说16G的电脑内存是搭建大型mod的私人服务器最起码的要求。

如果能按照本教程开服的话可以有一些好处,服务器可以全天运行的同时无需全天远程终端挂载,可以借助mcrcon随时进入服务器后台进行服务器命令操作,也可以随时通过ssh随时对系统进行操作。个人电脑可以保持在关闭屏幕却不休眠的情况下一直运行。

除了ZeroTier的安装是在Linux服务器上直接进行的,接下来的命令都是在ssh上完成的

Linux-Ubuntu24.04 TLS

JAVA的安装和切换

根据服务端的需求选择对应的Java版本,比如zulu17、zulu21、Java8等。由于服务端是1.20.1,所以我们需要的Java版本为zulu21。

安装方法如下:

# 在终端中输入以下命令
# 
sudo apt-get update
# 
sudo apt install gnupg ca-certificates curl
#
curl -s https://repos.azul.com/azul-repo.key | sudo gpg --dearmor -o /usr/share/keyrings/azul.gpg
#
echo "deb [signed-by=/usr/share/keyrings/azul.gpg] https://repos.azul.com/zulu/deb stable main" | sudo tee /etc/apt/sources.list.d/zulu.list
# 
sudo apt-get update
# 安装zulu21
sudo apt install zulu21-jdk

检查安装是否成功

# 
java -version
# 显示以下结果表面安装成功
openjdk version "21.0.4" 2024-07-16 LTS
OpenJDK Runtime Environment Zulu21.36+17-CA (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Zulu21.36+17-CA (build 21.0.4+7-LTS, mixed mode, sharing)

具体zulu的Java安装参考azul官网

https://docs.azul.com/core/install/debian#:~:text=This%20section%20explains%20how%20to%20install%20Azul%20Zulu

Java的原生版本可以按照下面的命令按照

# 没有wget命令可以先安装
sudo apt-get install wget
#
sudo wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.deb
sudo apt install ./jdk-21_linux-x64_bin.deb
# 参考网站
https://computingforgeeks.com/install-java-jdk-21-openjdk-21-on-ubuntu/

补充说明,若安装多个Java版本可以通过以下命令进行全局切换

sudo update-alternatives --config java
# 大概会显示下面内容,可以根据需求进行切换
#有 3 个候选项可用于替换 java (提供 /usr/bin/java)。
#
#  选择       路径                                       优先级  状态
#------------------------------------------------------------
#  0            /usr/lib/jvm/zulu21/bin/java                  2213601   自动模式
#  1            /usr/lib/jvm/java-21-openjdk-amd64/bin/java   2111      手动模式
#  2            /usr/lib/jvm/zulu17/bin/java                  2175201   手动模式
#* 3            /usr/lib/jvm/zulu21/bin/java                  2213601   手动模式

SSH的安装

ssh是我们远程无桌面管理服务器和MC服务器的基础,可以让我们能够通过远程桌面的命令行终端对服务器进行管理。他要配置好开启自启动服务。

安装

# 
sudo apt-get update
# 
sudo apt install openssh-server

在安装后ssh会默认启动服务,我们要查看其是否正常运行

sudo systemctl status ssh
# 看到以下内容说明正常
#● ssh.service - OpenBSD Secure Shell server
#     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
#     Active: active (running) since Sat 2024-08-31 11:30:17 CST; 4 days ago
#       Docs: man:sshd(8)
#             man:sshd_config(5)
#   Main PID: 1074 (sshd)
#      Tasks: 1 (limit: 18392)
#     Memory: 10.2M
#        CPU: 3.616s
#     CGroup: /system.slice/ssh.service
#             └─1074 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

开机自启动

# 开机自启
sudo systemctl enable ssh
# 以下内容说明成功
Synchronizing state of ssh.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable ssh

打开防火墙

# 允许通过防火墙
sudo ufw allow ssh
# 以下内容说明成功
# 防火墙规则已更新
# 规则已更新(v6)

FRP的安装和使用

ZeroTier作为内网穿透工具,它可以免费的提供虚拟的局域网且不限流量,但是由于它需要相互连接的终端都在这个网段里,所以它不适合作为MC服务器的端口映射的所需公网,反而适合作为服务器后台管理的远程端口所需要的内网穿透工具。当然如果服务器搭建在自己家的话不需要远程操作,你可以直接在本地局域网里进行ssh,就不需要ZeroTier了。

樱花猫作为另一款内网穿透工具,它可以免费的提供公网IP,可以将MC服务器的端口映射到公网上,但是在免费的基础上它的流量和带宽有一定的限制,需要花钱才能有更好的服务。当然如果你家用宽带能申请到公网IP就可以跳过樱花猫了,设置路由器或者光猫就行了。

我们对于服务器的管理会用到以下接口,这些接口不能被占用:

25565 这个接口默认用作MC服务器的端口

25575 这个接口默认用作MC服务器后台管理的接口

22 这个接口默认用作ssh远程连接服务器主机的接口

ZeroTier的安装和使用

安装

# 
sudo apt-get update
# 
sudo curl -s https://install.zerotier.com
#
curl -s https://install.zerotier.com | sudo bash
# 
sudo zerotier-cli join network ID

具体账号申请,申请局域网,加入网络等方法参考网上

在成功加入网络后和让远端主机也加入网络后通过下面的命令进入ssh操作页面

#
ssh user@ip
# 连接成功后会让你输入密码
樱花猫

首先在樱花猫注册账号后,根据樱花猫的引导创建好隧道,并记录好用户密钥

在ubuntu的服务器上下载樱花猫frpc就行了,以下是下载命令

这个可以先跳过等MC服务器搭建好并启用运行后再搭建樱花猫穿透

# 创建好存放frp的文件夹
sudo mkdir frp
cd ./frp
# 在文件夹里下载frpc服务端
sudo wget https://nya.globalslb.net/natfrp/client/frpc/0.51.0-sakura-8/frpc_linux_amd64

下载好后在文件夹里创建frpc.ini,并写入内容

# 创建ini文件
sudo nano frpc.ini
# 写入以下内容
[common]
user = 7twhatmmiicd6gt4kgfls74bb0s1123d     # 用户密钥
​
sakura_mode = true
login_fail_exit = false
​
server_addr = frp-bar.top
server_port = 7000
​
[minecraft]
# id = 17446680
type = tcp
local_ip = 127.0.0.1
local_port = 25565                          # 本地MC服务器的端口
remote_port = 61488                         # 在樱花猫创建隧道后将隧道的端口写在这里

frcp.ini写好后保存并通过以下命令启动

./frpc_linux_amd64 -c frpc.ini
# 运行成功后会显示以下内容
# 2024/09/04 13:26:41 [I] frpc version: 0.51.0-sakura-8 (built: 2024-08-14 13:11)
# 2024/09/04 13:26:41 [I] 检查更新中...
# 2024/09/04 13:26:41 [I] 正在连接节点 [frp-bar.top, tcp]
# 2024/09/04 13:26:41 [I] [34/1029433/77b7] 连接节点成功, 运行 ID [1029433-77b75495]
# 2024/09/04 13:26:41 [I] [34/1029433/77b7] 隧道启动中: [minecraft1, tcp -> 127.0.0.1:25565]
# 2024/09/04 13:26:41 [I] [34/1029433/77b7] 限速已更新: 10 Mibit/s
# 2024/09/04 13:26:41 [I] [34/1029433/77b7] [7tg**r6d.minecraft1] 隧道本地端口为 25565, 正在自动监测 Minecraft 局域网游戏
# TCP 隧道启动成功
# 使用 >>frp-bar.top:61488<< 连接你的隧道
# 或使用 IP 地址连接: >>114.70.156.195:61458<<
# 2024/09/04 13:26:41 [I] [34/1029433/77b7] [7tg**r6d.minecraft1] 隧道启动成功

启动成功后说明内隧道启动成功,可以通过公网访问MC服务器了,接下来我们按ctrl+c退出,准备通过系统服务来做到开机自启frp,让frp不需要终端来运行

# 切换管理员用户
su
# 退回到./根目录后进入system目录
cd ./etc/systemd/system
# 创建frpc服务
nano frpc.service
# 输入以下内容
[Unit]
Description=FRP Client Service
After=network.target
​
[Service]
Type=simple
ExecStart=/home/zxy/frp/frpc_linux_amd64 -c /home/zxy/frp/frpc.ini  # 启动之前配好的frpc,目录要是绝对路径
Restart=no  # 启动失败后是否重启,我们默认否
User=zxy    # 启动这个服务的用户,注意Linux的权限设置,保证这个用户可以有权限启动这个服务
​
[Install]
WantedBy=multi-user.target

设置完以上文件后就可以通过命令进行启动了,下面是启动的命令

# 更新service
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start frpc
# 查看服务状态
sudo systemctl start frpc
# 启动成功后会出现以下内容
#● frpc.service - FRP Client Service
#     Loaded: loaded (/etc/systemd/system/frpc.service; disabled; vendor preset: enabled)
#     Active: active (running) since Wed 2024-09-04 14:52:19 CST; 4s ago
#   Main PID: 1418522 (frpc_linux_amd6)
#      Tasks: 16 (limit: 18392)
#     Memory: 19.8M
#        CPU: 178ms
#     CGroup: /system.slice/frpc2.service
#             └─1418522 /home/zxy/frp/frpc_linux_amd64 -c /home/zxy/frp/frpc.ini

如果查看服务后发现permission denied则需要通过以下命令重置文件或者文件夹权限

# 重置权限用户和用户组
sudo chown -R username:usergroup 

如果查看服务后发现文件夹目录不存在的情况则需要重新确认ExecStart的命令目录是否正确

可以按照此流程配置多个frp服务让MC服务器实现多线地址

樱花猫官网下载的页面

https://www.natfrp.com/tunnel/download

Forge mod 服务器

首先是下载forge服务端安装程序

# 创建存放服务端的文件夹
sudo mkdir MinecraftTest
# 修改路径权限防止接下来的systemctl中出现权限问题报错
sudo chown -R username:usergroup
# 在文件夹中下载服务器核心
cd ./MinecraftTest
wget https://maven.minecraftforge.net/net/minecraftforge/forge/1.20.1-47.3.7/forge-1.20.1-47.3.7-installer.jar
# 查看是否下载
ls
# 下载成功后会出现以下内容
forge-1.20.1-47.3.7-installer.jar

其他核心去forge官网下载复制好下载链接后通过以下命令下载就行了

wget downloadlink

下载好后通过以下命令进行服务端安装

java -jar forge-1.20.1-47.3.7-installer.jar --installServer nogui
# --installerServer 指安装forge的服务端版本
# nogui 指无界面运行
# 安装成功后输入命令ls,文件夹里会有以下内容
forge-1.20.1-47.3.7-installer.jar      libraries  run.bat  user_jvm_args.txt
forge-1.20.1-47.3.7-installer.jar.log  nogui      run.sh

接下来进行服务器的初始化运行

# 运行run.sh脚本
bash ./run.sh
# 你第一次会遇到以下报错
# [15:39:15] [main/WARN] [minecraft/Eula]: Failed to load eula.txt
# [15:39:15] [main/INFO] [minecraft/Main]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
# 这是由于第一次运行会生成eula.txt文件,我们需要打开这个txt文件,将其中的false改成true
nano eula.txt
# 打开后把文件内容改成以下内容并保存
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
#Wed Sep 04 15:39:15 CST 2024
eula=true

接下来打开run.sh

nano run.sh
# 打开后会看到以下内容
#!/usr/bin/env sh
# Forge requires a configured set of both JVM and program arguments.
# Add custom JVM arguments to the user_jvm_args.txt
# Add custom program arguments {such as nogui} to this file in the next line before the "$@" or
#  pass them to this script directly
java @user_jvm_args.txt @libraries/net/minecraftforge/forge/1.20.1-47.3.7/unix_args.txt "$@"

我们要把其中的命令java @user_jvm_args.txt @libraries/net/minecraftforge/forge/1.20.1-47.3.7/unix_args.txt "$@"增加nogui,改成以下命令并保存

#!/usr/bin/env sh
# Forge requires a configured set of both JVM and program arguments.
# Add custom JVM arguments to the user_jvm_args.txt
# Add custom program arguments {such as nogui} to this file in the next line before the "$@" or
#  pass them to this script directly
java @user_jvm_args.txt @libraries/net/minecraftforge/forge/1.20.1-47.3.7/unix_args.txt nogui "$@"

重新运行run.sh,如果出现以下内容说明服务器开启并运行成功,看到Done就算成功了

[15:54:51] [Worker-Main-6/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 87%
[15:54:52] [Worker-Main-6/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 92%
[15:54:52] [Worker-Main-13/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 97%
[15:54:53] [Server thread/INFO] [minecraft/LoggerChunkProgressListener]: Time elapsed: 13639 ms
[15:54:53] [Server thread/INFO] [minecraft/DedicatedServer]: Done (16.005s)! For help, type "help"
[15:54:53] [Server thread/INFO] [ne.mi.se.pe.PermissionAPI/]: Successfully initialized permission handler forge:default_handler
>

接下来我们输入stop先终止服务器运行,再输入ls我们会看到mods文件夹,我们把mod都放在这个文件夹里就成功导入mod了,如果有对应的config文件夹也可以一并导入,导入后我们将刚刚生成的world文件夹删除。并打开目录中的user_jvm_args.txt,可以看到以下内容

# Xmx and Xms set the maximum and minimum RAM usage, respectively.
# They can take any number, followed by an M or a G.
# M means Megabyte, G means Gigabyte.
# For example, to set the maximum to 3GB: -Xmx3G
# To set the minimum to 2.5GB: -Xms2500M
​
# A good default for a modded server is 4GB.
# Uncomment the next line to set it.
# -Xmx4G

我们可以在后面追加服务器所需要的内存大小,并保存

# Xmx and Xms set the maximum and minimum RAM usage, respectively.
# They can take any number, followed by an M or a G.
# M means Megabyte, G means Gigabyte.
# For example, to set the maximum to 3GB: -Xmx3G
# To set the minimum to 2.5GB: -Xms2500M
​
# A good default for a modded server is 4GB.
# Uncomment the next line to set it.
# -Xmx4G
# -Xmx 指最大运行内存分配,可以设置为1024M,你也可以设置成1G
# -Xms 指初始化运行内存分配,可以设置为为1024M,你也可以设置成1G
-Xmx12G
-Xms4G

接下来需要对server.properties文件进行修改,并保存

# 打开server.properties文件 
nano server.properties
# 我们会看到以下内容,这些内容的修改方法我们可以在网上查询到,我们主要修改关于rcon的部分(我在要修改的地方增加了注释)
#Minecraft server properties
#Wed Sep 04 15:54:34 CST 2024
allow-flight=false
allow-nether=true
broadcast-console-to-ops=true
broadcast-rcon-to-ops=true
difficulty=easy
enable-command-block=false
enable-jmx-monitoring=false
enable-query=false
enable-rcon=true            # 将使能rcon修改为true
enable-status=true
enforce-secure-profile=true
enforce-whitelist=false
entity-broadcast-range-percentage=100
force-gamemode=false
function-permission-level=2
gamemode=survival
generate-structures=true
generator-settings={}
hardcore=false
hide-online-players=false
initial-disabled-packs=
initial-enabled-packs=vanilla
level-name=world
level-seed=
level-type=minecraft\:normal
max-chained-neighbor-updates=1000000
max-players=20
max-tick-time=60000
max-world-size=29999984
motd=A Minecraft Server
network-compression-threshold=256
online-mode=true
op-permission-level=4
player-idle-timeout=0
prevent-proxy-connections=false
pvp=true
query.port=25565
rate-limit=0
rcon.password=123456            # 输入登录rcon服务器后台的密码,否则无法正常使用rcon
rcon.port=25575                 # rcon的端口,我们保持默认的25575即可
require-resource-pack=false
resource-pack=
resource-pack-prompt=
resource-pack-sha1=
server-ip=
server-port=25565
simulation-distance=10
spawn-animals=true
spawn-monsters=true
spawn-npcs=true
spawn-protection=16
sync-chunk-writes=true
text-filtering-config=
use-native-transport=true
view-distance=10
white-list=false

接下来再次运行bash run.sh,由于加载了mod后启动时间会变长,所以需要等待,直到显示Done说明服务器运行成功了

接下来创建准备通过系统服务来做到开机自启minecraft服务端,让minecraft不需要终端来运行

# 切换管理员用户
su
# 退回到./根目录后进入system目录
cd ./etc/systemd/system
# 创建frpc服务
nano minecraft.service
# 输入以下内容
[Unit]
Description=Minecraft Server
After=network.target
​
[Service]
User=zxy
WorkingDirectory=/home/zxy/MinecraftServer  # 工作目录要准确,否则会出现不存在这个目录的情况,要用绝对路径
ExecStart=/usr/bin/java @/home/zxy/MinecraftServer/user_jvm_args.txt @/home/zxy/MinecraftServer/libraries/net/minecraftforge/forge/1.20.1-47.3.5/unix_args.txt nogui    # 这个命令启动时也要绝对路径
Restart=no  # 启动失败是否自动重启,我们选否
​
[Install]
WantedBy=multi-user.target

设置完以上文件后就可以通过命令进行启动了,下面是启动的命令

# 更新service
sudo systemctl daemon-reload
# 启动minecraft服务
sudo systemctl start minecraft
# 查看启动状态
sudo systemctl status minecraft
# 启动成功会看到以下内容
# ● minecraft.service - Minecraft Server
#      Loaded: loaded (/etc/systemd/system/minecraft.service; enabled; vendor preset: enabled)
#      Active: active (running) since Wed 2024-09-04 16:22:17 CST; 6s ago
#    Main PID: 6874 (java)
#       Tasks: 38 (limit: 18392)
#      Memory: 2.3G
#         CPU: 22.627s
#      CGroup: /system.slice/minecraft.service
#              └─6874 /usr/bin/java @/home/zxy/MinecraftServer/user_jvm_args.txt @/home/zxy/MinecraftServer/libraries/net/minecraftforge/forge/1.20.1-47.3.5/unix_args.txt nogui

如果查看服务后发现permission denied则需要通过以下命令重置文件或者文件夹权限

# 重置权限用户和用户组
sudo chown -R username:usergroup 

如果查看服务后发现文件夹目录不存在的情况则需要重新确认ExecStart的命令目录是否正确

Fabric mod 服务器

Fabric mod服的开服与Forge基本一致,它的服务端核心可以在网络上找到,只有以下两个命令不同

# 初始化的命令
Java -Xmx1024M -Xms1024m -jar fabric.1.20.1.jar nogui
# 这个运行到一半也会出现eula的报错,修改后再次运行,以下命令就能够正式生成world了
Java -Xmx12G -Xms4G -jar fabric.1.20.1.jar nogui

运行成功后退出就行了,其余的修改和forge的一致比如server.properties修改、mod的安装和世界的删除,但是fabric不会自动生成run.sh脚本则需要我们自己写run.sh,脚本内容把Java -Xmx12G -Xms4G -jar fabric.1.20.1.jar nogui输入进去就行了。至于将其设置成系统服务启动的的话也和forge版一致。出现问题也参考其解决的办法。

Mcrcon 管理MC服务端

下载Mcrcon,解压和安装

# 创建存放mcrcon的文件夹
sudo mkdir Mcrcon
# 下载Mcrcon
cd ./Mcrcon
wget https://github.com/Tiiffi/mcrcon/archive/refs/heads/master.zip
unzip master.zip
# 解压完后安装make
sudo apt-get install make
make
# 运行完后通过ls命令我们会看到以下文件在目录里
CHANGELOG.md  INSTALL.md  LICENSE  Makefile  mcrcon  mcrcon.1  mcrcon.c  README.md

接下来运行以下命令

./mcrcon -p localhost:25575 -p 123456
# 运行成功后会看到以下内容
Logged in.
Type 'Q' or press Ctrl-D / Ctrl-C to disconnect.
>

其余MC服务器管理指令可以在网上查询到,这里不做赘述

补充

如果你是笔记本作为服务器在笔记本合屏后ubuntu系统自动挂起的话可以通过安装gnome-tweak在优化里进行设置。

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值