如何让github分支上传后,自动部署到服务器

海龙2024-12-23编程实验

我曾发过一篇,关于如何部署一个我这样的博客网站的文章链接🔗
里面介绍了我使用的相关库和重点步骤,虽然没有特别细致的讲解,但是编程本身就不应该是把饭喂到嘴里的,你应该有自己研究的主动性。

自动部署服务器

接下来,我将介绍自己如何让这个项目,每次发布分支,会自动部署到服务器中

首先你得有个自己服务器

如何拥有一个服务器,不多赘述,阿里云、腾讯云等都是国内比较简单且价格还算可以接受的。你如果只是为了博客,找最便宜的就完全足够了。
相关重要点

  • 服务器
  • 域名
  • 备案信息
  • SSL证书
    这些网上有很多详细的教程,服务器的SSL证书和nginx配置什么的,你可以使用宝塔open in new window这个软件,可以很方便的操作。

安全验证配置

其次,你需要本机生成密钥对,私钥在本地,公钥放到你的服务器中
如果你有,可以用已经存在的公钥放到服务器中,没有就要生成。
github中也要你这个公钥,也需要上传到github中

生成密钥对

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

跟随指引生成 默认位置因系统不同而不同,网上查一下就知道了
私钥一般是没后缀,公钥一般是.pub

登录到服务器

ssh 你的服务器用户名@你的服务器ip地址

创建一个.ssh目录(如果还没有)

mkdir -p ~/.ssh

公钥上传到服务器

在服务器上,你需要将公钥复制到 ~/.ssh/ 文件中。

ssh-copy-id -i ~/.ssh/你的公钥文件名 用户名@服务器IP

然后,将本机的公钥内容复制到终端中,并粘贴到 authorized_keys 文件中。

设置权限

chmod 700 ~/.ssh

你可以测试一下链接

ssh -i ~/.ssh/你的密钥名称,可以去你生成位置找 user@server_ip

公钥放到你的GitHub Secrets

如果你是为了 GitHub Actions 使用 SSH 密钥,可以将公钥和私钥存储到 GitHub Secrets:
位置:Settings > Secrets and variables > Actions:>Repository secrets

  1. 将私钥存储为 SSH_PRIVATE_KEY: 同样在 GitHub Secrets 中,将私钥内容存储为 SSH_PRIVATE_KEY。
  2. 你的用户名也放进去 SERVER_USER
  3. 以及你服务器ip地址:SERVER_IP
    这些都是变量名称,后面会用到
    这样,在 GitHub Actions 中,你可以通过访问这些 Secrets 来安全地使用 SSH 密钥对。

服务器中的nginx配置部署你的项目

你可以网上找更简单详细的教程,也可以用宝塔。
使用宝塔的话,你可以直接用其模板进行配置,然后手动托文件过去部署。
当然这一切前提是你完成了上面部署前的一切需求,特别是备案和SSL

最后是重点

如果你已经完成了你博客的部署,且配置好了密钥对相关内容,那么就可以进行对github actions的新的一项任务添加

     - name: Deploy to Server
        env:
          DEPLOY_SSH_KEY: ${{ secrets.SSH_PRIVATE_KEY }}  # 使用 SSH 密钥进行安全连接
          SERVER_USER: ${{ secrets.SERVER_USER }}
          SERVER_IP: ${{ secrets.SERVER_IP }}  # 服务器 IP 地址
        run: |
          mkdir -p ~/.ssh
          ssh-keyscan -H $SERVER_IP >> ~/.ssh/known_hosts

          # 设置 SSH 密钥
          echo "$DEPLOY_SSH_KEY" > private_key.pem
          chmod 600 private_key.pem

          # 将构建后的文件通过 SCP 上传到服务器
          scp -i private_key.pem -r ./docs/.vuepress/dist/* $SERVER_USER@$SERVER_IP:/www/wwwroot/inksnowhl.cn  # 假设构建输出目录为 ./dist

          # 在服务器上运行命令,更新前端服务
          ssh -i private_key.pem $SERVER_USER@$SERVER_IP << EOF
            # 确保 Nginx 已经配置好
            sudo systemctl reload nginx  # 如果 Nginx 配置文件有改动,重载 Nginx
          EOF

这一段任务,你可以添加到你的之前的github 的action中,这里面调用了你在secrets配置的那些环境变量。
当你上传git分支,这个任务执行时,便会上传到你的服务器,实现了自动部署。

最后更新日期 6/24/2025, 10:29:18 AM