Minecraft Forge服务器搭建教程:从mod加载到公网联机
2026/9/20 8:26:52 网站建设 项目流程

开头先交代一下:我最早接触服务器端,是从原版官服开始的,后来加了几个机器类mod才发现官方服务端根本带不动mod,这才转向Minecraft Forge加载器。如果你正打算开一个能加mod的服务器——不管是自己玩还是拉几个朋友联机,这篇教程就是按我实际踩坑的流程写的,照着走基本能顺下来。

这篇东西适用的人群很明确:已经跑通过原版服务端但没搞过Forge的,或者刚接触服务端、想一步到位整个mod服的。我会把Forge加载器到底是什么、为什么装完Forge之后需要专门跑一次安装程序、mod该放哪、参数怎么调、以及公网联机要处理哪些问题都讲清楚。不会只丢给你一个启动命令然后说“就这样”,尽量把每个动作背后的逻辑也说出来。

1. 开服前先想明白:Forge服务端到底是什么

1.1 官方服务端和Forge服务端的区别

很多人误以为“Forge服务器”就是多装了一个mod的普通服务器,其实不对。官方原版服务端(vanilla server)只负责原版的逻辑,它根本没有加载mod的接口。你往原版服务端目录里扔一个mod的jar文件,启动时会直接忽略,甚至崩溃。Forge加载器做的事情,是在服务端启动之前先把一个mod加载框架注入进去,这样服务端才能读取mods文件夹里的内容、解析mod之间的依赖关系、执行mod注册的事件。

打个比方,原版服务端是一台只能炒家常菜的厨房,Forge相当于给厨房加了一条中央厨房供应链,你送进来的半成品食材(mod)才能被加工成菜品。没有这条供应链,食材再多也只能堆在门口坏掉。所以Forge服务端的本质是“被修改过的服务端 + 统一的mod加载环境”,它生成的文件会比原版服务端多一个mods目录、一个libraries目录,还有一堆cache文件。

另外一个容易混淆的点是:Forge不只服务端有,客户端也有。你本地装Forge是为了让游戏能加载mod,服务器装Forge是为了让游戏世界能运行mod逻辑。两边都装了同一个mod,连接时才会校验通过,否则会出现“mod mismatch”之类的报错。这一点后面还会细讲。

1.2 选Forge还是Fabric还是Paper

现在社区里常见的加载器有Forge、NeoForge、Fabric、Quilt,插件服那边还有Paper之类的。我在1.12.2到1.20.1之间来回切过,最后大多数整合包用的是Forge。原因很简单:工业、魔法、冒险类的大型mod,绝大多数都优先适配Forge,尤其是一些经典的老牌mod,比如神秘时代、工业时代、暮色森林、匠魂,基本上只在Forge上有完整生态。Fabric那边更适合轻量化的性能和优化mod,比如钠、锂、玉这类现代mod,启动快、兼容性干净,但在大型内容mod上数量少很多。

选型的时候自己心里要有杆秤:你想玩什么mod,就去看这个mod支持哪个加载器,跟着生态走就对了。1.20.1之后社区出现了NeoForge分叉,主要是Forge开发节奏和社区治理的问题,如果你现在开新服且版本在1.20.1以上,也可以考虑NeoForge,很多新mod已经迁移过去了。至于Paper这些Bukkit插件服,它们跑的是插件体系,和Forge mod完全是两回事,不能混用,别被搞混。

2. 环境准备:Java版本、内存与系统的正确姿势

2.1 先看Java版本,版本不对一切白搭

Forge服务端是Java程序,对Java版本有硬性要求,不是随便装一个就能跑。不同Minecraft版本对应的Java版本完全不一样,这是新手开服最容易翻车的地方。

Minecraft版本要求Java版本
1.8.x ~ 1.16.5Java 8
1.17.x ~ 1.20.4Java 17
1.20.5及以上Java 21

