在 Elastic Beanstalk 上部署 NestJS 应用程序

Sag*_*agi 6 amazon-web-services amazon-elastic-beanstalk nestjs

我正在尝试将我的 NestJS 应用程序部署到 AWS elastic beanstalk,但没有取得任何成功,有人可以一步步写下我如何实现这一目标吗?

\n

完整解释:

\n

我有一个带有 typeorm 的 Nestjs 应用程序,但没有\xe2\x80\x99t 将其配置为与 RDS 一起使用,所以我们暂时保留它(也许有连接,idk)。

\n

首先,我制作了一个 CodePipline,当我将新版本推送到我的 github 存储库时,它会自动将整个存储库部署到在节点 12.x 上运行的 eb 实例。

\n

现在,我希望在每次 git 推送时,实例都会安装依赖项、构建 Nest 应用程序,并从 /dist/main.js 启动服务器。

\n

我添加了一个 Procfile:

\n
web: npm install && npm run build && npm run start:prod\n
Run Code Online (Sandbox Code Playgroud)\n

我还在 EB 上添加了在 main.ts 上配置的 PORT 环境变量,当未发现时使用 8080。

\n

我的 package.json 脚本就像一个新创建的 Nest 应用程序:

\n
  "scripts": {\n    "prebuild": "rimraf dist",\n    "build": "nest build",\n    "format": "prettier --write \\"src/**/*.ts\\" \\"test/**/*.ts\\"",\n    "start": "nest start",\n    "start:dev": "nest start --watch",\n    "start:debug": "nest start --debug --watch",\n    "start:prod": "node dist/main",\n    "lint": "eslint \\"{src,apps,libs,test}/**/*.ts\\" --fix",\n    "test": "jest",\n    "test:watch": "jest --watch",\n    "test:cov": "jest --coverage",\n    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",\n    "test:e2e": "jest --config ./test/jest-e2e.json"\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

部署时,我在日志中看到它做了类似这样的事情:

\n
Jan 23 20:01:14 web: > app@0.0.1 start /var/app/current\nJan 23 20:01:14 ip-172-31-17-171 web: > sudo npm i -g @nestjs/cli && node dist/main\nJan 23 20:01:14 web: We trust you have received the usual lecture from the local System\nJan 23 20:01:14 web: Administrator. It usually boils down to these three things:\nJan 23 20:01:14 web: #1) Respect the privacy of others.\nJan 23 20:01:14 web: #2) Think before you type.\nJan 23 20:01:14 web: #3) With great power comes great responsibility.\nJan 23 20:01:14 web: sudo: no tty present and no askpass program specified\nJan 23 20:01:14 web: npm ERR! code ELIFECYCLE\nJan 23 20:01:14 web: npm ERR! errno 1\nJan 23 20:01:14 web: npm ERR! app@0.0.1 start: `sudo npm i -g @nestjs/cli && node dist/main`\nJan 23 20:01:14 web: npm ERR! Exit status 1\nJan 23 20:01:14 web: npm ERR!\nJan 23 20:01:14 web: npm ERR! Failed at the app@0.0.1 start script.\n
Run Code Online (Sandbox Code Playgroud)\n

所以我在输入 env url 时收到 502 。

\n

那么可能是 npm 的权限问题?或者我需要以某种方式仅部署 /dist 文件夹?\n您认为问题是什么?

\n

这是我第一次尝试将后端服务器部署到 eb :)

\n

nah*_*ang 6

  • 我在将 Nestjs 应用程序部署到 AWS Elastic beanstalk 上遇到了一段时间的困难,所以我决定在这里制作指南。我在这里一步步制作部署简单应用程序的部署指南。

  • 部署通常失败的原因是它不知道 NEST 依赖项(它不安装开发依赖项)和在上传到服务器之前需要编译的 Typescript 代码。

  • 就我而言,使用压缩来制作 zip 文件(您可以使用命令行,eb但为了简单起见,请先尝试使用它)。

  • 首先,准备 zip 文件,这对于避免部署时失败非常重要。

    • 您需要制作dist文件夹。为此,我们首先删除 dist 文件夹并运行命令nest build(* 这个命令tsc为我们编译 Typescript)。
    • 现在,我们有了该dist文件夹,我们需要做的下一件事是将 package.json (*这个为我们安装依赖项)复制到dist文件夹中,让服务器知道安装我们没有带在node_module这里的依赖项。
    • 在package.json中,yarn start要运行,nest start但AWS不知道Nest command,所以我们需要通过使用指出它node main.js(该文件在dist文件中,需要正确设置main.js的路径)。为此,我们创建Procfile(引用this)并添加内容 is web: node src/main.js。记住将其复制到dist文件中。
    • 正确压缩文件如下
  • 其次,从 AWS 控制台创建应用程序或环境,然后上传 zip 文件并获得成功状态。如果没有,请检查日志文件以了解失败的原因。也许它没有nest command,等等......

希望本指南对您有所帮助。

欢呼!