为何Google Cloud Build未检测到Composer(Laravel11+PHP8.3部署问题)
Laravel 11 + PHP 8.3 部署App Engine时Cloud Build未触发Composer Install的解决方法
问题背景
将基于Laravel 11、PHP 8.3的应用通过GitHub Actions部署到App Engine标准环境时,应用成功上传至Google Cloud,但Cloud Build的检测阶段未加载google.php.composer-install和google.php.composer构建包,导致未执行composer install。对比此前Laravel 9、PHP 8.2的部署日志,正常情况下这两个构建包会被自动触发。
日志对比
Laravel 9 + PHP 8.2 正常检测日志:
===> DETECTING Timer: Detector started at 2024-05-27T00:01:25Z 5 of 6 buildpacks participating google.php.runtime 0.0.2 google.php.composer-install 0.0.1 google.php.composer 0.9.1 google.php.appengine 0.9.0 google.utils.label-image 0.0.2 Timer: Detector ran for 179.182403ms and ended at 2024-05-27T00:01:25ZLaravel 11 + PHP 8.3 异常检测日志:
===> DETECTING Timer: Detector started at 2024-05-26T21:41:32Z 3 of 6 buildpacks participating google.php.runtime 0.0.2 google.php.appengine 0.9.0 google.utils.label-image 0.0.2 Timer: Detector ran for 175.726391ms and ended at 2024-05-26T21:41:32Z
尽管Laravel 11的public/index.php中确实引用了vendor/autoload.php,符合自动触发Composer的条件,但仍未生效。
解决方案
1. 确保Composer配置文件存在且被部署
首先检查项目根目录的composer.json和composer.lock是否存在,且未被.gitignore排除:
- 查看
.gitignore文件,确认没有错误排除composer.json、composer.lock的规则 - 在部署流程的
checkout步骤后,添加验证步骤确认文件存在:- name: 🧐 Verify Composer files exist run: ls -la composer.*
2. 显式指定Composer构建包
在App Engine的配置文件(.github/workflows/appengine/staging.yaml)中,添加buildpacks字段,强制加载Composer相关构建包:
runtime: php83 env: standard service: staging # 新增buildpacks配置 buildpacks: - gcr.io/gae-runtimes/php/php83/composer:0.9.1 - gcr.io/gae-runtimes/php/php83/runtime:0.0.2 - gcr.io/gae-runtimes/php/php83/appengine:0.9.0 # 原有handlers和env_variables配置保持不变 handlers: # ... 原有配置 env_variables: # ... 原有配置
3. 手动在部署前执行Composer Install
如果自动检测仍不生效,可在GitHub Actions的部署阶段手动安装PHP依赖:
在deploy_staging作业中,添加PHP环境配置和Composer安装步骤:
deploy_staging: name: 🦺 Deploy to staging (v2) runs-on: ubuntu-latest environment: staging needs: build permissions: id-token: write contents: read steps: - name: 💾 Get the latest code uses: actions/checkout@v4 - name: 🛠️ Setup PHP 8.3 uses: shivammathur/setup-php@v2 with: php-version: '8.3' tools: composer:v2 - name: 📦 Install PHP dependencies run: composer install --no-dev --optimize-autoloader - name: 📥 Download frontend uses: actions/download-artifact@v4 with: name: frontend path: public/build # 后续认证和部署步骤保持不变
4. 检查App Engine PHP 8.3的运行时配置
确认App Engine配置中的runtime字段为php83,且未使用自定义运行时或其他可能干扰构建包检测的配置。
验证步骤
- 推送代码触发GitHub Actions部署
- 查看Cloud Build的检测阶段日志,确认
google.php.composer-install和google.php.composer构建包已加载 - 访问部署后的应用,确认PHP依赖正常加载
内容的提问来源于stack exchange,提问作者David Sojka
相关产品推荐
相关产品推荐