我在1.16.5时代用的还是Java 8的服务器,后来切到1.20.1,直接用旧的Java 8启动,结果Forge安装器直接报UnsupportedClassVersionError,查了半天才发现是Java版本太老。看到这个报错先别怀疑Forge文件坏了,先去终端跑一下java -version看看版本对不对。

Windows上建议直接去官方渠道装对应版本,装的时候注意看安装路径,别把Java 8和Java 17混在一起还把PATH配乱了。如果机器上确实需要多个Java版本,可以不改PATH,而是用启动脚本里指定完整路径的方式,或者设置好JAVA_HOME环境变量,哪个版本的开服脚本就指向哪个JAVA_HOME。另外,服务端运行只需要JRE,不强制要求JDK,但装JDK也没问题,就是体积大点而已。

2.2 内存规划:不是越大越好,但也不能抠门

Minecraft服务端的内存需求主要取决于mod数量和玩家数量,我在不同整合包上的实测经验大概是这样:

  • 原版或少量mod:2GB到4GB够用
  • 中型整合包(30到80个mod):4GB起步,最好给6GB到8GB
  • 大型整合包(150个mod以上)+多人在线:10GB到16GB,甚至更高

启动参数里的-Xms-Xmx分别是最小堆内存和最大堆内存。我一般建议两个值设置成一样,这样JVM启动后一次性把内存申请到位,避免运行过程中频繁扩容和缩容,减少卡顿。比如你打算分配4GB,就写-Xms4G -Xmx4G

但要提醒一句:-Xmx给的内存只代表JVM堆内存,不是物理内存的全部。你电脑或云服务器还有操作系统本身、其他后台进程、以及mod运行时可能需要的一些native内存,这些都会额外占用物理内存。我有一台8GB内存的旧笔记本,硬塞了-Xmx6G,结果系统本身和浏览器把剩余内存吃光,服务器开始疯狂用swap,TPS直接掉到十几,体验远不如老老实实开4G舒服。所以内存规划一定要把系统的余量留出来,别把机器榨干。

2.3 系统选择:Windows还是Linux

如果你只是想本地跑个测试服,或者和室友联机,Windows完全够用,因为下载、双击、看日志都方便,开服脚本也简单。但如果你要用云服务器长期挂机,我更推荐Linux,主要是内存占用少、稳定性好、远程维护方便。我后来把云服务器从Windows切到Ubuntu之后,内存用量直接少了大约三分之一,服务器也不会因为Windows更新半夜自动重启。

Linux下适合开服的发行版我建议用Ubuntu Server LTS版本,教程多、坑少。对新手来说,第一步用Windows把流程跑通,理解了Forge服务端的工作逻辑之后,再考虑把正式服迁到Linux上。最忌讳的是一开始就在Linux上折腾,同时还要学vim、cron、systemd,精力分散,出了问题很难定位是开服问题还是系统问题。

3. 实操部署:从下载Forge到成功启动

3.1 下载Forge安装器并安装服务端

开服的第一步是拿到对应的Forge安装器。请注意,不要从随便一个网盘下载,最好去Forge官网或可靠的镜像站下载,选你服务端MC版本对应的“Recommended”版本,这个版本经过足够多人测试,稳定性和兼容性最好。

下载下来的是一个可执行的jar安装器。你用java -jar运行它(注意使用对应版本的Java),界面上有三个选项:Install client、Install server、Extract。这里选Install server,然后指定一个空目录作为安装路径。安装完成后,这个空目录里会生成一堆文件,包括libraries文件夹、versions文件夹、一个叫forge-x.x.x-x.x.x-shim之类命名的版本目录,还有server.jarrun.sh之类的启动入口。看到这个结构,说明Forge的加载环境已经注入到服务端里了。

安装完成后,我会检查一下目录里有没有eula.txtserver.properties,如果没有,就是启动还没跑起来。第一次启动服务端后会自动生成这两个文件,然后再停止,修改配置,再正式启动。很多新手直接去改不存在的server.properties,改了个寂寞。

