You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker在Heroku部署Spigot服务器遇R10启动超时问题求助

解决Heroku部署Spigot Minecraft服务器的Error R10启动超时问题

我来帮你搞定这个头疼的R10超时问题!先拆解下问题根源,再一步步给你解决方案:

问题原因

Heroku的Web进程有个硬性要求:必须在60秒内绑定到$PORT环境变量指定的端口,而且默认只监听HTTP/HTTPS流量。但你部署的是Spigot游戏服务器,搭配ngrok做TCP隧道,根本不需要绑定这个Web端口——这就直接触发了Heroku的R10启动超时检测,把你的进程强制干掉了。

解决方案

1. 切换进程类型为Worker

Heroku有专门的worker进程类型,用来运行不需要HTTP端口绑定的后台服务,刚好适配你的Minecraft服务器场景。

  • 新建或修改项目根目录下的Procfile文件,内容改成你实际的启动命令(比如整合了Spigot和ngrok的启动脚本):
    worker: ./start-server.sh
    
    如果你的启动命令是直接运行Java,也可以写成worker: java -jar spigot.jar,记得把ngrok的启动逻辑整合进去。
  • 部署完成后,用命令调整进程数量:
    heroku ps:scale worker=1 web=0
    
    这条命令会启动1个worker进程,同时关闭默认的web进程,这样Heroku就不会再检查端口绑定了。

2. 优化启动脚本的执行顺序

本地运行正常但Heroku上出问题,大概率是Spigot还没完全启动,ngrok就先跑起来了,导致隧道建立失败。你可以给启动脚本加个等待逻辑,确保Spigot的25565端口开放后再启动ngrok:

比如在你的start-server.sh里加入这段:

# 启动Spigot服务器(后台运行)
java -jar spigot.jar &

# 等待25565端口开放
while ! nc -z localhost 25565; do
  echo "等待Spigot服务器启动..."
  sleep 2
done

# 启动ngrok TCP隧道
./ngrok tcp 25565

这样能保证ngrok连接的是已经就绪的Spigot端口,避免隧道建立失败。

3. 处理Heroku的临时文件系统

Heroku的本地文件系统是临时的,每次部署或重启进程,Spigot的世界数据、配置文件都会丢失。如果需要持久化数据,你可以:

  • 使用Heroku的Volumes附加组件(付费),挂载一个持久化存储卷到Spigot的数据目录;
  • 或者在启动脚本里加入逻辑,把数据同步到外部存储,启动时拉取,关闭时上传。

4. 日志排查

如果还是有问题,用这个命令查看Heroku的实时日志,能帮你定位到底是Spigot启动失败,还是ngrok出了问题:

heroku logs --tail

总结

核心就是把Heroku的进程类型从默认的web改成worker,绕开端口绑定的强制要求,再优化启动顺序确保服务正常就绪。这样应该就能解决R10超时的问题了!

内容的提问来源于stack exchange,提问作者paperbenni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:24:36