请稍等...

小波Note

四川 · 成都市多云16 ℃
中文

部署项目到服务器

成都 (cheng du)2024/9/20 00:18:041.96k预计阅读时间 6 分钟收藏Ctrl + D / ⌘ + D
cover
IT FB(up 主)
后端开发工程师
文章摘要
Github Copilot

文章摘要加载中...

使用各种方式部署项目,构建,传输,部署。

无 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