3.2 修改服务端关键配置

Forge服务端第一次启动后,生成的server.properties就是整个服务器的核心配置。我挑几个最关键的说明一下:

配置项默认值我的建议
server-port25565除非你有多服需求,否则不用改
online-modetrue玩正版就保持true;离线服改成false
white-listfalse正式服建议改成true
motdA Minecraft Server填点个性签名,很加分
max-players20根据服务器性能和玩法调整
difficultyeasy想挑战就hard,但要确保整体装备/经济平衡

online-mode是新手最容易忽略的。它控制服务器是否向Minecraft官方会话服务器验证玩家身份。如果开的是正版服,玩家只能用正版账号登录;离线服(通常是国内局域网或内网穿透玩的朋友)必须把它改成false,否则游戏内会一直报“Invalid session”无法进入。但注意,一旦改成false,任何人都能伪装成任意玩家名进入服务器,所以务必配合白名单使用,把white-list改成true,然后把认识的朋友名字加进白名单。我在一次离线联机中就是因为没开白名单,被路人刷了一地TNT才知道这个教训。

还有一个小配置:server.properties里的enable-command-block,默认是false,如果你想在服务器里用命令方块,记得改成true。虽然很多服务器用不到,但一旦用到,这个开关没打开会很头疼。

3.3 编写启动脚本与首次启动

Forge安装完成后,目录下可能自带一个run.sh(Linux/macOS)或者run.bat(Windows),但因为每个人分配的内存和参数不一样,我建议自己写一个启动脚本。

Windows下,在服务端目录新建一个run.bat,内容类似这样:

@echo off java -Xms4G -Xmx4G -jar forge-1.20.1-47.3.0.jar nogui pause

注意,forge-1.20.1-47.3.0.jar这个文件名要换成你目录里实际的jar文件名,可以用dir命令看一下。nogui参数表示不启动图形界面,纯命令行运行,服务器环境不需要那个窗口。

Linux下,在服务端目录新建一个run.sh,内容类似这样:

#!/bin/bash java -Xms4G -Xmx4G -jar forge-1.20.1-47.3.0.jar nogui

然后运行chmod +x run.sh给执行权限。用./run.sh启动。我用screen或tmux挂服务器,这样可以关掉SSH连接而服务器不会停止。如果不想学screen,最简方式是直接nohup挂起,不过推荐用tmux,因为你能随时回到控制台看日志、输入命令。

首次启动时,服务端会生成config文件夹、world文件夹以及logs目录。你会看到一大堆“Loading Minecraft Forge”和mod加载日志,最后在控制台看到一行类似Done (12.345s)!的内容,说明服务器已经启动成功。如果启动过程中某个mod报错导致无法结束,一般会在崩溃日志目录生成crash-report,这一部分后面有专门章节讲。

3.4 添加管理员账号

服务器启动后,第一件事应该是给自己添加op权限。如果你用正版账号登录,直接在控制台输入:

op 你的游戏ID

就能把你自己设为管理员。离线服的话,进入游戏的玩家名就是客户端离线登录时的名字,控制台添加同样ID即可。不要拿着seed去单人创造测试,因为在服务器里你至少要有个op才能执行绝大部分管理命令。

另外,我习惯在服务器控制台里执行save-offsave-all来备份,但当你使用定时备份时,这俩命令需要正确处理顺序,别在服务器正在写世界的时候直接拷贝文件夹。

4. mod安装与性能优化

4.1 mod放哪里,客户端要不要装

Forge服务端的mod统一放在服务端根目录下的mods文件夹里。把mod的jar文件丢进去,重启服务器,Forge会在启动时扫描并加载。需要特别注意的是,大多数mod在客户端和服务端都要装,而且版本必须一致。只要有一侧缺mod或者版本不同,客户端连接服务器时就会报“Incompatible mods”或“Missing mods”。

