官方文档有坑,花了不少时间。

前置条件:

  1. 可通过ssh证书登录服务器

  2. 服务器可通过ssh访问仓库

  3. 本机和服务器都安装了pm2

测试能否登录服务器,在本地输入:ssh -T nodeuser@webhost.com

测试服务器能否访问git仓库,在服务器输入:ssh -T git@github.com

以上两条命令返回结果必须都成功才可以进行后续操作。

安装pm2

npm i -g pm2

创建ecosystem.config.js文件

执行部署命令

安装命令:( 只需要执行一次)

pm2 deploy /path/to/ecosystem.config.js prod setup

部署:

pm2 deploy /path/to/ecosystem.config.js prod

遇到的坑

  1. 拉取项目时提示 :

官网给出的方法是让你使用 ssh-copy-id 命令将git证书添加到authorized_keys中去,这个方法不仅没用且危险,因为执行这个操作后,使用git证书也可以登录服务器了。

出现这个错误的根本原因是git证书设置了密码,因为pm2的bug导致你无法在部署的时候输入这个证书的密码,所以只要移除git证书密码就可以。或者再添加一个无密码的git证书

ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

ssh-keygen -p -P "old_password" -N "" -f ~/.ssh/github_id_rsa

编辑~/.ssh/config,把github的配置加上

  1. ssh端口号不是22导致无法登录

在host配置里加上端口号,注意不能是数字,要加引号

  1. 找不到node命令

使用nvm安装node会出现这个问题 修改~/.bashrc文件,最上面加入以下内容:

参考资料:

https://github.com/Unitech/pm2-deploy/issues/170

https://pm2.keymetrics.io/docs/usage/deployment/

http://www.jinbuguo.com/openssh/ssh-keygen.html

https://zhuanlan.zhihu.com/p/41235422