如何在 Ubuntu 上使用 pm2 和 Nginx 部署 Node.js 应用

简介:

pm2 是一个 Node.js 应用的进程管理器,它可以让你的应用程序保持运行,还有一个内建的负载均衡器。它非常简单而且强大,你可以零间断重启或重新加载你的 node 应用,它也允许你为你的 node 应用创建集群。

在这篇博文中,我会向你展示如何安装和配置 pm2 用于这个简单的 'Express' 应用,然后配置 Nginx 作为运行在 pm2 下的 node 应用的反向代理。

前提:

  • Ubuntu 16.04 - 64bit
  • Root 权限

第一步 - 安装 Node.js LTS

在这篇指南中,我们会从零开始我们的实验。首先,我们需要在服务器上安装 Node.js。我会使用 Nodejs LTS 6.x 版本,它能从 nodesource 仓库中安装。

从 Ubuntu 仓库安装 python-software-properties 软件包并添加 “nodesource” Nodejs 仓库。


 
 
  1. sudo apt-get install -y python-software-properties
  2. curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -

安装最新版本的 Nodejs LTS:


 
 
  1. sudo apt-get install -y nodejs

安装完成后,查看 node 和 npm 版本。


 
 
  1. node -v
  2. npm -v

检查 node.js 版本

检查 node.js 版本

第二步 - 生成 Express 示例 App

我会使用 express-generator 软件包生成的简单 web 应用框架进行示例安装。express-generator 可以使用npm 命令安装。

用 npm安装 express-generator


 
 
  1. npm install express-generator -g
  • -g : 在系统内部安装软件包。

我会以普通用户运行应用程序,而不是 root 或者超级用户。我们首先需要创建一个新的用户。

创建一个名为 yume 的用户:


 
 
  1. useradd -m -s /bin/bash yume
  2. passwd yume

使用 su 命令登录到新用户:


 
 
  1. su - yume

下一步,用 express 命令生成一个新的简单 web 应用程序:


 
 
  1. express hakase-app

命令会创建新项目目录 hakase-app

用 express-generator 生成应用框架

用 express-generator 生成应用框架

进入到项目目录并安装应用需要的所有依赖。


 
 
  1. cd hakase-app
  2. npm install

然后用下面的命令测试并启动一个新的简单应用程序:


 
 
  1. DEBUG=myapp:* npm start

默认情况下,我们的 express 应用会运行在 3000 端口。现在访问服务器的 IP 地址:192.168.33.10:3000 :

express nodejs 运行在 3000 端口

express nodejs 运行在 3000 端口

这个简单 web 应用框架现在以 'yume' 用户运行在 3000 端口。

第三步 - 安装 pm2

pm2 是一个 node 软件包,可以使用 npm 命令安装。(用 root 权限,如果你仍然以 yume 用户登录,那么运行命令 exit 再次成为 root 用户):


 
 
  1. npm install pm2 -g

现在我们可以为我们的 web 应用使用 pm2 了。

进入应用目录 hakase-app


 
 
  1. su - yume
  2. cd ~/hakase-app/

这里你可以看到一个名为 package.json 的文件,用 cat 命令显示它的内容。


 
 
  1. cat package.json

配置 express nodejs 服务

配置 express nodejs 服务

你可以看到 start 行有一个 nodejs 用于启动 express 应用的命令。我们会和 pm2 进程管理器一起使用这个命令。

像下面这样使用 pm2 命令运行 express 应用:


 
 
  1. pm2 start ./bin/www

现在你可以看到像下面这样的结果:

使用 pm2 运行 nodejs app

使用 pm2 运行 nodejs app

我们的 express 应用正在 pm2 中运行,名称为 www,id 为 0。你可以用 show 选项 show nodeid|name获取更多 pm2 下运行的应用的信息。


 
 
  1. pm2 show www

pm2 服务状态

pm2 服务状态

如果你想看我们应用的日志,你可以使用 logs 选项。它包括访问和错误日志,你还可以看到应用程序的 HTTP 状态。


 
 
  1. pm2 logs www

pm2 服务日志

pm2 服务日志

你可以看到我们的程序正在运行。现在,让我们来让它开机自启动。


 
 
  1. pm2 startup systemd
  • systemd: Ubuntu 16 使用的是 systemd。

你会看到要用 root 用户运行命令的信息。使用 exit 命令回到 root 用户然后运行命令。


 
 
  1. sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u yume --hp /home/yume

它会为启动应用程序生成 systemd 配置文件。当你重启服务器的时候,应用程序就会自动运行。

