runtime / google-cloud
Google Cloud 运行时
Requires
- php: >=7.2.5
- ext-json: *
- symfony/runtime: ^5.3 || ^6.0
Requires (Dev)
- symfony/phpunit-bridge: ^5.3
README
Google Cloud 运行时
如果你是 Symfony Runtime 组件的新手,请参阅下方的 "长篇大论"。
安装
此运行时层是特殊的。它包括一个 router.php
文件以启用使用 Symfony Runtime 组件。您需要安装此包以及您想要使用的运行时。
与原生或 Symfony 应用程序一起使用。
composer require runtime/google-cloud symfony/runtime
如果您想与 PSR-7 一起使用。
composer require runtime/google-cloud runtime/psr-nyholm
用法
定义环境变量 FUNCTION_SOURCE
。
# Default value
FUNCTION_SOURCE=index.php
请注意,Google Cloud 要求 您有一个 index.php 文件。如果您正在运行 Symfony,您可能希望定义 FUNCTION_SOURCE=public/index.php
,但您仍然需要创建一个 index.php
文件。
<?php // index.php // This file is needed for google cloud
使用 CloudEvent
// index.php use Google\CloudFunctions\CloudEvent; require_once dirname(__DIR__).'/vendor/autoload_runtime.php'; return function(CloudEvent $cloudevent) { // Print the whole CloudEvent $stdout = fopen('php://stdout', 'wb'); fwrite($stdout, $cloudevent); };
故障排除
缓存/构建目录
请注意,Google Cloud 只会部署不在 .gitignore
中的文件。在部署之前,您需要删除 var/
条目才能使缓存预热等操作成为可能。
定义 Symfony 环境
定义环境变量 APP_ENV=prod
以使用 Symfony 生产模式。
gcloud functions deploy helloHttp \
--runtime php74 \
--trigger-http \
--allow-unauthenticated \
--set-env-vars "FUNCTION_SOURCE=public/index.php,APP_ENV=prod"
长篇大论
本节面向刚开始使用 Symfony Runtime 组件的用户。
Symfony Runtime 组件将于 2021 年 5 月与 Symfony 5.3 一起发布。有关官方文档,请参阅此处。在主 README 中也有一个压缩版本。
每个从 Symfony 5.3 开始创建的 Symfony 应用程序都将默认使用此组件。该组件确保您的应用程序与全局状态解耦。这意味着您的应用程序非常便携。通过一些配置(或自动映射),使用 RuntimeInterface
作为 Nginx 和您的应用程序之间的 "粘合剂"。
当然,不同的事物之间有不同的 RuntimeInterface
"粘合剂"。一个运行时是针对 Google Cloud 的,一个针对 Bref/AWS,一个针对 Swoole,一个针对 RoadRunner 等。重点是您的应用程序不需要关心它使用的是哪个运行时。这意味着您可以在本地使用普通 Web 服务器(如 Nginx)运行您的应用程序,并在零更改的情况下将其部署到 Google Cloud,并且仍然可以确信一切正常。
Google Cloud 运行时特别说明
由于 Google Cloud 与 "普通 Web 服务器" 非常相似,因此此运行时只包含两件事
router.php
,这是 Google Cloud 的一个要求。它的任务只是将请求重定向到前端控制器。它不会在本地使用。- 支持
CloudEvent
。如果您编写了一个期望Google\CloudFunctions\CloudEvent
的应用程序,此运行时将自动检测并为您创建此类对象。
它将直接支持原生 PHP 应用程序和 Symfony HttpFoundation 类型应用程序。要支持 PSR-7/PSR-15 或 Laravel,还需要安装一个额外的运行时。有关更多信息,请参阅主 README。