将NestJ部署到ElasticBeanstalk

时间:2020-05-12 11:24:49

标签: node.js nestjs

我很惊讶缺乏资源来展示如何部署NestJS应用程序。我努力做到这一点(解决此问题后,我可能会写一篇文章,只是提供标准用例的教程)。

我有一个小型的标准NestJS MVC应用程序,我想在AWS Elastic Beanstalk上托管(使用CLI)。

我没有看到服务器正在启动的日志,而是显示了日志:

May 12 11:01:01 ip-172-31-31-53 web: Error: Cannot find module '/var/app/current/dist/main'
May 12 11:01:01 ip-172-31-31-53 web: at Function.Module._resolveFilename (internal/modules/cjs/loader.js:980:15)
May 12 11:01:01 ip-172-31-31-53 web: at Function.Module._load (internal/modules/cjs/loader.js:862:27)
May 12 11:01:01 ip-172-31-31-53 web: at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
May 12 11:01:01 ip-172-31-31-53 web: at internal/main/run_main_module.js:18:47 {
May 12 11:01:01 ip-172-31-31-53 web: code: 'MODULE_NOT_FOUND',
May 12 11:01:01 ip-172-31-31-53 web: requireStack: []
May 12 11:01:01 ip-172-31-31-53 web: }
May 12 11:01:01 ip-172-31-31-53 web: npm ERR! code ELIFECYCLE
May 12 11:01:01 ip-172-31-31-53 web: npm ERR! errno 1
May 12 11:01:01 ip-172-31-31-53 web: npm ERR! hr-tool@0.0.1 start:prod: `node dist/main`
May 12 11:01:01 ip-172-31-31-53 web: npm ERR! Exit status 1
May 12 11:01:01 ip-172-31-31-53 web: npm ERR!
May 12 11:01:01 ip-172-31-31-53 web: npm ERR! Failed at the hr-tool@0.0.1 start:prod script.
May 12 11:01:01 ip-172-31-31-53 web: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
May 12 11:01:01 ip-172-31-31-53 web: npm ERR! A complete log of this run can be found in:
May 12 11:01:01 ip-172-31-31-53 web: npm ERR!     /home/webapp/.npm/_logs/2020-05-12T11_01_01_151Z-debug.log

我怀疑可能是由于生产服务器上未安装某些TypeScript开发相关性而引起的问题,但我真的不知道如何解决此问题

我到目前为止所做的:

创建了一个Procfile来覆盖默认的Node Command(Procfile):

web: npm run start:prod

更改了我的应用程序的端口(main.ts)

  await app.listen(process.env.PORT || 3000);
  console.log('server start on PORT' + process.env.PORT)
  console.log(process.env.EMAIL_USER)

4 个答案:

答案 0 :(得分:1)

您的 main.ts 看起来不错!对于node命令,可以从beantalk配置屏幕中的容器选项更改其设置。

NestJS的启动程序具有默认的 tsconfig.json ,可在安装了TypeScript的终端上运行tsc。 运行tsc会将我们所有的打字稿文件构建到dist文件夹中。应用程序入口点将位于 dist / src / main.js

您还需要将所有非打字稿配置文件(包括 package.json )复制到dist文件夹。

答案 1 :(得分:1)

由节点平台为节点应用程序运行的默认命令为npm start-对于嵌套应用程序,其默认命令为nest start。 nest命令是nest cli的一部分-默认情况下不可用。一个简单的解决方案是将以下dev依赖项复制到package.json中的main依赖项块,这将确保已安装nest cli-应用程序编译为.js-且nest start可以正常工作。

@nestjs/cli, @nestjs/schematics,tsconfig-paths , typescript, @types/express , @types/node, ts-node

答案 2 :(得分:0)

我在将 nestjs 应用程序部署到 AWS elastic beanstalk 的过程中遇到了一段时间,我为部署简单应用程序制定了逐步部署指南。

也许 this 有帮助!

答案 3 :(得分:0)

要将 Nest JS 应用部署到 Elasticbeanstalk (EBS),您只需 3 个步骤:

  1. 修改您的 package.json 文件并添加如下“部署”脚本:
{
  ...
  "scripts": {
   ...
   "deploy": "npm ci && npm run build && npm run start:prod"
  }
}

您需要安装所有(包括开发)依赖项才能构建和运行 Nest 应用。

  1. 在源的根目录中创建文件 Procfile,包含
web: npm run deploy
  1. 提交到 GIT,推送到 repo,然后执行 eb deploy

享受吧!