如何在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 版本

第二步 - 生成 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 生成应用框架

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


  1. cd hakase-app 
  2. npm install 

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


  1. DEBUG=myapp:* npm start 

默认情况下,我们的 express 应用会运行在 3000 端口。现在访问服务器的 IP 地址:192.168.33.10: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 服务

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

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


  1. pm2 start ./bin/www 

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

使用 pm2 运行 nodejs app

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


  1. pm2 show www 

 

pm2 服务状态

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


  1. pm2 logs www 

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 添加服务到开机自启动

第四步 - 安装和配置 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. # Server on port 80 
  6. server { 
  7.     listen 80; 
  8.     server_name hakase-node.co; 
  9.     root /home/yume/hakase-app; 
  10.     location / { 
  11.         # Proxy_pass configuration 
  12.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
  13.         proxy_set_header Host $http_host; 
  14.         proxy_set_header X-NginX-Proxy true; 
  15.         proxy_http_version 1.1; 
  16.         proxy_set_header Upgrade $http_upgrade; 
  17.         proxy_set_header Connection "upgrade"; 
  18.         proxy_max_temp_file_size 0; 
  19.         proxy_pass http://hakase-app/; 
  20.         proxy_redirect off; 
  21.         proxy_read_timeout 240s; 
  22.     } 

保存文件并退出 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 中运行

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


  1. pm2 save 
  2. sudo reboot 

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


  1. su - yume 
  2. pm2 status www 

nodejs 在 pm2 下开机自启动

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

作者:Muhammad Arul

来源:51CTO

时间: 2025-01-02 14:46:47

如何在Ubuntu上使用pm2和Nginx部署Node.js应用的相关文章

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

pm2 是一个 Node.js 应用的进程管理器,它可以让你的应用程序保持运行,还有一个内建的负载均衡器.它非常简单而且强大,你可以零间断重启或重新加载你的 node 应用,它也允许你为你的 node 应用创建集群. 在这篇博文中,我会向你展示如何安装和配置 pm2 用于这个简单的 'Express' 应用,然后配置 Nginx 作为运行在 pm2 下的 node 应用的反向代理. 前提: Ubuntu 16.04 - 64bit Root 权限 第一步 - 安装 Node.js LTS 在这篇

如何在Ubuntu上安装Apache,MySQL,PHP,Nginx,HAProxy,以及如何在docker上安装LAMP

如何在Ubuntu上安装Apache,MySQL,PHP,Nginx,HAProxy,以及如何在docker上安装LAMP   在Ubuntu上安装LAMP: https://help.ubuntu.com/community/ApacheMySQLPHPhttps://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntuhttp://www.make

Linux 有问必答:如何在 Ubuntu 上配置网桥

Linux 有问必答:如何在 Ubuntu 上配置网桥 Question: 我需要在我的Ubuntu主机上建立一个Linux网桥,共享一个网卡给其他一些虚拟主机或在主机上创建的容器.我目前正在Ubuntu上使用网络管理器(Network Manager),所以最好>能使用网络管理器来配置一个网桥.我该怎么做? 网桥是一个硬件装备,用来将两个或多个数据链路层(OSI七层模型中第二层)互联,以使得不同网段上的网络设备可以互相访问.当你想要互联一个主机里的多个虚拟机器或者以太接口时,就需要在Linux

如何在 Ubuntu 上使用 Glances 监控系统

如何在 Ubuntu 上使用 Glances 监控系统 Glances 是一个用于监控系统的跨平台.基于文本模式的命令行工具.它是用 Python 编写的,使用 psutil库从系统获取信息.你可以用它来监控 CPU.平均负载.内存.网络接口.磁盘 I/O,文件系统空间利用率.挂载的设备.所有活动进程以及消耗资源最多的进程.Glances 有很多有趣的选项.它的主要特性之一是可以在配置文件中设置阀值(careful小心.warning警告.critical致命),然后它会用不同颜色显示信息以表明

如何在Ubuntu上找出可用的网络适配器

如何在Ubuntu上找出可用的网络适配器 想知道在Linux中你正在使用的网卡是什么吗? 在Linux中很容易就找出网卡的生产商.打开一个终端并输入下面的额命令: sudo lshw -C network 如果上面的命令不能在sudo下使用,那就别用 sudo 的特权模式.它的输出看上去有点奇怪但是很有用. *-network description: Wireless interface product: BCM4360 802.11ac Wireless Network Adapter ve

Linux 基础:如何在Ubuntu上检查一个软件包是否安装

Linux 基础:如何在Ubuntu上检查一个软件包是否安装 如果你正在管理Debian或者Ubuntu服务器,你也许会经常使用dpkg 或者 apt-get命令.这两个命令用来安装.卸载和更新包. 在本篇中,让我们看下如何在基于DEB的系统下检查是否安装了一个包. 要检查特定的包,比如firefox是否安装了,使用这个命令: dpkg -s firefox 示例输出: Package: firefox Status: install ok installed Priority: optiona

如何在Ubuntu上修复“Not Enough Free Disk Space On /boot”

如何在Ubuntu上修复"Not Enough Free Disk Space On /boot" 提问:如何在Ubuntu上修复"Not Enough Free Disk Space On /boot"错误? 今天,当我在升级Lubuntu 14.04的时候遇到了下面这个错误,但是很简单. "Not Enough Free Disk Space On /boot" 这是因为我的 /boot 分区被不再需要的旧内核与包塞满了. 回答: 我听说Ub

如何在Ubuntu上使用MultiSystem创建多启动USB盘

如何在Ubuntu上使用MultiSystem创建多启动USB盘 介绍 也许还有不少人不知道MultiSystem,它是一个用来在Linux系统中创建多启动usb盘的小型的开源软件.使用这个工具,我们可以在USB中创建任意多的可启动Linux发行版.你所需要的只是网络链接(只在MultiSystem安装的时候需要),以及一个足够大的USB盘,这取决于你想在USB盘中放入发行版的数量. 在 Ubuntu 14.10/14.04 安装MultiSystem 手动安装: 下载 MultiSystem脚

如何在 Ubuntu 上转换图像、音频和视频格式

如何在 Ubuntu 上转换图像.音频和视频格式 如果你的工作中需要接触到各种不同编码格式的图像.音频和视频,那么你很有可能正在使用多个工具来转换这些多种多样的媒体格式.如果存在一个能够处理所有图像/音频/视频格式的多合一转换工具,那就太好了. Format Junkie 就是这样一个多合一的媒体转换工具,它有着极其友好的用户界面.更棒的是它是一个免费软件.你可以使用 Format Junkie 来转换几乎所有的流行格式的图像.音频.视频和归档文件(或称压缩文件),所有这些只需要简单地点击几下鼠