You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过GitHub Actions使用SSH连接Ubuntu服务器并借助另一组SSH密钥拉取私有GitHub仓库

如何通过GitHub Actions使用SSH连接Ubuntu服务器并借助另一组SSH密钥拉取私有GitHub仓库

嘿,我来帮你搞定这个自动部署的问题!结合你的Ubuntu 22.04.1 LEMP环境(还有那个不得不留的PHP 5.6),咱们一步步来实现push到main分支就自动部署的流程:

第一步:给Ubuntu服务器生成拉取私有GitHub仓库的专属SSH密钥

首先登录到你的Ubuntu服务器,咱们生成一对专门用来拉取代码的SSH密钥:

  • 执行命令:ssh-keygen -t ed25519 -C "server-deploy@your-domain.com"(一路按回车就行,别设密码,不然自动部署时会卡住)
  • 查看生成的公钥:cat ~/.ssh/id_ed25519.pub,把这个内容复制下来
  • 打开你的私有GitHub仓库,进入「Settings」→「Deploy keys」→「Add deploy key」,粘贴刚才的公钥,勾选「Allow write access」(虽然你现在只需要拉取,但勾上以后如果要推送也方便),然后保存。

第二步:配置GitHub Actions需要的服务器登录密钥

接下来要给你的GitHub仓库(就是存放代码的那个私有仓库)配置Actions需要的服务器登录信息:

  • 进入仓库的「Settings」→「Secrets and variables」→「Actions」→「New repository secret」
  • 依次添加这三个Secret:
    • SSH_HOST:你的Ubuntu服务器的IP地址或者域名
    • SSH_USER:服务器上用来登录的用户名(比如root或者你的普通运维用户)
    • SSH_PRIVATE_KEY:你平时用来登录服务器的那个私有密钥(注意不是刚才生成的拉取代码的密钥!)

第三步:编写正确的GitHub Actions Workflow文件

在你的代码仓库根目录创建(或修改).github/workflows/deploy.yml文件,替换成下面的内容:

name: Deploy to Ubuntu Server

# 只在main分支有push时触发部署
on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      # 可选:拉取当前仓库的代码(如果需要在Actions里做一些校验可以保留,否则可以跳过)
      - name: Checkout code
        uses: actions/checkout@v4

      # 配置SSH代理,管理服务器登录密钥
      - name: Setup SSH connection to server
        uses: webfactory/ssh-agent@v0.8.0
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

      # 连接服务器并执行拉取代码的操作
      - name: Pull code to server
        run: |
          # 关闭主机密钥检查,避免第一次连接时需要手动确认
          ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
            # 切换到你的项目根目录,比如/var/www/your-legacy-app
            cd /var/www/your-legacy-app
            # 拉取main分支的最新代码
            git pull origin main
            # 可选:根据你的环境添加需要的操作,比如重启PHP或Nginx
            # sudo systemctl reload php5.6-fpm
            # sudo systemctl reload nginx
          EOF

关键注意事项

  1. 提前初始化服务器上的仓库:第一次部署前,要手动在服务器上执行git clone git@github.com:你的用户名/私有仓库名.git /var/www/your-legacy-app,确保用服务器上生成的SSH密钥能成功拉取代码(这一步是为了让服务器把GitHub的主机密钥加到信任列表里)
  2. 权限问题:确保服务器上的SSH_USER对项目目录有读写权限,比如可以执行sudo chown -R 你的用户名:www-data /var/www/your-legacy-app
  3. PHP版本适配:如果你需要清理PHP 5.6的op缓存,记得在脚本里加上sudo systemctl reload php5.6-fpm,避免旧代码残留

这样配置好之后,下次你push代码到main分支,GitHub Actions就会自动连接到你的Ubuntu服务器,拉取最新的私有仓库代码啦!

备注:内容来源于stack exchange,提问作者user1780720

火山引擎 最新活动