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

如何通过Github Actions让Laravel获取GOOGLE_APPLICATION_CREDENTIALS环境变量

解决Laravel Vapor部署应用中GOOGLE_APPLICATION_CREDENTIALS环境变量无效的问题

核心原因

Github Actions中google-github-actions/auth导出的GOOGLE_APPLICATION_CREDENTIALS仅存在于CI运行容器的环境中,而Laravel Vapor部署的应用运行在AWS Lambda环境,两者完全隔离,所以这个变量不会自动同步到应用运行环境中。

解决方案

方案1:直接在Vapor控制台配置凭证并在Laravel中处理

  1. 在Vapor控制台添加环境变量
    登录Vapor控制台,找到你的项目,进入对应环境的配置页面,添加GOOGLE_SERVICE_ACCOUNT_JSON变量,值填入你的谷歌服务账号完整JSON内容。

  2. 在Laravel中临时生成凭证文件
    在App\Providers\AppServiceProvider的boot方法中添加代码,将JSON内容写入临时文件,并设置GOOGLE_APPLICATION_CREDENTIALS环境变量:

    public function boot()
    {
        $serviceAccountJson = config('services.google.service_account_json');
        if ($serviceAccountJson) {
            $tempFilePath = tempnam(sys_get_temp_dir(), 'google-creds');
            file_put_contents($tempFilePath, $serviceAccountJson);
            putenv("GOOGLE_APPLICATION_CREDENTIALS=$tempFilePath");
        }
    }
    
  3. 配置Laravel配置文件
    在config/services.php中添加配置项,避免直接使用env()函数(因Vapor会缓存环境变量):

    return [
        // 其他配置...
        'google' => [
            'service_account_json' => env('GOOGLE_SERVICE_ACCOUNT_JSON'),
        ],
    ];
    

方案2:通过Github Actions部署时传递凭证到Vapor

  1. 存储凭证到Github Secrets
    在Github仓库的「Settings > Secrets and variables > Actions」中添加GOOGLE_SERVICE_ACCOUNT_JSON秘密,值为谷歌服务账号完整JSON内容。

  2. 修改deploy.yml部署命令
    在部署步骤中,通过Vapor的--env参数将凭证传递到应用环境:

    - name: Deploy to Vapor
      run: vapor deploy production --env="GOOGLE_SERVICE_ACCOUNT_JSON=${{ secrets.GOOGLE_SERVICE_ACCOUNT_JSON }}"
    
  3. 同方案1的步骤2、3
    同样在AppServiceProvider中处理凭证文件,配置config/services.php。

注意事项

  • Vapor部署时会自动缓存环境变量和配置,所以不要在业务代码中直接使用env()函数,务必通过config()读取配置。
  • 临时文件在Lambda环境中仅在当前请求生命周期内有效,符合无服务器环境的特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:33:23