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

Heroku部署Express Gateway时$PORT绑定失败问题求助

解决Heroku部署Express Gateway的R10超时错误

问题诊断

你遇到的Error R10 (Boot timeout)本质上有两个核心原因:

  1. 端口冲突与不必要的HTTPS配置:你同时给http和https块配置了同一个${PORT:-8080}端口,Express Gateway会尝试启动两个服务器绑定同一端口,必然失败;而且Heroku不需要你自己启动HTTPS服务器——它会在反向代理层处理SSL,你的应用只需要监听HTTP端口即可。
  2. 绑定地址错误:你的host配置默认是localhost,Heroku的dyno要求应用监听0.0.0.0(或IPv6的::),否则外部请求无法到达你的应用,Heroku会判定应用启动超时。

修复方案

修改你的gateway.config.yml,只保留HTTP配置并修正绑定地址:

http:
  port: ${PORT:-8080}
  host: ${HOST:-0.0.0.0}
# 移除或注释掉HTTPS配置块,仅在本地开发时启用
# https:
#   port: 8443
#   host: localhost
#   ... 你的本地HTTPS证书等配置

为什么这样有效?

  • Heroku分配的PORT是动态端口,且仅允许你的应用监听这个端口的HTTP服务,HTTPS请求会由Heroku自动转发到你的HTTP服务器。
  • 绑定0.0.0.0意味着应用监听容器的所有网络接口,确保Heroku的反向代理能连接到你的应用,避免启动超时。

额外小贴士:Heroku Redis URL解析

如果你需要从Heroku提供的REDIS_URL中拆分出单独的认证信息和地址,可使用这段Node.js代码处理,方便后续在Express Gateway的Redis插件配置中使用:

var redis_Url = process.env.REDIS_URL;
var groups = /^redis:\/\/(.*?)\:(.+?)\@(.+?)\:(.+)$/gi.exec(redis_Url);
var nm = groups[1];
var pasw = groups[2];
var host = groups[3];
var port = groups[4];
process.env.REDIS_NM = nm;
process.env.REDIS_PASW = pasw;
process.env.REDIS_HOST = host;
process.env.REDIS_PORT = port;
console.log('redis url -> '+process.env.REDIS_URL);
console.log('nm -> '+process.env.REDIS_NM);
console.log('pasw -> '+process.env.REDIS_PASW);
console.log('host -> '+process.env.REDIS_HOST);
console.log('port -> '+process.env.REDIS_PORT);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:48:14