Image text reads Deploy Node.js applications with PM2 on Vultr. Learn how to deploy and monitor applications using PM2 and enable SSL protection with Let's Encrypt. The image has light blue and white color background. In the bottom left corner, there's a blue magnifying glass icon, and in the top right corner, there's a shield icon.
赞助

在 Vultr 上使用 PM2 部署 Node.js 应用程序

阅读时间 7 分钟

Process Manager 2 (PM2) 是一款应用程序,可让您为各种应用程序(例如 HTTP 服务器和任务队列工作程序)创建持久化服务。PM2 的集群模式通过允许您创建同一应用程序的多个实例来实现高效的资源利用,从而进一步扩展了此功能。此外,PM2 提供了一个简单的 CLI 接口来管理、扩展和监控正在运行的服务。

在本文中,我们将演示在 Vultr 云计算服务器上部署 Node.js 应用程序的步骤。我们将指导您为 Node.js 应用程序在 Vultr 上部署服务器。您将学习安装运行应用程序所需的依赖项,以及如何使用 PM2 创建持久化服务,以确保您的应用程序在服务器重启后自动重新启动。此外,我们还将介绍设置 Nginx 作为反向代理以实现高效负载均衡,以及使用安全套接字层 (SSL) 证书保护您的应用程序以启用 HTTPS。

在 Vultr 上部署服务器

  1. 注册并登录 Vultr 客户门户

  2. 导航到产品页面。

  3. 从侧边菜单中,选择计算

    Screenshot of Vultr customer portal showing the Products menu on the left with Compute as a sub option and the Deploy Server button in the center
  4. 点击中心的部署服务器按钮。

  5. 云计算 选择为服务器类型。

  6. 在“服务器位置”部分,选择您选择的区域。

  7. 在“服务器映像”部分,单击 Marketplace Apps (应用商店应用) 选项卡,然后选择 NodeJS 映像。

    Screenshot of Vultr customer portal showing the Marketplace Apps tab, selection of the NodeJS option and the Deploy Now button on the bottom right corner

    the NodeJS Marketplace App 预装了最新的 Node.js 和 Node Package Manager (npm) 二进制文件,这可以节省您的设置时间。

  8. 在“服务器大小”部分,根据需要选择服务器大小。

  9. 在“附加功能”部分,根据需要选择任何其他功能。

  10. 点击右下角的立即部署按钮。

创建 Node.js 应用程序

已按照先前的说明创建了 Vultr 服务器,本节将指导您使用 Express 创建一个示例 Node.js 应用程序。我们将引导您完成初始化 Node.js 项目、安装 Express 以及创建基本端点的过程。如果您已有现成的 Node.js 应用程序,请随时跳过此部分,克隆您的 Git 存储库,然后继续阅读下一节。

  1. 创建一个文件夹来存储项目文件,并导航到该文件夹。

    bash
    mkdir ~/express-demo
    cd ~/express-demo
    
  2. 初始化一个 Node.js 项目。

    bash
    npm init
    
  3. 安装 express 库。

    bash
    npm install express
    
  4. 创建一个名为 index.js 的文件。

    bash
    nano index.js
    
  5. 将以下内容粘贴到 index.js 文件中。

    javascript
    const express = require("express");
    const app = express();
    
    app.get("/", (req, res) => {
      res.send("<h1>Hello World, greetings from Vultr</h1>");
    });
    
    app.listen(3000, () => {
      console.log("Server listening on port 3000");
    });
    

    上面的代码块定义了一个基本的基于 Express 的应用程序,当您访问主页时,它将显示“Hello World, greetings from Vultr”消息。

  6. 保存文件并退出编辑器。

  7. 允许端口 3000 监听传入连接。

    bash
    sudo ufw allow 3000
    
  8. 启动应用程序。

    bash
    node index.js
    
  9. 在 Web 浏览器中,导航到如下所示的 URL。

    http://SERVER_IP:3000
    

    确认访问后,您可以停止服务器。

使用 PM2 创建持久化服务

PM2 提供了一个易于使用的 CLI 界面,以确保您的服务持久、可靠并自动重新启动。在本节中,您将学习如何安装 PM2 包,以集群模式启动应用程序,并设置持久化服务以确保您的应用程序在服务器启动时自动启动。

  1. 全局安装 PM2。-g 标志指定 PM2 包应全局安装,使其可供所有系统用户访问。

    bash
    sudo npm install pm2 -g
    
  2. 以集群模式启动您的 Node.js 应用程序。请确保将路径替换为您的应用程序的实际位置。-i 标志指定 Node.js 应用程序应在集群模式下运行四个实例。

    bash
    pm2 start ~/express-demo -i 4 --name express-demo
    
  3. 设置持久化服务。

    bash
    pm2 startup
    
  4. 保存配置以应用更改。

    bash
    pm2 save
    

配置 Nginx 作为反向代理服务器

