# 前言

昨天看到了阿里云的经济型 e 服务器,感觉性价比挺不错的,因此尝试用来搭一台 MineCraft 服务器玩玩,这样用 Curtain 之类的模组挂机很方便。


# VPS 基本配置信息

阿里云经济型 e 服务器购买地址:云服务器 ECS e 实例 - 阿里云 (aliyun.com)

CPU: 2vCPU

RAM: 8GB

SSD: 20GB

Bandwidth: 5Mbps

OS: Debian 12.2 x64


# MineCraft 配置信息

Version: 1.18.2 Java Edition

Mod API: Forge 40.2.10

JDK:OpenJDK 17


# 搭建使用工具

XShell Community + XFTP Community 免费下载地址:XSHELL - The Industry's Most Powerful SSH Client (netsarang.com)

当然其他工具包应该也是完全可以的,MobaXterm 之类的,不过如果只用 PuTTY 之类的简单工具可能在模组传输过程中有点麻烦,这方面个人没研究过。

或许可以试试 FTP 之类的工具,实在不行就用 curl 或者 wget 慢慢下(?)


# 搭建过程

# 安装 OpenJDK

首先通过密钥对或用户名 + 密码的方式,使用 XShell 登录远程服务器。

首先是例行更新一下

apt-get update -y
apt-get upgrade -y

这里以我决定搭建的 MineCraft 1.18.2 JE 为例,它需要 Java 16+,那么我安装 Java 17。

(PS:Java 版本通常而言越高越好,但这并非绝对,例如 1.12.2 及以下的一些版本就只能通过 Java 8 运行,这里需要根据自己的需求来修改)

apt install openjdk-17-jdk

# Forge 服务端部署

# 获取 Forge 下载链接

打开 Forge 的官方网站 Downloads for Minecraft Forge,找到自己对应游戏版本的 Forge。

这里以 1.18.2 Forge 40.2.10 为例:

右键 Installer,点击复制链接,复制到剪贴板,此时你会得到这样的一条链接:

https://adfoc.us/serve/sitelinks/?id=271228&url=https://maven.minecraftforge.net/net/minecraftforge/forge/1.18.2-40.2.10/forge-1.18.2-40.2.10-installer.jar

此时,你需要把第二个 "https://" 之前的部分去掉,得到这样的一条链接:

https://maven.minecraftforge.net/net/minecraftforge/forge/1.18.2-40.2.10/forge-1.18.2-40.2.10-installer.jar

这就是需要用到的链接

# 安装 Forge 服务端

此时需要写一条下载 Forge 的命令,注意,这条命令根据自己刚才得到的链接来修改:

wget -O installer.jar https://maven.minecraftforge.net/net/minecraftforge/forge/1.18.2-40.2.10/forge-1.18.2-40.2.10-installer.jar

在服务端根目录下创建一个 MineCraft Forge 自己的文件夹吧,这样方便管理,不容易混淆。

当然,你完全可以自己修改到一个想要安装的位置:

cd /
mkdir Forge
cd /Forge

下载完成之后,就可以用 Java 运行 Forge 安装包来安装 MineCraft Forge 服务端了:

java -jar installer.jar --installServer

# 安装模组

新建一个 mods 文件夹,用来存放模组:

mkdir mods

此时,如果有 XFTP 这样的文件传输工具,你可以直接连接到 VPS,然后直接用 GUI 操作,把本地已经准备好的模组文件都复制到服务端的 / Forge/mods 文件夹当中就可以了。

(注意:最好查一下 MC 百科CurseForge 来确认一部分模组是否有必要在服务端安装。一些 “服务端可选” 的模组安装了也问题不大,但是一些 “服务端无效” 的模组请尽量删除(例如:Rubidium,Oculus 等),否则可能会造成服务器启动失败。)

# 首次启动

# 尝试运行服务端

Forge 1.17 + 自带了这样的一个一键脚本,可以运行 MineCraft 服务端,你只需要启用一键脚本就可以了:

/Forge/run.sh nogui

Forge 之前版本需要 Java 设置一些参数来启动,这里以 MineCraft 1.12.2 JE Forge 23.5.2859 为例,之后的启动方法同理:

java -jar -Xmx4096M -Xms2048M forge-1.12.2-14.23.5.2859.jar nogui

(PS:如果你有 Xmanager,那么可以去掉 "nogui",因为 XShell 会自动调用 Xmanager 处理 GUI 的交互部分)

# 同意用户协议

首次启动会失败,然后创建一个 eula.txt 文件,这是用户协议,我们必须同意协议才能进行游戏。

我们可以用各种文本编辑器来修改它,nano、vim 都可以。这里以最简单的 nano 为例:

nano eula.txt

此时就进入了 eula.txt 的编辑界面:

通过上下左右键可以操作光标,只要把 false 改成 true 就可以了,代表同意用户协议。

