如何在 Google App Engine 上运行 Nestjs Monorepo?

问题描述 投票:0回答:1

我有一个普通的 Nestjs monorepo,但无法在 Google App Engine 上运行。我们首先必须在 GAE 上部署默认服务,我尝试通过在 monorepo 中获取默认嵌套应用程序 (my-app) 并添加我的 app.yaml 配置和 cloudbuild.json 配置文件来实现这一点。该项目如下所示:

apps
    my-app
        src
            app.controller.ts
            app.module.ts
            app.service.ts
            main.ts
            tsconfig.app.json
            app.yaml // GCP config file
            clouldbuild.json // GCP config file
   my-project
         src
            app.controller.ts
            app.module.ts
            app.service.ts
            main.ts
            tsconfig.app.json
nest-cli.json
package.json
tsconfig.json
node_modules

我部署到 GAE 时遇到的错误是:

no such file or directory, open '/workspace/package.json'

我猜这是因为 package.json 与 app.yaml 不在同一级别。然而,由于这是一个 monorepo,并且 package.json 在应用程序之间共享,我应该如何配置 GAE 和 Cloud Build 以从根文件夹读取 package.json,但仅在 app.yaml 中部署服务?根据 gcp 文档,app.yaml 必须与源文件处于同一级别。 GCP 文档 链接

google-app-engine nestjs monorepo
1个回答
0
投票

由于 monorepo 的结构,在 Google App Engine (GAE) 上运行 NestJS monorepo 可能会有点棘手。 Google App Engine 期望 app.yaml 文件与应用程序的源文件位于同一目录中,这会在您使用 monorepos 时导致问题。您可以使用配置组合在 monorepo 中部署特定服务。

  1. 项目结构: 使用 monorepo 中每个 NestJS 应用程序的目录来组织您的项目。

    我的monorepo |-- 应用程序 | |-- 我的应用程序 | |-- 源代码 | | |-- ... | |-- app.yaml |-- 我的项目 | |-- 源代码 | |-- ... |-- Nest-cli.json |-- 包.json |-- tsconfig.json |-- cloudbuild.yaml |-- 节点模块


  1. 云构建配置: 将 cloudbuild.yaml 文件放在 monorepo 的根目录下:

    步骤:

    • 名称:'gcr.io/cloud-builders/npm' 参数:['安装'] 目录:'应用程序/我的应用程序'
    • 名称:'gcr.io/cloud-builders/npm' 参数:['运行','构建'] 目录:'应用程序/我的应用程序'

此配置指示 Cloud Build 为每个应用安装依赖项并构建 TypeScript,确保其位于统一构建过程的根目录。


    每个服务的
  1. App.yaml: 在服务目录(apps/my-app/ 和 apps/my-project/)中的每个 app.yaml 文件中,包括:

    运行时:nodejs16

    处理者:

    • 网址:.* 脚本:自动

  1. Package.json 脚本: 在 package.json 中,添加一个脚本以在启动应用程序之前复制必要的文件:

    “脚本”:{ "start": "npm run copy-files && node dist/main.js", “复制文件”:“cp ../../package.json ../../tsconfig.json ../../node_modules ./” }


  1. 部署: 单独部署每个服务:

    gcloud 应用程序部署 apps/my-app/app.yaml

    gcloud 应用程序部署 apps/my-project/app.yaml

通过遵循此结构,您可以将 cloudbuild.yaml 文件保留在根目录中以进行集中式构建配置,从而简化了 Google App Engine 上的 NestJS monorepo 部署。根据您的具体设置需要进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.