服务器配置

1、生成SSH密钥对

ssh-keygen -t rsa -b 4096 -C "github-deploy"

2、编辑或创建authorized_keys 文件:

vim ~/.ssh/authorized_keys
# 将公钥黏贴进去(新的一行)
# 设置权限
chmod 600 ~/.ssh/authorized_keys

3、确认SSH 服务是否限制了 root 登录

# 允许使用 root 用户通过 SSH 登录
PermitRootLogin yes
# 允许使用密码进行 SSH 登录
PasswordAuthentication yes
# 允许使用 SSH 公钥进行登录
PubkeyAuthentication yes
# 保存,重启ssh服务
systemctl restart sshd

4、本地连接测试

# 1、将私钥复制到本地电脑并保存为id_rsa文件
vim id_rsa
# 2、保存之后设置文件权限
chmod 600 ./id_rsa
# 3、测试使用私钥链接是否需要密码
ssh -i ./id_rsa root@47.xxx.xx.xx

如下图就成功了

在这里插入图片描述

github 配置

1、在GitHub仓库添加Secrets,在Settings > Secrets and variables > Actions > New repository secret

Secret 名称 内容说明
DEPLOY_KEY 私钥(你的 id_rsa 内容,注意包括 -----BEGIN...END-----
HOST 服务器 IP,比如 127.0.0.1
USER 登录用户名,通常是 root 或其他有权限的用户
TARGET 目标路径,比如 /www/wwwroot/blog

如图:
在这里插入图片描述

2、添加 GitHub Actions 工作流

代码仓库 > Actions > set up a workflow yourself

# 自定义名称
name: Deploy to Server
# 触发条件:当 push 到 main 分支时自动触发
on:
  push:
    branches:
      - main

jobs:
  deploy:
    # 在 GitHub 提供的 Ubuntu 最新版本的虚拟机上运行
    runs-on: ubuntu-latest

    steps:
      # 第一步:检出代码仓库内容到 runner 上
      - name: Checkout code
        uses: actions/checkout@v4
        
      # 第二步:设置 SSH 密钥,用于远程连接服务器
      - name: Setup SSH key
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan -H ${{ secrets.HOST }} >> ~/.ssh/known_hosts
      # 第三步:使用 rsync 将本地代码同步到远程服务器指定目录
      - name: Deploy via rsync
        run: |
          # -a 保持文件权限等信息,-v 显示详细过程,-z 开启压缩加快传输
          rsync -avz ./ ${{ secrets.USER }}@${{ secrets.HOST }}:${{ secrets.TARGET }}

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3、点击查看Actions

在这里插入图片描述
这样每次推送新的代码到main都会更新到配置的服务器了
这里可以查看同步的文件
在这里插入图片描述
多台服务器参考:

name: Deploy to Multiple Servers

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - name: server1
            HOST: ${{ secrets.HOST1 }}
            USER: ${{ secrets.USER1 }}
            TARGET: ${{ secrets.TARGET1 }}
            DEPLOY_KEY: ${{ secrets.DEPLOY_KEY1 }}
          - name: server2
            HOST: ${{ secrets.HOST2 }}
            USER: ${{ secrets.USER2 }}
            TARGET: ${{ secrets.TARGET2 }}
            DEPLOY_KEY: ${{ secrets.DEPLOY_KEY2 }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup SSH key
        run: |
          mkdir -p ~/.ssh
          echo "${{ matrix.DEPLOY_KEY }}" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan -H "${{ matrix.HOST }}" >> ~/.ssh/known_hosts

      - name: Deploy to ${{ matrix.name }}
        run: |
          rsync -avz --delete ./ "${{ matrix.USER }}@${{ matrix.HOST }}:${{ matrix.TARGET }}"

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