利用CNB免费搭建半永久Minecraft服务器
参考文章:零成本搭建“半永久”Minecraft服务器:一次对云开发平台规则的自动化探索 - Mumuemhaha Blog
高考考完累晕了。现在开始写。
前言
想整个MC服务器玩,但云服务器最便宜也得几十块一个月。
瞎刷网站,看到了上面那篇文章。用的CNB平台(cnb.cool),是腾讯的,原来估计是想对标github,但好像也不温不火。
github不是有个codespace嘛,这个也有,但是这个的配置可以很高,而且是国内服务器,可以使劲薅。
免费额度这东西
CNB的免费额度是1600核时每月。
算一下的话,4核能跑400小时,平均每天大概13个小时;8核就只有200小时了。MC服务器4核完全够用,所以选4核。
内存是自动分配的,核心数*2。4核就是8G,也不错。
磁盘256G,随便玩。
带宽国内大概5.8MB/s,国际出口一般,不过也能理解。
整体思路
核心问题有三个。
CNB没有公网IP。
这个问题搞了好久。当初我看能直接连ssh,而且codeserver也可以自己穿透端口出去,最主要的是,上面那篇博客不知道怎么回事,好像访问这个问题一下子就解决了,让我以为也很简单。搞来搞去,甚至问了上面博客的作者,最后发现,还是不行。还得老老实实穿透。
CNB是无状态的,workspace一关数据全丢。
所以要用rclone定期往MinIO S3同步数据。搞不懂,直接上claude code!
每次启动都要手动走流程
叫ai写了几个管理脚本,通过CNB的API控制workspace的生命周期。
就这一个开发环境竟然还有API可以自动开启关闭,我真的不知道腾讯怎么想的,除了自动薅羊毛这个功能还有任何用处吗
配置文件
.cnb.yml
1 | $: |
注意点 有个比较坑的地方是runner.cpus必须放在docker前面,这是CNB的格式要求。看了文档里的示例配置才知道。搞不懂为什么。
Dockerfile就很简单,装Java和一些基础工具:
1 | FROM ubuntu:22.04 |
这里也踩了个坑。Dockerfile末尾把apt缓存清了,结果start脚本里又装unzip,没先apt-get update就直接install,自然是装不上的。后来把unzip直接加到Dockerfile里了事。
启动脚本
一堆事情:
- 检查Java
- 装rclone(没有的话自动下)
- 配好MinIO的配置,从S3拉数据
- 装frpc、写frp配置,启动
rclone自动安装那段是这样写的:
1 | RCLONE_BIN="/usr/local/bin/rclone" |
从S3恢复数据也简单,如果本地mc目录是空的而且S3上有数据,就sync下来。
frpc同理,不说了
关机和数据持久化
stop脚本做的事就是反过来:先关掉frpc,然后执行MC的save-all,最后用rclone把整个mc目录同步到S3。
1 | pkill -f "frpc -c" 2>/dev/null || true |
数据持久化,直接抄上面那篇博客,不用我思考了。
数据流向就是:CNB本地 -> frp隧道 -> NAS上的MinIO S3。
Minecraft服务器
按下不表了,没什么好说的。
启动命令就分配4G内存:
1 | java -Xmx4G -Xms1G -jar fabric-server-mc.1.20.1-loader.0.19.2-launcher.1.1.1.jar nogui |
实际运行
其实没什么人来玩。。。所以占用很少,都很少,潜力很大
核时配额的话,4核跑满24小时要96核时,1600额度大概够跑16天。
如果要全天候30天,得选2核才够,但2核的内存和性能跑MC有点勉强。
反正也就随便玩玩,估计是用不完的。
总结
真是宝藏服务啊,能连ssh的codespace真的找不到第二家了。配置还这么高,爽玩。