在搭建和管理 Minecraft 服务器的过程中,你是否遇到过这样的困扰:精心搭建的世界因为服务器提供商的问题、数据迁移的麻烦或是单纯想和朋友在局域网里畅玩而无法实现?一个真正稳定、私密且能长久保存进度的“养老服”是许多玩家的梦想。本文将手把手带你从零开始,搭建一个“永不删档”、支持离线登录、并实现基岩版与Java版互通的Minecraft服务器。无论你是想和三五好友建立一个私密的休闲世界,还是希望拥有一个完全由自己掌控的存档,这套方案都能满足你。我们将覆盖从环境准备、核心服务端配置、互通桥接,到数据备份、日常维护的全流程,并提供完整的配置文件和命令,确保每一步都可操作、可复现。
1. 核心概念与架构解析
在开始动手之前,理解我们所要构建系统的各个组成部分及其关系至关重要。这能帮助你在后续配置和排错时心中有数。
1.1 什么是“永不删档”与“离线可进”
- “永不删档”:这并非指数据绝对物理不灭,而是一种工程上的承诺。其核心在于数据自主掌控和完善的备份机制。与传统租赁服务器可能受服务商条款限制不同,我们将服务器搭建在自己的物理机、云主机或本地NAS上,世界存档、玩家数据、插件配置等核心资产完全由自己管理。通过自动化备份脚本(如定时打包存档并同步到网盘或另一台机器),即使本地硬件故障,也能从备份中快速恢复,从而实现事实上的“永不删档”。
- “离线可进” (离线模式):这是Minecraft服务端的一种认证模式。官方正版服务器运行在“online-mode=true”状态下,会强制验证每个连接玩家的正版账户。而“offline-mode”或通过修改为“online-mode=false”,则跳过了这项验证,允许任何玩家使用任意游戏ID直接进入服务器。这对于局域网联机、内部测试或希望快速让朋友加入的场景非常方便。但请注意:离线模式存在安全隐患,恶意用户可能冒充他人ID,因此通常仅在可信的私人环境中使用。
1.2 基岩版与Java版互通原理
Minecraft 基岩版(Bedrock Edition,运行在手机、Win10/11、主机)和 Java 版(PC传统版)使用完全不同的网络协议和代码基,因此它们无法直接连接。实现互通需要一个“翻译官”,这就是互通代理服务端。
目前最成熟、稳定的方案是使用GeyserMC项目。它的工作原理如下:
- Java版服务端:作为主服务器运行,存储世界、处理游戏逻辑、管理插件(如 PaperMC)。
- Geyser:作为一个独立的Java程序(或插件形式)运行。它扮演两个角色:
- 对基岩版客户端:它伪装成一个基岩版官方服务器,接受基岩版客户端的连接。
- 对Java版服务端:它伪装成一个Java版客户端,连接到上一步搭建的Java版服务端。
- 协议转换:Geyser 在中间实时翻译基岩版协议与Java版协议,将基岩版玩家的移动、操作、聊天等信息“翻译”给Java服,同时将Java服的世界、实体、事件等信息“翻译”回基岩版客户端。
同时,为了让基岩版玩家也能使用Java服的账号系统(尤其在离线模式下),还需要Floodgate(同样是GeyserMC项目的一部分)。Floodgate 可以为基岩版玩家自动生成一个唯一的、带前缀的Java版角色名(如*Geyser_PlayerName),并管理他们的身份验证,从而无缝接入离线模式的Java服。
我们的核心架构:基岩版客户端 <-> [Geyser + Floodgate] <-> Java版服务端 (Paper) <-> Java版客户端。
2. 环境准备与版本说明
一个清晰的环境是成功的第一步。以下是搭建所需的核心组件及版本选择建议。
2.1 硬件与操作系统要求
- 操作系统:Linux(如 Ubuntu 20.04/22.04 LTS, CentOS 7/8)、Windows Server 或 Windows 10/11、macOS。本文以Linux (Ubuntu 22.04)为例进行命令行演示,Windows下的操作逻辑类似。
- CPU与内存:这是性能的关键。对于一个小型(10人以内)的纯净或轻量插件服:
- 内存:至少为Java服务端分配 2GB RAM。如果安装较多插件或模组,建议 4GB 或更多。系统本身也需要内存,因此服务器总内存建议不低于 4GB。
- CPU:单核性能更重要。现代的双核或四核处理器通常足够。
- 网络:需要公网IP或通过内网穿透工具(如 frp、樱花映射)将服务暴露给互联网。对于局域网联机,只需确保设备在同一网络下即可。
- 磁盘空间:初始安装约需 500MB。世界存档会随时间增长,建议预留 10GB 以上空间。
2.2 核心软件依赖
Java 运行环境 (JRE):Java版服务端、Geyser、插件都依赖Java。
- 版本:强烈推荐使用Java 17或Java 21(长期支持版本)。大多数现代服务端(Paper 1.20+)已要求 Java 17+。
- 检查与安装:
# 检查是否已安装Java java -version # 在Ubuntu上安装OpenJDK 17 sudo apt update sudo apt install openjdk-17-jre-headless -y # 或者安装OpenJDK 21 # sudo apt install openjdk-21-jre-headless -y
Screen 或 Tmux (Linux推荐):用于在后台持久运行服务器进程,即使断开SSH连接,服务器也不会停止。
sudo apt install screen -y # 或安装 tmux # sudo apt install tmux -y
2.3 服务端组件版本选择
- Java版服务端核心:我们选择PaperMC。它是 Spigot/Bukkit 的高性能分支,优化了游戏逻辑,兼容绝大多数插件,且更新迅速。
- 访问 PaperMC 官网 获取最新构建版本。例如,对于 Minecraft 1.20.4,我们下载
paper-1.20.4-550.jar。
- 访问 PaperMC 官网 获取最新构建版本。例如,对于 Minecraft 1.20.4,我们下载
- 互通组件:
- Geyser:从 GeyserMC 官网 下载独立版 Jar 文件。选择最新稳定版。
- Floodgate:从同一页面下载 Floodgate 的 Jar 文件。如果你计划将 Floodgate 以插件形式运行在 Paper 上(推荐,管理更方便),则下载
floodgate-spigot.jar。
3. 搭建Java版服务端 (Paper)
这是整个服务器的游戏逻辑核心。我们将在一个独立的目录中设置它。
3.1 创建目录与下载服务端
# 1. 创建一个总目录来管理所有服务 mkdir -p ~/minecraft-server cd ~/minecraft-server # 2. 创建Java版服务端子目录并进入 mkdir java-server cd java-server # 3. 下载Paper服务端 Jar 文件 (请替换为实际下载链接和版本) # 你可以从 papermc.io 复制最新版本的直链 wget https://api.papermc.io/v2/projects/paper/versions/1.20.4/builds/550/downloads/paper-1.20.4-550.jar -O paper.jar # 4. 首次运行,生成默认配置文件和世界 # 这里分配了2GB内存给服务端,你可以根据机器情况调整 -Xmx 参数 java -Xms1G -Xmx2G -jar paper.jar --nogui首次运行会失败并退出,这是正常的。它会生成eula.txt、server.properties等必要文件。
3.2 同意EULA并配置基础设置
Minecraft 服务端要求你同意最终用户许可协议 (EULA)。
编辑
eula.txt文件,将eula=false改为eula=true。nano eula.txt # 找到 eula=false,改为 eula=true,保存退出 (Ctrl+X, 然后 Y, 回车)配置
server.properties,这是服务器的主配置文件。nano server.properties找到并修改以下关键行:
# 服务器IP,默认留空即可(监听所有网络接口) server-ip= # 服务器端口,Java版默认25565,确保防火墙开放此端口 server-port=25565 # 最大玩家数 max-players=20 # 游戏模式:survival(生存),creative(创造),adventure(冒险),spectator(旁观) gamemode=survival # 是否强制玩家为正版。我们设为 false 以启用离线模式。 online-mode=false # 是否生成怪物 spawn-monsters=true # 是否生成动物 spawn-animals=true # 是否生成NPC村庄 generate-structures=true # 视图距离,单位是区块。数值越大越耗性能,建议设为6-10。 view-distance=10 # 是否开启白名单(建议先关闭,等所有朋友加好后再开启) white-list=false # 服务器 MOTD,显示在玩家服务器列表中的描述 motd=A Never-Delete Private Server保存并退出。
3.3 使用Screen后台运行并测试
# 回到 java-server 目录 cd ~/minecraft-server/java-server # 创建一个名为 mc-java 的 screen 会话并在其中启动服务器 screen -S mc-java # 现在你进入了一个新的虚拟终端 # 再次启动服务器,这次它会正常加载世界 java -Xms1G -Xmx2G -jar paper.jar --nogui # 当看到类似“Done (XX.XXXs)! For help, type "help"”的日志时,说明服务器已启动成功。 # 你可以输入一些命令测试,例如: list # 应该会显示“There are 0/20 players online” # 暂时分离 screen 会话(让服务器在后台运行) # 按下 Ctrl+A,然后松开,再按 D 键。 # 你会看到 [detached from ...] 的提示,回到主终端。现在,你的Java版服务器已经在后台运行了。你可以用screen -r mc-java重新连接回这个会话查看日志或输入命令。
4. 配置基岩版与Java版互通 (Geyser + Floodgate)
我们将以独立运行 Geyser 并搭配 Paper 插件版 Floodgate 为例,这是最灵活的配置方式。
4.1 配置 Floodgate (插件形式)
安装 Floodgate 插件:
# 回到 java-server 目录的 plugins 文件夹 cd ~/minecraft-server/java-server/plugins # 将下载好的 floodgate-spigot.jar 放入此目录 # 假设你已经下载好了,使用 wget 或 scp 上传 wget https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot -O floodgate-spigot.jar重启 Paper 服务端以加载插件:
# 重新连接到 screen 会话 screen -r mc-java # 在服务器控制台输入重启命令 restart # 或者先 stop,再重新用 java -jar 命令启动重启后,在
plugins文件夹下会生成一个floodgate配置目录。Floodgate 会自动运行,无需额外配置。它会为每个连接的基岩版玩家生成一个唯一的、以.开头的用户名(例如.Geyser_Steve)。
4.2 配置并运行 Geyser (独立版)
创建 Geyser 运行目录并下载:
cd ~/minecraft-server mkdir geyser-standalone cd geyser-standalone wget https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/standalone -O geyser.jar首次运行生成配置:
java -jar geyser.jar运行后会生成
config.yml等文件,然后程序会停止。编辑 Geyser 主配置文件:
nano config.yml找到并修改以下关键部分:
# 监听地址和端口:Geyser 将在此接收基岩版客户端的连接 bedrock: address: 0.0.0.0 # 监听所有地址 port: 19132 # 基岩版默认端口,确保防火墙开放此端口 # 要连接的远程 Java 版服务器信息(即我们刚搭建的 Paper 服) remote: address: 127.0.0.1 # 如果 Geyser 和 Paper 在同一台机器,就用 localhost port: 25565 # Paper 服务器的端口 auth-type: floodgate # 这是关键!使用 floodgate 认证模式 # Floodgate 相关配置 floodgate-key-file: ../java-server/plugins/floodgate/key.pem # 指向 Floodgate 生成的密钥文件路径 # 通常这个路径是正确的,如果不对,请根据实际生成的 key.pem 位置修改。 # 其他可以调整的选项 metrics: enabled: false # 可选,关闭数据统计保存并退出。
在 Screen 中后台运行 Geyser:
# 新建一个 screen 会话运行 Geyser screen -S mc-geyser cd ~/minecraft-server/geyser-standalone java -jar geyser.jar # 看到日志正常,没有报错后,同样按 Ctrl+A, D 分离会话。
5. 连接测试与基础管理
5.1 客户端连接方式
- Java版玩家:
- 服务器地址:
你的服务器IP:25565(例如123.123.123.123:25565或局域网192.168.1.100:25565)。 - 由于设置了
online-mode=false,任何Java版客户端(正版或非正版)都可以直接连接。
- 服务器地址:
- 基岩版玩家:
- 服务器地址:
你的服务器IP:19132(端口是 Geyser 监听的19132)。 - 在基岩版“好友”或“服务器”页面(不同平台位置略有不同)添加服务器,输入上述地址即可。
- 连接后,玩家在Java服中的名字会是
Floodgate生成的格式(如.Geyser_PlayerName)。
- 服务器地址:
5.2 常用服务器管理命令
在 Paper 服务器的 Screen 会话 (screen -r mc-java) 中,可以输入以下命令:
list:查看在线玩家。op <玩家名>:给予玩家管理员权限。whitelist add <玩家名>:将玩家加入白名单(需先设置white-list=true)。save-all:手动立即保存世界。stop或restart:停止或重启服务器(如果安装了重启插件)。
5.3 安装基础管理插件(可选但推荐)
通过安装插件可以极大方便管理。将插件 Jar 文件放入~/minecraft-server/java-server/plugins/目录,然后重启服务器。
- EssentialsX:提供一套完整的实用命令,如
/home设置家,/tpa传送,/spawn回出生点等。 - LuckPerms:目前最强大的权限管理插件,可以精细控制每个玩家或组的权限。
- WorldEdit/WorldGuard:如果你是创造模式建筑服,这两个插件是神器。
- CoreProtect:记录方块和容器的破坏/放置记录,用于追查破坏行为。
安装插件后,务必查阅其文档进行配置。
6. 实现“永不删档”:自动化备份与维护
这是保证服务器长治久安的核心。
6.1 手动备份与恢复
备份的本质就是复制整个服务器目录,尤其是world,world_nether,world_the_end(默认世界文件夹)以及plugins目录。
# 进入服务器根目录 cd ~/minecraft-server/java-server # 创建一个备份压缩包,包含世界和插件配置 tar -czvf ../backup/server-backup-$(date +%Y%m%d-%H%M).tar.gz world world_nether world_the_end plugins/ # 备份文件会保存在 ~/minecraft-server/backup/ 目录下,并以时间戳命名。 # 恢复备份(危险操作!务必先停止服务器) # 1. 停止服务器 # 2. 删除或移走当前的世界文件夹 # 3. 解压备份包到当前目录 # tar -xzvf ../backup/server-backup-20231001-1200.tar.gz -C ./6.2 自动化备份脚本 (Linux)
创建一个 Shell 脚本,并利用 Crontab 定时执行。
创建备份脚本
~/minecraft-server/backup.sh:#!/bin/bash # 定义变量 SERVER_DIR="/home/你的用户名/minecraft-server/java-server" BACKUP_DIR="/home/你的用户名/minecraft-server/backups" MAX_BACKUPS=10 # 保留最近10份备份 # 创建备份目录(如果不存在) mkdir -p $BACKUP_DIR # 进入服务器目录 cd $SERVER_DIR # 向服务器控制台发送保存命令(如果服务器在运行) # 注意:这需要配置 rcon 或使用 screen 发送命令,这里用简单方式:直接备份。 # 更安全的方式是先执行 `screen -S mc-java -X stuff "save-all\n"` 再等待几秒。 # 创建备份文件 TIMESTAMP=$(date +%Y%m%d-%H%M%S) BACKUP_FILE="$BACKUP_DIR/server-$TIMESTAMP.tar.gz" tar --exclude='./cache' --exclude='./logs' -czf "$BACKUP_FILE" ./world ./world_nether ./world_the_end ./plugins ./server.properties echo "Backup created: $BACKUP_FILE" # 清理旧备份,只保留最新的 MAX_BACKUPS 份 cd $BACKUP_DIR ls -t server-*.tar.gz | tail -n +$(($MAX_BACKUPS + 1)) | xargs -r rm --给脚本添加执行权限:
chmod +x ~/minecraft-server/backup.sh设置定时任务:
crontab -e在末尾添加一行,例如每天凌晨3点执行备份:
0 3 * * * /home/你的用户名/minecraft-server/backup.sh >> /home/你的用户名/minecraft-server/backup.log 2>&1保存退出。现在你的服务器就会每天自动备份了。
6.3 将备份同步到远程(可选)
为了应对本地硬盘损坏,可以将备份同步到网盘(如通过 rclone 同步到阿里云盘、OneDrive等)或另一台服务器(通过 rsync)。
7. 常见问题与排查思路
在搭建和运行过程中,你可能会遇到以下问题。
| 问题现象 | 可能原因 | 排查与解决思路 |
|---|---|---|
| Java版客户端无法连接 | 1. 服务器未启动。 2. 防火墙未开放 25565端口。3. server.properties中server-ip配置错误。4. 客户端地址或端口输错。 | 1. 检查 Paper 服务端 Screen 会话是否运行 (screen -ls)。2. 检查防火墙/安全组规则: sudo ufw allow 25565/tcp(Ubuntu)。3. 确保 server-ip=为空或正确内网IP。4. 仔细核对连接地址和端口。 |
| 基岩版客户端无法连接 | 1. Geyser 未运行。 2. 防火墙未开放 19132端口(UDP协议!)。3. config.yml中remote地址端口配置错误。4. auth-type不是floodgate。 | 1. 检查 Geyser Screen 会话 (screen -r mc-geyser)。2. 开放 UDP 19132 端口: sudo ufw allow 19132/udp。3. 确认 remote指向正确的 Paper 服务器地址和端口。4. 确认 auth-type: floodgate且floodgate-key-file路径正确。 |
| 基岩版玩家进服后名字带前缀,或物品异常 | 1. Floodgate 未正确安装或加载。 2. Geyser 配置中 auth-type错误。3. 某些插件与 Floodgate 不兼容。 | 1. 检查 Paper 的plugins目录下是否有floodgate-spigot.jar,并查看启动日志确认加载成功。2. 确认 Geyser 的 config.yml中auth-type设置为floodgate。3. 暂时移除其他插件测试,或查阅插件兼容性列表。 |
| 服务器卡顿、TPS低 | 1. 内存分配不足。 2. 视图距离 ( view-distance) 过高。3. 红石机器、实体过多。 4. 硬盘 IO 慢(尤其是机械硬盘)。 | 1. 增加启动命令中的-Xmx值(如-Xmx4G)。2. 在 server.properties中降低view-distance(如设为 8)。3. 使用 /tps命令查看TPS,使用/entity或插件(如 Spark)分析性能瓶颈。4. 考虑使用 SSD 硬盘。 |
| 玩家数据丢失 | 1. 服务器异常关闭,数据未保存。 2. 备份恢复错误。 | 1.养成使用stop命令关服的习惯,避免强制关闭进程。2. 恢复备份前,务必备份当前状态。检查备份文件是否完整。启用定时备份。 |
| Screen 会话找不到或意外关闭 | 1. 会话被终止。 2. 系统重启。 | 1. 使用screen -ls列出所有会话,screen -r <会话名>重新连接。2. 可以考虑使用 systemd服务来管理服务器进程,实现开机自启和更稳定的守护。 |
8. 进阶优化与最佳实践
当服务器稳定运行后,可以考虑以下优化来提升体验和安全性。
8.1 使用 Systemd 管理服务(Linux)
比 Screen 更专业,能实现开机自启、自动重启、日志管理。
- 创建服务文件
sudo nano /etc/systemd/system/mc-java.service:[Unit] Description=Minecraft Java Server (Paper) After=network.target [Service] Type=simple User=你的用户名 WorkingDirectory=/home/你的用户名/minecraft-server/java-server ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar paper.jar --nogui Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target - 重载 systemd 并启用服务:
同样,可以为 Geyser 创建sudo systemctl daemon-reload sudo systemctl enable mc-java.service sudo systemctl start mc-java.service # 查看状态 sudo systemctl status mc-java.servicemc-geyser.service。
8.2 安全强化建议
- 启用白名单:在
server.properties中设置white-list=true,然后在游戏内或控制台使用whitelist add <玩家名>添加可信玩家。这是最有效的防打扰方式。 - 使用防火墙:只开放必要的端口(25565, 19132),屏蔽其他所有端口。
- 定期更新:关注 Paper、Geyser、Floodgate 及插件的更新,及时修复漏洞。
- 权限管理:使用 LuckPerms 等插件,遵循最小权限原则,不要轻易给予玩家
op权限。
8.3 性能监控与调优
- 监控TPS:在游戏内输入
/tps或使用插件(如Spark)查看服务器性能指标。TPS应稳定在20左右。 - 优化世界:定期使用 Paper 自带的
./paper optimize命令(或插件Chunky)预生成世界区块,避免玩家探索时实时生成造成的卡顿。 - 实体控制:使用插件(如
ClearLag)定期清理掉落物、经验球等多余实体。
8.4 内网穿透(无公网IP方案)
如果你没有公网IP,可以使用内网穿透工具将本地服务器暴露到公网。
- 工具选择:Sakura Frp、花生壳、Ngrok 等都有免费套餐。
- 配置要点:在穿透工具中创建两条隧道,分别映射本地的
25565(TCP) 和19132(UDP) 端口到公网服务器的两个不同端口。然后让玩家连接穿透工具提供的公网地址和端口。
至此,一个由你完全掌控、支持双版本互通、具备自动化备份能力的“永不删档” Minecraft 休闲养老服务器就搭建完成了。从环境搭建、核心服务配置、互通桥接到数据维护,这套流程覆盖了私有服务器运营的主要环节。最重要的是,你掌握了整个服务器的根控制权,数据和配置都牢牢握在自己手中。接下来,你可以邀请好友,开始规划你们的专属世界,安装喜欢的插件和模组,打造独一无二的游戏体验。如果在实践中遇到新的问题,善用日志文件和社区资源(如各项目的 GitHub Issues、Wiki),大部分技术问题都能找到解决方案。