minecraft-server-admin
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMinecraft Server Administration Skill
Minecraft 服务器管理 Skill
Scope and Routing Boundaries
范围与路由边界
Routing Boundaries
路由边界
- : the task is infrastructure or live operations for Minecraft servers (deployment choice, tuning, backups, proxying, security, incident response).
Use when - : the task is writing plugin code (
Do not use when) or writing mods/loaders (minecraft-plugin-dev,minecraft-modding).minecraft-multiloader - : the task is WorldEdit command workflows (
Do not use when) or EssentialsX workflow/policy design (minecraft-worldedit-ops).minecraft-essentials-ops - : the task is datapack/resource-pack authoring (
Do not use when,minecraft-datapack).minecraft-resource-pack
- :任务属于 Minecraft 服务器的基础设施或线上运维(部署选择、调优、备份、代理、安全、事件响应)。
Use when - :任务是编写插件代码(
Do not use when)或编写模组/加载器(minecraft-plugin-dev、minecraft-modding)。minecraft-multiloader - :任务是 WorldEdit 命令工作流(
Do not use when)或 EssentialsX 工作流/策略设计(minecraft-worldedit-ops)。minecraft-essentials-ops - :任务是数据包/资源包创作(
Do not use when、minecraft-datapack)。minecraft-resource-pack
References
参考资料
- Read when the task is an incident, rollout window, proxy change, or recovery drill and you need a compact checklist before acting.
references/deployment-checklists.md
- 当任务属于事故处理、发布窗口、代理变更或恢复演练,且需要在操作前获取一份精简检查清单时,读取 。
references/deployment-checklists.md
Deployment Decision Matrix
部署决策矩阵
Use this table when choosing a deployment. For an existing server, inspect its
stack and version first and preserve them unless migration is requested.
| Deployment profile | Recommended stack | Pick this when | Watch-outs |
|---|---|---|---|
| Small SMP on Paper | Paper only | Up to ~30 concurrent players, broad plugin compatibility, low ops overhead | Do not over-tune early; profile before changing many defaults |
| Larger public Paper server | Paper + Spark + stricter plugin/change control | Public server with frequent joins, moderate plugin set, uptime matters | Plugin sprawl is the top TPS risk |
| Velocity-backed network | Velocity + multiple Paper backends | Hub/minigame/factions split across servers, need shared entrypoint | Forwarding/auth mismatches can block joins |
| Purpur gameplay-heavy server | Purpur (optionally behind Velocity) | You want gameplay knobs exposed in config without custom plugin code | Extra toggles increase misconfiguration risk |
| Folia high-concurrency server | Folia + Folia-compatible plugins only | Very high concurrency with region-threading goals | Many plugins are not Folia-safe |
| Fabric/NeoForge mod server | Fabric or NeoForge server build | You require loader mods, custom content, modpack behavior | Bukkit/Paper plugins do not apply |
选择部署方式时使用此表。对于现有服务器,应先检查其技术栈和版本;除非用户要求迁移,否则应予以保留。
| 部署配置 | 推荐技术栈 | 选择条件 | 注意事项 |
|---|---|---|---|
| 基于 Paper 的小型 SMP | 仅 Paper | 最多约 30 名并发玩家、广泛的插件兼容性、较低的运维开销 | 不要过早过度调优;修改许多默认值前先进行性能分析 |
| 大型公共 Paper 服务器 | Paper + Spark + 更严格的插件/变更控制 | 面向公众的服务器,玩家加入频繁,插件集适中,在线率很重要 | 插件泛滥是 TPS 的首要风险 |
| Velocity 支持的网络 | Velocity + 多个 Paper 后端 | 多个服务器承载枢纽/小游戏/派系,且需要统一入口 | 转发/认证不匹配会阻止玩家加入 |
| 偏重玩法的 Purpur 服务器 | Purpur(可选置于 Velocity 之后) | 希望在配置中开放玩法调节项,但不想编写自定义插件代码 | 更多开关会提高配置错误风险 |
| Folia 高并发服务器 | Folia + 仅使用兼容 Folia 的插件 | 极高并发且目标是区域线程 | 许多插件不具备 Folia 安全性 |
| Fabric/NeoForge 模组服务器 | Fabric 或 NeoForge 服务器构建 | 需要加载器模组、自定义内容、整合包行为 | Bukkit/Paper 插件不适用 |
Deployment Type Routing
部署类型路由
- Small SMP and most public plugin servers: use Paper baseline first.
- Use Purpur only when you explicitly need Purpur gameplay controls.
- Use Folia only when plugin compatibility has been validated for region-threading.
- Use Velocity when one process is not enough or you need separate backend roles.
- Use Fabric/NeoForge when the requirement is mod-driven, not plugin-driven.
- 小型 SMP 和大多数公共插件服务器:以 Paper 作为基线。
- 仅在明确需要 Purpur 玩法控制时使用 Purpur。
- 仅在插件兼容性已针对区域线程完成验证后使用 Folia。
- 当单个进程无法满足需求或需要分离后端角色时使用 Velocity。
- 当需求由模组而非插件驱动时使用 Fabric/NeoForge。
Java versions
Java 版本
- Paper and Purpur: Minecraft 26.1+ requires Java 25; Minecraft 1.21.x uses Java 21. Verify the exact Paper/Purpur build and installed plugins before a version change.
- Current Velocity 4.x requires Java 25. For a legacy proxy, retain the Java version required by that exact proxy release rather than applying the current version by default.
- Paper 和 Purpur:Minecraft 26.1+ 要求 Java 25;Minecraft 1.21.x 使用 Java 21。版本变更前,请确认具体的 Paper/Purpur 构建版本和已安装插件。
- 当前 Velocity 4.x 要求 Java 25。对于旧版代理,应保留该特定代理版本所要求的 Java 版本,不要默认套用当前版本。
Playbook: Performance Tuning
操作手册:性能调优
Step 1: Establish baseline
第 1 步:建立基线
Collect a baseline before edits. Linux host example:
bash
free -h
top -b -n 1 | head -n 25Windows PowerShell host example:
powershell
Get-CimInstance Win32_OperatingSystem | Select-Object FreePhysicalMemory,TotalVisibleMemorySize
Get-Process java | Sort-Object CPU -Descending | Select-Object -First 5 Id,CPU,WorkingSet,PathIn server console:
bash
tps
mspt
spark healthreportRecord:
- peak player count
- MSPT at idle and at peak activity
- top plugins by CPU from Spark report
修改前先收集基线。Linux 主机示例:
bash
free -h
top -b -n 1 | head -n 25Windows PowerShell 主机示例:
powershell
Get-CimInstance Win32_OperatingSystem | Select-Object FreePhysicalMemory,TotalVisibleMemorySize
Get-Process java | Sort-Object CPU -Descending | Select-Object -First 5 Id,CPU,WorkingSet,Path在服务器控制台中:
bash
tps
mspt
spark healthreport记录:
- 玩家数量峰值
- 空闲和高峰活动时的 MSPT
- Spark 报告中 CPU 占用最高的插件
Step 2: Profile the real bottleneck
第 2 步:分析真正的瓶颈
Use Spark instead of guesswork:
bash
spark profiler --timeout 180
spark tps
spark tickmonitor --threshold-tick 50The 50 ms threshold reports ticks that exceed one normal 20 TPS tick; adjust it
only when the incident threshold is intentionally different.
Then identify whether the issue is:
- plugin task load
- entity count / mob farm pressure
- chunk generation / disk I/O
- garbage-collection pauses
使用 Spark,而不是依靠猜测:
bash
spark profiler --timeout 180
spark tps
spark tickmonitor --threshold-tick 5050 ms 阈值用于报告超过一次正常 20 TPS tick 所用时间的 tick;仅当事故阈值有意设为其他值时才调整它。
然后确定问题是否源于:
- 插件任务负载
- 实体数量/刷怪农场压力
- 区块生成/磁盘 I/O
- 垃圾回收暂停
Step 3: Apply targeted fixes
第 3 步:应用针对性修复
Do not tune everything at once. Apply one group at a time.
- Chunk and simulation pressure:
- lower and
view-distancefirstsimulation-distance - pre-generate worlds for survival-heavy maps
- Entity pressure:
- adjust despawn ranges and mob-spawn behavior in Paper world config
- cap problematic entities where appropriate
- Plugin pressure:
- disable or replace top offenders from Spark traces
- reduce async task frequency where plugin settings allow
不要一次调整所有内容。每次应用一组更改。
- 区块和模拟压力:
- 首先降低 和
view-distancesimulation-distance - 为生存模式占比较高的地图预生成世界
- 实体压力:
- 调整 Paper 世界配置中的实体卸载范围和生物生成行为
- 在适当情况下限制问题实体数量
- 插件压力:
- 根据 Spark trace 禁用或替换问题最严重的插件
- 在插件设置允许时降低异步任务频率
Step 4: Use stable startup flags
第 4 步:使用稳定的启动参数
For Java 25 on current Paper/Purpur, start with a simple measured baseline:
bash
java -Xms4G -Xmx4G -jar server.jar --noguiIncrease heap only when profiling and player load justify it. Add collector flags
only after validating them against the exact JDK and Paper version.
对于当前 Paper/Purpur 上的 Java 25,先以简单且经过测量的基线启动:
bash
java -Xms4G -Xmx4G -jar server.jar --nogui只有在性能分析和玩家负载证明有必要时才增加堆内存。只有在针对确切 JDK 和 Paper 版本验证后,才能添加垃圾收集器参数。
Step 5: Verify improvements
第 5 步:验证改进效果
After each change set:
bash
spark tps
spark healthreportKeep the change only if MSPT/tick stability improves under representative load.
每组更改后执行:
bash
spark tps
spark healthreport仅当代表性负载下的 MSPT/tick 稳定性得到改善时,才保留该更改。
Playbook: Plugin Operations
操作手册:插件运维
Safe plugin change workflow
安全的插件变更工作流
- Build a plugin inventory:
- plugin name and version
- required dependencies
- minimum server version
- Stage updates:
- apply plugin updates in staging first
- run smoke checks: joins, teleports, economy, permissions, saves
- Production rollout window:
- announce maintenance window
- stop server cleanly
- snapshot plugin jars and config
- deploy update batch
- Post-rollout verification:
- watch startup logs for API warnings
- run command and permission sanity checks
- track TPS/MSPT for 15-30 minutes
- 构建插件清单:
- 插件名称和版本
- 必需的依赖项
- 最低服务器版本
- 暂存更新:
- 先在预发布环境中应用插件更新
- 执行冒烟检查:加入、传送、经济、权限、保存
- 生产发布窗口:
- 宣布维护窗口
- 干净地停止服务器
- 快照插件 jar 和配置
- 部署更新批次
- 发布后验证:
- 观察启动日志中的 API 警告
- 执行命令和权限合理性检查
- 跟踪 TPS/MSPT 15–30 分钟
Rollback checklist
回滚检查清单
- Keep previous plugin directory snapshot.
- If severe regression occurs:
- stop server
- restore prior plugin jars/configs
- start and confirm login/world integrity
- Document failing plugin/version pair for future blocks.
- 保留之前的插件目录快照。
- 如果发生严重回归:
- 停止服务器
- 恢复之前的插件 jar/配置
- 启动服务器并确认登录和世界完整性
- 记录导致失败的插件/版本组合,供后续阻止同类问题。
Playbook: Proxy and Forwarding (Velocity)
操作手册:代理与转发(Velocity)
Velocity baseline
Velocity 基线
velocity.tomltoml
bind = "0.0.0.0:25565"
online-mode = true
player-info-forwarding-mode = "modern"
forwarding-secret-file = "forwarding.secret"velocity.tomltoml
bind = "0.0.0.0:25565"
online-mode = true
player-info-forwarding-mode = "modern"
forwarding-secret-file = "forwarding.secret"Backend server requirements
后端服务器要求
server.propertiesproperties
online-mode=falsePaper backend forwarding support ():
config/paper-global.ymlyaml
proxies:
velocity:
enabled: true
online-mode: true
secret: "paste-the-shared-forwarding-secret-here"Use the same secret value stored in Velocity's file; the backend
config takes the secret string itself, not a file path.
forwarding.secretKeep at the server default unless you are handling a
specific legacy-client or incident workaround. It is not part of the baseline
Velocity setup. Also confirm in ; do
not enable BungeeCord forwarding and Velocity modern forwarding at the same time.
enforce-secure-profilesettings.bungeecord: falsespigot.yml后端的 :
server.propertiesproperties
online-mode=falsePaper 后端转发支持():
config/paper-global.ymlyaml
proxies:
velocity:
enabled: true
online-mode: true
secret: "paste-the-shared-forwarding-secret-here"使用与 Velocity 的 文件中存储的相同 secret 值;后端配置需要 secret 字符串本身,而不是文件路径。
forwarding.secret除非正在处理特定的旧版客户端或事故临时解决方案,否则应让 保持服务器默认值。它不属于 Velocity 基础配置的一部分。此外,确认 中的 ;不要同时启用 BungeeCord 转发和 Velocity 现代转发。
enforce-secure-profilespigot.ymlsettings.bungeecord: falseValidation runbook
验证运行手册
- Confirm proxy port is reachable from clients.
- Confirm backend is firewalled from direct internet access.
- Join through proxy and verify:
- UUID consistency
- skin/profile forwarding
- plugin permission behavior
- 确认客户端可以访问代理端口。
- 确认后端受到防火墙保护,无法从互联网直接访问。
- 通过代理加入并验证:
- UUID 一致性
- 皮肤/档案转发
- 插件权限行为
Common proxy incidents
常见代理事故
- "Invalid player info forwarding":
- mismatch in forwarding mode or shared secret between Velocity and backend.
- Random auth/session failures:
- mixed expectations or direct backend exposure.
online-mode
- mixed
- "Invalid player info forwarding":
- Velocity 与后端的转发模式或共享 secret 不匹配。
- 随机认证/会话失败:
- 预期不一致,或后端直接暴露在互联网上。
online-mode
Playbook: Backup and Recovery
操作手册:备份与恢复
Backup policy template
备份策略模板
| Asset | Frequency | Retention | Notes |
|---|---|---|---|
| Every configured world folder | Hourly incremental + daily full | 7 daily, 4 weekly | Include custom and externally stored worlds |
| Daily | 14 daily | Required for operational restore |
| Proxy config/secrets | Daily | 30 daily | Store encrypted off-host |
| Container/orchestration files | On change + weekly | 8 weeks | Git-tracked where possible |
| 资产 | 频率 | 保留策略 | 备注 |
|---|---|---|---|
| 每个已配置的世界文件夹 | 每小时增量 + 每天完整 | 7 份每日备份、4 份每周备份 | 包含自定义世界和存储在外部的世界 |
| 每天 | 14 份每日备份 | 运维恢复所必需 |
| 代理配置/secret | 每天 | 30 份每日备份 | 加密存储在主机之外 |
| 容器/编排文件 | 变更时 + 每周 | 8 周 | 尽可能使用 Git 跟踪 |
Example backup script (Paper/Purpur)
示例备份脚本(Paper/Purpur)
For a production server, quiesce world writes before copying live world folders.
The example below assumes a maintenance window and a cleanly stopped server. If
you use RCON-based live backups instead, choose a client/secret mechanism that
does not expose the password in command arguments. A safe implementation must
run , then , copy the data, and guarantee cleanup
even when the copy fails. Do not treat a flush or alone as a live
backup protocol. Folia disables ; use a clean stop or a verified
platform snapshot there. Test the restore path before trusting any backup.
save-offsave-allsave-onsave-allsave-allFor Fabric or NeoForge recovery, additionally inventory and record the
exact loader launch state: Minecraft and loader versions, Java version, launch
command and arguments, launcher or installer artifacts, and any version or
library manifests used by that deployment. Restore those matching components
with the configured world folders; this Paper/Purpur example does not capture
them for you.
mods/Supply the complete world-folder list as arguments, relative to ,
after checking and any multi-world plugin configuration. Back up
worlds stored outside that root separately; do not infer coverage from .
SERVER_ROOTlevel-nameworld*bash
#!/usr/bin/env bash
set -euo pipefail
if [[ "${SERVER_STOPPED_CONFIRMED:-}" != "1" ]]; then
echo "Set SERVER_STOPPED_CONFIRMED=1 only after stopping the server cleanly." >&2
exit 1
fi
DATE="$(date +%Y-%m-%d_%H-%M-%S)"
BACKUP_ROOT="/backups/minecraft"
SERVER_ROOT="/srv/minecraft"
DEST="${BACKUP_ROOT}/${DATE}"
if [[ "$#" -eq 0 ]]; then
echo "Usage: backup.sh <world-folder> [additional-world-folders...]" >&2
exit 1
fi
for world_dir in "$@"; do
if [[ ! -d "$SERVER_ROOT/$world_dir" ]]; then
echo "Missing configured world folder: $world_dir" >&2
exit 1
fi
done
mkdir -p "$DEST"
tar -czf "${DEST}/worlds.tar.gz" -C "$SERVER_ROOT" -- "$@"
state_items=()
for item in \
plugins config server.properties bukkit.yml spigot.yml paper-global.yml \
paper-world-defaults.yml permissions.yml ops.json whitelist.json \
banned-players.json banned-ips.json; do
[[ -e "$SERVER_ROOT/$item" ]] && state_items+=("$item")
done
if [[ "${#state_items[@]}" -gt 0 ]]; then
tar -czf "${DEST}/server-state.tar.gz" -C "$SERVER_ROOT" "${state_items[@]}"
fi对于生产服务器,复制在线世界文件夹之前,应先停止世界写入。下面的示例假设处于维护窗口,并且服务器已干净停止。如果改用基于 RCON 的实时备份,请选择不会在命令参数中暴露密码的客户端/secret 机制。安全实现必须依次运行 、、复制数据,并确保即使复制失败也能执行 清理。不要仅凭 flush 或 就将其视为实时备份协议。Folia 会禁用 ;在 Folia 上应使用干净停服或经过验证的平台快照。在信任任何备份之前,先测试恢复路径。
save-offsave-allsave-onsave-allsave-all对于 Fabric 或 NeoForge 的恢复,还要盘点 ,并记录确切的加载器启动状态:Minecraft 和加载器版本、Java 版本、启动命令及其参数、启动器或安装器制品,以及该部署使用的所有版本或库清单。将这些匹配的组件与已配置的世界文件夹一并恢复;此 Paper/Purpur 示例不会为你捕获这些内容。
mods/确认 和所有多世界插件配置后,以相对于 的路径,将完整的世界文件夹列表作为参数提供。单独备份存储在该根目录之外的世界;不要根据 推断备份覆盖范围。
level-nameSERVER_ROOTworld*bash
#!/usr/bin/env bash
set -euo pipefail
if [[ "${SERVER_STOPPED_CONFIRMED:-}" != "1" ]]; then
echo "Set SERVER_STOPPED_CONFIRMED=1 only after stopping the server cleanly." >&2
exit 1
fi
DATE="$(date +%Y-%m-%d_%H-%M-%S)"
BACKUP_ROOT="/backups/minecraft"
SERVER_ROOT="/srv/minecraft"
DEST="${BACKUP_ROOT}/${DATE}"
if [[ "$#" -eq 0 ]]; then
echo "Usage: backup.sh <world-folder> [additional-world-folders...]" >&2
exit 1
fi
for world_dir in "$@"; do
if [[ ! -d "$SERVER_ROOT/$world_dir" ]]; then
echo "Missing configured world folder: $world_dir" >&2
exit 1
fi
done
mkdir -p "$DEST"
tar -czf "${DEST}/worlds.tar.gz" -C "$SERVER_ROOT" -- "$@"
state_items=()
for item in \
plugins config server.properties bukkit.yml spigot.yml paper-global.yml \
paper-world-defaults.yml permissions.yml ops.json whitelist.json \
banned-players.json banned-ips.json; do
[[ -e "$SERVER_ROOT/$item" ]] && state_items+=("$item")
done
if [[ "${#state_items[@]}" -gt 0 ]]; then
tar -czf "${DEST}/server-state.tar.gz" -C "$SERVER_ROOT" "${state_items[@]}"
fiRecovery drill (must be tested)
恢复演练(必须测试)
- Stop server.
- Restore selected backup to staging directory.
- Validate ownership/permissions.
- Start server in maintenance mode.
- Verify:
- world spawn loads
- player data is readable
- key plugins initialize
- Reopen to players.
Define targets:
- (acceptable data loss window)
RPO - (acceptable restore duration)
RTO
- 停止服务器。
- 将选定备份恢复到暂存目录。
- 验证所有权/权限。
- 以维护模式启动服务器。
- 验证:
- 世界出生点能够加载
- 玩家数据可读取
- 关键插件能够初始化
- 重新向玩家开放服务器。
定义目标:
- (可接受的数据丢失窗口)
RPO - (可接受的恢复时长)
RTO
Playbook: Live Troubleshooting
操作手册:线上故障排查
Incident triage flow
事故分诊流程
- Classify incident:
- crash on startup
- severe lag / TPS collapse
- join/auth failures
- memory/disk pressure
- Capture evidence first. Linux host example:
bash
df -h
free -hWindows PowerShell host example:
powershell
Get-PSDrive -PSProvider FileSystem
Get-CimInstance Win32_OperatingSystem | Select-Object FreePhysicalMemory,TotalVisibleMemorySizeFrom server/proxy console:
bash
spark tps
spark healthreport- Stabilize:
- stop risky rollout changes
- disable newest suspect plugin first
- reduce player impact (maintenance mode, temporary queue, restricted worlds)
- Recover and document:
- apply rollback or hotfix
- document root cause and permanent preventive action
- 对事故进行分类:
- 启动时崩溃
- 严重卡顿/TPS 崩溃
- 加入/认证失败
- 内存/磁盘压力
- 首先收集证据。Linux 主机示例:
bash
df -h
free -hWindows PowerShell 主机示例:
powershell
Get-PSDrive -PSProvider FileSystem
Get-CimInstance Win32_OperatingSystem | Select-Object FreePhysicalMemory,TotalVisibleMemorySize在服务器/代理控制台中:
bash
spark tps
spark healthreport- 稳定服务:
- 停止有风险的发布变更
- 优先禁用最新且可疑的插件
- 降低对玩家的影响(维护模式、临时队列、限制世界)
- 恢复并记录:
- 应用回滚或热修复
- 记录根本原因和永久性预防措施
Fast symptom map
快速症状对照表
| Symptom | First checks | Typical root cause |
|---|---|---|
| Startup crash after plugin update | latest logs, plugin dependency chain | incompatible plugin/API mismatch |
| High MSPT only at peak hours | Spark profiler, entity/chunk stats | mob farms, heavy scheduled tasks, chunk I/O |
| Players cannot join via proxy | forwarding mode + secret + backend exposure | Velocity/backend config mismatch |
| Periodic hard lag spikes | GC pauses + autosave + backup overlap | memory pressure, backup I/O contention |
| 症状 | 首要检查项 | 典型根本原因 |
|---|---|---|
| 插件更新后启动时崩溃 | 最新日志、插件依赖链 | 插件不兼容/API 不匹配 |
| 仅在高峰时段 MSPT 偏高 | Spark profiler、实体/区块统计 | 刷怪农场、繁重的定时任务、区块 I/O |
| 玩家无法通过代理加入 | 转发模式 + secret + 后端暴露情况 | Velocity/后端配置不匹配 |
| 周期性严重卡顿尖峰 | GC 暂停 + 自动保存 + 备份重叠 | 内存压力、备份 I/O 争用 |
Operational Config Reference
运维配置参考
server.properties
high-impact keys
server.propertiesserver.properties
高影响配置项
server.propertiesproperties
max-players=100
view-distance=10
simulation-distance=8
sync-chunk-writes=true
max-tick-time=60000
enable-rcon=falseproperties
max-players=100
view-distance=10
simulation-distance=8
sync-chunk-writes=true
max-tick-time=60000
enable-rcon=falsebukkit.yml
and spigot.yml
bukkit.ymlspigot.ymlbukkit.yml
和 spigot.yml
bukkit.ymlspigot.ymlUse Spigot/Bukkit docs as authoritative for version-specific defaults and side effects.
Tune conservatively and re-measure after every change set.
将 Spigot/Bukkit 文档作为特定版本默认值和副作用的权威依据。保守调优,并在每组更改后重新测量。
Paper config files
Paper 配置文件
config/paper-global.ymlconfig/paper-world-defaults.yml
Adjust these only after profiling identifies an actionable bottleneck.
config/paper-global.ymlconfig/paper-world-defaults.yml
仅在性能分析识别出可实际处理的瓶颈后调整这些配置。
Deployment Patterns
部署模式
Docker Compose (Paper)
Docker Compose(Paper)
yaml
services:
paper:
image: itzg/minecraft-server:java25
container_name: mc-paper
environment:
EULA: "TRUE"
TYPE: "PAPER"
VERSION: "26.3"
MEMORY: "10G"
ports:
- "25565:25565"
volumes:
- ./data:/data
restart: unless-stoppedThis Docker example targets current Paper 26.3 and Java 25. Re-check plugin
compatibility and take a restorable backup before changing an existing server's
Minecraft or Java line.
yaml
services:
paper:
image: itzg/minecraft-server:java25
container_name: mc-paper
environment:
EULA: "TRUE"
TYPE: "PAPER"
VERSION: "26.3"
MEMORY: "10G"
ports:
- "25565:25565"
volumes:
- "./data:/data"
restart: unless-stopped此 Docker 示例面向当前的 Paper 26.3 和 Java 25。更改现有服务器的 Minecraft 或 Java 版本线前,应重新检查插件兼容性并创建可恢复的备份。
Pterodactyl/Wings notes
Pterodactyl/Wings 注意事项
- Keep startup command and memory allocations consistent with tested JVM flags.
- Pin panel and Wings versions to supported combinations.
- Validate backup mount and restore workflow before production.
- 使启动命令和内存分配与经过测试的 JVM 参数保持一致。
- 将面板和 Wings 版本固定为受支持的组合。
- 在投入生产前验证备份挂载和恢复工作流。
Security Hardening Checklist
安全加固检查清单
- Keep unless proxy forwarding requires backend
online-mode=true.online-mode=false - Never expose backend Paper ports directly when using Velocity.
- Restrict RCON and panel/admin surfaces by firewall/IP allowlist.
- Rotate secrets (, panel credentials, backup credentials).
forwarding.secret - Keep plugin sources trusted; verify checksum/release source before install.
- Maintain off-host encrypted backups.
- Keep Java runtime and host OS patched.
- 除非代理转发要求后端使用 ,否则保持
online-mode=false。online-mode=true - 使用 Velocity 时,绝不要直接暴露后端 Paper 端口。
- 使用防火墙/IP 允许列表限制 RCON 以及面板/管理界面。
- 轮换 secret(、面板凭据、备份凭据)。
forwarding.secret - 确保插件来源可信;安装前验证校验和/发布来源。
- 维护存储在主机之外的加密备份。
- 及时修补 Java 运行时和主机操作系统。
References
参考资料
Paper (primary)
Paper(主要参考)
Spigot/Bukkit (primary config reference)
Spigot/Bukkit(主要配置参考)
Proxy and ecosystem docs
代理与生态文档
- https://docs.papermc.io/velocity/
- https://docs.papermc.io/velocity/getting-started/
- https://docs.papermc.io/folia/faq/
- https://spark.lucko.me/docs
- https://spark.lucko.me/docs/Command-Usage
- https://github.com/itzg/docker-mc-backup
- https://geysermc.org/wiki/geyser/
- https://pterodactyl.io/project/introduction.html
- https://docs.papermc.io/velocity/
- https://docs.papermc.io/velocity/getting-started/
- https://docs.papermc.io/folia/faq/
- https://spark.lucko.me/docs
- https://spark.lucko.me/docs/Command-Usage
- https://github.com/itzg/docker-mc-backup
- https://geysermc.org/wiki/geyser/
- https://pterodactyl.io/project/introduction.html