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 应用程序

作者头像Vultr阅读时间:8 分钟

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

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

在 Vultr 上部署服务器

  1. 注册并登录 Vultr 客户门户
  2. 导航到“产品”页面。
  3. 从侧边菜单中选择“计算”。Vultr 客户门户的屏幕截图,显示左侧的产品菜单,其中计算作为子选项,以及中央的部署服务器按钮
  4. 点击中央的“部署服务器”按钮。
  5. 选择“云计算”作为服务器类型。
  6. 在“服务器位置”部分,选择你所需的区域。
  7. 在“服务器镜像”部分,点击“市场应用”选项卡并选择“NodeJS”镜像。Vultr 客户门户的屏幕截图,显示市场应用选项卡,选择 NodeJS 选项,以及右下角的立即部署按钮 NodeJS 市场应用 预装了最新的 Node.js 和 Node 包管理器 (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 服务的步骤。你还可以学习如何将 Nginx 设置为 PM2 服务的反向代理服务器,并使用 SSL 证书对其进行保护。

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

本文由 Vultr 赞助。Vultr 是全球最大的私营云计算平台。Vultr 受开发人员青睐,已为 185 个国家/地区的 150 多万客户提供了灵活、可扩展的全球云计算、云 GPU、裸机和云存储解决方案。详细了解 Vultr

关注 MDN 的最新资讯

获取 MDN 时事通讯,不错过有关最新 Web 开发趋势、技巧和最佳实践的任何更新。