在本教程中,我们将解释如何在 Ubuntu 22.04 服务器上使用 Nginx 托管 NestJS 应用程序。
NestJS 是一个流行的框架,用于构建高效且可扩展的 Node.js 服务器端应用程序。NestJS 是一个渐进式的 Node.js 框架,专为构建高效且可扩展的服务器端应用程序而设计。它利用 TypeScript,这是 JavaScript 的一个静态类型超集,提供了一个强类型的环境,从而提高开发人员的生产力和代码可维护性。
NestJS 是围绕模块化架构和依赖注入的概念构建的,这些概念的灵感来自 Angular,使其熟悉使用过 Angular 的开发人员。NestJS 的核心优势之一是它的灵活性。它是平台无关的,这意味着它可用于构建各种类型的应用程序,从微服务到 GraphQL API 和 RESTful 应用程序。该框架被设计为通用的,允许开发人员使用任何外部库和工具,例如 Express 或 Fastify,作为底层的 HTTP 服务器。
在本教程中,我们将逐步介绍如何使用 Nginx 作为反向代理在 Ubuntu VPS 上部署 NestJS 应用程序。
准备工作
服务器准备
必要前提:
- 一个充满求知欲的大脑。
- 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。
我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。
注册链接: https://rainyun.ivwv.site
创建雨云服务器
以下步骤仅供参考,请根据实际需求选择配置。
- 点击 云产品 → 云服务器 → 立即购买。
- 选择距离你较近的区域,以保证低延迟。
- 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
- 最后按照提示进行购买。
- 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
- 我们使用
PowerShell
进行SSH
远程连接到服务器,Win+R
打开运行窗口,输入powershell
后点击确定。
- 输入
ssh root@你的服务器IP
例如ssh root@154.9.227.239
回车后,首次需要输入yes
,再次回车后即可登录服务器。
- 到此为止,我们的云服务器就远程连接上了。
使用 Nginx 在 Ubuntu 上托管 NestJS 应用程序
第一步:更新系统
首先,更新你的系统软件包,以确保一切都是最新的:
sudo apt update && sudo apt upgrade -y
第二步:安装 Node.js 和 npm
有关最新版本,请访问 Node.js 官方文档页面。
# 安装 nvm (Node Version Manager)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
# 下载并安装 Node.js (你可能需要重启终端)
nvm install 20
验证安装:
# 验证环境中是否为正确的 Node.js 版本
node -v # 应该打印 `v20.17.0`
# 验证环境中是否为正确的 npm 版本
npm -v # 应该打印 `10.8.2`
第三步:部署 NestJS 应用程序
有两种部署方式。首先克隆你的 Git 存储库或在服务器上创建一个 NestJS 应用程序。我们已经介绍了这两种方式。
克隆 Git 存储库
接下来,你需要将你的 NestJS 应用程序传输到你的 VPS。如果你的项目托管在 GitHub 上,你可以直接克隆它:
git clone https://github.com/yourusername/your-nestjs-app.git
导航到你的项目目录:
cd your-nestjs-app
安装依赖项并构建应用程序。在你的项目目录中,安装必要的依赖项:
npm install
构建你的 NestJS 应用程序:
npm run build
创建 NestJS 应用程序
让我们继续安装。
NestJS CLI 是一个命令行界面,可帮助你快速设置新项目并执行各种开发任务。
使用 npm 全局安装 CLI:
npm install -g @nestjs/cli
创建一个新的 NestJS 项目。安装 CLI 后,你可以通过运行以下命令创建一个新的 NestJS 项目:
nest new my-nestjs-app
将 my-nestjs-app
替换为你想要的的项目名称。
CLI 将提示你选择要使用的包管理器(npm 或 yarn
)。选择你喜欢的选项,CLI 将自动安装必要的依赖项。
导航到项目目录。创建项目后,导航到项目目录:
cd my-nestjs-app
浏览项目结构
你的新 NestJS 应用程序将具有以下基本结构:
src/
: 包含主要的应用程序代码。app.controller.ts
: 包含一个简单的控制器来处理 HTTP 请求。app.module.ts
: 应用程序的根模块。app.service.ts
: 一个可以注入到控制器的基本服务。main.ts
: 应用程序的入口点。test/
: 包含应用程序的测试文件。node_modules/
: 包含所有已安装的依赖项。nest-cli.json
: NestJS CLI 的配置文件。package.json
: 包含项目元数据和脚本。
要构建用于生产的应用程序,请使用:
npm run build
这会将 TypeScript 文件编译为 dist/
目录中的 JavaScript 文件。
第四步:设置 PM2 来管理你的应用程序
PM2 是一个用于 Node.js 应用程序的进程管理器,可帮助你的应用程序保持运行,并在崩溃时自动重启。
全局安装 PM2:
sudo npm install -g pm2
使用 PM2 启动你的 NestJS 应用程序:
注意: dist/main.js
文件必须存在于项目目录中。在你通过执行 npm run build
命令构建项目后,你将获得它。
pm2 start dist/main.js --name your-nestjs-app
为了确保你的应用程序在服务器重启后重新启动,请使用:
pm2 startup
pm2 save
检查状态
pm2 status
输出:
┌────┬────────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├────┼────────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ your-nestjs-app │ default │ 0.0.1 │ fork │ 2521 │ 0s │ 0 │ online │ 0% │ 17.8mb │ root │ disabled │
└────┴────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
第五步:配置防火墙
如果你已启用 UFW 防火墙,请按照以下步骤操作。我们需要在防火墙中添加 HTTP 和 HTTPS 端口。执行以下命令集:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
第六步:安装和配置 Nginx
安装 Nginx:
sudo apt install nginx -y
接下来,将 Nginx 配置为反向代理,以将请求转发到你的 NestJS 应用程序。
为你的应用程序创建一个新的配置文件:
sudo nano /etc/nginx/sites-available/your-nestjs-app
添加以下配置:
server {
listen 80;
server_name yourdomain.com; # 替换为你的域名或 IP
location / {
proxy_pass http://localhost:3000; # 你的 NestJS 应用程序端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
通过创建到 sites-enabled
的符号链接来启用配置:
sudo ln -s /etc/nginx/sites-available/your-nestjs-app /etc/nginx/sites-enabled/
测试 Nginx 配置是否有语法错误:
sudo nginx -t
如果测试成功,请重启 Nginx 以应用更改:
sudo systemctl restart nginx
第七步:使用 SSL 保护你的应用程序
对于生产环境,强烈建议使用 SSL 来保护你的应用程序。你可以使用 Let’s Encrypt 获取免费的 SSL 证书。
安装 Certbot,Let’s Encrypt 客户端:
sudo apt install certbot python3-certbot-nginx -y
获取并安装 SSL 证书:
sudo certbot --nginx -d yourdomain.com
按照提示完成安装。Certbot 将自动配置 Nginx 以使用 SSL 证书。
第八步:访问你的应用程序
你的 NestJS 应用程序现在应该可以通过你的域名或 IP 地址访问。如果你使用 SSL 保护了你的应用程序,请通过 https://yourdomain.com
访问它。
结论
你已经成功地了解了如何在 Ubuntu 服务器上使用 Nginx 托管 NestJS 应用程序。借助 PM2 管理你的应用程序,即使在服务器重启后,它也应该保持平稳运行。对于生产环境,请确保定期更新你的服务器和依赖项。
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site