angular - 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 文件夹放到生产服务器上吗?
解决方案
我会做的是构建您的角度应用程序并复制您为前端提供服务的文件。如果您的应用程序被路由,您还必须配置回退到 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 配置,以便在您重新启动服务器时自动启动您的后端。
推荐阅读
- spring-boot - 我可以使用不同的配置多次运行“@SpringBootTest”类吗?
- sql - 如何仅获取从另一个表中找到每个值的行?
- css - 用于摩纳哥编辑器的 vs 代码主题“dark plus”css
- gcc - 无法指出 GCC 特定版本
- json - 使用 SSIS 生成 XML - 什么是最佳实践
- here-api - 获取通行费
- mongodb - 如何在mongodb中获取字段子字符串的一系列数据
- javascript - 为什么钱不更新?
- c# - 通过单击按钮取消带有 CancellationTokenSource 的异步任务不起作用
- c++ - 编译 gsoap 示例时,gSoap 错误“_set_errno”未在此范围内声明