nas跑mc服务器,美滋滋

可爱的站长 发布于 2026-07-20 321 次阅读 1661 字 信息技术


0. 先说下我这套东西跑在啥上面

  • NAS:绿联云 DX4600,系统是 UGOS,全靠 Docker
  • 内网穿透:樱花 FRP,白嫖的免费节点
  • 目标:Java 版和基岩版都能进,不开正版验证,PVP 和生电机器都得能玩

1. MC 服务器怎么搭起来的

镜像用的 itzg/minecraft-server,这玩意儿贼省心,环境变量填好就自己跑。1.21.11 用 :java21 标签,后来升 26.1.2 换了 :latest(里面是 Java 25)。

几个关键环境变量:

TYPE: CUSTOM
CUSTOM_SERVER: /data/purpur-26.1.2.jar
MEMORY: 18G
MOTD: 教培群群服
ONLINE_MODE: false
OPS: BadPaul_

NAS 上的 /volume1/mcserver_docker 挂载到容器里的 /data,存档、插件、配置全在这。

踩的第一个坑:如果 TYPE 填 PAPER 或 PURPUR,镜像每次重启都会自己上网下载核心 jar。问题是国内连 papermc.io 经常超时,日志里躺一片 connection timed out。解决:自己用电脑下好 jar 传 NAS 上,TYPE 改成 CUSTOM,CUSTOM_SERVER 指向 jar 路径,从此启动飞快。

踩的第二个坑——权限:绿联 Docker 给挂载目录默认套了个 ACL 锁,容器里 uid=1000 的用户完全写不进去,日志鬼畜循环 Permission denied。搞了好久,最后删了旧目录换新路径、容器开特权模式才消停。


2. 服务端换来换去的心路历程

顺序用的啥为啥换
一开始Vanilla 1.21.11原版,啥也没有
第二次Paper 1.21.11想要插件,SkinsRestorer 修离线皮肤
最终Purpur 26.1.2比 Paper 多几个生电开关,刷沙刷线都能开

最后定在 Purpur 的原因:Paper 封了好多原版特性,Purpur 用 purpur.yml 把一部分给回来了。小群 PVP 加生电,目前最满意这套。


3. 樱花 FRP 穿透怎么配的

Docker 直接跑 natfrp.com/launcher,网络必须选 host 模式。

环境变量就俩:

NATFRP_TOKEN: ak-xxxxxxxx  ← 官网管理面板里复制
NATFRP_REMOTE: 自己设的密码  ← 等会儿远程管理登录用

隧道我建了两条:

干啥用类型本地端口最终地址长这样
Java 版TCP34629(容器里是 25565)frp-tag.com:52780
基岩版UDP19132frp-web.com:24706

一个小技巧:基岩版可以建多条 UDP 隧道,每条选不同节点(枣庄、广州、成都各来一条),全部指向同一个本地 19132。玩家看自己离哪近就连哪条,Docker 端口映射完全不用动。

隧道建好之后,去 远程管理页面 用刚才那个密码登录,双击隧道才真正启动,地址会弹出来。


4. 基岩版互通(手机也能进!)

全靠 Geyser + Floodgate 这俩插件。去官网下 jar 扔进 plugins/ 文件夹就行:

容器里记得加一条 UDP 端口映射 19132 → 19132。启动日志里看到 Started Geyser on UDP port 19132 就是成了。

注意:手机端填的是樱花给的 UDP 地址和端口,不是 19132。之前被这个问题卡了半天,日志有连接但秒断,最后发现是 FRP 免费节点 UDP 不稳定,换个节点就好了。


5. 都装了哪些插件

插件干嘛的
SkinsRestorer离线模式下正版玩家皮肤能正常显示,离线玩家也能 /skin 换皮
Geyser + Floodgate手机基岩版直连,不用正版
GrimAC开源反作弊,异步跑不吃性能,不会误判 TNT 复制
WorldEdit大范围操作 + 跨存档搬机器,后面细说

还有几个推荐但这次没装的:LuckPerms(权限管理)、EssentialsX(/home /tpa /spawn)、CoreProtect(查熊孩子 + 一键回档)。


6. 把被 Paper 修掉的生电特性搞回来

默认情况下 Paper 和 Purpur 把 TNT 复制、破基岩、刷沙这些都关了。改配置文件就行。

文件一:paper-global.yml

unsupported-settings:
  allow-headless-pistons: true            # 无头活塞
  allow-permanent-block-break-exploits: true  # 破基岩
  allow-piston-duplication: true         # TNT 复制 / 地毯复制

文件二:purpur.yml(只有 Purpur 有这个)

piston:
  allow-tripwire-disarming: true         # 刷线机
  allow-gravity-block-duplication: true  # 刷沙子/混凝土粉末

改完重启,生电机器全部复活。注意 Paper 26.1 以后删掉了一些选项(比如重力方块复制),所以要用 Purpur。


7. 怎么把旧存档的机器搬到新服

WorldEdit 的 schematic 功能,选中区域导出成文件,到新服粘贴。

  1. 装 WorldEdit,拿到木斧(//wand)
  2. 左键点机器一角,右键点对角,框住整台机器
  3. //copy → //schem save 机器名
  4. .schem 文件在 plugins/WorldEdit/schematics/ 里
  5. 到新服站好位置 → //schem load 机器名 → //paste

箱子里的东西、朝向全部保留。如果旧存档在另一个文件夹,装个 Multiverse-Core 把旧世界挂成额外维度就能进去导。


8. 一些日常操作备忘

要干啥怎么干
给自己 OP终端里 rcon-cli op BadPaul_
调难度游戏里 /difficulty hard
切生存模式/gamemode survival @p
备份世界cp -r /data/world /data/world_backup
换端后背包丢了UUID 变了,去 playerdata 里 cp 旧的 .dat 到新的
Paper 迁移报冲突删掉 world/dimensions/ 让 Paper 重新迁移

9. 从 1.21.11 升到 26.1.2 的教训

这两个版本之间跨度巨大,Mojang 连版本号命名都改了。Paper 自动迁移世界格式的时候容易炸,尤其是手贱"暴力覆盖"了文件夹之后,新旧文件打架直接报错循环。

教训总结:

  • 升级前一定备份 world/ 文件夹,别偷懒
  • 迁移失败就删 world/dimensions/,这是半成品产物,删了让 Paper 重来
  • 如果实在迁不动,回退 1.21.11 就行——你的房子、箱子全在 world/region/*.mca 里,不会丢
  • 26.1.2 需要 Java 25,itzg 镜像用 :latest 就是 Java 25;1.21.11 用 :java21

10. 最终跑起来的样子

玩家(Java版) ──TCP──→ frp-tag.com:52780 ──→ 绿联NAS → Docker mc-server
玩家(基岩版) ──UDP──→ frp-web.com:24706 ──→ Geyser → 同一个服务器

Docker 里跑着俩容器:
├── mc-server(Purpur 26.1.2,18G 内存)
│   ├── /data/plugins/  ← 各种插件 jar
│   ├── /data/world/    ← 主世界存档,你的房子在这
│   └── /data/config/   ← paper-global.yml、purpur.yml
│
└── sakurafrp(樱花启动器,host 网络)
    ├── TCP 隧道 → Java 玩家
    └── UDP 隧道 → 基岩版玩家(可以多条)

11. 有用的链接