有一种例外是纯服务端mod,比如优化类、管理类mod,它只在服务端运行,客户端不需要装。但安全起见,我判断一个mod是否需要两边都装的方法很简单:看mod的介绍页,它会明确写到“Client only”“Server only”或者“Both must be present”。还有整合包场景,推荐让所有玩家都使用同一个客户端整合包,否则mod版本差异会导致各种诡异问题。

4.2 服务端推荐的基础优化mod清单

我开服过程中试过很多优化mod,下面这几个是我在Forge服务端上实测过、对稳定性和性能都有帮助的,按优先级排列:

mod名称作用我的评价
FerriteCore减少内存占用亲测大整合包内存能降20%-30%,强烈推荐
ModernFix集成多个性能优化方向对1.20.1提升明显,但要留意与其他mod的兼容性
ServerCore服务端tick优化能改善其他mod对tick的重复计算问题
Spark性能分析工具排查TPS和卡顿必备,谁用谁知道

做个补充说明:FerriteCore这类内存优化mod也有特定MC和Forge版本要求,安装时注意看说明。优化mod不是越多越好,装多了反而可能相互冲突。一个稳妥的做法是:先开纯Forge空服测试TPS表现,再逐个加入优化mod,每次加完都重启观察日志有没有报错。不要一次性全塞进去,出了问题很难定位。

4.3 检查mod冲突的正确顺序

mod冲突是Forge服务器崩溃的头号原因。眼见一个mod崩溃,第一反应别是删mod,先看日志。服务端目录下的logs/latest.log会记录启动过程的完整信息,如果是崩溃,一般会有crash-reports文件夹生成,里面是一个带时间戳的txt文件,里面会写明cause by什么异常。

我看崩溃日志的习惯顺序是:先看有没有Caused by:,这是最接近根因的信息;再看有没有提示缺少某个前置mod;最后看是不是某个mod和当前加载器版本不匹配。比如老牌的JEI(Just Enough Items)在很多mod里都是前置,如果缺少它,崩溃日志通常会明确提示缺JEI或类似的前置mod。

如果日志给的信息模糊,二分法是排查mod冲突最省事的方式:把mods目录里的jar全部移动到另一个临时文件夹,只放一半进去,启动看是否正常;如果正常,说明问题出在另一半;再继续分,直到找到冲突源。整个过程很机械,但能最快缩小范围。另一个小技巧:把mods目录按功能分组(内容类、优化类、库类),之后排查起来一目了然。

5. 让朋友能连进来:局域网、公网与云服务器

5.1 局域网联机:最简单,但有很多细节坑

同一WiFi下联机的成本最低。服务器启动后,在同一个局域网内其他电脑的Minecraft客户端里,选择多人游戏添加服务器,地址填运行服务端那台电脑的内网IP,端口默认25565。

如果连不上,原因大概率是Windows防火墙拦截了Java进程。我遇到过好多次明明服务端跑得好好的,局域网其他人就是连不上,最后在防火墙里放行Java或者开放TCP 25565端口就好了。你可以在服务端电脑上执行netstat -an | findstr 25565(Windows)或ss -lntp | grep 25565(Linux)来确认端口是否处于监听状态。监听IP如果是0.0.0.0:25565,说明服务端在等待所有网卡连接;如果只监听127.0.0.1:25565,那服务器只接受本地连接,外网玩家自然连不上,需要检查启动参数或配置文件是否把server-ip写死了。

5.2 公网联机:路由器端口映射的完整步骤

想要让不在同一个WiFi的朋友也能连,最简单的思路是端口映射。流程大致是:登录你家路由器管理页(一般是192.168.1.1或192.168.0.1)→找到“端口映射”或“NAT/虚拟服务器”菜单→添加一条规则:外部端口25565到内部IP(服务器电脑的内网IP)25565,协议选TCP/UDP都行→保存并应用。

