为什么要写这篇文章
最近利用 ant-design-pro 结合 koa2 搭建了一套后台管理系统,用于管理个人项目。由于需要将 koa2 代码部署到服务器上,很自然地就想到了用 pm2 来发布和管理。其实自己之前是有在工作中使用 pm2 的,但是我都是在别人搭建好的环境下进行使用,没有很好地领会精髓。在这次部署个人项目的实践中,自己从头到尾把控整个部署流程,所以收获是有很多的,因此才会准备写这篇文章,将自己的所学所知整理成文,既方便自己以后进行回顾,也可以帮助想要了解这块知识的朋友。
初识 pm2
首先,我们要知道 pm2 是什么。pm2 是一个 node 应用的监控管理工具,具有如下的功能:
- 以守护进程的方式将我们的 node 应用运行在后台
- 提供简便的方式启动或停止 node 应用
- 监控 node 应用的运行状态,并提供当 node 应用崩溃时自动重启的功能(不用手动
node app.js
啦) - 开启 cluster 模式后,会采用负载均衡的策略将 node 应用跑在多个 cpu 上,从而充分发挥多核 cpu 的性能
- 配合 ecosystem.config.js,可以方便地进行一键部署
pm2 常用的命令如下:
1 | # Fork mode |
使用 pm2 部署 node 应用
除了上述直接在命令行中操作 pm2,更常见的使用方式是使用约定的配置文件(ecosystem.config.js)来管理。通过这个文件,我们可以简单高效的管理和发布多个 node 应用,下面将列出常见的配置:
1 | module.exports = { |
使用 pm2 部署的完整指令是pm2 deploy <configuration_file> <environment> <command>
,默认的
例如要发布到预生产环境上,执行的指令是pm2 deploy pre_production
。这里需要注意的是,如果是第一次发布,需要执行pm2 deploy pre_production setup
,从而走pre-setup和post-setup钩子,执行我们设置的初始化安装命令。还有一点需要注意的是由于存在拉仓库代码的行为,所以我们需要为服务器配置 ssh 免密登录,这样才能保证成功地拉下代码。
在发布完成后,我们可以登录到服务器上,输入pm2 list
,查看 node 应用的运行状态,如果是online,那么恭喜你,已经部署成功啦!
结语
ci/cd 这一套流程其实会涉及很多知识,虽然在实践的过程中,会遇到很多问题,但是只有通过不断的实践,才能真正领悟其中的精髓。未来我还会尝试更多的 ci/cd 工具,同时也会把自己学到的经验整理成文分享出来,帮助需要的人。