我很惊讶缺乏资源来展示如何部署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)
答案 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 个步骤:
package.json
文件并添加如下“部署”脚本:{
...
"scripts": {
...
"deploy": "npm ci && npm run build && npm run start:prod"
}
}
您需要安装所有(包括开发)依赖项才能构建和运行 Nest 应用。
Procfile
,包含web: npm run deploy
eb deploy
享受吧!