官方文档有坑,花了不少时间。
前置条件:
-
可通过ssh证书登录服务器
-
服务器可通过ssh访问仓库
-
本机和服务器都安装了pm2
测试能否登录服务器,在本地输入:ssh -T nodeuser@webhost.com
测试服务器能否访问git仓库,在服务器输入:ssh -T git@github.com
以上两条命令返回结果必须都成功才可以进行后续操作。
安装pm2
npm i -g pm2
创建ecosystem.config.js文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
module.exports = { apps: [ { name: 'project', script: 'src/serve/serve.js', watch: './', env: { PORT: 3000, NODE_ENV: 'production', }, }, ], deploy: { prod: { key: '~/.ssh/admin_rsa', // 登陆远程主机的证书路径 user: 'root', // 登录远程主机的url host: [ { host: 'anyhost.com', // 远程主机名称 port: '22', // 端口号 必须为字符串 }, ], ssh_options: ['ForwardAgent=yes', 'StrictHostKeyChecking=no'], ref: 'origin/main', // 要拉取的分支 repo: 'git@github.com:username/project-name.git', // 仓库地址 path: '/www/wwwroot/project', // 部署目录 'pre-setup': 'rm -rf /www/wwwroot/project/source', // 安装前操作 'post-deploy': 'nvm use 14.15.1 && npm ci && npm run build && pm2 restart websocket-chat' }, }, }; |
执行部署命令
安装命令:( 只需要执行一次)
pm2 deploy /path/to/ecosystem.config.js prod setup
部署:
pm2 deploy /path/to/ecosystem.config.js prod
遇到的坑
- 拉取项目时提示 :
1 2 3 4 5 6 |
Cloning into '/var/www/app/source'... Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and that the repository exists. **Failed to clone** Deploy failed |
官网给出的方法是让你使用 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 2 3 |
HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/github_id_rsa |
- ssh端口号不是22导致无法登录
在host配置里加上端口号,注意不能是数字,要加引号
- 找不到node命令
使用nvm安装node会出现这个问题 修改~/.bashrc文件,最上面加入以下内容:
1 2 3 4 |
#For pm2 deploy export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" |
参考资料:
https://github.com/Unitech/pm2-deploy/issues/170
https://pm2.keymetrics.io/docs/usage/deployment/
文章评论 暂无评论
暂无评论