当前位置: 首页 > 后端技术 > Node.js

配置PM2实现自动代码发布

时间:2023-04-03 10:08:23 Node.js

参考文档使用pm2部署你的项目,防止过度劳累GitHub上的远程服务器第一个SSH密钥为.大致流程如下(Mac、Linux系列系统直接在终端执行命令,Windows需要先安装Git客户端):检查本机是否有现成的SSHkey。如果没有密钥,则生成一个新密钥并将其添加到本地ssh-agent。如果已经有秘钥,直接添加到本机的ssh-agent中。将SSH密钥添加到GitHub帐户。测试SSH连接,这里测试必须成功。如果连接成功,您可以看到如下文字:您好XXX!您已成功通过身份验证,但GitHub不提供shell访问。注意,你的个人电脑和远程服务器都必须做这整套操作,这样你才能在本地代码发布到GitHub后,让远程服务器更新最新的代码。安装PM2在本地机器和服务器上全局安装PM2。您可以使用npm或纱线。如果下载速度慢,记得先切换到淘宝的npm源。注意,如果两台电脑上的Git都不是最新版本,一定要更新到最新版本。不然可能会出现代码不能及时同步的问题,服务器还是拉不到最新版本的代码,很烦人。目前最新版本为2.16.3版本,2018年3月22日发布。本地机器配置PM2在本地终端环境下,使用pm2ecosystem命令生成一个原始的PM2配置文件ecosystem.confi.js。注意官网文档与实际运行结果不一致。文档上说执行这个命令会生成ecosystem.json文件,但是自己操作的时候不是这样的。你也应该注意它。为了方便大家参考,我把我修改的配置文件的内容贴出来,只贴重要的部分,其他地方根据自己的需要修改。module.exports={apps:[//目前只用pm2来管理一个项目,所以这里删除多余的内容{name:'RMS',//这里是项目的启动文件,我没有用脚本:'。/dist/bin/www',env:{COMMON_VARIABLE:'true'},env_production:{NODE_ENV:'dev'}}],//部署环境设置,我只用开发环境,需要马上修改代码看到结果,所以没有生产环境配置deploy:{dev:{//服务器上日常操作的用户user:'www',//服务器IPhost:'1.2.3.4',ref:'origin/master',repo:'git@github.com:Dream4ever/rms.git',//项目将部署到服务器上的位置,PM2默认部署到该路径的source子文件夹path:'/home/www/websites/rms',//服务器下载最新代码后执行的命令,将npm命令改为yarn'post-deploy':'yarn&&pm2reloadecosystem.config.js--envdev',环境:{NODE_ENV:'dev'}}}};部署项目的配置完成后,就可以通过pm2自动将项目部署到服务器上了。这里需要注意一点:需要将本地项目的最新版本,即所有修改保存并提交的版本发布到GitHub,然后进行后续的部署操作。如果之前没有通过SSH连接过服务器,需要在本机执行ssh-copy-idwww@1.2.3.4命令(www是之前配置的服务器的用户,@后面是IP),并将本地SSHsecret密钥信息添加到服务器。配置成功后,以后就不用再执行这条SSH命令了。然后在远程服务器本地初始化项目:pm2deployecosystem.confi.jsdevsetup。命令中的dev指的是上面配置文件中写的部署环境名称。如果需要同时搭建开发和生产环境,根据自己的需要初始化两次即可。如果您没有此要求,请不要担心。然后是部署项目。通俗地说,就是通知服务器下载之前从本机推送的最新代码到GitHub:pm2deployecosystem.confi.jsdev。在这两个过程中,可以看到在本机的终端上显示了服务器上的操作指令和结果。一般如果没有问题,经过这几个步骤,就可以部署成功了。如果你正在部署一个Node.js服务,你当然需要启动它。一种方式是通过PM2的exec命令让远程服务器执行指定的命令,另一种方式是直接通过SSH登录服务器执行命令。如果是在本机执行,使用这个方法:pm2deployproductionexec"pm2start./api/bin/www。如果登录服务器执行,直接执行pm2start./api/bin/www直接。对于在本机上用ES6语法写代码的同学,有一点需要注意。因为我在本机上使用了babel-preset,但是这套指令不知道如何让它在服务器上运行,所以我用了pm2官网提供的方法是带参数--interpreterbabel-node执行,pm2官网deployproductionexec"pm2start./api/bin/www--interpreterbabel-node"也提供了另外一个方法,是pm2的作者个人比较喜欢的方式,就是用一个入口文件,通过require()命令来引用原来的入口文件,虽然会影响性能,但是也有它的好处。文档:使用带有PM2的转译器。管理项首先列出官网提供的CheatSheet,可以用来快速查看。我在使用pm2的时候,有几个常用的命令:pm2startxx.js--watch,以监控方式启动项目,这样可以在最新版本的代码部署到服务器后自动重启,就像nodemon一样和主管服务。这个pm2start命令有一个需要注意的地方:第一次用它启动项目时,如果不使用--name为项目指定名称,可以看到pm2已经指定了名称对于启动项目后的项目,就是下表中Name对应的字段。后面再次启动项目时,可以直接用pm2startwww启动项目,即按项目名启动。┌────────┬────────┬──────────┬────┬──────┬──────────────────┐│名称│模式│状态……┤│www│分叉│停止│0│0%│0B└────────┴──────┴────────────┴────┴──────┴──────────┘pm2list将列出所有通过PM2管理的项目概览,即上表。还有pm2monit,用于监控终端上服务的运行情况。┌─进程列表────────┐┌──全局日志──────────────────────────────────────────┐│[0]www记忆:││││││││││││││││││││││││││││││││││││││││││││││││││││││││││└────────────────────────┘└────────────────────────────────────────────────────——————┘┌─自定义指标──┐┌──元数据──────────────────────────────────────────┐│(http://bit.ly/code-││AppNamewww││metrics)││Restarts0││││Uptime0││││Scriptpath/Users/samsara/Code/rms/api/b│└──────────────────────┘└──────────────────────────────────────────────────────┘左/右:开关板|向上/向下/鼠标:滚动|Ctrl-C:exit去别的另一个命令是pm2logsapp,用于查看app项目的日志。如果只执行pm2logs,会显示所有项目的日志,看起来会很乱。好了,文档就到这里了,有兴趣的可以试试看!