完成之后,朋友连接时使用的地址就是你家的公网IP加上端口。公网IP可以从路由器WAN口状态里看到,也可以在浏览器搜“IP查询”获取。但这里有一个现实问题:很多家庭宽带的运营商在小范围内给的是NAT后的私网IP,没有真正的公网IP,这时端口映射写了也白搭。判断方法很简单,看路由器WAN口IP是不是公网段,如果看到100.64.0.0/10这种地址,就是运营商级NAT,端口映射无法对外生效。

如果是这种情况,解决方案有两个:一是用内网穿透工具把本地25565端口映射到一个公网域名和端口上,优点是免费选项很多,缺点是稳定性受中转服务器影响,延迟会高一些;二是直接用云服务器开服,把服务器搬到有公网IP环境里,这是更省心的方向。安全提示:家庭网络做端口映射时,建议给服务器电脑单独设置固定内网IP,动态变化会导致映射失效,另外不要随意在路由器上开启DMZ主机功能,等于把所有端口都暴露出去。

5.3 云服务器开服选型和注意事项

长期稳定联机,云服务器是最省心的选择。选配置时不要只看CPU和内存,还要注意带宽和流量。最小服用2核4G可以跑,但稍微加mod和多几个玩家就开始吃紧,建议4核8G起步。带宽方面,Minecraft联机是典型的持续小包传输,上行带宽不够会导致玩家“掉线频繁”“区块加载慢”。

系统建议选Ubuntu Server LTS版本,参考前面系统选择那一节。用云服务器开服有个新手必踩的坑:安全组忘记放行端口。你的服务端明明监听25565,但云厂商的安全组规则没放行TCP 25565,外部玩家一样连不进来。记得在云控制台的安全组入方向加一条规则,端口25565,源地址任意。

另外一条安全纪律:不要用root账号直接跑服务端。创建一个普通系统用户(比如mc),把服务端目录的所有权给这个用户,然后用这个用户运行服务端。同时修改SSH默认端口或者至少设置密码强度高一些,有条件就换成密钥登录。这是我在运维浪潮里积累的习惯,云服务器暴露在公网,安全性的底线不能省。

5.4 想快速试水:面板服和容器方案

如果你只是想快速验证整合包能不能跑、要不要上云,可以先租一个月的面板服。面板服的本质是服务商在云服务器上帮你预装好了控制面板和游戏服务端环境,你只要点按钮就能开服和装mod,省去了系统运维的工作。虽然灵活性差一些,但作为入门体验非常合适。

我自己在正式接触Linux之前,就是先玩了一段时间面板服,理解了mod、白名单、定时备份这些概念之后,才敢去碰云服务器的。另一种值得关注的方式是用Docker容器跑Forge服,它有现成的镜像,通过一条docker run命令就能拉起一个隔离的服务器实例,升级和迁移都很方便。不过对新手来说,Docker又增加了一层抽象,还是先把裸机跑通再说,别一上来就追求“高大上”的部署方式。

6. 常见问题速查与排查思路

下面整理的是我在开服过程中遇到频率最高的几类问题,按“现象-原因-处理”的方式做成速查表,遇到问题可以直接对着找。

现象可能原因处理方法
Forge安装器双击没反应没安装对应版本Java,或PATH里指向Java版本不对先跑java -version确认,下载正确版本JRE/JDK
服务端启动后秒退eula.txt没改成true,或Java版本不匹配打开eula.txt改成eula=true;检查Java版本
日志出现OutOfMemoryError堆内存不足调大-Xmx,或者删减不常用的mod
玩家连不上服务器防火墙拦截、安全组未放行、端口映射错误依次检查服务端监听端口、本机防火墙、云安全组、路由器映射
客户端提示Incompatible mods客户端和服务端mod列表不一致用同一份整合包;对比两边mods文件夹清单
提示Missing mods缺少前置mod看提示中缺少哪个mod,找到对应前置装回去
游戏内TPS越来越低mod实体运算太重,或区块加载太多用Spark分析,关掉部分机器/刷怪塔,考虑加ServerCore