Nginx 在您的 Web 服务器和客户端之间充当反向代理。它根据您的请求配置设置来路由传入的请求。在本节中,您将学习如何配置您的示例应用程序以使用 Nginx 实现高效的请求处理和负载均衡。您还将学习如何配置应用程序以实现反向代理。

  1. 登录 Vultr 客户门户

  2. 导航到产品页面。

  3. 从侧边菜单,展开 网络 下拉菜单,然后选择 DNS

  4. 单击中心的 添加域名 按钮。

  5. 通过选择服务器的 IP 地址,按照设置过程添加您的域名。

  6. 将以下主机名设置为您域名的主次名称服务器,并在域名注册商处进行设置。

    • ns1.vultr.com
    • ns2.vultr.com
  7. 安装 Nginx。

    bash
    sudo apt install nginx
    
  8. sites-available 目录中创建一个名为 express-demo.conf 的文件。

    bash
    sudo nano /etc/nginx/sites-available/express-demo.conf
    
  9. 将以下内容粘贴到 express-demo.conf 文件中。请确保将 example.com 替换为您的实际域名。

    bash
    server {
         listen 80;
         listen [::]:80;
         server_name example.com www.example.com;
    
         location / {
             proxy_pass http://127.0.0.1:3000/;
         }
    }
    

    上面的虚拟主机配置中使用了以下指令:

    • server 定义了您的域名的设置块。
    • listen 指示服务器监听端口 80 以接收传入请求。
    • server_name 指定此服务器块将响应的域名。
    • location 定义了服务器应该如何处理每个传入的请求。
    • proxy_pass 指示服务器将请求转发到另一个位置,在本例中为 http://127.0.0.1:3000/
  10. 保存文件并退出编辑器。

  11. 要激活虚拟主机配置,请在 sites-enabled 目录中创建一个软链接。

    bash
    sudo ln -s /etc/nginx/sites-available/express-demo.conf /etc/nginx/sites-enabled/
    
  12. 测试配置以识别错误。

    bash
    sudo nginx -t
    

    如果配置没有错误,您的输出应如下所示:

    bash
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
  13. 重启 Nginx 服务器。

    bash
    sudo systemctl reload nginx
    
  14. 允许端口 80 的传入连接。

    bash
    sudo ufw allow 80/tcp
    
  15. 在 Web 浏览器中,导航到如下所示的 URL。

    http://example.com
    
  16. 拒绝端口 3000 的传入连接。

    bash
    sudo ufw deny 3000
    

使用 Certbot 安装 SSL 证书

Certbot 允许您从 “Let's Encrypt”(一个免费的证书颁发机构)获取 SSL 证书。这些 SSL 证书充当加密密钥,可在用户和 Web 服务器之间实现安全通信。在本节中,您将学习如何为您的域请求一个免费的“Let's Encrypt”SSL 证书,并为您的应用程序实现 HTTPS。您还将学习如何设置证书在 90 天到期前自动续订。

  1. 允许端口 443 的传入连接以使用 HTTPS。

    bash
    sudo ufw allow 443/tcp
    
  2. 使用 snap 包管理器安装 certbot 包。

    bash
    sudo snap install --classic certbot
    
  3. 为您的域请求一个新的 SSL 证书。请确保将 example.com 替换为您的实际域名。

    bash
    sudo certbot --nginx -d example.com -d www.example.com
    
  4. 在 Web 浏览器中,导航到如下所示的 URL

    https://example.com
    
  5. 测试 SSL 证书在到期时是否自动续订。

    bash
    sudo certbot renew --dry-run
    

扩展您的 PM2 服务

在本节中,您将学习如何扩展和缩减您的 PM2 服务。此外,您还将探索用于监控应用程序进程的各种其他 PM2 命令。

列出所有 PM2 进程。

bash
pm2 list

示例输出

Sample output of all PM2 processes listed

缩减 PM2 服务

要缩减您的 Node.js 应用程序,请运行 pm2 scale 命令,如下所示。请确保将 express-demo 替换为您的实际服务名称。

bash
pm2 scale express-demo 2

上述命令将实例数量从最初运行的四个实例减少到两个。

示例输出

Sample output of a table showing two instances running with a warning at the end prompting to save the list using the `pm2 save` command

扩展 PM2 服务

要扩展您的 Node.js/Express 应用程序,请运行 pm2 scale 命令,如下所示。请确保将 express-demo 替换为您的实际服务名称。

bash
pm2 scale express-demo 5

上述命令将实例数量从运行的两个实例增加到五个。

示例输出

Sample output of a table showing five instances running with a warning at the end prompting to save the list using the `pm2 save` command

探索其他 PM2 命令

  • 停止所有 PM2 进程

    bash
    pm2 stop all
    
  • 重新启动所有 PM2 进程

    bash
    pm2 restart all
    
  • 软重新加载所有 PM2 进程

    bash
    pm2 reload all
    

    软重新加载通过逐个实例重新加载来帮助最大程度地减少 Node.js/Express 应用程序的停机时间。

  • 监控所有 PM2 进程

    bash
    pm2 monit
    
  • 检查 PM2 生成的日志

    bash
    pm2 logs
    

总结

在本文中,您学习了如何在 Vultr 云计算服务器上使用 PM2 部署 Node.js 应用程序。本教程指导您完成创建、扩展和监控 PM2 服务的步骤。您还学习了如何为 PM2 服务设置 Nginx 作为反向代理服务器,并使用 SSL 证书进行保护。

作为 Node.js 部署的扩展,请考虑使用 Vultr 托管数据库来托管与您的应用程序关联的数据库。它提供了一个安全、高可用且易于扩展的数据库集群,可立即使用。

这是一篇由 Vultr 赞助的文章。Vultr 是全球最大的私营云计算平台。Vultr 是开发者的首选,已为 185 个国家/地区的 150 万多客户提供了灵活、可扩展、全球化的云计算、云 GPU、裸金属和云存储解决方案。了解更多关于 Vultr 的信息。