服务端运维
本文以 Ubuntu 为示例,按“部署初始化、网络、地图与资源、服务托管、常见问题”排列。命令中的用户名、路径和端口需要按实际环境调整。
1. 部署依赖安装🔗
sudo apt update
sudo apt install -y screen nginx git default-jdk wget curl mysql unzip treedefault-jdk 提供系统默认 JDK;生产服务器建议按 Paper 版本安装指定大版本,而不是长期依赖系统默认版本。
2. 网络与访问🔗
Query 协议需要 UDP🔗
使用 Query 协议查询服务器状态需要 UDP 协议,因此在云服务器上部署时需要放行对应端口。
Mac 上无线网络总是断开重连🔗
这可能是网络问题,可以在 Minecraft Bug 列表中搜索该问题: MC-98598 。解决方案是在 JVM 启动参数中指定使用 IPv4:
-Djava.net.preferIPv4Stack=true粗略估算服务器可容纳的玩家数🔗
安装网速测试工具并测速:
$ pip install speedtest-cli
$ speedtest-cli将上下行网速和服务器内存大小填入 canihostaminecraftserver.com 进行粗略估算。该结果只能作为容量参考,实际还要考虑插件、实体数量和区块加载。
3. 地图与资源🔗
将低版本地图更新到新版本🔗
只需要在启动命令中添加 --forceUpgrade,启动一次完成地图更新后,后续启动不需要再加这个选项。
Paper 26.1+(与 Vanilla 一致)的地图文件为单目录嵌套维度结构:
- 主世界:
world/dimensions/minecraft/overworld/ - 下界:
world/dimensions/minecraft/the_nether/ - 末地:
world/dimensions/minecraft/the_end/
从纯净服迁移时,将对应存档文件夹复制到 world/ 目录下,重启服务即可完成地图迁移。
为服务器添加自定义图标🔗
在服务端 JAR 文件同一级目录放置 server-icon.png,尺寸为 64x64,然后重新启动服务端。客户端连接时会在服务器列表展示该图标。
资源包制作注意事项🔗
资源包 ZIP 的根目录必须同时包含 pack.mcmeta 和 assets/。正确做法是在资源包根目录内压缩,而不是进入 assets/ 目录:
cd /path/to/resource-pack-root
zip -r resourcepack.zip ./*查看资源包 SHA-1:
echo -e "SHA-1: " "$(shasum -b resourcepack.zip | cut -d ' ' -f 1)"添加自定义音乐播放🔗
将 MP3 转成 OGG(保持第一个音频通道):
ffmpeg -i origin.mp3 -map 0:a:0 output.ogg资源包目录结构示例:
├── assets
│ └── minecraft
│ ├── sounds
│ │ └── music
│ │ └── joker
│ │ └── joker.ogg
│ ├── sounds.json
│ └── textures
│ └── entity
│ ├── alex.png
│ └── steve.png
├── pack.mcmeta
└── pack.png在 assets/minecraft/ 下创建 sounds.json,定义声音文件和游戏声音事件的对应关系:
{
"music.joker": {
"sounds": [
{
"name": "music/joker/joker",
"stream": true,
"volume": 1
}
]
}
}游戏内可以使用 /playsound music.joker @a 播放,配合命令方块可实现更多玩法。
4. 服务托管与自动化🔗
使用 systemd 托管服务端🔗
将以下内容保存为 /etc/systemd/system/minecraft.service,按 JAR 文件名、内存和目录调整:
[Unit]
Description=Minecraft Paper Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar paper.jar --nogui
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target部署并启动:
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
sudo systemctl status minecraft需要进入服务端控制台时,可以配合 screen/tmux 托管,或使用单独的管理工具;systemd 直接接管进程时,控制台输入和插件交互会受限。
使用 crontab 添加定时提醒🔗
保存提醒脚本,例如 /home/minecraft/mc_cron.sh:
#!/usr/bin/env bash
TITLE="jokermc"
function notify() {
/usr/bin/screen -p 0 -S "$TITLE" -X eval 'stuff "title @a times 10 100 10"\\015'
/usr/bin/screen -p 0 -S "$TITLE" -X eval 'stuff "title @a title {\\"text\\":\\"温馨提示\\",\\"color\\":\\"white\\",\\"bold\\":\\"true\\"}"\\015'
/usr/bin/screen -p 0 -S "$TITLE" -X eval 'stuff "title @a subtitle {\\"text\\":\\"各位冒险家们注意早点休息啦!\\",\\"color\\":\\"yellow\\",\\"bold\\":\\"true\\"}"\\015'
}
notify添加定时任务:
crontab -e# m h dom mon dow command
0 2 * * * /home/minecraft/mc_cron.sh这里的 TITLE 必须与运行服务端的 screen 会话名一致,路径也需要按自己的部署环境调整。
5. 常见问题🔗
- 端口不通:先确认服务端进程已监听,再检查云安全组和系统防火墙;Query 协议走 UDP,普通联机走 TCP。
- 插件更新后状态异常:不要用
/reload,直接重启服务端。 - 资源包无法加载:检查 ZIP 根目录是否包含
pack.mcmeta,并重新生成 SHA-1。