部署Strapi至Google App Engine后无法访问URL的问题排查
问题诊断
- 端口不匹配:从运行日志可见,Strapi实际启动在
8081端口,但你的app.yaml中PORT环境变量设为1337,Dockerfile也暴露了1337端口。Google App Engine会将外部请求转发到指定的PORT端口,而Strapi未在该端口监听,导致请求无法到达,出现404和超时;同时App Engine的健康检查因端口不对失败,触发实例反复重启。 - 健康检查失败引发重启:App Engine默认会定期向实例指定端口发送健康检查请求(默认路径
/health),若Strapi无响应或端口错误,平台会判定实例不健康,强制重启——这就是即便max_instances=1,服务仍多次重启的原因。
解决方案
1. 统一端口配置
确保Strapi监听端口与App Engine配置一致:
- 推荐沿用Strapi默认端口
1337,需调整Strapi的config/server.js文件,明确绑定该端口:
// config/server.js module.exports = ({ env }) => ({ host: env('HOST', '0.0.0.0'), port: env.int('PORT', 1337), app: { keys: env.array('APP_KEYS'), }, });
同时保持app.yaml中env_variables的PORT为1337,Dockerfile的EXPOSE 1337无需修改。
2. 配置健康检查端点
Strapi默认无/health端点,需手动添加或调整App Engine健康检查路径:
- 方法一:添加自定义健康路由
在Strapi项目中新建路由文件src/api/health/routes/health.js:
module.exports = { routes: [ { method: 'GET', path: '/health', handler: 'health.index', config: { auth: false }, }, ], };
对应控制器文件src/api/health/controllers/health.js:
module.exports = { index: (ctx) => { ctx.status = 200; ctx.body = { status: 'ok' }; }, };
- 方法二:修改App Engine健康检查配置
在app.yaml中添加健康检查规则,指定Strapi可响应的路径:
readiness_check: path: "/health" check_interval_sec: 30 timeout_sec: 4 failure_threshold: 2 success_threshold: 2 app_start_timeout_sec: 300 liveness_check: path: "/health" check_interval_sec: 30 timeout_sec: 4 failure_threshold: 2 success_threshold: 2
3. 调整实例缩放策略
当前basic_scaling设置idle_timeout:5m,实例空闲5分钟会被关闭,后续请求需重新启动实例,也会导致重启现象。若需保持实例持续运行,可改为manual_scaling:
manual_scaling: instances: 1
4. 验证配置
重新部署后,通过gcloud app logs read查看Strapi启动日志,确认监听端口与配置一致;同时检查健康检查请求日志,确保返回200状态码。
内容的提问来源于stack exchange,提问作者Dallas Clark
相关产品推荐
相关产品推荐

