一个“6月新开服务器,纯净1.21.11,有没有一起玩的小伙伴呀?”的帖子,背后要准备的东西远不止改一个游戏模式。玩家看到的是能够进入世界、一起生存;开服者面对的是服务端类型、Java 版本、Linux 环境、内存参数、防火墙、白名单、备份和崩溃恢复。下面以 1.21.11 纯净生存服务器为例,从服务器选型开始,把服务端下载、启动配置、安全加固、白名单备份、故障排查全部走通。整个过程可以在云服务器或本地虚拟机上复现,也适用于 1.20/1.21 系列版本的纯净服搭建。
1. 先想清楚“纯净 1.21.11”到底需要哪种服务端
1.1 纯净服的技术边界
“纯净服”通常指不改变原版方块、合成、生物生成和游戏机制的服务器。玩家体验接近单机,红石机器、刷怪塔、村民繁殖等机制都尽量保持原版行为。这里的关键词不是“不能装东西”,而是“不改变玩法规则”。
因此选服务端时要先定一个底线:是否接受某些插件或模组为了性能优化而微调原版机制。比如 Paper 服务端默认会修改部分刷怪规则,常见表现是刷怪塔效率变化、某些生电机器无法正常工作。如果开服的主要目标是小圈子朋友一起玩生存,建议选择原版服务端或 Fabric 这类轻量加载器,尽量保持原版行为。
纯净服仍然需要防熊、防恶意破坏。白名单、权限、备份和定期存档恢复,比插件管理更贴近“纯净”原则。
1.2 原版服务端与 Fabric、Paper 的差异
搭建前建议先看一张对比表,明确不同服务端的定位。
| 服务端 | 是否属于纯净 | 扩展方式 | 典型特点 | 适合场景 |
|---|---|---|---|---|
| Vanilla Server | 是 | 无可扩展 | 官方原版,兼容性最好,性能一般 | 最小搭建、玩家少、完全原版 |
| Fabric Server | 是 | 安装 fabric api 与 mod | 原版机制基本不变,可挂性能优化模组 | 想要原版体验又需要优化 |
| Paper / Spigot | 偏原版但非严格纯净 | 安装插件 | 性能高、插件生态丰富,但可能改机制 | 小游戏服、综合服、不需要严格生电服 |
对 1.21.11 这种较新版本,下载服务端前要先确认对应版本的 Fabric、Paper 是否已经发布。如果只是给朋友开生存服,优先找官方 Vanilla 服务端,因为它永远跟版本一起发布,兼容风险最小。
1.3 先确认版本,再决定下载什么 jar
“1.21.11”可能是正式发布版本号,也可能是某个启动器里的版本标识。实际下载服务端时,不要只看文件名,还要确认文件来自官方发布渠道或可信镜像,并做哈希校验。
服务端运行还需要匹配的 Java 版本。Minecraft 1.21 系列普遍要求 Java 21 或更高版本。落地前先检查当前环境:
java -version如果输出不是 64 位 Java 21,先安装对应版本再启动服务端。否则最常见的问题不是服务端不能启动,而是启动日志里出现UnsupportedClassVersionError,原因就是 Java 版本太低。
2. 云服务器选型和 Linux 基础准备
2.1 配置怎么选才不浪费钱
Minecraft 服务端对内存和 CPU 主频敏感。在线人数少时,2 核 4G 内存足够;但 1.21 版本的区块生成和实体计算量更大,长期运行建议至少 4G 内存。
下面是一份适合开纯净服的参考配置:
| 在线人数 | CPU | 内存 | 带宽 | 磁盘建议 |
|---|---|---|---|---|
| 1 到 5 人 | 2 核,单核主频尽量高 | 4G | 3Mbps 以上 | 20G SSD |
| 5 到 20 人 | 4 核,单核主频高 | 8G | 5Mbps 以上 | 50G SSD |
| 20 人以上 | 8 核,单核性能优先 | 16G | 10Mbps 以上 | 100G SSD |
这里要注意一个常见误区:只看 CPU 核心数会选错服务器。Minecraft 的主逻辑在很长一段时间内仍以单线程为主,CPU 单核主频和缓存比“核心数多”更重要。内存不足会导致区块卸载和频繁 GC,表现为周期性卡顿;磁盘太慢会导致存档保存时整个世界短暂冻结。
2.2 登录服务器并创建专用用户
云服务器购买后,先通过 SSH 登录。不要直接用 root 运行 Minecraft 服务端,因为一旦服务端被攻击或插件代码有漏洞,风险会直接扩散到整个系统。
ssh root@你的服务器IP登录后创建一个普通用户,用于运行服务端:
adduser mcserver usermod -aG sudo mcserver su - mcservermcserver只是示例用户名,可以换成你喜欢的名字。加入sudo组是为了后续安装软件,但日常运行服务端时不要用 root。
2.3 安装 Java、screen 和常用运维工具
以 Ubuntu/Debian 系统为例:
sudo apt update sudo apt install -y openjdk-21-jre-headless screen tmux htop rsync tar unzip curl ufw fail2ban这里的几个工具各有用途:
screen/tmux:在 SSH 断开后让服务端继续运行。htop:实时查看 CPU 和内存占用。rsync:同步存档到备份目录。ufw:配置 Linux 防火墙。fail2ban:保护 SSH 登录,防止暴力破解。
注意:不要只验证服务端能启动,还要验证 SSH 断开后服务端是否继续运行,以及重启服务器后服务端是否能自动拉起。
2.4 设置时区、主机名和 SSH 保护
设置时区可以让日志时间和备份文件名更直观:
sudo timedatectl set-timezone Asia/ShanghaiSSH 保护可以先做两件事:禁止 root 直接登录、改用密钥认证。修改/etc/ssh/sshd_config时保持原终端不退出,避免新配置出错导致登录不上:
sudo nano /etc/ssh/sshd_config修改关键项:
PermitRootLogin no PasswordAuthentication no然后重启 SSH 服务:
sudo systemctl restart sshd在执行重启前,建议在另一个终端测试密钥登录是否正常。如果密钥登录失败,当前 SSH 会话至少还活着,可以及时回滚。
3. 下载服务端、配置 server.properties 并启动
3.1 下载服务端 jar 到独立目录
先把服务端放到独立目录,避免和系统文件混在一起:
sudo mkdir -p /srv/mc sudo chown mcserver:mcserver /srv/mc su - mcserver cd /srv/mc下载服务端文件时可以先用 curl 拉取到临时文件,再校验。下面的 URL 是示例,实际要以官方发布页或可信镜像为准:
curl -O https://example.com/minecraft_server.1.21.11.jar sha256sum minecraft_server.1.21.11.jar运行sha256sum后,把输出结果和发布方提供的哈希值对比。哈希不匹配时不要运行这个 jar,避免下到被篡改的文件。
3.2 首次启动与 EULA
在/srv/mc目录下执行:
java -Xms1G -Xmx2G -jar minecraft_server.1.21.11.jar nogui首次启动会生成eula.txt等文件,然后停止,提示需要同意最终用户许可协议。这是因为服务端默认eula=false。编辑该文件:
sed -i 's/eula=false/eula=true/' eula.txt这一步表示你阅读并同意 EULA。个人开服时不要忽略这条,它是服务器能否合法发布服务端文件的前提。
3.3 server.properties 核心参数
服务端根目录下的server.properties是配置核心。下面挑选纯净服最常用的参数说明:
| 参数 | 默认值 | 说明 |
|---|---|---|
| server-port | 25565 | 游戏连接端口,一般不需要改 |
| online-mode | true | 正版验证。纯朋友服建议保持 true |
| white-list | false | 是否开启白名单,建议开启 |
| max-players | 20 | 最大同时在线人数 |
| view-distance | 10 | 服务器发送给玩家的区块范围,越大越吃资源 |
| spawn-protection | 16 | 出生点保护范围,防止出生点附近被破坏 |
| difficulty | easy | 难度,生存服常用 hard |
| pvp | true | 是否允许玩家互相攻击 |
| enable-rcon | false | 是否开启远程控制台,默认关闭更安全 |
| level-name | world | 主世界存档名 |
修改参数后一定要重启服务端,否则多数参数不会热生效。不要直接一次性把参数调到最高,比如view-distance设为 32,表面上看起来能看很远,实际会极大增加内存和带宽消耗,玩家少时也会卡。
3.4 启动脚本和后台运行
每次手动敲长命令容易出错,推荐写一个启动脚本。在/srv/mc下创建start.sh:
#!/usr/bin/env bash cd /srv/mc JAVA_OPTS="-Xms2G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200" java $JAVA_OPTS -jar minecraft_server.1.21.11.jar nogui给脚本加执行权限:
chmod +x start.sh如果只想临时在后台运行,可以使用screen:
screen -S mc ./start.sh按Ctrl+A然后按D即可脱离会话,让服务端继续运行。要重新进入控制台:
screen -r mc推荐:生产环境开服不要长期依赖
screen,后面会讲用systemd托管服务端,这样重启服务器后服务端可以自动启动。
4. 白名单、权限与备份
4.1 为什么纯净服也要开白名单
很多开服者觉得“朋友服不需要白名单”,结果服务器一公开,就会遇到陌生玩家进服破坏、刷屏、卡服等情况。白名单是纯净服最基础的安全控制。
在游戏控制台或远程管理工具中执行:
whitelist on whitelist add 玩家名也可以直接编辑whitelist.json,但更推荐在控制台用命令操作,避免文件格式错误。文件内容类似:
[ { "uuid": "玩家UUID", "name": "玩家名" } ]使用命令后,服务端会自动维护这个文件。
4.2 ops.json 与其他权限文件
管理员权限在ops.json中管理。给玩家 op 时要谨慎,不要给所有人都发。op-permission-level定义了权限等级:
| 等级 | 权限 |
|---|---|
| 1 | 绕过出生点保护 |
| 2 | 可使用大部分命令 |
| 3 | 可封禁玩家、查看服务器信息 |
| 4 | 完全管理员权限 |
封禁玩家时可以使用:
ban 玩家名 原因 ban-ip IP地址封禁记录保存在banned-players.json和banned-ips.json。删除封禁也要用对应命令,不要直接改文件。
4.3 定时备份脚本
Minecraft 的存档包含玩家数据、区块数据、地图数据。即使没有插件故障,一次错误操作也可能导致存档损坏。备份脚本要解决两个问题:定时备份和保留最近版本。
先创建备份目录:
mkdir -p /srv/mc-backups在/srv/mc下创建backup.sh:
#!/usr/bin/env bash BACKUP_DIR=/srv/mc-backups WORLD_DIR=/srv/mc/world STAMP=$(date +%Y%m%d-%H%M%S) cd /srv/mc screen -S mc -X stuff 'save-off\n' sleep 2 screen -S mc -X stuff 'save-all\n' sleep 5 tar -czf "$BACKUP_DIR/world-$STAMP.tar.gz" -C "$WORLD_DIR" . screen -S mc -X stuff 'save-on\n' find "$BACKUP_DIR" -name "world-*.tar.gz" -mtime +7 -delete如果服务端不是用screen启动,而是用systemd,需要把控制台指令替换为mc-send-to-console save-off之类的辅助工具,或者直接用rcon。备份完成后,至少手动解压一次备份,确认压缩包里的文件完整。
4.4 使用 systemd 托管服务端
screen适合手动维护,但长期开服建议用systemd。创建服务文件:
[Unit] Description=Minecraft Server After=network.target [Service] User=mcserver WorkingDirectory=/srv/mc ExecStart=/usr/bin/java -Xms2G -Xmx4G -XX:+UseG1GC -jar minecraft_server.1.21.11.jar nogui Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target然后启用服务:
sudo systemctl daemon-reload sudo systemctl enable mc sudo systemctl start mc使用 systemd 的好处是服务崩溃后自动重启,服务器开机后自动启动,日志也可以通过journalctl -u mc查看。
5. 防火墙、安全组与 SSH 加固
5.1 Linux 防火墙只放行必要端口
在服务器上启用 UFW 防火墙前,先确保放行 SSH 端口,否则容易把自己锁在外面:
sudo ufw allow 22/tcp sudo ufw allow 25565/tcp sudo ufw allow 25565/udp sudo ufw enableMinecraft 客户端的连接主要走 TCP,但服务器列表状态查询有时会用到 UDP。因此把 TCP 和 UDP 都放行更稳妥。
查看防火墙状态:
sudo ufw status verbose5.2 云厂商安全组也要同步配置
很多云服务器有双重防火墙:操作系统层和云平台安全组。只配置 UFW 但忘记安全组,玩家依然连不进来。安全组规则通常如下:
| 方向 | 协议 | 端口 | 来源 | 用途 |
|---|---|---|---|---|
| 入方向 | TCP | 25565 | 0.0.0.0/0 | Minecraft 游戏连接 |
| 入方向 | UDP | 25565 | 0.0.0.0/0 | 服务器状态查询 |
| 入方向 | TCP | 22 | 你的办公IP | SSH 管理 |
安全组来源不建议直接设置为 0.0.0.0/0 的 SSH,最好只允许你经常使用的 IP。游戏端口 25565 必须对公网开放,否则其他玩家无法连接。
5.3 SSH 登录防护
即使已经启用密钥登录,也建议继续做以下加固:
- 修改
sshd_config中的MaxAuthTries,限制尝试次数。 - 使用
fail2ban监测异常登录。 - 不要把 22 端口改成特别难记的端口,除非你有成熟的习惯和备份方案。
启动 fail2ban:
sudo systemctl enable fail2ban sudo systemctl start fail2ban查看被拉黑的 IP:
sudo fail2ban-client status sshd5.4 RCON、控制台和其他风险端口
server.properties中enable-rcon=false默认关闭 RCON。如果确实需要远程执行命令,不要直接把 RCON 端口 25575 暴露到公网,因为它没有加密,且一旦口令泄露,攻击者可以执行管理员命令。
更安全的远程管理方式是:
- 通过 SSH 登录服务器。
- 进入服务端控制台。
- 或者使用 SSH 隧道转发 RCON 端口。
纯净服开服者不需要频繁远程执行命令,保持默认关闭是更稳妥的选择。
6. 从开服到验证:常见问题与排错链路
6.1 正常启动日志长什么样
启动服务端后,终端日志中看到类似内容才算真正成功:
[Server thread/INFO]: Starting minecraft server version 1.21.11 [Server thread/INFO]: Loading properties [Server thread/INFO]: Starting Minecraft server on *:25565 [Server thread/INFO]: Done (12.345s)! For help, type "help"关键是最后一行Done。如果只看到启动信息,没有Done,说明启动过程还未完成或已经崩溃。
6.2 玩家连接不上的排查链路
玩家反馈“连接超时”时,不要直接怀疑服务器配置,按顺序排查:
- 服务端是否已经出现
Done。 - 云安全组是否放行 25565 端口。
- Linux UFW 是否放行 25565 端口。
- 服务端端口是否和
server.properties一致。 - 玩家是否使用了错误 IP 或版本。
- 服务器带宽是否被打满。
- 系统负载和内存是否异常。
在服务器本机查看端口监听:
ss -lntp | grep 25565如果能看到服务端进程监听 25565,说明服务端本身正常。此时需要同步检查防火墙和安全组。
6.3 卡顿、掉线和内存溢出
纯净服卡顿最常见的表现是 TPS 下降,玩家感觉方块延迟、实体移动不跟手。先检查系统和 Java 进程:
htop观察内存占用和 CPU 占用。如果内存经常接近上限,查看系统日志:
dmesg | tail -20出现Out of memory相关日志说明 Java 进程被系统杀掉。解决办法是调整-Xmx参数,或直接升级服务器内存。不要盲目把-Xmx设置为接近物理内存总量,要给系统和其他进程留空间。
6.4 常见问题速查表
| 问题现象 | 常见原因 | 检查方式 | 处理建议 |
|---|---|---|---|
| 启动报 UnsupportedClassVersionError | Java 版本过低 | java -version | 安装 Java 21 或更高版本 |
| 启动后立即退出 | eula.txt 未同意 | 查看 eula.txt | 改为 eula=true |
| Address already in use | 端口被占用 | ss -lntp | grep 25565 | 停掉占用进程或更换端口 |
| 玩家连接超时 | 安全组/防火墙未放行 | ss -lntp,检查安全组 | 放行 TCP/UDP 25565 |
| 陌生玩家进入 | 白名单未开启 | whitelist on | 开启白名单并添加玩家 |
| 存档文件损坏 | 运行时直接覆盖存档 | 查看备份 | 停止服务端后恢复备份 |
| 服务器频繁重启 | 内存不足触发 OOM | dmesg | tail | 降低 view-distance 或加内存 |
| 延迟高但不卡 | 带宽或地理位置问题 | 使用 ping 和 traceroute | 更换更近地域服务器或升级带宽 |
6.5 上线前的开服检查清单
在把“有没有一起玩的小伙伴”发出去之前,建议逐项确认:
- [ ] 服务端 jar 哈希校验通过
- [ ] eula.txt 已同意
- [ ] server.properties 中 white-list=true
- [ ] 已添加全部朋友的白名单
- [ ] 已使用 systemd 或 screen 后台启动
- [ ] 备份脚本已执行一次,且备份文件可正常解压
- [ ] UFW 放行 22 和 25565 端口
- [ ] 云安全组放行 25565 端口
- [ ] 已创建管理员账号并设置 ops
- [ ] 服务端启动日志出现 Done
7. 监控、迁移与长期维护
7.1 日常监控
服务端稳定运行后,不需要频繁登录游戏查看,但建议定期检查服务和资源:
systemctl status mc htop df -h也可以写一个简单的健康检查脚本,每隔几分钟检查端口是否可达:
nc -vz 127.0.0.1 25565如果服务未监听,可以通过 systemd 自动拉起,同时把关键日志输出到单独文件,方便事后排查。
7.2 存档备份与恢复演练
备份不是“执行过脚本”就结束了,还要验证恢复流程。恢复步骤:
sudo systemctl stop mc cd /srv/mc mv world world.corrupt mkdir world tar -xzf /srv/mc-backups/world-20250601-120000.tar.gz -C world sudo systemctl start mc这里先移动损坏目录而不是直接删除,是为了保留现场。确认恢复成功后再清理。
恢复演练最好在测试环境执行,不要在朋友都在线时临时操作。没有实践过的备份脚本,在灾难来临时不一定可靠。
7.3 从“一个服务器”到“多个存档/多模式”
如果想同时开纯净生存、创造服或小游戏服,不要用插件切换世界,更稳妥的方式是启动多个独立服务端实例:
- 每个实例放在独立目录。
- 使用不同端口。
- 每个实例使用独立用户或独立 systemd 服务。
- 每个实例的
level-name不同。
这种方式复杂度更高,但隔离性好,一个实例崩溃不会影响另一个实例。
8. 开服之外:让“一起玩”的帖子真正落地
8.1 纯净服的运营边界
技术搭建只是开服的第一步。“纯净 1.21.11”如果没有对应的规则说明,玩家之间很容易因为破坏、偷窃、恶意使用漏洞产生矛盾。
建议在服务器群和公告中写清楚:
- 服务器是纯净生存,禁止使用修改客户端和作弊模组。
- 白名单玩家名单以管理员确认后的记录为准。
- 破坏他人物品、恶意卡服会被警告或封禁。
- 定期备份,但不承诺回档所有玩家物品。
这部分不涉及技术,却能显著减少服务器纠纷。纯朋友服同样需要规则,否则“一起玩”的体验会很快被破坏。
8.2 新手最容易犯的三个错误
第一,直接用 root 运行服务端。这是最危险的习惯。一旦服务端所在系统被入侵,攻击者可能拿到整个服务器的控制权。正确做法是使用独立用户,并让该用户对/srv/mc目录有权限。
第二,只在本地保留备份。服务器磁盘损坏或误删除目录时,备份如果也在这台服务器上,等于没有备份。建议定期把备份同步到另一台机器、对象存储或家里的 NAS。
第三,端口全部放行。部分教程会让人直接关闭防火墙,这会导致 SSH、RCON 等服务暴露在公网。只需开放游戏和 SSH 必要端口,其他端口默认禁止。
8.3 下一步可以学习的技术方向
如果这个纯净服跑通后,想让服务器更稳定,可以继续学习以下内容:
- Linux 用户权限与 systemd 服务管理。
- JVM 内存优化,理解
-Xms、-Xmx和 G1GC 参数。 - 区块加载、实体数量与
view-distance的关系。 - 使用 Fabric 和性能优化类 mod,保持原版机制的同时减少卡顿。
- 日志分析和监控告警,比如设置磁盘空间不足时的提醒。
“6月新开服务器”听起来只是一个招募贴话题,但真正能让服务器活到 7 月、8 月的,不是一次性的热情,而是服务端是否稳定、存档是否安全、规则是否清晰。把搭建和运维当做一个完整的工程来做,小伙伴也会玩得更安心。