在 GAE 中发布 nestjs 应用程序
Publish nestjs application in GAE
我正在学习 nestjs 并且我遵循了这个 step by step。
应用程序运行正常。但我想 post 它作为我的 GAE 中的微服务。我也可以很好地完成这部分,但是当我调用 GPC 中的地址时,我收到错误 502 - Bad Gateway。
我相信它在我的 package.json 文件中。但我还没有弄明白。以下是依赖配置:
"dependencies": {
"@ nestjs / common": "^ 5.0.0",
"@ nestjs / core": "^ 5.0.0",
"@ nestjs / microservices": "^ 5.0.0",
"@ nestjs / testing": "^ 5.0.0",
"@ nestjs / websockets": "^ 5.0.0",
"reflect-metadata": "^ 0.1.12",
"rxjs": "^ 6.0.0",
"typescript": "^ 2.8.0",
"ts-node": "^ 6.0.0",
"tsconfig-paths": "^ 3.3.1"
},
这是我的开始说明:
"start": "ts-node -r tsconfig-paths/register src/main.ts",
最后,我的 app.yaml:
env: flex
runtime: nodejs
service: nestapp
您可以从 AppEngine Typescript 示例项目开始:
https://github.com/GoogleCloudPlatform/nodejs-docs-samples/tree/master/appengine/typescript
它已经安装了所有的打字稿编译工具。 package.json 脚本中需要的关键行是:
"build": "tsc -p tsconfig.build.json",
"gcp-build": "npm run build"
"gcp-build"
是保留的任务名称,在部署 AppEngine NodeJS 项目时始终执行。这将确保您的 TypeScript 在部署时被编译为 JavaScript。您可以在这里阅读更多相关信息:
https://cloud.google.com/appengine/docs/standard/nodejs/running-custom-build-step
一旦你有了 TypeScript 和 Express 运行ning,你就可以用 Nest 代替 Express!您需要更改的其他一些内容,AppEngine 用于 运行 应用程序的 package.json 中的入口点:
"main": "dist/main.js",
以及您的 Nest 应用中的端口 src/main.ts:
const PORT = Number(process.env.PORT) || 8080;
await app.listen(PORT);
在你的app.yaml去掉env: flex
就用标准环境,更便宜!
runtime: nodejs10
将它们放在一起,您的完整 package.json 将如下所示:
{
"name": "appengine-nest",
"description": "An example TypeScript app running on Google App Engine.",
"version": "0.0.1",
"author": "kmturley",
"license": "MIT",
"engines": {
"node": ">=8.0.0"
},
"main": "dist/main.js",
"scripts": {
"prepare": "npm run build",
"pretest": "npm run build",
"build": "tsc -p tsconfig.build.json",
"deploy": "gcloud app deploy",
"lint": "tslint -p tsconfig.json -c tslint.json",
"start": "node ./dist/main.js",
"start:dev": "nodemon",
"start:debug": "nodemon --config nodemon-debug.json",
"test": "repo-tools test app -- dist/main.js",
"gcp-build": "npm run build"
},
"dependencies": {
"@nestjs/common": "^5.6.2",
"@nestjs/core": "^5.6.2",
"express": "^4.16.3",
"nodemon": "^1.18.9",
"reflect-metadata": "^0.1.13",
"rxjs": "^6.3.3",
"ts-node": "^8.0.2",
"tsconfig-paths": "^3.7.0",
"typescript": "^3.0.1"
},
"devDependencies": {
"@google-cloud/nodejs-repo-tools": "^3.0.0",
"@types/express": "^4.16.0",
"tslint": "^5.11.0"
}
}
我在这里创建了一个示例项目:
所需的更改
nest new <project>
是:
package.json
(主要 属性 和一些脚本)
{
...
+ "main": "dist/main.js",
"scripts": {
...
- "build": "nest build",
+ "build": "tsc -p tsconfig.build.json",
+ "gcp-build": "npm run build",
...
- "start": "nest start",
+ "start": "node ./dist/main.js",
}
...
}
src/main.ts
(添加监听的端口环境变量)
async function bootstrap() {
const app = await NestFactory.create(AppModule);
- await app.listen(3000);
+ const PORT = Number(process.env.PORT) || 8080;
+ await app.listen(PORT);
}
bootstrap();
另外建议在 package.json 脚本上添加部署脚本
与 devDependency @google-cloud/nodejs-repo-tools
+ "deploy": "gcloud app deploy"
注意:解决方案是@Kim T,我只是以这种方式添加它,因为我无法快速阅读和执行它
我正在学习 nestjs 并且我遵循了这个 step by step。
应用程序运行正常。但我想 post 它作为我的 GAE 中的微服务。我也可以很好地完成这部分,但是当我调用 GPC 中的地址时,我收到错误 502 - Bad Gateway。
我相信它在我的 package.json 文件中。但我还没有弄明白。以下是依赖配置:
"dependencies": {
"@ nestjs / common": "^ 5.0.0",
"@ nestjs / core": "^ 5.0.0",
"@ nestjs / microservices": "^ 5.0.0",
"@ nestjs / testing": "^ 5.0.0",
"@ nestjs / websockets": "^ 5.0.0",
"reflect-metadata": "^ 0.1.12",
"rxjs": "^ 6.0.0",
"typescript": "^ 2.8.0",
"ts-node": "^ 6.0.0",
"tsconfig-paths": "^ 3.3.1"
},
这是我的开始说明:
"start": "ts-node -r tsconfig-paths/register src/main.ts",
最后,我的 app.yaml:
env: flex
runtime: nodejs
service: nestapp
您可以从 AppEngine Typescript 示例项目开始:
https://github.com/GoogleCloudPlatform/nodejs-docs-samples/tree/master/appengine/typescript
它已经安装了所有的打字稿编译工具。 package.json 脚本中需要的关键行是:
"build": "tsc -p tsconfig.build.json",
"gcp-build": "npm run build"
"gcp-build"
是保留的任务名称,在部署 AppEngine NodeJS 项目时始终执行。这将确保您的 TypeScript 在部署时被编译为 JavaScript。您可以在这里阅读更多相关信息:
https://cloud.google.com/appengine/docs/standard/nodejs/running-custom-build-step
一旦你有了 TypeScript 和 Express 运行ning,你就可以用 Nest 代替 Express!您需要更改的其他一些内容,AppEngine 用于 运行 应用程序的 package.json 中的入口点:
"main": "dist/main.js",
以及您的 Nest 应用中的端口 src/main.ts:
const PORT = Number(process.env.PORT) || 8080;
await app.listen(PORT);
在你的app.yaml去掉env: flex
就用标准环境,更便宜!
runtime: nodejs10
将它们放在一起,您的完整 package.json 将如下所示:
{
"name": "appengine-nest",
"description": "An example TypeScript app running on Google App Engine.",
"version": "0.0.1",
"author": "kmturley",
"license": "MIT",
"engines": {
"node": ">=8.0.0"
},
"main": "dist/main.js",
"scripts": {
"prepare": "npm run build",
"pretest": "npm run build",
"build": "tsc -p tsconfig.build.json",
"deploy": "gcloud app deploy",
"lint": "tslint -p tsconfig.json -c tslint.json",
"start": "node ./dist/main.js",
"start:dev": "nodemon",
"start:debug": "nodemon --config nodemon-debug.json",
"test": "repo-tools test app -- dist/main.js",
"gcp-build": "npm run build"
},
"dependencies": {
"@nestjs/common": "^5.6.2",
"@nestjs/core": "^5.6.2",
"express": "^4.16.3",
"nodemon": "^1.18.9",
"reflect-metadata": "^0.1.13",
"rxjs": "^6.3.3",
"ts-node": "^8.0.2",
"tsconfig-paths": "^3.7.0",
"typescript": "^3.0.1"
},
"devDependencies": {
"@google-cloud/nodejs-repo-tools": "^3.0.0",
"@types/express": "^4.16.0",
"tslint": "^5.11.0"
}
}
我在这里创建了一个示例项目:
nest new <project>
是:
package.json (主要 属性 和一些脚本)
{
...
+ "main": "dist/main.js",
"scripts": {
...
- "build": "nest build",
+ "build": "tsc -p tsconfig.build.json",
+ "gcp-build": "npm run build",
...
- "start": "nest start",
+ "start": "node ./dist/main.js",
}
...
}
src/main.ts (添加监听的端口环境变量)
async function bootstrap() {
const app = await NestFactory.create(AppModule);
- await app.listen(3000);
+ const PORT = Number(process.env.PORT) || 8080;
+ await app.listen(PORT);
}
bootstrap();
另外建议在 package.json 脚本上添加部署脚本
与 devDependency @google-cloud/nodejs-repo-tools
+ "deploy": "gcloud app deploy"
注意:解决方案是@Kim T,我只是以这种方式添加它,因为我无法快速阅读和执行它