
在 Vultr 上使用 PM2 部署 Node.js 应用程序
进程管理器 2 (PM2) 是一款应用程序,可让你为各种应用程序(例如 HTTP 服务器和任务队列工作程序)创建持久服务。PM2 的集群模式通过允许你创建同一应用程序的多个实例来进一步提升此功能,从而实现高效的资源利用。此外,PM2 提供了一个简单的 CLI 接口来管理、扩展和监控正在运行的服务。
在本文中,我们将演示在 Vultr 云计算 服务器上部署 Node.js 应用程序的步骤。我们将指导你完成在 Vultr 上为你的 Node.js 应用程序部署服务器的过程。你将学习安装运行应用程序所需的依赖项,以及如何使用 PM2 创建持久服务,确保你的应用程序在服务器重新启动后自动重启。此外,我们将介绍如何将 Nginx 设置为反向代理,以实现高效的负载均衡,并使用安全套接字层 (SSL) 证书保护你的应用程序,以启用 HTTPS。
在 Vultr 上部署服务器
- 注册并登录 Vultr 客户门户。
- 导航到“产品”页面。
- 从侧边菜单中选择“计算”。
- 点击中央的“部署服务器”按钮。
- 选择“云计算”作为服务器类型。
- 在“服务器位置”部分,选择你所需的区域。
- 在“服务器镜像”部分,点击“市场应用”选项卡并选择“NodeJS”镜像。
NodeJS 市场应用 预装了最新的 Node.js 和 Node 包管理器 (npm) 二进制文件,可节省设置时间。
- 在“服务器大小”部分,根据需要选择服务器大小。
- 在“附加功能”部分根据需要选择其他功能。
- 点击右下角的“立即部署”按钮。
创建 Node.js 应用程序
在创建了前面所述的 Vultr 服务器后,本节将指导你使用 Express 创建一个示例 Node.js 应用程序。我们将引导你完成初始化 Node.js 项目、安装 Express 以及创建基本端点的过程。如果你已经有现有的 Node.js 应用程序,可以跳过此部分,克隆你的 Git 存储库,并从下一节继续。
- 创建一个文件夹来存储项目文件,并导航到其中。bash
mkdir ~/express-demo cd ~/express-demo
- 初始化一个 Node.js 项目。bash
npm init
- 安装
express
库。bashnpm install express
- 创建一个名为
index.js
的文件。bashnano index.js
- 将以下内容粘贴到
index.js
文件中。上面的代码块定义了一个基于 Express 的基本应用程序,当访问主页时,它会显示“Hello World, greetings from Vultr”消息。javascriptconst 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"); });
- 保存文件并退出编辑器。
- 允许端口
3000
侦听传入连接。bashsudo ufw allow 3000
- 启动应用程序。bash
node index.js
- 在 Web 浏览器中,导航到如下所示的 URL。
http://SERVER_IP:3000
确认访问后,你可以停止服务器。
使用 PM2 创建持久服务
PM2 提供了一个易于使用的 CLI 接口,以确保你的服务持久、可靠并自动重启。在本节中,你将学习如何安装 PM2 包、在集群模式下启动你的应用程序以及设置持久服务,以确保你的应用程序在服务器启动时自动启动。
- 全局安装 PM2。
-g
标志指定应全局安装 PM2 包,使其对所有系统用户可用。bashsudo npm install pm2 -g
- 在集群模式下启动你的 Node.js 应用程序。请确保将路径替换为你应用程序的实际位置。
-i
标志指定 Node.js 应用程序应在集群模式下运行四个实例。bashpm2 start ~/express-demo -i 4 --name express-demo
- 设置持久服务。bash
pm2 startup
- 保存配置以应用更改。bash
pm2 save
配置 Nginx 作为反向代理服务器
Nginx 充当 Web 服务器和客户端之间的反向代理。它根据你的请求配置设置来引导传入请求。在本节中,你将学习如何使用 Nginx 配置你的示例应用程序以实现高效的请求处理和负载均衡。你还可以学习如何为反向代理配置你的应用。
- 登录 Vultr 客户门户。
- 导航到“产品”页面。
- 从侧边菜单中展开“网络”下拉菜单,然后选择“DNS”。
- 点击中央的“添加域名”按钮。
- 按照设置步骤,通过选择服务器的 IP 地址来添加你的域名。
- 使用你的域名注册商将以下主机名设置为域名的主名称服务器和辅助名称服务器
ns1.vultr.com
ns2.vultr.com
- 安装 Nginx。bash
sudo apt install nginx
- 在
sites-available
目录中创建一个名为express-demo.conf
的文件。bashsudo nano /etc/nginx/sites-available/express-demo.conf
- 将以下内容粘贴到
express-demo.conf
文件中。请确保将example.com
替换为你实际的域名。以下指令用于上述虚拟主机配置bashserver { 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/
。
- 保存文件并退出编辑器。
- 要激活虚拟主机配置,请在
sites-enabled
目录中创建一个软链接。bashsudo ln -s /etc/nginx/sites-available/express-demo.conf /etc/nginx/sites-enabled/
- 测试配置以识别错误。如果配置没有错误,你的输出应如下所示bash
sudo nginx -t
bashnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
- 重启 Nginx 服务器。bash
sudo systemctl reload nginx
- 允许端口
80
上的传入连接。bashsudo ufw allow 80/tcp
- 在 Web 浏览器中,导航到如下所示的 URL。
http://example.com
- 拒绝端口
3000
上的传入连接。bashsudo ufw deny 3000
使用 Certbot 安装 SSL 证书
Certbot 允许你从 “Let's Encrypt”(一个免费的证书颁发机构)获取 SSL 证书。这些 SSL 证书充当加密密钥,可启用用户和 Web 服务器之间的安全通信。在本节中,你将学习如何从“Let's Encrypt”为你的域名请求免费 SSL 证书,并为你的应用程序实现 HTTPS。你还可以学习如何在证书过期前 90 天将其设置为自动续订。
- 允许端口
443
上的传入连接以启用 HTTPS。bashsudo ufw allow 443/tcp
- 使用
snap
包管理器安装certbot
包。bashsudo snap install --classic certbot
- 为你的域名请求新的 SSL 证书。请确保将
example.com
替换为你实际的域名。bashsudo certbot --nginx -d example.com -d www.example.com
- 在 Web 浏览器中,导航到如下所示的 URL
https://example.com
- 测试 SSL 证书在过期时是否自动续订。bash
sudo certbot renew --dry-run
扩展你的 PM2 服务
在本节中,你将学习如何向上和向下扩展你的 PM2 服务。此外,你还可以探索各种其他 PM2 命令来监控你的应用程序进程。
列出所有 PM2 进程。
pm2 list
示例输出

缩减 PM2 服务
要缩减你的 Node.js 应用程序,请运行如下所示的 pm2 scale
命令。请确保将 express-demo
替换为你实际的服务名称。
pm2 scale express-demo 2
以上命令将实例数从最初运行的四个实例减少到两个。
示例输出

扩展 PM2 服务
要扩展你的 Node.js/Express 应用程序,请运行如下所示的 pm2 scale
命令。请确保将 express-demo
替换为你实际的服务名称。
pm2 scale express-demo 5
以上命令将实例数从运行的两个实例增加到五个。
示例输出

探索其他 PM2 命令
- 停止所有 PM2 进程bash
pm2 stop all
- 重启所有 PM2 进程bash
pm2 restart all
- 软重启所有 PM2 进程软重启通过逐个重新加载实例来帮助最大程度地减少 Node.js/Express 应用程序的停机时间。bash
pm2 reload all
- 监控所有 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。