使用各种方式部署项目,构建,传输,部署。
无 CI/CD 方式
生成密钥对
bash
# 默认 -> ~/.ssh/id_rsa
ssh-keygen -t rsa -b 4096 -C "xxx"
# 指定文件名 -> ~/.ssh/id_rsa_deploy
ssh-keygen -t rsa -b 4096 -C "xxx" -f ~/.ssh/id_rsa_deploy
站主专门生成了一个密钥对用于部署,这样就不会影响到其他的密钥对。
需要在将id_rsa_deploy.pub
中的内容放在服务器的 ~/.ssh/authorized_keys
文件中,这样就可以免密登录了。
默认使用的 id_rsa
密钥,如果使用其他密钥,有两种方法
1、可以在 deploy.sh
脚本中指定密钥文件
deploy.sh
#!/bin/bash
ssh -i ~/.ssh/id_rsa_xxx root@xxx.xxx.xxx.xxx [要执行的命令]
2、配置 ~/.ssh/config
文件。这样就可以在 deploy.sh
脚本中直接使用 ssh deploy
命令了。
~/.ssh/config
# 特定服务器使用特定密钥
Host deploy
HostName xxx.xxx.xxx.xxx
User root
IdentityFile ~/.ssh/id_rsa_deploy
deploy.sh
#!/bin/bash
ssh deploy [要执行的命令]
在执行中会出现输入密码的问题,此脚本会出现三次输入 ssh 密钥的密码Enter passphrase for key '/c/Users/Linux/.ssh/id_rsa_deploy':
问题,可以使用 ssh-add
命令将密钥添加到 ssh-agent
中,这样就不会再出现输入密码的问题了。
bash
# ssh 代理
eval "$(ssh-agent -s)"
# 添加密钥
ssh-add ~/.ssh/id_rsa_deploy
# 查看已添加的密钥
ssh-add -l
# 关闭 ssh 代理
ssh-agent -k
完整的运行脚本,只会输入一次密码
deploy.sh
#!/bin/bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa_deploy
echo "构建项目"
pnpm run build
echo "文件压缩中..."
tar -zcvf .output.tar.gz .output
echo "停止服务"
ssh deploy "cd /usr/local/app/node_run/it-fb && pm2 stop ecosystem.config.cjs && rm -rf .output.bak && mv .output .output.bak"
echo "正在上传文件..."
scp .output.tar.gz deploy:/usr/local/app/node_run/it-fb
echo "启动服务"
ssh deploy "cd /usr/local/app/node_run/it-fb && tar -zxvf .output.tar.gz && pm2 start ecosystem.config.cjs && rm -rf .output.tar.gz"
echo "部署完成"
rm -rf .output.tar.gz
ssh-agent -k
运行
package.json
{
"scripts": {
"deploy": "sh ./deploy.sh"
}
}
bash
# Windows 需要在 git bash 中运行
pnpm run deploy