affordablemobiles / g-serverless-support-laravel
为 Laravel 应用提供 Google 无服务器运行时支持
Requires
- php: ^8.3
- affordablemobiles/eloquent-datastore: ~11
- affordablemobiles/eloquent-sqlcommenter: ~11
- affordablemobiles/open-telemetry-operations-php: ~1
- google/cloud: >=0.239.0 <1.0.0
- guzzlehttp/guzzle: ^7.8.1
- kelvinmo/simplejwt: ^0.8.2
- laravel/framework: ~11
- open-telemetry/sdk: ~1
Requires (Dev)
Suggests
- a1comms/php-gds: Provides legacy Datastore support
- barryvdh/laravel-debugbar: Laravel Debugbar
- lcobucci/jwt: JWT library can be used with IAMSigner
Conflicts
Replaces
- a1comms/gae-support-laravel: v11.0.15
- dev-php8.3-laravel11.x
- v11.0.15
- v11.0.14
- v11.0.13
- v11.0.12
- v11.0.11
- v11.0.10
- v11.0.9
- v11.0.8
- v11.0.7
- v11.0.6
- v11.0.5
- v11.0.4
- v11.0.3
- v11.0.2
- v11.0.1
- v11.0.0
- v9.0.48
- v9.0.47
- v9.0.46
- v9.0.45
- v9.0.44
- v9.0.43
- v9.0.42
- v9.0.41
- v9.0.40
- v9.0.39
- v9.0.38
- v9.0.37
- v9.0.36
- v9.0.35
- v9.0.34
- v9.0.33
- v9.0.32
- v9.0.31
- v9.0.30
- v9.0.29
- v9.0.28
- v9.0.27
- v9.0.26
- v9.0.25
- v9.0.24
- v9.0.23
- v9.0.22
- v9.0.21
- v9.0.20
- v9.0.19
- v9.0.18
- v9.0.17
- v9.0.16
- v9.0.15
- v9.0.14
- v9.0.13
- v9.0.12
- v9.0.11
- v9.0.10
- v9.0.9
- v9.0.8
- v9.0.7
- v9.0.6
- v9.0.5
- v9.0.4
- v9.0.3
- v9.0.2
- v9.0.1
- v6.0.41
- v6.0.39
- v6.0.38
- v6.0.37
- v6.0.36
- v6.0.35
- v6.0.34
- v6.0.33
- v6.0.32
- v6.0.31
- v6.0.30
- v6.0.29
- v6.0.28
- v6.0.27
- v6.0.26
- v6.0.25
- v6.0.24
- v6.0.23
- v6.0.22
- v6.0.21
- v6.0.20
- v6.0.19
- v6.0.18
- v6.0.17
- v6.0.16
- v6.0.15
- v6.0.14
- v6.0.13
- v6.0.12
- v6.0.11
- v6.0.10
- v6.0.9
- v6.0.8
- v6.0.7
- v6.0.6
- v6.0.5
- v6.0.4
- v6.0.3
- v6.0.2
- v6.0.1
- v5.5.49
- v5.5.48
- v5.5.47
- v5.5.46
- v5.5.45
- v5.5.44
- 5.5.43
- v5.5.42
- v5.5.41
- v5.5.40
- v5.5.39
- v5.5.38
- v5.5.37
- v5.5.36
- v5.5.35
- v5.5.34
- v5.5.33
- v5.5.32
- v5.5.31
- v5.5.30
- v5.5.29
- v5.5.28
- v5.5.27
- v5.5.26
- v5.5.25
- v5.5.24
- v5.5.23
- v5.5.22
- v5.5.21
- v5.5.20
- v5.5.19
- v5.5.18
- v5.5.17
- v5.5.16
- v5.5.15
- v5.5.14
- v5.5.13
- v5.5.12
- v5.5.11
- v5.5.10
- v5.5.9
- v5.5.8
- v5.5.7
- v5.5.6
- v5.5.5
- v5.5.4
- v5.5.3
- v5.5.2
- v5.5.1
- 5.1.27
- 5.1.26
- 5.1.25
- 5.1.24
- 5.1.23
- 5.1.22
- 5.1.21
- 5.1.20
- 5.1.19
- 5.1.18
- 5.1.17
- 5.1.16
- 5.1.15
- 5.1.14
- 5.1.13
- 5.1.12
- 5.1.11
- 5.1.10
- 5.1.9
- 5.1.8
- 5.1.7
- 5.1.6
- v5.1.5
- 5.1.4
- 5.1.3
- v5.1.2
- 5.1.1
- 5.1.0
- dev-php8.1-laravel9.x
- dev-bug/ApplicationBuilderNamespace
- dev-error-reporting-exception-handling
- dev-php7.4-laravel6.0
- dev-php72-laravel55
- dev-php55-laravel51-compat
This package is auto-updated.
Last update: 2024-09-26 14:19:46 UTC
README



