NestJs-Angular-部署策略

时间:2020-06-03 07:57:19

标签: angular typescript deployment nestjs

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

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

存储库结构如下

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

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

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与npm run start:dev一起使用,这使我能够自动构建数据库并运行后端服务器。 现在,我需要将后端和前端部署到同一服务器上并构建所有内容。

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

1 个答案:

答案 0 :(得分:1)

我会做的是,构建您的有角度的应用程序并将文件复制到您为前端服务的位置。如果您的应用程序已路由,则还必须配置一个对index.html的后备,您可以在此处查看操作方法:Angular deployement

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

我还考虑在服务器启动时启动pm2并保存您的pm2配置,这样,如果您重新启动服务器,它将自动启动后端。