尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Minecraft服务器搭建:从Java环境到Forge模组与长期运维

发布时间:2026/9/29 14:35:30

资讯中心
01
ARTICLE

Minecraft服务器搭建:从Java环境到Forge模组与长期运维

Minecraft服务器搭建:从Java环境到Forge模组与长期运维
开服这事儿说穿了就是把一个 jar 包喂给 Java再让外面的人能连上你。但真动手的时候你会发现光是一个 Java 版本对不上就能让你对着满屏报错发半小时呆。我前后给朋友和自己搭过七八个服从原版生存到几十个模组的大包也在云服务器上折腾过一段时间踩过的坑大概能凑出一份避雷清单。这篇就把 Minecraft 服务器搭建这件事从零到能跑、再到能长期稳定运行完整捋一遍。不管你之前有没有碰过命令行只要你能照着步骤敲、能看懂一点点报错信息这篇内容就能帮你把服开起来。全程我会说清楚每一步为什么这么做而不是甩给你一串命令让你背。涉及 Minecraft、服务器的关键选择我都会给判断依据。看完之后你至少能自己判断我到底该用原版服务端还是 Forge 加载器我该买多大的云服务器我该怎么让服在崩了之后自动重启。1. 先想清楚要搭什么样的服需求拆解与方案选型很多人一上来就下载服务端结果装了原版发现朋友想玩模组装了模组又发现配置不够白折腾一轮。开服的第一步其实不是动手而是想清楚三个问题玩什么、在哪开、给谁玩。这三个问题的答案直接决定了你后面所有的技术选型。1.1 服务器类型决定你后面所有操作从玩法维度看常见的服分三类原版生存服、模组服、插件服。原版服只需要官方提供的服务端最轻、最稳、最容易维护适合三五个朋友一起打打生存、造造建筑。模组服需要 Forge 或 Fabric 这类加载器模组数量一上去内存和 CPU 的消耗是原版的几倍甚至十几倍。插件服则是 Bukkit、Spigot、Paper 这套体系服务端本身兼容原版但支持插件扩展功能比如领地保护、经济系统、传送点适合想开一个半公开小服的人。判断标准很直接如果你只是想和朋友玩原版或者加几个小模组选原版或 Fabric如果要跑整合包尤其是有几百个模组的那种就得用 Forge 加载器并且内存至少给到 8GB 以上。想开带管理功能的公开服Paper 是现在的主流选择它在 Spigot 基础上做了大量性能优化同样的机器能多带不少人。注意Paper、Spigot 这类服务端和 Forge 模组是两套体系不能混着装。想同时要模组和插件只能走 Arclight、Mohist 这类混合端但兼容性坑不少新手不建议一上来就碰。1.2 本地开服还是租云服务器这个问题的核心是别人能不能连上你。本地开服也就是在自己电脑上跑服务端优点是零成本、改配置方便缺点是电脑一关服就没了而且大多数家庭宽带没有独立公网 IP外面的人压根连不进来。租云服务器则相反机器 7×24 小时在线有独立公网 IP缺点是每个月要花钱而且配置越高越贵。我的建议是分两步走。第一阶段先在自己电脑上把服跑起来验证配置、模组、地图都没问题这一步用本地环境最省事改一次配置重启只要十几秒。第二阶段等玩法稳定了再考虑搬到云服务器上。选购的时候别一上来就买高配2 核 4G 的入门款跑原版 5 到 10 人完全够用月付成本通常在几十块钱这个量级跑模组包则建议 4 核 8G 起步具体还要看你模组包的体量。带宽也是容易被忽略的一环。云服务商的带宽通常指公网出口带宽1Mbps 大概能支撑三四个玩家流畅移动5Mbps 能撑十人左右。很多服务商提供按流量计费模式对开服这种长时间在线但流量不算特别大的场景按月带宽包更划算。1.3 版本与环境的对应关系Minecraft 的 Java 版对运行环境有硬性要求版本选错就是启动不了的报错。下面这张表是我实际验证过的对应关系照着选基本不会错Minecraft 版本服务端需要的 Java 版本备注1.12.2 及更早Java 8老整合包的重灾区必须用 81.13 - 1.16.5Java 8 或 Java 11模组生态成熟整合包最多1.17Java 16地形生成改动大性能吃紧1.18 - 1.20.4Java 17目前最稳的模组版本区间1.20.5 及以后Java 21新版本服务端普遍要求 21实操心得一台机器上同时装多个 Java 版本是很常见的做法。Windows 下装在不同目录启动脚本里用绝对路径指定javaw.exeLinux 下用update-alternatives管理或者直接在启动脚本里写死/usr/lib/jvm/java-17-openjdk/bin/java。这样你就能同时维护一个 1.12.2 的老整合包和一个 1.20 的新服。2. 开服前的准备工作Java、内存与目录环境准备这一步看着无聊但它决定了你后面是顺风顺水还是天天救火。我见过太多人跳过这一步结果服务端起来三分钟就 OOM 崩掉然后开始怀疑人生。2.1 Java 环境安装与验证Windows 上最省事的做法是去 AdoptiumEclipse Temurin或者微软的 OpenJDK 构建下载安装包装完之后把JAVA_HOME环境变量配好再把%JAVA_HOME%\bin加进Path。验证方式很简单开一个命令提示符敲java -version能打印出版本号就说明装好了。Linux 上更简单Debian 系直接apt install openjdk-17-jre-headless注意要装headless版本服务端没有图形界面需求装带界面的反而多占几十兆内存和一堆依赖。这里有个新手特别容易踩的坑java -version显示的是 1.8但你实际需要 17。原因是系统里装了多个 JavaPath里排在最前面的是老版本。解决办法是where javaWindows或which -a javaLinux看看都有哪些然后把需要的那个提前。2.2 内存该怎么分配内存分配是开服里最玄学也最有讲究的一环。核心原则是给服务端的内存不能超过物理内存的 70%。因为 JVM 除了堆内存还要占用堆外内存、线程栈、直接内存你给满 8G 堆物理内存 8G系统自己就没得用了反而更容易崩。具体给多少我按经验给个参考区间场景建议堆内存说明原版 2-5 人2G再多就是浪费原版 10 人 少量插件4GPaper 优化后很能扛50 个模组左右6G注意模组之间有兼容问题150 个模组以上整合包8G-12G大部分整合包作者会写明推荐值大型公开服16G 起通常需要专门的性能调优给内存的方式是在启动命令里加参数-Xms4G -Xmx4G这两个值建议设成一样。为什么因为设成一样可以避免 JVM 在运行过程中反复调整堆大小带来的停顿对游戏这种对卡顿敏感的应用来说稳定性比省内存重要得多。2.3 目录结构规划服务端放哪里不重要重要的是养成目录分离的习惯。我一般会这样组织minecraft-server/ ├── server.jar # 服务端本体 ├── start.bat / start.sh # 启动脚本 ├── eula.txt # 用户协议 ├── server.properties # 主配置 ├── world/ # 主世界存档 ├── world_nether/ # 下界 ├── world_the_end/ # 末地 ├── plugins/ 或 mods/ # 插件或模组 ├── logs/ # 日志 └── backups/ # 备份存档把备份目录放在服务端目录里面其实有个小风险——万一你整个目录打包迁移备份也跟着走体积会爆掉。更稳妥的做法是把备份放到另一个磁盘或者另一个目录。这一点后面讲自动备份的时候会再细说。3. 原版服务端搭建全流程实操环境准备好之后原版服的开服流程其实很短下载 jar、同意协议、改配置、启动、放行端口。我把每一步的细节都拆开说。3.1 获取服务端与同意 EULA服务端 jar 从官方启动器对应的下载页拿或者用服务端专用的下载地址。拿到之后放进你的服务端目录重命名成server.jar方便后面写脚本。第一次启动的时候服务端会生成一个eula.txt内容里有个eulafalse你必须改成eulatrue才能继续。关于这个协议说一句就够了它是对服务端使用条款的确认你自己玩或者小范围朋友玩勾选是正常流程。不勾选的话服务端会直接退出这是设计如此不是 bug。3.2 server.properties 关键项逐个说明这个文件是服务器的总开关第一次启动后会自动生成里面几十行配置真正需要动的大概十来个。我把最关键的整理成表配置项默认值建议值说明online-modetrue保持 true正版验证关掉等于谁都能冒名进服white-listfalse小服建议 true配合whitelist.json使用max-players20按实际设太大反而容易被挤爆view-distance106-8最影响性能的选项之一simulation-distance104-6怪物、红石、作物更新的范围difficultyeasy按需生存服常用 normalpvptrue按需纯建造服可以关spawn-protection160有插件时建议关掉避免冲突motd一段默认文本自定义客户端列表里显示的那行字enable-command-blockfalse按需很多地图玩法依赖它allow-flightfalse模组服开 true装了飞行模组必须开view-distance和simulation-distance这两个是最值得调的。把view-distance从 10 降到 6服务器的 CPU 和内存压力能降三分之一以上而玩家在大多数场景下几乎感觉不到差别因为远处的地形本来也是雾里看花。如果你的服经常 TPS 掉到 15 以下先动这两个参数比升级配置便宜多了。3.3 启动脚本怎么写才省事不管你用什么系统都建议把启动命令写进脚本而不是每次手敲。Windows 上建一个start.batecho off java -Xms4G -Xmx4G -XX:UseG1GC -XX:MaxGCPauseMillis200 -jar server.jar nogui pauseLinux 上建一个start.sh记得chmod x start.sh#!/bin/bash java -Xms4G -Xmx4G -XX:UseG1GC -XX:MaxGCPauseMillis200 -jar server.jar nogui脚本里加pauseWindows或者不加重启逻辑是为了让窗口不闪退你能看到报错。等调试稳定了再把脚本改成while true循环让服务端崩了自动拉起来#!/bin/bash while true do java -Xms4G -Xmx4G -XX:UseG1GC -jar server.jar nogui echo 服务端已退出5 秒后重启... sleep 5 done注意自动重启循环一定要配合日志和备份。有些崩溃是存档损坏导致的无限重启只会让损坏的地图越来越大最后连备份都救不回来。3.4 端口放行与连通性测试服务端默认监听 25565 端口。本地测试很简单客户端里加服务器地址填localhost或者127.0.0.1就能进。要让外面的朋友连进来分两种情况。云服务器上你需要在服务商的控制台里找到安全组或防火墙设置放行 TCP 25565 入方向。很多人卡在这一步服务端明明在跑日志也正常就是连不上八成是安全组没开。家里开服则需要在路由器上做端口转发把外网的 25565 映射到内网这台机器的 25565同时确认宽带运营商给的是公网 IP。测试连通性有个小技巧在自己的电脑上关掉客户端用命令行的telnet 你的IP 25565试一下能连上说明端口通了连不上就是网络层的问题跟服务端本身没关系。这个判断能帮你省下大量无谓的排查时间。4. 进阶用 Forge 加载器开一个模组服模组服是绝大多数人真正想开的东西也是坑最多的地方。核心难点不在安装而在于客户端和服务端必须一致这件事。4.1 Forge 与 Fabric 怎么选这两个是目前主流的模组加载器。Forge 历史长、整合包多、文档全缺点是启动慢、重。Fabric 轻量、启动快、更新跟得紧缺点是大型整合包相对少一些很多经典的科技、魔法类模组只有 Forge 版本。选择依据很实际你要玩的那个整合包用什么加载器你就用什么。想玩某个人气科技整合包那基本就是 Forge 了。想自己拼几个轻量模组比如优化类、小地图、物品栏整理Fabric 体验会更好。千万别为了先进去选模组生态才是决定因素。4.2 Forge 服务端的安装流程Forge 服务端不是下载一个现成的 jar 就能用它需要先跑安装器生成服务端文件。流程大概是去 Forge 官网找到对应 Minecraft 版本的安装器下载forge-版本-installer.jar。新建一个空目录把安装器放进去。执行java -jar forge-版本-installer.jar --installServer。安装器会下载依赖并生成libraries目录、run.sh/run.bat和几个配置文件。第一次执行run.sh它会生成eula.txt改成 true 后再次启动。这个过程第一次跑会比较慢因为它要下载一堆依赖库。国内网络环境下下载库文件有时候会卡住耐心等或者换个时间段再试通常就好。实操心得安装 Forge 服务端时用的 Java 版本必须和正式运行时一致。我遇到过一次用 Java 8 装的 Forge 1.18 服务端安装过程没报错但启动时报了一堆字节码版本不兼容排查了半小时才发现是装的时候用错了 JDK。4.3 模组放置与冲突排查服务端的模组放在mods目录下把客户端用的模组文件复制过去。但这里有三个必须注意的点第一只有服务端模组必须放服务端。有些模组是纯客户端的功能比如光影、性能优化、界面美化这些放到服务端不但没用还可能导致启动失败。判断方法很简单模组页面一般会标注Client、Server或Both。第二模组版本号要和 Minecraft 版本严格对应。1.20.1 的模组放到 1.20.4 的服上大概率直接崩。第三模组的配置文件是分开的。很多模组在config目录下有自己的配置文件服务端的配置和客户端的配置是两回事。比如某个模组限制某些方块的使用你在服务端配了客户端还得自己配一遍才生效。排查模组冲突有个通用方法先只放必须的核心模组能起来再一半一半地加崩了就缩小范围。日志里通常会写明是哪个模组导致的搜索模组名找对应的问题报告比盲目删模组高效得多。4.4 客户端一致性的实现方式模组服最麻烦的就是让每个玩家都能进得来。标准做法是把客户端需要的模组打个包发给每个朋友让他们用同版本的 Forge 客户端加载。更省事的做法是用整合包格式把mods、config、resourcepacks一起打包别人导入启动器就能用。需要特别注意版本对齐客户端 Forge 版本、模组版本、Minecraft 版本三者都要和服务端一致。社区里很多连接被拒绝注册表不匹配的报错本质都是版本对不上。与其一个个排查不如一开始就统一用同一份文件。5. 服务器长期运行性能调优、备份与安全服能跑起来只是开始真正让人头疼的是它跑着跑着开始卡、存档丢了、或者被乱七八糟的人连进来。这一节讲的是运维层面的事。5.1 JVM 启动参数调优默认的 JVM 参数对 Minecraft 这种大量短生命周期对象的应用并不友好很容易出现 GC 停顿造成的周期卡顿。现在主流的做法是使用 G1 垃圾回收器配合一组社区验证过的参数这套参数最早由一位叫 Aikar 的开发者整理所以常被叫做 Aikars Flags。一个 4G 堆的参考配置java -Xms4G -Xmx4G \ -XX:UseG1GC \ -XX:ParallelRefProcEnabled \ -XX:MaxGCPauseMillis200 \ -XX:UnlockExperimentalVMOptions \ -XX:DisableExplicitGC \ -XX:G1NewSizePercent30 \ -XX:G1MaxNewSizePercent40 \ -XX:G1HeapRegionSize8M \ -XX:G1ReservePercent20 \ -XX:G1HeapWastePercent5 \ -XX:G1MixedGCCountTarget4 \ -XX:InitiatingHeapOccupancyPercent15 \ -XX:G1MixedGCLiveThresholdPercent90 \ -XX:G1RSetUpdatingPauseTimePercent5 \ -XX:SurvivorRatio32 \ -XX:PerfDisableSharedMem \ -XX:MaxTenuringThreshold1 \ -jar server.jar nogui这套参数看起来吓人但核心逻辑就三条让新生代占更大比例模组服对象创建太频繁、控制单次 GC 停顿不超过 200 毫秒、减少不必要的全量回收。实测下来在同样的硬件上服里人多的时候卡顿会明显减少。如果你用的是整合包注意看整合包作者有没有提供推荐的启动参数有的话优先用他们的因为那个数字是针对具体模组集合调出来的。5.2 自动备份宁可多备不可少备存档丢失是开服玩家最痛的事故没有之一。常见原因有三个服务端崩溃时正在写存档、磁盘写满、以及误删。手动备份不现实人总会忘所以必须自动化。Linux 下最简单的方案是 crontab 定时执行一个备份脚本#!/bin/bash DATE$(date %Y%m%d_%H%M%S) BACKUP_DIR/data/mc-backups WORLD_DIR/data/minecraft-server # 先给服务端发送保存指令再打包 screen -S mc -p 0 -X stuff save-all\n sleep 10 tar -czf $BACKUP_DIR/world_$DATE.tar.gz -C $WORLD_DIR world world_nether world_the_end # 只保留最近 7 天的备份 find $BACKUP_DIR -name world_*.tar.gz -mtime 7 -delete这里有个关键细节打包前必须先让服务端save-all。直接复制正在被写入的世界文件可能得到一份损坏的存档恢复的时候反而更麻烦。如果服务端是用screen或者tmux起的会话就按上面那样发指令如果是 systemd 管理的可以用systemctl或者直接连 RCON。还有一个更稳的思路是快照式备份有条件的话用文件系统快照或者云服务商的磁盘快照功能秒级完成且不影响运行。但成本会高一些看你怎么权衡。5.3 白名单、验证与基础防护公开服最容易遇到的问题是被人恶意破坏小服也难免被扫到。基础防护有这几点开启white-list只让名单里的人进。加人用whitelist add 玩家名记得whitelist reload生效。online-mode保持 true这样玩家 ID 是经过验证的别人没法冒用名字。如果你有朋友用离线启动器要么给他开个正版要么接受整个服关掉验证的风险。定期更新服务端尤其是 Paper 这类会跟进安全修复的。老版本的服务端有些已知的漏洞会被扫描工具批量利用。不要用管理员账号跑服务端。Linux 下专门建一个普通用户跑服万一被攻击损失范围也能控制住。注意装了插件之后server.properties里的spawn-protection建议设成 0因为大部分领地类插件有自己的保护机制两者叠加会导致玩家在自己领地里也放不了方块这种玄学问题排查起来特别费时间。5.4 远程管理与日常巡检云服务器上的服日常管理基本靠 SSH 或者 Web 面板。SSH 登录之后用screen或tmux把服务端跑在后台会话里这样你断开连接服也不会停。查看状态用screen -r mc切回会话或者用tail -f logs/latest.log实时看日志。日常巡检我一般看三个东西TPS用/tps命令Paper 自带、内存占用/memory或者直接top看 Java 进程、以及磁盘剩余空间。TPS 长期低于 18 就说明该优化了内存持续接近上限说明该加内存或者排查内存泄漏磁盘剩余低于 20% 就要清理日志和备份。装个 Web 面板比如开源的 MCSManager 或者 Pterodactyl会方便很多网页上就能看控制台、改配置、管理文件、分权限。缺点是面板本身也是一层服务需要额外维护而且面板的漏洞如果被利用风险比裸跑服务端更高。小服的话SSH screen 其实完全够用。6. 常见问题排查实录这一节是我自己遇到和朋友问得最多的十几个问题整理成速查表遇到问题先对号入座。现象最可能的原因处理方式启动后立刻退出日志只有几行没同意 EULA打开eula.txt改成 true报UnsupportedClassVersionErrorJava 版本过低换成对应版本要求的 Java报Could not reserve enough space内存参数大于物理内存调小-Xmx服务端在跑但连不上端口没放行检查云服务商安全组或路由器端口转发别人能连朋友连不上他用的是离线启动器确认online-mode和客户端类型玩一会儿就卡顿view-distance太大降到 6 试试报 Mismatched mod channel客户端服务端模组不一致核对模组列表和版本存档能进但地形错乱存档损坏从备份恢复检查是否在写入时被复制后台看不到输出服务端跑在别的会话里用screen -r切回去玩家被踢出提示超时网络抖动或带宽不足查看带宽占用考虑升级命令方块不生效配置里被关了enable-command-blocktrue服务器时间不对系统时区未设置Linux 用timedatectl设置时区关于存档损坏这一条我想多说两句因为它是唯一一个不可逆的问题。判断方法进服之后如果地形出现明显的区块断裂、建筑一半悬空、或者某些区块反复重载基本就是存档受损了。这时候不要继续玩立刻停服从最近的备份恢复越晚处理损坏范围越大。有条件的可以在服务器上开一份只读快照每天固定时间点打一份恢复起来更省心。还有一类问题比较隐蔽服务端看起来一切正常日志没有报错但玩家会莫名其妙掉线。这种大概率是内存或者 CPU 打满导致的心跳超时。排查方式是开个监控记录 Java 进程的内存曲线和 CPU 使用率如果发现内存呈现锯齿状上升然后突然回落并且回落时伴随一次长时间停顿那就是 GC 参数的问题回到 5.1 节调参数。对于玩票性质的服我个人觉得不用追求 100% 的稳定性重点是把备份做扎实出问题能从备份里捞回来这就够了。真正需要长期在线的服就老老实实上监控、上自动重启、上定时快照把这些机械化的活儿交给脚本人只负责在出事的时候做决策。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。