
如何在 RV1126B 开发板上部署 Minecraft 服务器
1. 前言
ARM 开发板通常更多用于边缘计算、视觉推理、网关服务或嵌入式应用,但只要系统环境合适,它同样可以承载一些轻量级通用服务。本文记录一次在 ELF-RV1126B 开发板 上部署 Paper Minecraft 服务器 的完整过程,包括 Java 版本选择、存储目录规划、服务端安装、systemd 自启动配置,以及资源受限平台上的一些实际考虑。
本文使用的平台配置如下:
- 开发板:ELF-RV1126B
- SoC:Rockchip RV1126B
- CPU:4 × Cortex-A53 @ 1.6GHz
- NPU:3 TOPS @ INT8
- RAM:4GB LPDDR4
- eMMC:64GB
- 操作系统:Debian 12
本文目标不是构建高并发、大型插件服,而是部署一个适合 小人数联机 的轻量级 Minecraft 服务器。
2. 版本选择:为什么采用 Java 17 与 Paper 1.19.4
在 ARM 开发板上部署 Minecraft 服务端,第一步不是下载安装,而是先确定 Java 版本 与 服务端版本 的兼容关系。
本次环境中,Debian 12 仓库直接可用的是 ·openjdk-17· 系列,因此优先考虑 Java 17 对应的服务端版本。综合兼容性、资源占用与部署复杂度,最终采用:
- Java:OpenJDK 17
- 服务端:Paper 1.19.4
这样选择的原因主要有三点:
2.1 Java 17 可直接通过系统包管理器安装
不需要额外配置第三方源,也不需要手工部署新版本 JDK,维护成本较低。
2.2 Paper 1.19.4 对 Java 17 兼容成熟
相比更新的 Minecraft 版本,1.19.x 对 Java 版本要求更温和,更适合在 ARM 小板上做轻量部署。
2.3 Paper 更适合资源受限平台
相较于原版服务端,Paper 在性能和可调优性方面更适合低功耗、小内存设备,尤其是在多人联机或区块加载频繁的情况下更明显。
3. 存储规划:为什么不把服务器放在根分区
这块板子的实际分区结构中,根分区空间较小,而 /userdata 分区容量明显更充裕。部署过程中,根分区空间很快暴露出限制。
查看磁盘情况时,系统状态大致如下:
/根分区容量较小,仅剩数百 MB 可用/userdata分区仍有数十 GB 可用空间
这类布局在开发板上很常见,因此如果直接把 Java、服务端文件、世界存档、日志等都压在根分区,后续会很快遇到空间瓶颈。
因此本次部署遵循两个原则:
- 安装必须的系统软件时,优先解决 APT 缓存占用问题
- Minecraft 服务目录统一放到 /userdata
4. 解决 APT 缓存占用问题
在安装 Java 时,APT 直接提示缓存目录空间不足:
E: You don't have enough free space in /var/cache/apt/archives/
这说明虽然 /userdata 空间充足,但默认的软件包缓存仍写入根分区。
处理方法是将 APT 缓存目录迁移到 /userdata。步骤如下:
4.1 清理现有缓存
sudo apt clean
sudo apt autoclean
sudo apt autoremove -y
4.2 在 /userdata 创建新的缓存目录
sudo mkdir -p /userdata/apt-archives
sudo chown root:root /userdata/apt-archives
sudo chmod 755 /userdata/apt-archives
4.3 替换原有缓存目录为软链接
sudo mv /var/cache/apt/archives /var/cache/apt/archives.bak
sudo ln -s /userdata/apt-archives /var/cache/apt/archives
4.4 验证结果
ls -ld /var/cache/apt/archives
df -h /var/cache/apt/archives /userdata
这样一来,后续通过 apt 下载的安装包就会写入 /userdata,避免根分区继续承压。
5、安装 Java:只求朴素,不求花哨
因为目标是纯服务端运行,所以没必要装完整桌面 Java 开发环境,直接上:
sudo apt update
sudo apt install -y openjdk-17-jre-headless curl jq
检查一下版本:
java -version
which java
结果正常的话,会看到类似:
openjdk version "17.0.18"
...
/usr/bin/java
到这里,Java 环境就算就位了。
6、下载 Paper:终于进入正题了
服务端选的是 Paper 1.19.4。
下载方式直接用接口拉最新稳定构建,最终会得到一个 paper.jar。
下载完之后,目录里会有:
/userdata/minecraft/paper.jar
看到那个几十 MB 的 jar 出现时,会有一种很奇妙的感觉:
好,边缘 AI 板子,现在开始准备承载方块世界。
7、第一次启动:熟悉的 EULA 环节虽迟但到
第一次启动还是很标准的:
sudo -u minecraft bash -c 'cd /userdata/minecraft && java -Xms1G -Xmx2G -jar paper.jar --nogui'
正常情况下,第一次主要是让它:
- 解压依赖
- 生成默认配置
- 提示你同意 EULA
然后手动写:
echo 'eula=true' > /userdata/minecraft/eula.txt
之后再启动,就能看到 Paper 正常初始化:
- 加载 properties
- 准备世界
- 监听 25565
- 准备 level "world"
当时看到它真的开始 Preparing level "world",那一瞬间还是很开心的。
因为这不是在一台正常 x86 服务器上,而是在一块 RV1126B 开发板上。
这感觉有点像:
你原本以为它该去跑视觉推理,结果它认真地开始生成草方块和树。
8、内存怎么配:别上来就梭哈 4G
板子总内存是 4GB, 但这不代表你可以自信地给 Java:
-Xmx4G
那样大概率不是你在玩 Minecraft, 而是 Linux 在陪你玩“谁先 OOM”。
我最后给的启动参数比较保守:
-Xms1G -Xmx2G
这个配置的意思大概是:
- 给 Minecraft 1G 起步
- 最多吃到 2G
- 剩下空间给系统、缓存、其他进程
对于这类板子,内存参数的哲学不是“堆越大越强”,而是:
留点余地,大家都好过。
9、把它做成 systemd 自启动:它现在真的是个服务器
临时能跑不算什么, 开机自启动 才是“它现在真的是个服务器”那种感觉。
一个很简单的启动脚本:
#!/usr/bin/env bash
cd /userdata/minecraft || exit 1
exec /usr/bin/java \
-Xms1G \
-Xmx2G \
-jar paper.jar \
--nogui
然后再配一个 minecraft.service,让 systemd 去托管它。
大意上就是:
- 指定用户
minecraft - 工作目录
/userdata/minecraft - 启动执行
start.sh - 失败自动拉起
这样一来,后面就可以:
sudo systemctl start minecraft
sudo systemctl stop minecraft
sudo systemctl restart minecraft
sudo systemctl status minecraft
journalctl -u minecraft -f
不得不说, 当你第一次在开发板上敲下:
sudo systemctl enable minecraft
那种感觉已经完全不是“在玩具上折腾”,而是:
行,这台板子现在也是个正儿八经的小服务器了。
10、为了以后好管理,开 RCON 吧
既然已经是服务器了,那肯定不想每次都手动趴在前台控制台上操作。
所以后面还顺手开了 RCON。
在 server.properties 里打开:
enable-rcon=true
rcon.port=25575
rcon.password=你自己的密码
然后就可以用 mcrcon 之类的客户端去发命令,比如:
mcrcon -H 127.0.0.1 -P 25575 -p '你的密码' list
这样后面无论是:
- 看在线人数
- 发广播
- 下插件命令
- 管理 Chunky 预生成
都会轻松很多。
11、预生成区块:为了不让朋友一进服就帮你测压力极限
开发板跑 MC 最大的问题之一,不是“能不能启动”,而是:
有人一边跑图一边开新区块时,板子会不会当场开始怀疑人生。
所以后面我又准备装 Chunky 做区块预生成。
逻辑很简单:
- 提前把主世界周边地形生成出来
- 减少玩家乱跑时的即时区块生成压力
- 对这种低功耗小板子尤其有意义
如果只打算几个人轻度玩,我建议一开始不要太贪,先设个比较克制的半径,比如:
3000稳了再去 5000
别一上来就做“世界尽头都给我生成完”, 那种想法通常只存在于心很热、CPU 很冷的时候。
12、写在最后
如果要总结,我觉得不是“RV1126B 能不能跑 MC”。
因为答案已经很明确了:
能。
真正有意思的是,你会在这个过程中重新理解一遍:
- Linux 小系统怎么分区
- 根分区和数据分区怎么取舍
- Java 在 ARM 板子上的现实配置
- Paper 为什么比原版更适合轻量部署
- systemd 托管一个服务到底有多舒服
- RCON、插件、预生成这些东西真正落地是什么感觉
而且当你在一块平时拿来搞嵌入式边缘计算的板子上,看着它认真地监听 25565 的时候, 会有一种很奇妙的技术快乐:
原来“服务器”这件事,本质上也没那么神秘。
不过就是:
- 一个能跑 Java 的系统
- 一点点空间
- 一点点内存
- 一些耐心
很多看起来“不是给这个用的东西”,其实只要资源够、思路对,就真的能拿来用。
开发板不一定非得只跑推理。 它也可以在某个晚上,安安静静地替你托管一个小小的方块世界。