为 Laravel 11.x 提供的 Google 无服务器运行时支持包。
支持 Cloud Run & App Engine (标准环境) 并使用 php83
运行时。
基于由 @shpasser 创建的 App Engine 原始工作(使用 php55
运行时)。
功能
- Google Cloud Operations Suite 集成
- 结构化日志 的 Cloud Logging 目标(见 docs/logging.md)。
- 错误报告 集成,用于聚合报告的异常(见 文档/logging.md)。
- 云跟踪(通过 opentelemetry)(见 文档/trace.md)
- 通过 Guzzle 进行分布式跟踪传播。
- 与 laravel-debugbar 的集成(可选,见 文档/debugbar.md)。
- 身份感知代理(IAP) 集成
- 入站身份验证 通过 Laravel 的守卫(可选,见 文档/iap-auth-verify.md)。
- 出站身份验证 通过 Guzzle 中间件(可选,见 文档/guzzle.md)。
- 云 SQL 集成
- IAM 身份验证(可选,见 文档/cloud-sql.md)。
- 在读取副本之间自动故障转移(可选,见 文档/cloud-sql.md)。
- 查询洞察 通过 eloquent-sqlcommenter 集成(可选,见 文档/cloud-sql.md)。
- 数据存储模式下的 Cloud Firestore 集成
- 会话处理器(可选,见 文档/sessions.md)。
- 通过 eloquent-datastore 的 Eloquent 驱动。
- 容器化部署的优化
- 部署前生成
bootstrap/cache
(见 g-serverless:prepare)。 - Blade 视图预编译器(可选,见 文档/blade-pre-compile.md)
- 在网络层失败时,使用 Guzzle 对出站连接自动重试(可选,见 文档/guzzle.md)
- 部署前生成
- 通过 IAM 凭据 API 支持域范围委派(DWD)(无需密钥文件)Domain Wide Delegation (DWD)。
- 使用 IAM 凭据 API 的 lcobucci/jwt 的 IAMSigner。
- 通过 Cloud Build 和 Secret Manager 从 Git 推送部署的示例(见 文档/cloudbuild.md)
安装
1. 通过 Composer 拉取包
"require": { "affordablemobiles/g-serverless-support-laravel": "~11" }
2. 将以下内容添加到 composer.json
"scripts": { "post-autoload-dump": [ "php artisan g-serverless:prepare" ] },
这是在Composer运行完成后自动运行Artisan命令,为部署准备我们的应用:这将创建任何必要的缓存文件,如果启用,则预编译所有blade视图。
如果您使用云构建进行部署,那么composer install
很可能在打包/部署到所选无服务器产品之前运行,因此这将确保所有其他必要步骤作为该步骤的一部分运行。
3. 将bootstrap/app.php
顶部的use
语句从
use Illuminate\Foundation\Application;
更改为
use AffordableMobiles\GServerlessSupportLaravel\Foundation\Application;
这将启用自动异常报告到云日志和错误报告,并调整紧急日志记录器,以便在容器化环境中通过写入stderr
来正确工作。
重要:需要在您的项目中启用日志API和跟踪API,并且您的无服务器应用使用的服务帐户需要具有使用它们的IAM权限
- 启用日志API - 如果需要,请将
?project=<project-name>
附加到URL。 - 将IAM权限“日志编写者”分配给您的服务帐户。
- 启用跟踪API - 如果需要,请将
?project=<project-name>
附加到URL。 - 将IAM权限“云跟踪代理”分配给您的服务帐户。
4. 通过添加以下内容配置config/app.php
中的服务提供者
/* |-------------------------------------------------------------------------- | Autoloaded Service Providers |-------------------------------------------------------------------------- | | The service providers listed here will be automatically loaded on any | requests to your application. You may add your own services to the | arrays below to provide additional features to this application. | */ 'providers' => \Illuminate\Support\ServiceProvider::defaultProviders()->merge([ // Package Service Providers... \AffordableMobiles\GServerlessSupportLaravel\GServerlessSupportServiceProvider::class, \AffordableMobiles\GServerlessSupportLaravel\Auth\AuthServiceProvider::class, \AffordableMobiles\GServerlessSupportLaravel\Database\DatabaseServiceProvider::class, ])->replace([ \Illuminate\View\ViewServiceProvider::class => \AffordableMobiles\GServerlessSupportLaravel\View\ViewServiceProvider::class, ])->toArray(),
5. 添加以下环境变量
这可以在.env
中完成,在app.yaml
内部,或者作为Cloud Run服务配置的一部分 - 我们建议尽可能使用后两个选项。
LOG_CHANNEL=stderr
LOG_STDERR_FORMATTER=AffordableMobiles\GServerlessSupportLaravel\Log\Formatter\JsonFormatter
CACHE_STORE=array
SESSION_DRIVER=datastore
当使用Cloud Tasks时,您还需要配置
CLOUD_TASKS_REGION=europe-west1 (or similar, required)
TASK_QUEUE_SERVICE_ACCOUNT=<project-name>@appspot.gserviceaccount.com (default, required for Cloud Run)
OIDC_AUDIENCE=<OAuth2 Client ID used by IAP, if enabled for inbound calls to your app> (required for Cloud Run)
如果您使用外部CDN(如Cloudflare),还需要配置以下环境变量,其名称用于传递客户端IP地址的HTTP头
SOURCE_IP_HEADER=CF-Connecting-IP
如果您需要禁用OpenTelemetry跟踪(我们强烈建议您启用它),请定义以下环境变量
G_SERVERLESS_TRACE_STOP=true
此外,如果在开发环境中运行,请设置以下
G_SERVERLESS_DEVELOPMENT=true
这会执行多项操作,例如
- 将本地存储位置更改为包含
HTTP_HOST
。 - 为每个请求开启OpenTelemetry跟踪。
- 关闭实例的粘性数据库连接。
升级(从Laravel 9.x LTS)
1. 更新composer.json
中的包版本
"require": { "affordablemobiles/g-serverless-support-laravel": "~11" }
2. 遵循Laravel升级步骤的所有9.x ... 11.x版本
3. 更新代码中对我们的命名空间的所有引用
A1comms\GaeSupportLaravel
已更改为
AffordableMobiles\GServerlessSupportLaravel
4. 确保bootstrap/app.php
扩展我们的Application
类
请参阅主安装指南中的步骤3作为示例。
5. 在config/app.php
中更改到新的提供者配置格式
请参阅主安装指南中的步骤4作为示例。
6. 更新显式/静默异常报告
任何直接引用错误报告集成类的地方
AffordableMobiles\GServerlessSupportLaravel\Integration\ErrorReporting::exceptionHandler($e);
应更新为使用Laravel的新方法报告
report($e);
7. 将config/logging.php
还原为Laravel默认设置。
8. 更新环境变量
请参阅主安装指南中的步骤5并相应地更新您的环境变量。
9. 如果您使用php-gds
进行Datastore,考虑切换到eloquent-datastore。
否则,您需要自己通过composer安装它,因为它不再由此存储库需要。
10. 如果使用与lcobucci/jwt
兼容的DWDTokenSource,它现在已被移除。
迁移到兼容 google/auth
的 GCEDWDCredentials。
11. 更新您的 app.yaml
文件,指定 runtime: php83
。