1. 项目概述:用Docker在群晖NAS上搭建Minecraft联机服务器
作为一名玩了8年Minecraft的老玩家,我一直在寻找最稳定的私人服务器搭建方案。直到把游戏服务器搬上群晖NAS,才发现这才是真正的"养老"方案——不仅省电静音,还能实现7x24小时在线。最近给工作室的小伙伴们搭建了基于飞鼠组网(ZeroTier)的联机环境,实测延迟比公网开服还低20ms。下面就把这套方案的完整搭建过程分享给大家。
这个方案的核心优势在于:
- 利用群晖NAS的低功耗特性实现服务器常驻
- 通过Docker容器化部署避免环境冲突
- 使用飞鼠组网技术绕过运营商NAT限制
- 支持PC/手机/主机全平台联机
2. 环境准备与工具选型
2.1 硬件配置建议
我的测试设备是DS920+(J4125处理器/8GB内存),实测同时承载10人联机时:
- CPU占用率约35%
- 内存消耗4.2GB(含系统占用)
- 网络吞吐量峰值8Mbps
建议最低配置:
- x86架构群晖机型(ARM版兼容性较差)
- 双核处理器
- 4GB以上内存
- 固态硬盘加速区块加载
2.2 软件组件清单
| 组件名称 | 版本要求 | 作用说明 |
|---|---|---|
| Docker | 18.09以上 | 容器运行环境 |
| ZeroTier | 1.8.4以上 | 虚拟局域网组网 |
| itzg/minecraft-server | latest | 官方维护的MC服务端镜像 |
| Portainer | 可选 | 图形化容器管理工具 |
注意:群晖DSM7.0以上版本默认已安装Docker套件,老版本需手动安装
3. 飞鼠组网配置详解
3.1 ZeroTier网络创建
- 注册并登录ZeroTier官网控制台
- 创建新网络(Network)获取16位Network ID
- 在"IPv4 Auto-Assign"段添加私有IP池(如192.168.192.0/24)
- 启用"Allow Ethernet Bridging"选项
实测发现,开启以下设置可提升联机稳定性:
- MTU值设为1280(避免某些运营商分片)
- 启用加密传输(Encryption)选项
- 关闭IPv6(国内网络兼容性更好)
3.2 群晖端接入配置
通过SSH登录群晖执行:
bash复制# 安装ZeroTier客户端
sudo curl -s https://install.zerotier.com | sudo bash
# 加入网络
sudo zerotier-cli join [NetworkID]
# 查看状态
sudo zerotier-cli listnetworks
在控制台通过设备认证后,ifconfig命令应出现zt开头的虚拟网卡。
4. Docker版MC服务端部署
4.1 容器创建参数详解
在群晖Docker界面点击"新增"→"使用命令行":
bash复制docker run -d -it \
--name=mc_server \
-e EULA=TRUE \
-e VERSION=1.20.1 \
-e MEMORY=4G \
-e TYPE=PAPER \
-p 25565:25565 \
-v /volume1/docker/mc:/data \
--restart unless-stopped \
itzg/minecraft-server
关键参数说明:
VERSION:指定服务端版本(建议与客户端一致)TYPE:服务端核心类型(Paper优化最好)MEMORY:JVM堆内存(建议不超过物理内存的70%)/data挂载点:保存世界数据/插件/配置
4.2 性能调优技巧
在server.properties中添加:
properties复制view-distance=8
simulation-distance=6
max-tick-time=60000
实测有效的JVM参数:
bash复制-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200
-XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC
5. 联机测试与问题排查
5.1 多平台连接方法
-
PC端:
- 安装ZeroTier客户端并加入同一网络
- 在MC多人游戏输入服务器内网IP(如192.168.192.x)
-
手机端:
- 安装ZeroTier One应用
- 在PojavLauncher中填写服务器地址
-
主机端:
需要通过路由器配置静态路由,将ZeroTier网段指向已接入的PC
5.2 常见问题解决方案
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 连接超时 | 防火墙未放行 | 在群晖控制面板放行25565端口 |
| 区块加载卡顿 | 内存分配不足 | 调整MEMORY环境变量 |
| 玩家频繁掉线 | MTU设置不当 | ifconfig zt0 mtu 1280 |
| 模组不兼容 | 服务端类型不匹配 | 使用FORGE/FABRIC类型镜像 |
6. 进阶维护技巧
6.1 自动化备份方案
创建定时任务(控制面板→任务计划):
bash复制#!/bin/bash
tar -czf /volume1/backup/mc_$(date +%Y%m%d).tar.gz /volume1/docker/mc/world
rclone copy /volume1/backup/mc_*.tar.gz onedrive:/mc_backup
建议备份频率:
- 每日增量备份世界数据
- 每周完整备份整个/data目录
- 重大更新前手动备份
6.2 性能监控方案
安装NetData容器实现实时监控:
bash复制docker run -d --name=netdata \
--cap-add SYS_PTRACE \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-p 19999:19999 \
--restart unless-stopped \
netdata/netdata
重点关注指标:
- Java进程CPU占用
- 内存交换频率
- 网络输入输出队列
- 磁盘IO等待时间
这套方案在我们工作室已稳定运行半年多,相比传统VPS开服,群晖方案在功耗和噪音控制上优势明显。有个小技巧分享:在docker-compose.yml中添加depends_on参数,可以确保ZeroTier网络就绪后再启动MC服务端,避免启动顺序问题导致的连接故障。