最近在很多 MC 社群都能看到类似的招人文案——“我们要开一个一辈子的MC服务器【我的世界MC 生存服务器 26.1.2 永久不删档】”。这种标题很有吸引力但如果你自己动手开过服就会知道“永久不删档”是最难的承诺之一。今天这篇文章不讨论口号只讨论技术一个想要长期运营的生存服务器应该怎么搭、怎么备份、怎么升级、怎么排错。我的判断是开服容易维护难。原版服务端下载下来一条 Java 命令就能跑难的是让服务器在三个月、半年、一年后仍然健在而且存档不损坏、版本能升级、玩家数据不丢。本文会从服务端选型、Linux 环境、核心配置、自动备份、systemd 托管、性能优化到常见排查完整梳理一套可以长期使用的 MC 生存服务器运维方案。这篇文章适合三类人想和几个朋友开长期服的人、接手社区服务器的管理员、想深入理解 MC 服务端运行原理的开发者。读完你能获得什么你能独立从零搭一套 Paper 服务端能配置自动备份并在存档损坏时恢复能处理最常见的启动失败和卡顿问题也能分辨哪些“开服教程”会害你丢档。1. 永久不删档难点不在开服而在长期运营先说一个真实规律绝大多数 MC 服务器死在第一个月而不是死在第一天。第一天服务器启动失败你查一查日志就能解决死在第一个月往往是没有人做备份某次断电或升级把玩了很久的存档毁了然后大家热情散去服务器自然关闭。“永久不删档”对玩家意味着“我的建筑、背包、进度永远还在”对管理员来说却是三个工程问题。第一是数据安全存档文件、玩家数据、权限记录必须持续备份而且备份必须真的能恢复。很多人把备份做成“复制一份到同磁盘”一旦磁盘损坏运行目录和备份一起消失等于没备份。第二是版本演进原版更新时你要决定升不升级升级会不会弄坏插件和旧区块这是最容易导致服务器解散的节点。第三是运行稳定服务端进程崩溃后能不能自动拉起内存泄漏时能不能及时发现玩家进入高峰期时会不会卡到无法玩。顺带说一句标题里的“26.1.2”看起来更像某个服务端发行版或整合包的自定义版本号而不是 Minecraft 原版的协议版本。真正决定服务端行为的字段是游戏版本、服务端核心和 Java 运行时版本。本文采用当前主流的 1.21.x Java 版服务端演示通用思路适用于绝大多数现代版本这一点在后面会反复提到。2. 服务端选型与核心概念开服之前先想清楚你开的是哪种服务端。Minecraft 分成 Java 版和基岩版两个生态Java 版的原版服务端叫 Vanilla Server基岩版则是 Bedrock Server。如果你和朋友们用的是 Java 版启动器就选择 Java 版服务端这也是服务器教程里最常见的方向。基岩版和 Java 版之间通常需要特殊桥接方案长期运营不建议一上来就做跨版本互通这会引入大量兼容性问题。服务端核心的选择是关键。原版服务端 Vanilla 功能最少、最贴近官方体验但性能和抗压能力弱区块加载、实体运算、红石机制都比较吃力。Paper 是目前社区最广泛使用的服务端核心之一它基于 Spigot继承了 Bukkit 插件生态同时做了大量区块生成、内存管理和红石运算优化。对一个想开长期生存服的人来说Paper 是性价比极高的默认选择。如果你要开发玩法或深度体验数据包Fabric 是另一个方向它更轻量、偏向原版 Mod 生态但插件体系和 Paper 完全不同选错生态会导致后面插件不兼容。还需要理清几个基础概念。服务端核心是一个可以独立运行的 jar 程序存档不是一个文件而是一个文件夹通常叫 world里面有区块、玩家数据、地图和进度服务端默认监听 25565 端口Java 版服务端启动时通常加 nogui 参数来关闭图形界面online-mode 决定是否启用正版验证。这些概念会在后面的实际操作中反复出现建议先记下来。3. 环境准备与版本规划长期运营的服务器不建议跑在 Windows 桌面机上除非你只有一台旧电脑而且不关显示器。更稳妥的方式是租一台云服务器或者在家里准备一台低功耗主机跑 Linux。云服务器的好处是网络稳定、安全组方便管理、宕机后厂商可以快速恢复缺点是配置稍好的机器有月租成本。对 10 人以下的生存服4 核 4G 到 4 核 8G 通常是够用的起点具体还要根据模组数量和在线人数调整不要一开始就追求大内存。操作系统推荐 Ubuntu 22.04 LTS 或 Debian 12这两类系统软件源里能很方便地安装 OpenJDK。Java 运行时版本要先确认1.21.x 时代的 Paper 服务端通常要求 Java 21确切要求以 PaperMC 项目说明为准。内存大于等于 4G 时安装 JRE 就够用不需要装完整 JDK因为服务器本身不编译 Java 源码命令行操作也只需要基础工具。磁盘规划值得单独说一句。存档是服务器的核心资产机械硬盘随机读写性能差会导致区块加载明显卡顿推荐使用 SSD。给运行目录和备份目录分配独立空间例如 /opt/mc-server 放运行目录/opt/mc-backup 放备份两者不要放在同一块物理磁盘上否则磁盘故障时会一起丢。网络方面云服务器需要在安全组中放行 25565 端口的 TCP 入方向家庭主机需要在路由器上配置端口转发并确认公网 IP 不是纯内网 IP。版本规划是一个容易被忽略的长期运营问题。不要追最新版本先让服务器的核心版本稳定运行至少几个星期。小版本升级通常风险低跨大版本升级必须先在测试环境验证再备份后执行。大多数档毁事故不是发生在平时运行而是发生在“随手点了个升级”之后。把版本升级当成一次正式变更来管理才能避免“升级一时爽回档两行泪”。4. 服务端部署与首次启动部署过程遵循最小权限原则为服务端单独创建一个系统用户避免用 root 运行 Minecraft 服务端。以下命令在 Ubuntu/Debian 系统上执行。创建用户和目录sudo useradd -m -s /bin/bash mcserver sudo mkdir -p /opt/mc-server /opt/mc-backup sudo chown -R mcserver:mcserver /opt/mc-server /opt/mc-backup安装基础依赖sudo apt update sudo apt install -y openjdk-21-jre-headless jq然后以 mcserver 用户进入目录通过 PaperMC 官方 API 获取最新的稳定构建。下面这段代码先查询最新版本再查询该版本的最新构建最后拼接下载地址并保存为 paper.jarsudo -u mcserver -H bash -c set -euo pipefail cd /opt/mc-server BASEhttps://api.papermc.io/v2/projects/paper VERSION$(curl -s $BASE | jq -r .versions[-1]) BUILD$(curl -s $BASE/versions/$VERSION/builds | jq -r .builds[-1].build) FILE$(curl -s $BASE/versions/$VERSION/builds | jq -r .builds[-1].downloads.application.name) echo Downloading Paper $VERSION build $BUILD curl -s -o paper.jar $BASE/versions/$VERSION/builds/$BUILD/downloads/$FILE ls -lh paper.jar 第一次启动不要直接交给 systemd先手动执行便于观察初始化过程cd /opt/mc-server java -Xms2G -Xmx4G -jar paper.jar nogui第一次启动会很快报错退出因为服务端要求你同意 EULA。打开 eula.txt把 eulafalse 改成 eulatrue然后再次启动cd /opt/mc-server sed -i s/eulafalse/eulatrue/ eula.txt java -Xms2G -Xmx4G -jar paper.jar nogui看到控制台输出 “Done” 说明服务端正常启动。这时可以用游戏客户端进入确认生存模式、PVP 等基础设置符合预期后在控制台输入 stop 正常关服。正常关服很重要它会让服务端保存所有数据并清理进程不要随便 kill -9否则轻则回档重则存档损坏。5. 核心配置文件详解服务端根目录下的 server.properties 是行为配置的总开关。下面是一个适合长期生存服的配置示例server-port25565 level-nameworld gamemodesurvival difficultyhard pvptrue hardcorefalse white-listtrue max-players20 view-distance8 spawn-protection16 online-modetrue逐个看关键项。gamemodesurvival 把新玩家默认设为生存模式difficultyhard 只是难度设置为困难不等于 hardcorehardcorefalse 表示玩家死亡后不会永久封禁这是长期生存服务端比较常见的组合。white-listtrue 开启白名单只允许列表中的玩家进入能挡住大量乱入者。online-modetrue 开启正版验证这个配置对长期服务器尤其重要关闭它虽然能让非正版客户端进入但会牺牲身份验证容易出现冒名顶替和 UUID 混乱。view-distance8 控制服务端向玩家发送的区块距离数值越大气球资源占用越高普通生存服 6 到 10 是比较平衡的范围。Paper 核心启动后还会生成 paper-global.yml、paper-world-defaults.yml 等配置文件它们包含更细粒度的区块加载、实体数量、反作弊和性能选项。除非你明确知道某一项的副作用否则初期保持默认即可。现代 Paper 已经把大部分优化做得很好盲目修改反而可能破坏红石特性和游戏体验。真正容易踩坑的地方是“改完配置用 /reload 热加载”。现代 Paper 官方并不推荐在正式运行中使用 /reload因为重复加载插件和世界可能造成实体重复、监听器泄漏甚至存档问题。正确做法是修改配置后选择低峰期统一重启服务器不要图省事敲一个 reload。记住这一点能避免很多玄学故障。6. 自动备份与恢复演练数据是服务器的真正资产对“永久不删档”来说唯一真正可靠的承诺是备份体系。存档不是某个时间点的一个大文件而是不断变化的一堆文件。备份策略可以设计成每天一次全量备份保留最近 7 天或 14 天每周选一份备份做异地同步每个月做一次恢复演练。备份做完却无法恢复等于没有备份。为了确保文件一致性最简单的策略是低峰期自动停服、压缩、再启动。下面是一份停服备份脚本依赖 systemd 服务名 mc-daemon如果你还没有创建 systemd 服务可以先手动启停脚本逻辑不变。#!/usr/bin/env bash set -euo pipefail MC_SERVICEmc-daemon MC_DIR/opt/mc-server BACKUP_DST/opt/mc-backup DATE$(date %Y%m%d_%H%M%S) KEEP_DAYS7 systemctl stop ${MC_SERVICE} mkdir -p ${BACKUP_DST} tar -czf ${BACKUP_DST}/world_${DATE}.tar.gz -C ${MC_DIR} world systemctl start ${MC_SERVICE} sleep 5 systemctl is-active --quiet ${MC_SERVICE} echo backup ok: ${BACKUP_DST}/world_${DATE}.tar.gz find ${BACKUP_DST} -name world_*.tar.gz -mtime ${KEEP_DAYS} -delete写完后添加执行权限并软链到 /usr/local/binchmod x /opt/mc-server/backup.sh sudo ln -s /opt/mc-server/backup.sh /usr/local/bin/mc-backup使用 cron 在凌晨固定时间执行0 3 * * * /opt/mc-server/backup.sh /var/log/mc-backup.log 21不要以为备份脚本写出来就结束了。真正的保障来自于恢复演练定期把一份备份解压到另一台机器或临时目录启动服务端确认玩家数据完整。恢复演练的操作与恢复一次事故存档相同应该写进运维手册。假设存档损坏恢复步骤是sudo systemctl stop mc-daemon sudo mv /opt/mc-server/world /opt/mc-server/world.bad_$(date %Y%m%d%H%M%S) sudo tar -xzf /opt/mc-backup/world_20250101_030000.tar.gz -C /opt/mc-server sudo systemctl start mc-daemon注意tar 打包时使用的是相对路径 world解压到 /opt/mc-server 后会自动恢复成 /opt/mc-server/world。如果解压后启动过程提示区块校验失败不要继续在事故存档上强行修复马上切换到更早的备份并在测试环境异步分析损坏原因。本地备份防误删异地备份防硬件级灾难如果条件允许每周把备份同步到另一个存储空间或对象存储至少不要让“备份”和“运行目录”物理上共用一个磁盘。7. 长期稳定运行systemd 托管与性能优化如果你手动在终端里运行服务端一旦 SSH 断开服务端进程可能跟着退出。最稳妥的方式是交给 systemd 托管让它开机自启、崩溃自动拉起、日志统一管理。创建 /etc/systemd/system/mc-daemon.service[Unit] DescriptionMinecraft Server Afternetwork-online.target Wantsnetwork-online.target [Service] Usermcserver Groupmcserver WorkingDirectory/opt/mc-server ExecStart/usr/bin/java -Xms4G -Xmx4G -XX:UseG1GC -XX:ParallelRefProcEnabled -XX:MaxGCPauseMillis200 -XX:UnlockExperimentalVMOptions -XX:DisableExplicitGC -XX:AlwaysPreTouch -XX:G1NewSizePercent30 -XX:G1MaxNewSizePercent40 -XX:G1HeapRegionSize8M -XX:G1ReservePercent20 -XX:InitiatingHeapOccupancyPercent15 -XX:SurvivorRatio32 -XX:MaxTenuringThreshold1 -jar /opt/mc-server/paper.jar nogui Restarton-failure RestartSec10 SuccessExitStatus0 [Install] WantedBymulti-user.target启动并设为开机自启sudo systemctl daemon-reload sudo systemctl enable --now mc-daemon sudo systemctl status mc-daemon参数说明-Xms 和 -Xmx 保持一致可以避免运行中频繁扩堆推荐设为物理内存的一半并取较小值G1GC 是 Java 服务端在大内存场景下的主流选择MaxGCPauseMillis 控制目标停顿时间AlwaysPreTouch 在启动时预占物理内存减少运行期抖动。社区广泛讨论的 Aikars Flags 思路可以简化成上面这组不同版本可能有兼容性差异如果你的物理内存比较小请从 2G 开始逐步加压测试不要照抄大内存参数。给 systemd 托管的服务端发送控制台命令有两个常用思路一种是用 screen 或 tmux 包裹服务端进程让 systemd 只管拉起会话但这样 Restart 判定会变复杂另一种是开启 RCON在受控网络内用 mcrcon 发送命令。对长期服务器更推荐 RCON但要把它限制在回环地址或内网不要暴露公网。在 server.properties 中加入enable-rcontrue rcon.port25575 rcon.passwordreplace-with-a-strong-passwordRCON 的端口和密码相当于服务器的管理员后门明文传输、没有加密暴露公网等于把服务器控制权交给路过的人。更稳妥的做法是只监听 127.0.0.1或者用防火墙把 25575 限制为内网网段。发送命令时在服务器本机执行mcrcon -H 127.0.0.1 -P 25575 -p replace-with-a-strong-password tps长时间运行的 Java 服务端即使 GC 配置合理也可能因为实体堆积、区块泄漏而性能下滑。每周在低峰期自动重启一次是可接受的工程实践可以用 cron 实现0 5 * * 1 sudo systemctl restart mc-daemon监控方面内存看 free -h磁盘看 df -h服务端 TPS 可以用 Paper 内置的 tps 命令查看长期保持 19 到 20 说明主循环健康。插件越少越稳定别为了一点便捷功能堆几十个第三方插件。8. 常见问题与排查思路问题现象可能原因排查方式解决思路玩家连接超时安全组/端口转发未放行服务端未运行本机执行 telnet 127.0.0.1 25565外网端口测试放行 25565/tcp确认服务端进程存活服务端启动后立即退出EULA 未同意、Java 版本不匹配、端口被占用查看 logs/latest.log 和启动输出修改 eula.txt安装匹配的 JDK杀掉占用端口的进程内存持续上涨并 OOMXmx 设置过低、插件泄漏、区块加载过度观察 GC 日志、free -h、日志里的 OutOfMemoryError调整 JVM 参数替换插件执行定时重启玩家存档/背包异常强制关闭进程、NBT 写入中断查看备份时间点检查服务端日志使用最近备份恢复避免 kill -9服务器卡顿但 CPU 不高主线程负载高、实体/红石过多、区块生成瞬间峰值控制台执行 tps 和 timings 报告降低 view-distance、清理高频红石、规划机器规模/reload 后玩家异常使用 reload 造成的实体重复或监听器泄漏服务端日志出现 duplicated entities 等错误停止使用 /reload改为计划重启遇到“启动即退出”第一现场是 logs/latest.log不要只看终端最后两行报错信息会精确到哪个配置有问题。端口占用可以通过sudo lsof -i :25565查看如果被其他服务占用需要改 server-port 或者停掉占用进程。不要一卡顿就加插件开防崩溃先拿到 tps 和 timings 数据再决定目标很多所谓的“防崩插件”本身才是崩溃来源。如果玩家报错 “Timed out” 但不是所有人先让玩家检查自己的网络与客户端版本如果所有人都进不去再检查服务端进程和端口。9. 最佳实践与运营建议“永久不删档”不是靠管理员的一句话而是靠一套可执行的操作流程。把这套流程固化为服务器群的置顶公告维护窗口、备份时间、升级计划、误操作恢复流程。玩家可以接受维护停机但不能接受修复后的存档回退到半个月前。权限管理方面普通玩家不给 OP白名单稳定后再考虑开放公开审核OP 数量控制在最少。建筑服可以装领地与方块保护插件但不要一口气塞几十个插件。插件越少升级越省心出问题越好查。白名单可以通过控制台执行 whitelist add 玩家名或者在 whitelist.json 中按 UUID 添加具体格式以服务端生成的文件为准不要直接手改 JSON 结构。版本升级要把“升级游戏版本”看作一次正式变更而不是顺手做的事。升级前先备份在小范围测试服跑通再在公告的维护窗口内执行。如果插件生态没有跟上新版本哪怕新版再吸引人也应当等一等。长期服务器最需要的不是“最新”而是“稳定”。安全合规方面服务端运行要遵守 Minecraft 最终用户许可协议不要提供盗版下载不要声称服务器是官方合作伙伴。RCON 如果开启只监听 127.0.0.1不要暴露公网。服务端目录不要用 root 运行文件权限收敛到 mcserver 用户。管理后台、密码、备份存储路径不要写在群公告里账号权限要清晰可审计。最后再回到开头的那个承诺。一辈子是很长的时间对一个 MC 服务器管理员来说比浪漫更重要的是机制。备份脚本是否每天执行、恢复演练是否做过、升级是否走测试流程这些机制全都在位“永久不删档”才是一个可信的工程目标而不只是一句招人文案。建议把本文涉及的配置、脚本和排查清单保存到你的服务器运维文档里下次犯错时能少走很多弯路。