nestjs 应用程序的正确生产部署方式是什么?

33

我开发了简单的NestJS REST服务。现在我正在计划部署我的应用程序。请帮我找出一种有效的NestJS应用程序生产部署方式。


1
你好!你能提供更多关于你期望的答案或建议的细节吗?Nestjs应用程序的部署过程与任何nodejs应用程序非常相似,即使我建议在启动应用程序之前编译源代码(而不是像标准开发模式中那样使用ts-node),并使用专门用于生产发布的明确定义的tsconfig.json(除非你有充分的理由,否则不要发出源映射,同样适用于声明、剥离注释等)。 - VinceOPS
期待一篇好的指南文章/答案,关于如何使用Webpack工具生成生产就绪的tsconfig.json文件。 - Boobalan
2个回答

24

搭建自己的服务器

1)将您的项目存储库检出到您的服务器并运行 npm install

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

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

3) 以以下方式启动您的应用程序:

node dist/main.js

无服务器

Zeit Now

请参考此答案.

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);

1
我已经运行了 npm run build 命令,系统创建了一个名为 dist 的文件夹。但是当我执行 node dist/main.js 命令时,命令提示显示 Error: Cannot find module 'src/article/article.entity'。在开发模式下是正常的。 - Eve-Sama
4
Eve,NestJS 默认无法处理绝对路径,例如此处的路径。请将其替换为相对路径,例如'../../article/article.entity'。在进行生产构建时,所有文件都会被移动到一个名为“dist”的文件夹中,其中不包含“src”文件夹,因此当您尝试运行您的生产构建时,它会报错找不到该文件。 - Shasta Kota
1
重要补充:默认的.gitignore文件包括/dist文件夹。为了使heroku部署正常工作,需要将其删除。 - Nils

2
如果您通过nest new project-name创建一个新的NestJS项目,它将自带package.json中所需的脚本。
yarn build
yarn start:prod

其余的取决于您想要托管应用程序的位置。NestJS 可以在任何通用托管平台上运行(如 Heroku、Vercel、AWS 等)。

如果您想要低配置且免费开始使用,可以尝试使用以下 Docker 化设置在 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);

如果您正在使用数据库,您也需要设置它。

Heroku不再免费了 :( 还有其他方法可以部署NestJS应用程序吗? - Sara Lufi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接