怎样在Ubuntu 16.04上设置Node.js持久性应用程序

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

Node.js应用程序因其扩展能力而广受欢迎。在多台服务器上运行多个并发进程可减少延迟并延长正常运行时间。管理多个服务器时,最简单的方法是让Node.js应用程序在崩溃时自动重新启动。本教程将向您展示如何从空白的Ubuntu 16.04实例快速设置应用程序持久性。

先决条件

使用Ubuntu 16.04 LTS x64创建任何大小的Vultr实例。
如果您不是root用户,请运行 sudo -s 并输入您的密码。需要根访问权限才能修改启动文件,以便进程管理器在启动时启动。
确保在实例上安装了Node.js,并且Node.js的版本为8.9.3 LTS或更高版本,这是持久性管理器平稳运行所必需的。用 node -v 检查安装的版本。如果Node.js的版本不正确,则以下命令将安装它。

安装Node.js。

$ sudo apt-get update
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs

创建交换分区

此步骤是可选的,但建议安装。交换分区是硬盘的一部分,专用于帮助补充RAM。在较小的Vultr实例(例如512MB RAM实例)上,创建交换分区将对性能有所帮助。对于自动版本的交换教程,请使用以下命令。

$ git clone https://github.com/teamtofu/server-tools.git tools
$ bash ./tools/swap.sh

一般来说,设置永久性应用程序时,对于具有4 GB或更大RAM的实例,不必使用swap,尽管它可以提高应用程序的性能。 RAM比交换更敏感,因此无论交换如何,具有更多RAM的实例往往会产生更好的结果。

安装纱

Yarn是Facebook上用于Node.js软件包的易于使用的软件包管理器。它比NPM更快,而且具有确定性,这在部署多台服务器时特别有用。

$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
$ sudo apt-get update && sudo apt-get install yarn

但是,可以使用NPM代替Yarn,它具有与本教程中所有命令相似的命令。

安装您的Node.js应用程序

如果您的应用程序托管在git存储库中,请克隆它并使用 yarn install。您的应用程序通常应具有服务器条目文件 server.js 要么 index.js,将在后续步骤中使用。

安装流程管理器2

Process Manager 2是将自动重新启动应用程序的程序包。 Process Manager 2非常流行,并且被Microsoft,PayPal和Intuit使用,因此安全可靠。

$ yarn global add pm2

将您的应用程序添加为一个过程

该应用程序将被守护(在后台运行)并使用start命令自动重新启动。

$ pm2 start [path to your entry.js] -i max

如果要自动启动最大进程数,请通过 -i max 论据。如果此Vultr实例的唯一用途是为应用程序提供服务,则建议这样做。对于具有多个CPU的Vultr实例,将启动多个进程,并且Process Manager 2将充当所有这些单个进程的负载平衡器。

在启动时自动启动您的应用程序

启动应用程序后,保存应用程序的配置。然后,运行启动命令以在Ubuntu启动时在后台自动运行Process Manager 2。对于Ubuntu 16.04,Process Manager 2将绑定到 systemd

$ pm2 save
$ pm2 startup

现在,如果您的Node.js应用程序由于错误而崩溃,它将重新启动,并且如果Ubuntu由于任何原因而崩溃,则该过程将通过Ubuntu自动重新启动。可以使用以下命令重新启动进程 pm2 gracefulReload all 并且可以使用以下命令重新启动Process Manager 2 pm2 update。要在启动时停止Process Manager 2,请运行 pm2 unstartup

测试中

尝试输入 reboot 并检查Ubuntu启动后是否提供了您的应用程序。如果该应用程序是用于Web并通过端口提供的 80, 然后 curl http://localhost/ 将显示起始页面的HTML。如果它不起作用,则命令 pm2 status 将显示正在运行的进程,并且可以重新发出start命令。

部署应用程序的新版本

如果应用程序已更新(例如通过拉动git存储库),则必须发出命令来更新正在运行的应用程序进程。

$ pm2 update

用法示例

解析服务器,一种流行的开源平台即服务,作为应用程序的后端。后端可能由于代码或请求量错误而崩溃,但是由于其他服务器(和/或进程)继续运行,并且Parse Server进程迅速重新启动,因此应用程序不会停机。

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com