介绍
随着 Node.js 运行时环境越来越流行,越来越多的 Web 应用程序被开发并运行在 Node.js 上。然而,部署和管理 Node.js 应用程序确实不那么容易。如果不正确配置,它们可能会很容易地崩溃并失去可用性。针对这一问题,PM2 和 Nginx 成为 Node.js 应用部署的常用工具组合。
PM2 是一个基于 Node.js 运行的进程管理器,它可以用来管理 Node.js 应用的生命周期,包括启动、停止、重启、监视日志等。 Nginx 是一种高性能的 Web 服务器,它可以充当反向代理服务器来处理客户端请求并将它们转发到 Node.js 应用程序。
在本文中,我们将看到如何将 PM2 和 Nginx 两个工具结合使用来部署和管理 Node.js 应用程序。
环境准备
在开始部署 Node.js 应用程序之前,我们需要确保我们的服务器上已经安装了 Node.js 和 PM2。我们还需要安装 Nginx 服务器。
可以使用以下命令检查您的系统上是否已安装 Node.js 和 PM2:
node -v pm2 -v
如果您在运行上述命令后看到正确的输出,则说明您已经成功安装了 Node.js 和 PM2。
对于 Nginx 应该如何安装,这里不再赘述。
部署 Node.js 应用程序
在部署 Node.js 应用程序之前,我们需要先进入应用程序的根目录,并在该目录中创建一个名为 app.js 的文件。该文件将包含我们的应用程序代码。
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ---- - ----- ----- ------ - ----------------------- ---- -- - -------------- - ---- ----------------------------- -------------- -------------- ---------- --- ------------------- -- -- - ------------------- ------- -- ---------------------------- ---
保存该文件后,我们可以使用以下命令来启动我们的应用程序:
node app.js
该命令将启动服务器并开始监听 localhost:3000 上的请求。
现在,我们将使用 PM2 来管理我们的应用程序。首先,让我们使用以下命令来安装 PM2:
npm install -g pm2
这将安装 PM2 全局包。
接下来,我们可以使用以下命令来启动我们的 Node.js 应用程序:
pm2 start app.js
该命令将使用 PM2 在后台启动我们的应用程序。
我们可以使用以下命令来停止或重新启动应用程序:
pm2 stop app.js pm2 restart app.js
配置 Nginx
使用 Nginx 将客户端请求转发到 Node.js 应用程序需要一些配置。
首先,我们需要编辑 Nginx 的默认站点配置文件。可以通过以下命令找到该文件:
sudo vim /etc/nginx/sites-available/default
打开该文件,将以下内容添加到文件的 server {} 部分:
location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
这段配置指示 Nginx 将客户端请求转发到运行在 localhost:3000 上的 Node.js 应用程序。
接下来,我们需要重启 Nginx 以使更改生效。可以使用以下命令重启 Nginx:
sudo systemctl restart nginx
现在我们可以通过访问服务器的公共 IP 地址来测试我们的部署。您应该能够看到 Hello World 字样的返回结果,这意味着应用程序正在运行并已经成功部署。
结论
在本教程中,我们了解了如何使用 PM2 和 Nginx 部署和管理 Node.js 应用程序。我们已经看到如何使用 PM2 来管理我们的应用程序,以及如何使用 Nginx 将客户端请求转发到 Node.js 应用程序。希望您现在已经可以熟练地使用这些工具来部署您的 Node.js 应用程序了。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6723670a2e7021665e0fe742