文笔不好,没写清楚的地方尽管问🤐🤐
MCSpot 是一个基于腾讯云 API 的 Minecraft 服务器按需启动系统。
核心能力:
- 一键创建实例
- 无人自动关服
- 自动上传存档
- 自动释放实例节省费用
目标:让 Minecraft 服务器做到“用的时候才花钱”。
适用对象:不想每次游玩都开房间,希望与好友开服务器、随时可以游玩MC但预算有限的玩家。
Github:https://github.com/zhengweixin0101/MCSpot
费用参考
环境:
- 2C4G 竞价实例
- 300MB 存档
- COS 存储(同地域内网)
费用构成:
| 项目 | 费用 |
|---|---|
| 实例费用 | 约 0.04 元 / 小时 |
| 存储费用 | 约 0.2 元 / 月 |
| 流量费用 | 0.8 元 / GB (或 0.06/Mbps/h) |
说明:
- 存档上传/下载是主要流量来源
- COS内网传输不会消耗流量
- 实测两人游玩时按量付费每小时消耗0.1~0.27元(低带宽时按小时似乎更划算)
使用竞价实例可最大限度节约服务器成本。
但竞价实例会随价格波动被随时释放,被系统回收时通常会提前 2 分钟通知。
需要做好随时备份的准备(有一键备份脚本)。
当然也可以多话点服务器费用使用普通的按量付费。
项目原理说明
- 用户在网页点击“创建服务器”
- 调用腾讯云API创建实例(基于启动模板)
- 实例启动后运行start.sh
- 无玩家时 auto_shutdown.sh 自动上传存档
- 调用腾讯云API释放实例
重要限制说明
当前通过查询账号下的实例列表来定位目标实例,
因此要求账号下仅存在唯一一个用于游戏的实例。
否则可能:
- 获取错误的实例ID
- 删除错误实例
- 显示错误的公网IP
可通过使用子账号来解决此问题。
创建自定义镜像
需要先在腾讯云创建一个CVM云服务器实例。
创建完成后用SSH登录服务器。
Tips:
该实例仅用于配置自定义镜像,与运行MC服务端无关。
地域最好选择和之后创建游戏服务器相同。
在公共镜像里选择需要使用的操作系统,创建自定义镜像后将无法更换。
磁盘建议选最小值(20G)其他配置怎么便宜怎么来。
本文以Debian 12系统为例。
部署MC服务端
这一步没啥特殊的,我写的比较简单,可以自行按照网上的其他教程部署。
我使用的是命令行启动。也可以选择其他方法(如:MCSG),但后续步骤可能需要自行调整。
安装好服务端所需的java环境。
下载服务端jar包 上传到 /opt/mcs/(目录可自定义)
本文以原版 Minecraft 1.21.11 为例(需 Java 21)
启动并配置好服务端,测试没问题后继续下一步。
配置存储
支持配置腾讯云COS对象存储或AWS S3兼容API作为游戏存档的存储服务,可按实际情况选择。
部分S3有免费额度(如:Cloudflare R2),但使用S3时服务器会产生更多的流量费用(按量付费时)。
COS无免费额度,但存档上传、下载可以走内网,只需要支付存储费用,理论消耗更低。
配置 S3
- 登录服务器,执行下列命令安装
awscli
sudo apt update
sudo apt install -y awscli
执行
aws configure按终端的提示填写
Access Key ID、Secret Access Key、Default region等信息。
awscli 对部分 S3 兼容服务的 endpoint 支持存在兼容问题,
需要在每条命令中显式使用:
--endpoint-url <你的S3访问地址>
配置完成后执行
aws s3 ls --endpoint-url <你的S3访问地址>如果成功输出了你的存储桶,那恭喜你配置成功!
配置 COS
首先需要登录腾讯云控制台,创建一个和服务器桶地域的存储桶。
建议给存储桶添加一个标签,后面可能会用到。
存储桶必须与CVM实例处于同地域,否则无法走内网。
服务器使用
nslookup命令检查是否指向内网地址
然后安装 coscli 并配置存储桶。
安装和配置步骤前往 腾讯云文档中心 查阅。
按照文档配置完成后,还需要将coscli移动到系统 PATH:
# 移动到 /usr/local/bin
mv coscli /usr/local/bin/coscli
# 验证
coscli --version
上传脚本
将 MCSpot 仓库中sh目录下的文件全部上传到/opt/sh/目录,并给予可执行权限。
将.env.example改名为.env,并修改为自己的配置。
文件内注释,这里不重复说明了。不清楚的评论区提问或pr。
脚本使用的账号需要给予
read_instance和terminate_instance权限
可手动执行每个脚本,测试功能是否正常。
start.sh:一键启动,需配置开机自启。
stop.sh:手动停止,运行后停止服务端并上传存档但不释放实例。
auto_shutdown.sh:由start.sh自动运行,持续监听玩家数量,到达阈值时停止服务端后自动上传存档到s3并释放实例。
我先测试过没问题才上传的,所有理论上脚本本身是没问题的,但还是测试一下比较好。
设置开机自启
创建文件 /etc/systemd/system/minecraft.service:sudo nano /etc/systemd/system/minecraft.service
内容如下(按需调整):
[Unit]
Description=Minecraft Server with Auto Shutdown
After=network.target
[Service]
Type=forking
User=root
WorkingDirectory=/opt/mcs
ExecStart=/opt/sh/start.sh
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
查看实时日志:journalctl -u minecraft.service -f
创建镜像
系统配置完并测试没问题后,前往腾讯云云服务器控制台,找到你刚创建的实例,点右边更多-镜像/操作系统-创建自定义镜像
输入名称后点创建镜像,等待创建完成。
创建实例启动模板
按正常流程选择服务器配置。
到镜像这里,选择自定义镜像-你刚才创建的镜像。
登录方式选立即关联密钥,否则无法创建模板。密钥请备份。
建议添加一个标签,后面可能会用到。
确认配置信息后,可以看到有一个另存为模板按钮,点击后输入名称,保存。
创建完成后,前往控制台-云服务器-实例启动模板找到你刚才创建的模板,点击右侧编辑标签选项,添加和前面云服务器一样的标签。
创建腾讯云子账号
如果你觉得太麻烦且可以保证账号只有这一个CVM实例,那么也可以跳过该部分,直接使用主账号。
前往 访问管理 - 用户列表 - 用户 - 新建用户 - 快速创建
输入用户名,访问方式添加编程访问,然后创建用户即可。
创建后会显示用户名、密码、密钥,请保存好,退出后将无法重新查看。
创建完成后需要配置所需权限。
转到策略-新建自定义策略-按标签授权
服务这栏添加cos和cvm,两个都勾选的话操作默认是全部且不可更改。
选择前面资源绑定的标签,其他选项默认即可。
配置好后点下一步,会提示:“当前策略内容过多,超出策略字符限制,需要拆分多条策略。”
直接选自动拆分,策略名称建议修改一下方便辨认(如:mcs-1、mcs-2、mcs-3)。
最下面选择将此权限授权给用户,选择刚刚创建的子账号,然后点击完成即可。
因为子账号还没有创建实例和付款的权限,授权这些权限。
继续点击新建自定义策略,注意这次要选按策略生成器创建。
服务这栏勾选cvm。
操作这栏找到写操作并展开,只需要勾选RunInstances。
配置好后点下一步,和刚刚一样授权给子账号。
完成后回到策略页面,找到QCloudFinanceFullAccess这个预设策略关联到子账号。
至此,子账号的权限配置完成,可登录子账号,检查存储桶、实例启动模板、镜像等资源释放可见,如果都能看见就成功了。
新账号默认的区域是广州,记得切换的原来创建资源去区域,不要和我一样傻傻的重试了一个小时还是加载不出来...
部署 MCSpot
我以Vercel部署为例,还有很多免费的PaaS平台可以部署。
Fork 项目仓库:https://github.com/zhengweixin0101/MCSpot
登录 Vercel,Add new project,improt刚刚fork的仓库。
点击Environment Variables根据仓库根目录下的.env.example文件中的说明添加环境变量。
注意不要搞成sh目录下的.env.example
项目所需的Redis数据库也可在Vercel中创建
填写完环境变量后部署即可,部署完成后看访问默认域名,账号密码为环境变量中设置的,登录后可点击创建服务器来启动服务。
使用管理员账号登录后,控制台会显示操作日志,如创建失败,可在此查看日志。








