在Stream,我们构建了许多应用程序来展示我们的服务所提供的出色功能。对于几乎所有的应用程序,我们都将它们放在一个云服务器上—通常是DigitalOcean或AWS EC2。
虽然维护代码库和维持它的相关性是有困难的,但我们发现,在维护应用程序时,最具挑战性的是保持它的活动和运行。
此外,由于Node.js是大多数后端API的核心语言,因此很难扩展单个线程进程;这就是PM2发挥作用的地方,也是我们如此喜欢使用它的原因。
现在有很多流程管理器,最著名的是Forever、StrongLoop的流程管理器和good ol ’ SystemD。还有PM2,下载量超过6000万次,GitHub之星达到2.5万颗(而且还在不断上升!)我们喜欢PM2,因为简单地说,它易于使用,并且可以完美的管理生产环境。
PM2是什么呢?
PM2是一个经过测试的,Node.js应用程序的生产运行时和进程管理器。它还配备了内置的负载均衡器,使扩展应用程序更加容易。最重要的是,它可以在Linux、Windows和MacOS上工作。
我们使用配置文件(process.json),就可以指定要运行哪些进程以及要扩展到多少进程。启动PM2时,可以指定process.json文件,而PM2负责其余的事务。(更多关于?中的进程文件)
所有这些都意味着PM2允许我们永远保持Node.js应用程序的活跃,而且还是0秒停机重载,维护升级的时候不需要停机。
安装PM2
安装PM2简直就是小菜一碟。首先,您需要确保process.json文件已经准备好进入代码,这样我们就可以开始这个过程了。如果您在MacOS上,是非常简单的,用yarn安装PM2就可以了。如果您在Linux、Windows或使用Docker容器(是的,它也支持Docker),请按照这里的说明操作。如果您想知道它应该是什么样子的话,下面是一个用于Winds的process_prod.json文件的示例,这是我们的开源rss和播客应用程序。
{
"apps": [
{
"name": "api",
"cwd": "api/dist",
"script": "server.js",
"watch": false
},
{
"name": "conductor",
"cwd": "api/dist/workers",
"script": "conductor.js",
"watch": false
},
{
"name": "rss-worker",
"cwd": "api/dist/workers",
"script": "rss.js",
"instances": 2,
"exec_mode": "cluster",
"watch": false
},
{
"name": "podcast-worker",
"cwd": "api/dist/workers",
"script": "podcast.js",
"instances": 2,
"exec_mode": "cluster",
"watch": false
},
{
"name": "og-worker",
"cwd": "api/dist/workers",
"script": "og.js",
"instances": 2,
"exec_mode": "cluster",
"watch": false
}
]
}
正如您所见,我们正在运行多个进程,而PM2在没有任何问题的情况下处理它们,使用Node.js集群API自动生成多个进程。
提示和技巧
对于任何应用程序(我们这里是进程管理器),最好从以前使用过它的人那里了解一些技巧。
自动重启
一旦启动,您的应用程序将永远保持活动状态,在崩溃和机器重新启动后自动重新启动-所有这些都只需要一个简单的命令:pm2 startup
进程管理
无论运行多少应用程序,PM2都有一套指令,是我们可以分别管理它们各自的状态。下面是一些我们常用的一些的指令(无先后顺序):
pm2 start process_prod.json-通过进程json文件启动进程
pm2 ls-显示所有应用程序的列表
pm2 stop -停止一个特定的应用程序
pm2 start -启动一个特定的应用程序
pm2 scale N-将您指定的应用程序缩放到N个实例(可用于扩大或缩小)
pm2 kill-杀死所有正在运行的应用程序
pm2 restart-重新启动所有正在运行的应用程序
pm2 reload-重新加载应用程序配置(当您修改应用程序的环境变量时,这很方便)
进程管理

关注公众号「新前端社区」,享受文章首发体验!
每周重点攻克一个前端技术难点。