排查问题的思路比记住单个问题的答案更重要。我自己的固定套路是:先看logs/latest.log末尾几十行,再找crash-reports里最新的崩溃报告,根据里面DescriptionCaused by定位核心方向;如果日志里没有明确关键词,就用二分法在mods目录上做排除。整个过程不要凭感觉删文件,每一次改动都记录一下,出问题能回溯。

再补充一个习惯性的操作:每次对服务端做大改动之前,把world目录和server.properties备份好。有了备份,遇到再奇怪的问题,都可以在几分钟内还原。

7. 管理、备份与进阶扩展

7.1 日常管理与基本命令

服务器跑起来以后,日常管理不外乎权限、玩家和世界状态这几件事。我常用的命令如下:

  • op <玩家名>/deop <玩家名>:给予或收回管理员权限
  • whitelist add <玩家名>/whitelist remove <玩家名>:管理白名单
  • kick <玩家名>:踢下线
  • ban <玩家名>/ban-ip <IP>:封禁玩家或IP
  • save-off/save-all/save-on:关存档写入、强制存档、开存档写入
  • stop:正常停服

在Linux上用tmux跑服务端时,要进入控制台就用tmux attach -t mc,退出但保持后台运行按Ctrl+B再按D,这个组合键需要记熟。Windows下跑服务端,直接看控制台窗口就行,但别随手关窗口,关掉等于强制杀进程,可能导致存档损坏。

7.2 备份:比开服本身更重要

服务器玩久了,最值钱的就是那个world文件夹,里面装着所有玩家辛辛苦苦建的东西。我对备份的态度是:宁可多备份几次,不可少备份一次。

Linux下我写过一个简单的定时备份脚本,配合crontab每天凌晨4点执行:

#!/bin/bash BACKUP_DIR="/home/mc/backups" WORLD_DIR="/home/mc/server/world" DATE=$(date +%Y%m%d_%H%M%S) tar -czf "$BACKUP_DIR/world_$DATE.tar.gz" -C "$WORLD_DIR" . find "$BACKUP_DIR" -name "world_*.tar.gz" -mtime +7 -delete

脚本的思路是用tar把世界文件夹打包压缩,保留最近7天的备份,旧的自动清理。Windows下也可以用任务计划程序定时执行一个Robocopy或者用WinRAR命令行压缩,本质是一样的。备份的时候尽量在服务器相对空闲的时段操作,或者先执行save-all把进度写盘,再开始压缩,防止文件处于正在写入的中间状态。

7.3 进阶玩法扩展

当你把基础开服流程跑顺之后,会发现Forge生态还有太多可以玩的东西。比如想给服务器加经济系统,可以装支持Forge的经济类mod;想限制玩家圈地,可以找对应的地皮mod;想自定义合成配方和任务流程,可以学习CraftTweaker或KubeJS的脚本写法。

我建议进阶阶段的策略是:保持mods目录基于一个主题(工业化、魔法、探索、空岛等)来组织,不要什么热门装什么。mod装得越多,启动越慢、内存越高、冲突概率越大。每一次加新mod,分组测试,做好备份。最重要的,永远不要在正式服上直接测试新mod,先把mod丢到测试服务器跑一下,确认没有冲突再同步到正式环境。这个习惯帮我避免了很多次本可以提前发现的崩溃。

最后再分享一个小经验:开服这件事,最大的坑往往不是技术本身,而是没有养成“记录”的习惯。我自己的服务器文件夹里永远放着一个CHANGELOG.txt,每次改了配置、加了mod、升级了版本,都随手记一笔。几个月后再遇到问题回头看,这些记录比任何教程都有用。如果你现在准备开服,不妨从第一条记录开始。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询