然后 Ctrl+X 退出,Y 保存修改,回车,这样就保存了更改。

# 第二次启动

# 尝试运行服务端

现在可以第二次运行 MineCraft 服务器了,这会生成一个世界,加载模组资源,并初始化所有配置文件:

/Forge/run.sh nogui

如果启动失败,那么基本上有两种原因。如果显示 killed,那么是服务器资源不足,如果显示大量的报错信息,那么基本可以确定是模组冲突。

# 资源不足
# 1.17+

可以尝试调整 user_jvm_args.txt 文件中的配置,把内存拉低一些,但是通常而言最好不要低于 1G。

# 1.17-

可以尝试调整运行参数,把运行参数降下来。因为一般而言 killed 都是内存不足导致的。

# 报错信息

阅读红色的报错日志,看看究竟是什么模组出问题了,是什么模组之间发生冲突了。

然后进入 mods 文件夹,通过 rm 指令删除对应的模组即可,有 XFTP 的可以通过图形化界面来操作,更容易。

# 退出 修改服务端配置文件

世界生成完毕后,个人的建议是先退出:

/stop

此时你可以检查一下目前的 / Forge 文件夹,发现创建了很多文件:

ls

可以尝试修改一下服务端配置文件,定制化你的游戏体验,这一部分不详细赘述:

nano server.properties

# 正式启动

# 使用 Screen 分屏功能 在后台运行 MineCraft

个人推荐使用 screen 分屏功能来简单地管理 MineCraft 服务器,这样只需要后台挂一个窗口就行,期间服务器可以做别的事情。

安装 screen:

apt install screen

使用 screen 进行分屏操作(示例,分屏名称完全可以自选):

screen -S Forge

运行 MineCraft 服务端:

/Forge/run.sh nogui

退出分屏:

Ctrl + A + D

# 管理之前的分屏

查看现有分屏:

screen -ls

恢复上一次的分屏会话:

screen -r

恢复特定的分屏会话(示例,选择你自己想要进入的那个分屏):

screen -r Forge

至此,MineCraft Forge 服务端搭建过程已经完成。

# 配置防火墙规则

# 云服务供应商控制台

个人使用的服务器为阿里云,这类云服务厂商提供单独的安全组 / 防火墙策略。需要在控制面板上找到安全组,手动添加一条 TCP 规则。

端口默认是 25565,如果你修改过 server.properties 文件,那么请根据你自己设置的端口号开放端口访问权限。

# UFW 等内置防火墙

如果你的服务器没有控制台的防火墙规则,你又不希望把所有端口全部开放,那么可以尝试使用 ufw 这样的简单防火墙工具。

首先检查一下 ufw 是否安装好了:

apt install ufw

然后开放 ufw 的几个关键端口:

(PS:请一定要确认 SSH 端口是不是默认的 22,有些云服务供应商不是的,别一个防火墙把自己的 SSH 连接给掐断了)

(PS:这里的 25565 端口也是 MineCraft 默认的服务器端口,如果改过 server.properties 文件,还是要根据自己的设置来调整)

ufw allow ssh
ufw allow 25565

启用 ufw 防火墙:

ufw enable

简单检查一下防火墙的运行状态:

ufw status

# 客户端连接 MineCraft 服务器进行游玩

# 关于模组兼容

根据个人经验,客户端模组和服务端模组是这样的关系:

如果某个模组要求客户端需装,服务端需装,那么客户端和服务端必须同时安装这个模组。(此类模组多为内容模组,例如世界生成、科技、魔法、农业等)

如果某个模组要求客户端需装,服务端可选,那么通常而言,客户端安装这个模组即可。(此类模组多为辅助模组,例如操作、面板、管理、地图、优化等)

如果某个模组要求客户端需装,服务端无效,那么最好不要在服务端安装这个模组。(此类模组多为深度优化模组,例如 Rubidium, Sodium, Oculus, Iris)

# 客户端连接方式

打开游戏,多人游戏,添加服务器。

输入备注,服务器 IP 地址、端口即可。不填端口的话就会尝试连接默认的 25565 端口。

提示模组不兼容很正常,这通常是因为客户端和服务端优化模组等差异造成的。此时不要直接放弃,一定要尝试连接一下。如果有一些模组不匹配,通常会收到一些信息,那么你可以在服务器后台或者客户端安装一些模组来补全。大多数情况下,就算模组列表不匹配,还是可以游玩的。

# 结语

至此,一台可运行的 MineCraft Forge 服务器已经搭建完成并上线运行。

个人水平有限,应该还有很多没有讲到的地方,之后如果发现了也会尝试补充完善。

本教程比较依赖 XShell / XFTP 工具包,因此操作中出现很多 “偷懒” 的地方。

希望这篇文章能对想要自建 MineCraft Forge 服务器的用户有所帮助。