pm2 添加服务到开机自启动

pm2 添加服务到开机自启动

第四步 - 安装和配置 Nginx 作为反向代理

在这篇指南中,我们会使用 Nginx 作为 node 应用的反向代理。Ubuntu 仓库中有 Nginx,用 apt 命令安装它:


 
 
  1. sudo apt-get install -y nginx

下一步,进入到 sites-available 目录并创建新的虚拟主机配置文件。


 
 
  1. cd /etc/nginx/sites-available/
  2. vim hakase-app

粘贴下面的配置:


 
 
  1. upstream hakase-app {
  2. # Nodejs app upstream
  3. server 127.0.0.1:3000;
  4. keepalive 64;
  5. }
  6. # Server on port 80
  7. server {
  8. listen 80;
  9. server_name hakase-node.co;
  10. root /home/yume/hakase-app;
  11. location / {
  12. # Proxy_pass configuration
  13. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  14. proxy_set_header Host $http_host;
  15. proxy_set_header X-NginX-Proxy true;
  16. proxy_http_version 1.1;
  17. proxy_set_header Upgrade $http_upgrade;
  18. proxy_set_header Connection "upgrade";
  19. proxy_max_temp_file_size 0;
  20. proxy_pass http://hakase-app/;
  21. proxy_redirect off;
  22. proxy_read_timeout 240s;
  23. }
  24. }

保存文件并退出 vim。

在配置中:

  • node 应用使用域名 hakase-node.co 运行。
  • 所有来自 nginx 的流量都会被转发到运行在 3000 端口的 node app。

测试 Nginx 配置确保没有错误。


 
 
  1. nginx -t

启用 Nginx 并使其开机自启动。


 
 
  1. systemctl start nginx
  2. systemctl enable nginx

第五步 - 测试

打开你的 web 浏览器并访问域名(我的是):http://hakase-app.co 。

你可以看到 express 应用正在 Nginx web 服务器中运行。

Nodejs app 在 pm2 和 Nginx 中运行

Nodejs app 在 pm2 和 Nginx 中运行

下一步,重启你的服务器,确保你的 node app 能开机自启动:


 
 
  1. pm2 save
  2. sudo reboot

如果你再次登录到了你的服务器,检查 node app 进程。以 yume 用户运行下面的命令。


 
 
  1. su - yume
  2. pm2 status www

nodejs 在 pm2 下开机自启动

nodejs 在 pm2 下开机自启动

Node 应用在 pm2 中运行并使用 Nginx 作为反向代理。

原文发布时间为:2017-05-09

本文来自云栖社区合作伙伴“Linux中国”

相关文章
|
JSON JavaScript Linux
【MCP教程系列】Node.js+TypeScript搭建NPX MCP服务并自定义部署至阿里云百炼
本文介绍如何将阿里云百炼的工作流封装成MCP服务并部署,随后引入到智能体中使用。主要步骤包括:1) 封装MCP服务;2) 发布到npm官方平台;3) 在阿里云百炼平台创建自定义MCP服务;4) 在智能体中添加自定义MCP服务。通过这些步骤,用户可以轻松将工作流转化为MCP服务,并在智能体中调用。
2734 0
|
消息中间件 JavaScript 中间件
函数计算产品使用问题之WebIDE编写的Node.js代码是否会自动进行打包部署
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
10月前
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
1021 44
|
10月前
|
存储 缓存 应用服务中间件
Nginx 响应头 Vary 的介绍与应用
`Vary` 头部字段在Web开发中扮演着重要角色,通过合理使用 `Vary`,可以优化缓存策略,提升Web应用的性能和响应速度。本文介绍了 `Vary` 头部字段的基本概念、作用、常见使用场景及其在Nginx中的配置方法。通过这些内容,希望读者能够更好地理解和应用 `Vary` 头部字段,提高Web应用的缓存效率和用户体验。
403 10
|
资源调度 前端开发 JavaScript
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第10天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤,包括安装依赖、创建混淆脚本、修改 `package.json` 脚本命令、构建项目并执行混淆,以及在 HTML 文件中引用混淆后的文件。通过这些步骤,可以有效提高代码的安全性。
1300 2
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
2256 0
|
前端开发 JavaScript 安全
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第7天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤。包括项目准备、安装 `javascript-obfuscator`、配置 Vite 构建以应用混淆,以及最终构建项目进行混淆。通过这些步骤,可以有效提升前端代码的安全性,防止被他人轻易分析和盗用。
2511 0
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
925 0
|
3月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
356 1