介绍
现代Web应用程序依赖于稳定、安全的支撑。因此,创建可扩展、安全且架构复杂的应用程序至关重要,以便小型和/或大型开发团队都能进行管理。.
现代开发者倾向于在前端和后端都使用 JavaScript。Express.js 是一个优秀的 JavaScript 框架,被大多数开发者广泛使用。然而,其极简的架构使其不适合大型团队进行扩展和维护。而 Nest.js 正好弥补了这一不足。Nest.js 内置的架构使其非常适合扩展和部署。此外,它对 TypeScript 的原生支持也使其比原生 JavaScript 更适合开发者使用。.
在本教程中,您将学习如何在VPS上使用Nginx Web服务器部署NestJS应用程序。您将学习如何安全地将应用程序部署到Web上。.
先决条件
- Ubuntu 20.04+ VPS 或物理 Ubuntu 服务器
- Node.js 和 npm(或 yarn)包管理器。.
- Nginx Web 服务器
步骤 1 – 准备和部署 NestJS 应用程序
在本节中,您将安装 NestJS CLI 并创建一个基本的 NestJS 应用程序,您将在以下章节中学习如何使用 Nginx 进行部署。.
全局安装 NestJS CLI
要在您的 Ubuntu 机器上安装 NestJS CLI,请打开终端并输入以下命令。.
npm i -g @nestjs/cli这将在您的计算机上安装 NestJS 命令行界面。接下来,您将学习如何创建一个新的 NestJS 项目。.
创建一个新的 NestJS 项目
NestJS 现在提供两种创建新项目的方式。您可以选择最适合您的方法。.
要使用 CLI 创建 NestJS 项目,请键入以下命令。.
nest new <project-name>Output? Which package manager would you ❤️ to use? (Use arrow keys)
❯ npm
yarn
pnpm完成后,您将收到如下输出。.
OutputCREATE node_app/.eslintrc.js (663 bytes)
CREATE node_app/.prettierrc (51 bytes)
CREATE node_app/README.md (3340 bytes)
CREATE node_app/nest-cli.json (171 bytes)
CREATE node_app/package.json (1947 bytes)
CREATE node_app/tsconfig.build.json (97 bytes)
CREATE node_app/tsconfig.json (546 bytes)
CREATE node_app/src/app.controller.ts (274 bytes)
CREATE node_app/src/app.module.ts (249 bytes)
CREATE node_app/src/app.service.ts (142 bytes)
CREATE node_app/src/main.ts (208 bytes)
CREATE node_app/src/app.controller.spec.ts (617 bytes)
CREATE node_app/test/jest-e2e.json (183 bytes)
CREATE node_app/test/app.e2e-spec.ts (630 bytes)这将在当前工作目录中创建一个新项目。您也可以使用其他方法。 ; 同时提供另一个目录的绝对路径。.
启动模板模拟
NestJS 提供了一种创建新项目的替代方法。它是一个 Git 仓库,充当样板模板。您可以克隆该仓库,然后使用以下命令启动项目。.
git clone https://github.com/nestjs/typescript-starter.git <project-directory >克隆完成后,你需要进入项目目录,然后运行 npm install 来安装 package.json 中的依赖项。.
cd <project-directory>
npm install项目准备就绪后,您可以使用以下命令启动应用程序服务器:
npm run start这将在 http://localhost:3000 运行应用程序。现在,您已经拥有一个可以在本地主机上运行的基本 NestJS 应用程序。.
应用程序测试
应用程序开发完成后,您可以运行测试来检查其是否按预期运行。NestJS 提供默认的 Jest 测试,可以对您的应用程序进行测试。您可以使用以下命令开始测试:
npm run test该程序将对您进行测试,并显示类似以下的结果:
Output> [email protected] test
> jest
PASS src/app.controller.spec.ts
AppController
root
✓ should return "Hello World!" (24 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 2.895 s
Ran all test suites.在以下部分中,您将学习如何使用 Nginx 作为反向代理在您的 Web 服务器上部署此 NestJS 应用程序。.
步骤 2 – 配置 Nginx 以服务 NestJS 应用程序
现在,我们可以开始搭建一个 Web 服务器来托管 NestJS 应用了。我们将采用反向代理的方式。这种方式下,我们在本地主机(localhost)的特定端口上运行应用,然后使用 Nginx 服务器将所有发往 VPS 公网 IP 地址或域名的请求代理到本地主机上的应用。使用反向代理服务器是业界的普遍做法,因为它通过在传入请求和后端应用之间建立一道屏障来提高 Web 服务器的安全性。此外,反向代理还能更好地管理服务器负载,尤其是在服务器托管多个 Web 应用时。.
我们安装软件包管理器 下午2 我们先从运行时管理程序的那个开始。.
安装 pm2 进程管理器
您可以使用以下命令打开进程管理器。 下午2 安装。.
npm install -g pm2这项工作 下午2 它已全局安装在您的设备上。.
为 NestJS 应用程序创建 Nginx 配置
现在,配置 Nginx 来运行应用程序。如预备教程中所述,请确保已在防火墙中允许 Nginx 应用程序进行 HTTP 和 HTTPS 通信。如果您使用的是 ufw 防火墙,可以按照说明进行操作。.
ufw enable
ufw allow ‘Nginx Full‘现在,您将为 NestJS 应用程序创建一个配置块。建议您为新应用程序创建新的配置块,而不是编辑默认设置。要创建配置块,请在终端中输入以下代码。.
sudo nano /etc/nginx/sites-available/your_domain这里我们使用了 your_domain 作为应用程序名称,但您需要将其更改为您自己的应用程序名称。然后在编辑器中输入以下代码:
server {
server_name your_domain www.your_domain;
location / {
proxy_pass http://localhost:3000;
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;
}
}现在,您需要创建一个符号链接,告诉 Nginx 在 sites-available 文件夹中查找可用的 Web 应用程序:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/另外,您还需要禁用默认链接,否则 nginx 会将所有请求重定向到默认站点。使用以下命令取消链接。.
sudo unlink /etc/nginx/sites-enabled/default现在使用以下命令重启 Nginx 服务。.
sudo systemctl restart nginx使用 Nginx 部署 NestJS 应用程序
现在,您需要启动 pm2 包管理器来管理 NestJS 应用程序的执行。将工作目录更改为 NestJS 应用程序目录,然后输入以下命令。.
pm2 start npm --name "your_domain" – start您可以运行以下命令来配置 pm2 在服务器重启时运行。.
pm2 startup在 pm2 中完成程序设置后,请使用以下命令保存 pm2 进程列表:
pm2 save
现在,我们已经将 Web 应用程序设置为在启动时运行,并配置了 Nginx 以反向代理到在 localhost 上运行的应用程序。.
Web应用程序测试
您可以通过在控制台中输入以下命令来测试 Web 应用程序。.
curl http://localhost由于我们将反向代理设置为服务器自身的 IP 地址,因此任何对服务器公共 IP 地址、域名或服务器本地主机的请求都将被转发到应用程序。 NestsJS 你的域名 它是有引导的。.
OutputHello World!下一节中,您将学习如何为您的应用程序添加 SSL,这将允许您使用 HTTPS 协议来发送请求。.
步骤 3 – 使用 Let's Encrypt 添加 SSL(可选)
到目前为止,您已经学习了如何使用 Nginx 服务器部署一个功能齐全的 NestJS 应用程序。但是,这种部署方式使用的是 HTTP 协议,由于存在安全漏洞,不建议在生产环境中使用。因此,您需要切换到 HTTPS 协议,它是 HTTP 的加密版本。HTTPS 使用由证书颁发机构 (CA) 颁发的 SSL/TLS 证书。这些证书专用于特定网站,并对客户端和服务器之间的通信进行加密。.
安装 Let's Encrypt Certbot CLI
Let's Encrypt 提供了一个命令行界面 (CLI),用于管理和自动化消费者的 SSL 证书。您可以使用以下命令安装该工具:
sudo apt install certbot python3-certbot-nginx这将在您的 Ubuntu VPS 上安装 certbot 客户端。.
为您的域名获取 SSL/TLS 证书
您现在可以使用以下命令为您的域名获取 SSL 证书。
sudo certbot --nginx -d <your_domain> -d <www.your_domain>你必须 你的域名 请将 certbot 替换为您的实际域名。如果您是首次在 VPS 上运行 certbot,系统会要求您输入电子邮件地址并同意用户条款。请提供所需信息并继续。.
证书安装完成后,您可以将所有请求重定向到 HTTPS。建议您重定向所有请求,以确保网站的完整性。.
结果
在本教程中,您学习了如何在生产环境中使用 Ubuntu VPS 上的 Nginx Web 服务器部署 NestJS 应用程序。您还学习了如何使用 Nginx 为您的应用程序设置 NestJS 项目和反向代理。最后,您学习了如何为服务器域名添加 SSL/TLS 证书,并确保客户端与服务器之间通信的完整性。.









