You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将GitHub PHP代码持续部署到GCP Compute Engine LAMP栈的最佳方案

实现GitHub PHP代码到GCP一键LAMP实例持续部署的方案

你使用的GCP Marketplace一键部署的LAMP实例默认已完成Apache、PHP、MySQL运行环境配置,默认Web根目录为/var/www/html,可以通过以下两种常用方案实现持续部署:

方案一:使用GitHub Actions实现持续部署(推荐,支持部署日志追溯、权限管控更安全)

  • 提前配置实例的SSH权限:登录LAMP实例,执行ssh-keygen -t ed25519 -C "github-deploy"生成专用部署密钥,一路回车无需设置密码,将生成的公钥追加到~/.ssh/authorized_keys文件中,复制私钥内容备用。
  • 配置GitHub仓库密钥:进入对应PHP仓库的「Settings - Secrets and variables - Actions」页面,新增4个仓库密钥:GCP_SSH_PRIVATE_KEY(刚才复制的私钥内容)、GCP_INSTANCE_IP(LAMP实例公网IP)、GCP_SSH_USER(创建实例时设置的SSH登录用户名)、WEB_ROOT(默认填/var/www/html,如果有自定义根目录对应修改即可)。
  • 配置实例目录权限:执行sudo chown -R $USER:$USER /var/www/html && sudo chmod -R 755 /var/www/html,如果有需要写入权限的目录(如缓存、上传文件目录),单独给Apache默认用户www-data赋权即可。
  • 初始化实例Git关联:进入实例Web根目录执行git init,执行git remote add origin 你GitHub仓库的SSH地址,首次手动执行git pull origin main拉取全量代码,确认权限正常。如果是私有仓库,需要将实例的SSH公钥添加到仓库的「Deploy Keys」列表中。
  • 配置Actions工作流:在PHP仓库根目录创建.github/workflows/deploy.yml文件,内容参考如下:
name: Deploy to GCP LAMP Instance
on:
  push:
    branches: [ main ] # 可修改为你需要触发部署的分支

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: 推送代码到GCP实例
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.GCP_INSTANCE_IP }}
          username: ${{ secrets.GCP_SSH_USER }}
          key: ${{ secrets.GCP_SSH_PRIVATE_KEY }}
          script: |
            cd ${{ secrets.WEB_ROOT }}
            git pull origin main
            # 可按需添加后续部署逻辑,示例:
            # composer install --no-dev --optimize-autoloader (安装PHP依赖)
            # php artisan migrate --force (Laravel项目执行数据库迁移)
            # php artisan cache:clear (清理应用缓存)

配置完成后,后续只要有代码推送到对应分支,就会自动触发部署,你可以在仓库的「Actions」页面查看部署日志和报错信息。

方案二:使用Webhook触发服务端自动拉取(轻量,无需配置GitHub Secrets)

适合小项目轻量部署场景,配置更简单:

  • 创建Webhook接收脚本:在实例Web根目录外新建脚本文件,比如/var/www/webhook.php,内容参考如下:
<?php
// 自定义秘钥,后续GitHub Webhook配置需要和此处一致
$secret = '你自己生成的随机字符串';
$payload = file_get_contents('php://input');
$signature = hash_hmac('sha256', $payload, $secret);
$hubSignature = $_SERVER['HTTP_X_HUB_SIGNATURE_256'] ?? '';

// 签名验证,避免恶意请求触发部署
if (!hash_equals('sha256=' . $signature, $hubSignature)) {
    http_response_code(403);
    die('签名验证失败');
}

// 仅处理目标分支的push事件
$event = $_SERVER['HTTP_X_GITHUB_EVENT'] ?? '';
if ($event !== 'push') {
    die('非push事件,忽略处理');
}
$data = json_decode($payload, true);
if ($data['ref'] !== 'refs/heads/main') { // 对应你的部署分支
    die('非目标分支提交,忽略处理');
}

// 执行代码拉取逻辑
exec('cd /var/www/html && git pull origin main 2>&1', $output, $return_var);
if ($return_var === 0) {
    echo '部署成功';
} else {
    http_response_code(500);
    echo '部署失败,错误信息:' . implode("\n", $output);
}
?>
  • 配置Web访问路径:修改Apache配置,给该脚本配置公网可访问的路径,确保可以通过公网HTTP/HTTPS请求访问到该脚本。
  • 配置GitHub Webhook:进入仓库「Settings - Webhooks」页面新建Webhook,Payload URL填你刚才配置的脚本公网访问地址,Content type选择application/json,Secret填你脚本里设置的自定义随机字符串,触发事件选择「Just the push event」保存即可。

注意:两种方案都需要确保GCP实例的VPC防火墙规则开放了对应端口:方案一需要开放22端口(SSH访问),方案二需要开放80/443端口(Webhook回调访问)。

内容的提问来源于stack exchange,提问作者user3547213

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:21:01