
《我的世界》自建服务器能获得完全的规则控制权,可以自由安装模组和插件,长期成本也低于持续租用。本文完成 Java 版服务端在云服务器上的部署,涵盖版本与 Java 环境的对应关系、原版与模组端的选择、内存分配、端口放通、客户端连接验证,以及性能优化和存档备份。文中同时给出 Docker 与手动两种部署路径,可按熟悉程度选择。
版本与 Java 环境必须对应
这是最容易卡住新手的一点。不同游戏版本要求的 Java 版本不同,装错会直接启动失败:
游戏版本 | 所需 Java 版本 |
|---|---|
1.16 及以下 | Java 8 |
1.17 ~ 1.20.4 | Java 17 |
1.20.5 及以上 | Java 21 |
选版本时的取舍:老版本模组生态最丰富,很多经典整合包只支持旧版;新版本性能更好、原版内容更多。如果打算玩特定整合包,先确认它要求的游戏版本,再倒推需要的 Java 版本。
服务端类型怎么选
类型 | 适用场景 | 说明 |
|---|---|---|
原版服务端 | 纯原版玩法 | 官方发布,兼容性最好,性能一般 |
Paper | 需要插件、追求性能 | 优化过的服务端,支持插件生态 |
Forge | 玩模组整合包 | 模组生态最成熟 |
Fabric | 玩轻量模组 | 启动快,新版本适配及时 |
多数玩家的选择是:纯生存用 Paper,玩模组按整合包要求选 Forge 或 Fabric。
配置怎么选
联机人数 | 玩法 | CPU | 内存 |
|---|---|---|---|
2~5 人 | 原版生存 | 2 核 | 4 GB |
5~15 人 | 原版加少量插件 | 2~4 核 | 4~8 GB |
10 人以上 | 大型模组整合包 | 4 核 | 8~16 GB |
两点需要说明:
操作系统建议 Ubuntu 22.04 / 24.04。需要放通的端口:
端口 | 协议 | 用途 |
|---|---|---|
25565 | TCP | Java 版默认联机端口 |
22 | TCP | SSH 登录(默认已放通) |
轻量应用服务器在实例详情页的「防火墙」页签点击「添加规则」,协议选 TCP、端口填 25565、策略选允许;云服务器 CVM 在安全组的「入站规则」中添加。
注意 Java 版用 TCP,与基岩版的 UDP 19132 不同。如果队友用的是手机或主机端的基岩版,无法直接连入 Java 版服务器,需要额外的跨版本方案,本文不涉及。
已有 Docker 环境时,这是最省事的路径。镜像会自动处理 Java 版本匹配和服务端下载。
原版服务器:
docker run -d --name mc-server \
-p 25565:25565 \
-e EULA=TRUE \
-e VERSION=1.21.4 \
-e MEMORY=4G \
-v mc-data:/data \
--restart unless-stopped \
itzg/minecraft-serverPaper 服务端(性能更好,支持插件):
docker run -d --name mc-paper \
-p 25565:25565 \
-e EULA=TRUE \
-e TYPE=PAPER \
-e VERSION=1.21.4 \
-e MEMORY=4G \
-v mc-data:/data \
--restart unless-stopped \
itzg/minecraft-serverForge 模组服务端:
docker run -d --name mc-forge \
-p 25565:25565 \
-e EULA=TRUE \
-e TYPE=FORGE \
-e VERSION=1.20.4 \
-e MEMORY=8G \
-v mc-data:/data \
--restart unless-stopped \
itzg/minecraft-server几个参数的含义:
EULA=TRUE 表示接受游戏的最终用户许可协议,不设置服务端不会启动。MEMORY 分配给 Java 的内存。建议设为服务器总内存的 60%~70%,其余留给系统。4 GB 机器设 3G,8 GB 机器设 6G。设满会导致系统无内存可用而触发 OOM。-v mc-data:/data 把世界存档和配置持久化。这个卷丢了世界就没了,务必确认挂载正确。观察启动日志:
docker logs -f mc-server日志中出现 Done (xx.xxxs)! For help, type "help" 表示启动完成。首次启动需要生成世界,耗时较长。
用 Compose 管理更便于长期维护:
services:
minecraft:
image: itzg/minecraft-server
ports:
- "25565:25565"
environment:
EULA: "TRUE"
TYPE: "PAPER"
VERSION: "1.21.4"
MEMORY: "4G"
MAX_PLAYERS: "20"
VIEW_DISTANCE: "8"
DIFFICULTY: "normal"
volumes:
- ./mc-data:/data
restart: unless-stopped想完全掌握文件位置和启动参数时用这种方式。
安装对应版本的 Java(以 1.21 为例,需要 Java 21):
sudo apt update
sudo apt install -y openjdk-21-jdk
java -version输出的版本号要与游戏版本要求匹配。
创建专用账号和目录:
sudo useradd -m -s /bin/bash minecraft
sudo su - minecraft
mkdir -p ~/server && cd ~/server下载服务端文件。原版从游戏官网获取对应版本的 server.jar,Paper 或 Forge 从各自官方渠道下载。把文件放入 ~/server 目录。
首次启动生成配置文件:
java -Xmx3G -Xms3G -jar server.jar nogui会提示需要同意 EULA 并退出。编辑生成的 eula.txt:
sed -i 's/eula=false/eula=true/' eula.txt再次启动,服务端会生成世界文件和 server.properties。
编辑服务器配置:
nano server.properties常用配置项:
配置项 | 说明 | 建议值 |
|---|---|---|
| 监听端口 | 25565 |
| 最大在线人数 | 按需设置 |
| 游戏模式 | survival |
| 难度 | normal |
| 视距(区块) | 8~10 |
| 是否验证正版账号 | true |
| 服务器列表显示的描述 | 自定义 |
| 是否启用白名单 | 建议 true |
view-distance 对性能影响很大。默认值偏高时内存和 CPU 压力明显,调到 8 能显著降低占用,对实际游玩体验影响有限。
white-list 建议开启。公网上的服务器地址会被扫描收录,不开白名单容易被陌生玩家进入破坏建筑。开启后需要把队友加入白名单:
whitelist add 玩家名配置为系统服务以便常驻运行:
exit
sudo tee /etc/systemd/system/minecraft.service > /dev/null <<'UNIT'
[Unit]
Description=Minecraft Server
After=network.target
[Service]
Type=simple
User=minecraft
WorkingDirectory=/home/minecraft/server
ExecStart=/usr/bin/java -Xmx3G -Xms3G -jar server.jar nogui
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
UNIT
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft第一层,进程监听端口
sudo ss -lntp | grep 25565第二层,端口外部可达
在本地电脑执行:
nc -zv 服务器公网IP 25565不通说明控制台防火墙规则未生效,确认协议为 TCP。
第三层,客户端连入
服务器公网IP,使用默认端口时可省略端口号。第三层通过才算成功。前两层正常但连不上时,最常见原因是客户端与服务端版本不一致,其次是开了白名单但没把自己加进去。
建议邀请队友一起进入测试多人场景,同时观察资源占用:
free -h
docker stats --no-stream # Docker 部署时使用Paper 插件
把插件的 jar 文件放入 plugins 目录后重启服务端。Docker 部署时对应数据卷下的 plugins 目录。
常用插件方向:世界备份、区域保护、权限管理、区块预生成。其中区块预生成很值得装——它提前生成地图区块,避免玩家探索新区域时因实时生成造成卡顿。
Forge 或 Fabric 模组
把模组文件放入 mods 目录后重启。
关键前提:服务端和所有客户端必须安装完全相同的模组列表和版本。 任何一方缺少或版本不同都会导致连接被拒绝。这是模组服最常见的连不上原因。建议把模组打包发给队友,确保大家用的是同一份。
模组数量多时记得相应调大内存分配,否则启动阶段就会因内存不足失败。
服务器变卡时按以下顺序处理,从收益最大的开始。
换用 Paper 服务端。相比原版做了大量优化,是单项收益最明显的改动。
降低视距。把 view-distance 从默认值调到 8,能明显降低内存和 CPU 占用。
预生成地图区块。用相关插件提前生成一定半径内的区块,消除探索时的实时生成卡顿。
限制实体数量。农场类装置和大量生物会持续消耗算力。通过配置限制单区块内的实体上限。
优化 Java 启动参数。除了 -Xmx 和 -Xms,可以调整垃圾回收器相关参数减少停顿。参数组合与 Java 版本相关,建议参考服务端官方文档的推荐配置。
判断是否需要升配。如果上述优化都做了仍然卡顿,用以下命令确认内存是否是瓶颈:
free -h可用内存持续偏低、或日志中出现内存相关警告,说明确实需要更大规格。云服务器 CVM 支持在控制台调整实例配置,不必重建实例。
客户端提示连接超时
检查控制台防火墙是否放通 TCP 25565、服务端进程是否在运行、地址是否填写正确。
提示版本不匹配
客户端与服务端版本不一致。确认双方使用相同版本,模组服还需确认模组列表完全一致。
服务端启动即退出
查看日志定位:
sudo journalctl -u minecraft -n 100 --no-pager
# 或 Docker 部署
docker logs mc-server --tail 100常见原因:Java 版本与游戏版本不匹配、eula.txt 未设为 true、内存分配超过机器实际可用量、模组之间冲突。
提示无法连接到世界或被踢出
如果开了白名单,确认玩家已加入。online-mode=true 时要求玩家使用正版账号,账号验证失败也会被拒绝。
世界存档损坏
立即停止服务端,避免损坏状态被继续写入。用备份恢复。这类问题事后很难修复,提前备份是最有效的应对方式。
内存占用持续增长
Java 的内存回收机制下,占用上升到分配上限附近是正常的,关键看是否频繁触发长时间停顿。如果游玩中出现规律性卡顿,可能是垃圾回收停顿,调整回收器参数或增加内存分配。
定期备份世界存档
手动打包:
sudo tar -czf ~/mc-backup-$(date +%Y%m%d).tar.gz \
-C /home/minecraft/server world world_nether world_the_end三个目录分别对应主世界、下界和末地,都要备份。只备份 world 会丢掉另外两个维度。
建议写成脚本加入定时任务,并把备份同步到对象存储。留在同一台服务器上的备份,在服务器故障时会一起丢失。
用快照做整机保护
在游戏版本升级、批量安装模组这类高风险操作前,给实例创建一份快照。轻量应用服务器在实例详情页的「快照」页签操作,通常 5 分钟内完成且无需关机。
回滚快照时要注意:整块系统盘会恢复到快照时间点,之后的所有游玩进度都会被清除,运行中的实例会自动关机。因此回滚前务必先备份当前存档。每个地域的免费快照配额有上限,使用存储型套餐的实例不支持创建快照。
定时重启
长时间运行后适当重启有助于释放内存碎片。配置在玩家较少的时段执行:
sudo crontab -e0 5 * * * /usr/bin/systemctl restart minecraft重启前提前通知玩家。
日常检查
关于合规
自建服务器与好友联机属于正常使用。不要部署侵犯游戏版权的服务端程序,也不要使用违反游戏用户协议的作弊工具。安装社区发布的模组和插件时,注意其授权条款,商用场景需额外确认许可条件。
服务器稳定运行后,如果需要为多个游戏服建立统一的自动备份与监控机制,可以作为下一步的工作方向。
开服这类场景,轻量应用服务器的套餐规格和快照功能用起来比较省心;大型模组服需要更大内存或后续灵活调整规格时,可以考虑云服务器 CVM。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。