说明
我将以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在优化里进行设置。