为什么nodejs实例在谷歌应用引擎标准环境下无法成功启动?

IT技术 node.js reactjs google-app-engine next.js
2021-05-15 08:06:20

我正在将 nextjs 项目部署到 goole 应用引擎标准环境。

我从这次讨论中得到了一些灵​​感,并基于这个repo构建了我的应用程序

(我尝试将此演示项目部署到我的应用程序引擎并确认它运行良好)

但是,在我部署项目后,应用引擎显示 500 错误。

https://stars-website-nextjs.ue.r.appspot.com/

当我检查应用引擎日志时,它显示了此消息。

请求失败,因为实例无法成功启动

这是我的 app.yaml

env: standard
runtime: nodejs14
service: default

handlers:
  - url: /.*
    secure: always
    script: auto

和我的 package.json 文件

... ...
"scripts": {
    "dev": "next -p 3030",
    "start": "next start -p 8080",
    "serve": "next start -p 8080",
    "gcp-predeploy": "find ./build -name '\\[...*' -exec bash -c 'mv \"$1\" \"${1/.../@@@}\"' -- {} \\;",
    "gcp-build": "find ./build -name '\\[@@@*' -exec bash -c 'mv \"$1\" \"${1/@@@/...}\"' -- {} \\;",
    "build": "rm -rf ./build && next build",
    "deploy": "npm run build && npm run gcp-predeploy && gcloud app deploy",
    "test": "echo \"Error: no test specified\" && exit 1"
  }
... ...

我的理解是,如果我将 nextjs 构建目录上传到应用引擎,它会自动运行 package.json 中的“start”命令。

我将相同的项目部署到 vercel.com 并且运行良好https://stars-nextjs.vercel.app

为什么谷歌应用引擎不能成功启动我的项目?

我可以在某处检查 nodejs 实例日志吗?

我对应用引擎非常陌生,所以我对任何其他将 nextjs 项目部署到应用引擎的方法持开放态度。我还阅读了有关用于自动构建和部署的云构建和构建触发器,这听起来很吸引人,但不确定从哪里开始。

我真的很感激任何帮助。

2个回答

不确定您是否已经这样做了,但您需要先为您的项目启用 App Engine API,为将运行您的部署并触发在 gcloud CLoud Shell 上构建项目的服务帐户设置所需的 IAM 权限。

查看有关部署到 App Engine 的指南

这个是为了仔细检查你的 yaml 和 json 文件中包含的参数以用于你的构建配置。 构建配置概述

当您的应用程序返回 500 错误时,请务必在https://console.cloud.google.com/logs/viewer 上的Stackdriver Logging 中查看应用程序的 stdout 和 stderr 日志仔细检查您是否正在查看“GAE 应用程序”资源选择器。

我还复制了您的问题,使用了您正在使用的相同 package.json 和 app.yaml 文件,并克隆了您说用于构建应用程序的 Git Hub 存储库文件。我详细描述了我在初始设置后采取的步骤:

更新

我的

{将列出的软件包更新到最新版本)

注意:还要记住你的 package.json 和 package-lock.json 应该与包同步

我打开了云控制台并启用了以下 API:

  1. 应用引擎 API

  2. 计算引擎 API

  3. 云构建 API

我还向我的服务帐户授予了这些角色:App Engine Admin、Cloud Build Service 帐户。

App Engine Admin 角色:完全管理应用引擎应用而不是存储。

Cloud Build 服务帐户:可以执行构建。

然后我在 VSCode 中打开一个新终端并运行以下命令:

  1. npm 运行开发

  2. gcloud 身份验证登录

这个命令把我带到一个登录页面,在那里我登录到了上面提到的服务帐户。我授予了 Google Cloud SDK 的允许权限。

  1. 云初始化

[i]重新初始化现有配置

[ii]选择我的服务帐号

[iii]选择项目ID

[iv] 为将部署我的应用程序的区域选择 us-central。

  1. npm 运行构建

  2. npm 运行部署

  3. gcloud 应用浏览

由于您使用的是“gcloud app deploy”,问题似乎发生在您身上。尝试按照 package.json 脚本中的说明运行 npm run build 然后 npm run deploy ,看看它是否能解决您的问题。该命令在执行实际上传之前首先进行构建。还要启用我列出的所有 API 并将角色授予您的云构建服务帐户。如果问题仍然存在,请告诉我。