【问题标题】:What is the right way of production deployment of nestjs application生产部署nestjs应用的正确方式是什么
【发布时间】:2019-05-25 04:19:55
【问题描述】:

我开发了简单的 nestjs 休息服务。现在我打算部署我的应用程序。请帮助我高效地部署nestjs应用程序。

【问题讨论】:

  • 嗨!您能否提供有关您期望的答案/建议的更多详细信息? Nestjs 应用程序的部署过程与任何 nodejs 应用程序非常相似,即使我建议在启动应用程序之前编译您的源代码(而不是使用 ts-node,就像在标准开发模式中一样)定义tsconfig.json 专用于生产版本(除非你有充分的理由,否则不要发出源映射,声明、剥离 cmets 等也是如此)
  • 期待一篇很好的指南文章/答案。或带有 webpack 工具的生产就绪 tsconfig.json 示例。

标签: javascript node.js typescript deployment nestjs


【解决方案1】:

自有服务器

1) 在服务器上签出项目的存储库并运行npm install

2) 运行npm run build,它将您的项目编译为javascript:

rimraf dist && tsc -p tsconfig.build.json

3) 启动您的应用程序:

node dist/main.js

无服务器

现在时间

看到这个answer

Heroku

1) 将文件Procfile 添加到项目的根目录:

web: npm run start:prod

2) 将此行添加到您的package.jsonscripts

"heroku-postbuild": "echo Skip builds on Heroku"

3) 在main.ts(或ConfigService)中设置端口

await app.listen(process.env.PORT || 3000);

【讨论】:

  • 我运行了npm run build,系统创建了一个名为dist的文件夹。但是当我执行node dist/main.js 时,cmd 显示Error: Cannot find module 'src/article/article.entity'。在开发模式下是正常的。
  • @Eve NestJS 默认无法处理这样的绝对路径。将其替换为“../../article/article.entity”之类的相对路径。当您进行这样的生产构建时,它会将您的所有文件移动到一个名为“dist”的文件夹中,其中不包含“src”文件夹,这就是为什么当您尝试运行时它说找不到该文件的原因您的生产版本。
  • 重要补充:默认的 .gitignore 包含 /dist 文件夹。这需要删除才能使 heroku 部署工作。
【解决方案2】:

如果您通过nest new project-name 创建一个新的NestJS 项目,它将在package.json 中附带所需的脚本。

yarn build
yarn start:prod

其余的取决于您要托管应用程序的位置。 NestJS 将在任何通用主机(Heroku、Vercel、AWS 等)上运行。

如果您想免费开始使用低配置,您可以使用以下 Dockerized 设置尝试 Heroku:

Dockerfile.prod

FROM node:14-alpine

WORKDIR /app

COPY package.json yarn.lock ./
RUN yarn install

COPY . /app

RUN yarn build

heroku.yml

build:
  docker:
    web: Dockerfile.prod
run:
  web: yarn start:prod

应用创建后运行

heroku git:remote --app <app-name>
heroku stack:set container

在您的 bootstrap 函数 (main.ts) 中使用 PORT 环境变量:

await app.listen(process.env.PORT || 3000);

如果您使用的是数据库,您也必须进行设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 2016-05-21
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2019-08-06
    • 2019-04-15
    • 1970-01-01
    相关资源
    最近更新 更多