首页 > 解决方案 > NestJs - Angular - 部署策略

问题描述

我为一家有特定需求的工厂开发了一个小型应用程序。这是一个小型应用程序,将由不到 10 人在本地使用。

现在,我的后端和前端在同一个 git 存储库中。

存储库结构如下所示

--README.md
--.gitignore
--document
--projects
  |--backend        // Nestjs API
  |--frontend       // Angular

我已经准备好 NestJS 来提供静态文件,这意味着我已经将我的 Angular 构建器配置为如下工作:

角.json

...
"options": {
    "outputPath": "../backend/client/dist",
    "index": "src/index.html",
    "main": "src/main.ts",
    "polyfills": "src/polyfills.ts",
    "tsConfig": "tsconfig.app.json",
    "aot": true,
...

我的 NestJs 服务器配置为提供静态文件:

main.ts

const PORT = process.env.PORT || 8080;
async function bootstrap() {
   const app = await NestFactory.create<NestExpressApplication>(AppModule);
   app.enableCors();
   app.setGlobalPrefix('api');
   await app.listen(PORT);
}
...

app.module.ts

imports: [
    TypeOrmModule.forRoot(),
    ServeStaticModule.forRoot({
      rootPath: join(__dirname, '..', 'client/dist'),
    }),

直到今天,我都使用 npm with npm run start:dev,它允许我自动构建我的数据库并运行后端服务器。现在,我需要将后端和前端部署到同一台服务器并构建所有内容。

最好的方法是什么?我应该先将 angular 构建到 dist 文件夹中,然后构建 nestjs .. 我只能将 dist 文件夹放到生产服务器上吗?

标签: angulartypescriptdeploymentnestjs

解决方案


我会做的是构建您的角度应用程序并复制您为前端提供服务的文件。如果您的应用程序被路由,您还必须配置回退到 index.html,您可以在此处查看如何:Angular deployement

对于您的nestjs 应用程序,您可以将它放在服务器上的几乎任何位置,pm2 将在端口8080 上为其提供服务。首先从nestjs 中提取所有文件并使用npm install(您也需要prod 中的node_modules 和nestjs)。然后使用 nest build 构建您的应用程序。使用 pm2,您应该使用 main.js 来启动您的 api。然后我会研究一个代理反向配置,将你所有的 api 请求重定向到 8080。它的作用是,如果你到达 example.com/api,你的服务器会明白它必须在内部重定向到 8080,所以你没有打开任何其他端口然后 80 至极就是你想要的。

我还会考虑在您的服务器启动时启动 pm2 并保存您的 pm2 配置,以便在您重新启动服务器时自动启动您的后端。


推荐阅读