通过“Docker Compose”和“PM2”在专用服务器上手动部署NestJS和Angular应用程序
内容提要
本文介绍了使用NestJS和Angular构建应用程序,并通过PM2和Docker Compose运行它们。详细介绍了购买服务器、配置SSH访问、自动生成和更新证书等步骤。同时讲解了安装软件包、生成SSH密钥、克隆项目、安装依赖并运行应用程序的方法。最后介绍了更新npm脚本、更新Docker Compose文件、配置Nginx访问后端接口、禁用NestJS模块、自动重启应用程序等操作。通过E2E测试验证了两种模式的运行。
延伸解读
两种部署模式的核心差异
文章对比了PM2和Docker Compose两种部署方式。PM2模式直接使用Node.js运行NestJS应用,依赖本地环境;Docker Compose模式则通过容器化运行,包含PostgreSQL、Nginx、https-portal等组件,环境隔离性更好。Docker Compose模式中,前端静态文件由Nginx直接提供,后端通过Nginx代理访问,而PM2模式可能由NestJS自身处理静态文件。选择时需权衡部署复杂度与可维护性。
HTTPS证书自动化的实现方式
文章使用https-portal容器自动生成和续期Let's Encrypt证书。在Docker Compose配置中,https-portal监听80和443端口,并将域名请求代理到Nginx容器。通过设置环境变量STAGE为production和FORCE_RENEW为true,确保证书在首次部署时自动获取。这种方式简化了证书管理,但需要正确配置域名解析,并确保服务器防火墙开放相应端口。
E2E测试在部署验证中的作用
文章在两种部署模式启动后,均通过设置BASE_URL环境变量并运行npm run test:e2e来验证应用。测试覆盖了前端和后端,确保应用在真实服务器环境下功能正常。在Docker Compose模式中,首次测试失败后,作者通过调整npm脚本、更新Docker Compose文件、配置Nginx和禁用NestJS静态模块来修复问题,最终测试通过。这体现了E2E测试在持续部署中的重要性。
部署过程中的关键调整与注意事项
文章提到,在Docker Compose模式中,由于使用Nginx提供静态文件,需要通过环境变量DISABLE_SERVE_STATIC禁用NestJS的ServeStaticModule,避免重复处理。同时,数据库迁移作为独立容器运行,确保在应用启动前完成。此外,所有容器(除迁移外)都设置了restart: always,保证服务意外退出后自动重启。这些调整提高了部署的可靠性和可维护性。
Q&A
如何在专用服务器上配置SSH访问?
在购买专用服务器后,需要设置密码并使用ssh-copy-id命令将本地公钥复制到远程服务器,以便通过SSH访问。
如何使用Docker Compose自动生成和更新证书?
在Docker Compose文件中添加https://github.com/SteveLTN/https-portal,以实现证书的自动生成和更新。
如何在NestJS和Angular应用程序中安装依赖项?
在克隆项目后,使用npm install命令安装所有必要的依赖项。
如何配置Nginx以访问后端接口?
在Nginx配置文件中设置代理,将请求转发到NestJS后端服务,并配置相关的请求头。
如何使用PM2和Docker Compose运行NestJS和Angular应用程序?
可以通过npm脚本分别使用PM2和Docker Compose启动应用程序,并进行E2E测试以验证其运行。
如何在本地计算机上更新npm脚本以适应新的开发需求?
在package.json文件中更新npm脚本,删除不必要的脚本并添加新的数据库创建和迁移脚本。