shpasser / gae-support-l5
为 Laravel 5.1 应用提供 Google App Engine 支持。
Requires
- php: >=5.4.0
- illuminate/support: ~5.0
- league/flysystem: ~1.0
Requires (Dev)
- illuminate/console: ~5.0
- phpunit/phpunit: ~4.4
README
为 Laravel 5.1 提供的 Google App Engine (GAE) 支持包。
当前支持的功能
- 生成通用配置文件
- 邮件服务提供者
- 队列服务提供者
- 数据库连接
- 文件系统
有关 Lumen 的信息,请参阅 https://github.com/shpasser/GaeSupportLumen。
安装
通过 Composer 拉取此包。
"require": { "shpasser/gae-support-l5": "~1.0" }
然后在 config/app.php
中包含服务提供者。
'providers' => [ Shpasser\GaeSupportL5\GaeSupportServiceProvider::class ];
使用方法
生成与 GAE 相关的文件/条目。
命令模板
php artisan gae:setup --config --cache-config --bucket="your-bucket-id" --db-socket="cloud-sql-instance-socket-connection-string" --db-name="cloud-sql-database-name" --db-host="cloud-sql-instance-ipv4-address" app-id
参数和选项
php artisan gae:setup [options] [--] app-id Arguments: app-id GAE application ID. Options: --config Generate "app.yaml" and "php.ini" config files. --cache-config Generate cached Laravel config file for use on Google App Engine. --bucket=BUCKET Use the specified GCS-bucket instead of the default one. --db-socket=DB-SOCKET Cloud SQL socket connection string for production environment. --db-name=DB-NAME Cloud SQL database name. --db-host=DB-HOST Cloud SQL database host IPv4 address for local environment.
--cache-config
选项生成 GAE 的缓存配置文件。此选项是必需的,因为由 php artisan config:cache
生成的缓存配置文件不适合在 GAE 上使用。此外,为 GAE 生成的缓存配置文件可能在本地环境中也无法使用。应在将应用程序部署到 GAE 之前使用此选项生成缓存配置文件。
--bucket
选项定义应用程序用于存储的 GCS-bucket ID。除非使用此选项,否则默认配置 GCS bucket。
当定义了 --db-name
选项时,至少应定义 --db-socket
或 --db-host
之一。
--db-socket
使用以下格式设置: /cloudsql/<app-id>:<cloud-sql-instance-name>
。其中 <cloud-sql-instance-name>
是 Cloud SQL 实例名称,<app-id>
是属于该应用程序的名称。
邮件
邮件驱动配置可以在 config/mail.php
和 .env.production
中找到,这些配置文件由 artisan 命令修改/生成。无需任何自定义配置。所有发出的邮件消息都使用应用程序管理员的地址发送,即 admin@your-app-id.appspotmail.com
。支持邮件消息的 sender
、to
、cc
、bcc
、replyTo
、subject
、body
和 attachment
部分。
队列
修改后的队列配置文件 config/queue.php
应包含以下内容
return array( ... /* |-------------------------------------------------------------------------- | GAE Queue Connection |-------------------------------------------------------------------------- | */ 'connections' => array( 'gae' => array( 'driver' => 'gae', 'queue' => 'default', 'url' => '/tasks', 'encrypt' => true, ), ... ), );
默认使用 'default' 队列和加密。为了使用队列,您的 app/Http/routes.php
文件应包含以下路由
Route::post('tasks', array('as' => 'tasks', function() { return Queue::marshal(); }));
此路由将由 GAE 队列用于推送作业。请注意,路由和 GAE 队列连接的 'url' 参数指向相同的 URL。由于通过路由提交的请求是由 GAE 本身发出的,因此无法进行 CSRF 保护。有关更多信息,请参阅 https://laravel.net.cn/docs/5.0/queues#push-queues。
缓存、会话和日志
通过使用特定的驱动程序/处理程序支持缓存、会话和日志组件
- 缓存 - 使用 'memcached' 驱动程序
- 会话 - 使用 'memcached' 驱动程序
- 日志 - 使用 'syslog' 处理程序
所述驱动程序/处理程序的配置选项由 artisan 命令生成,并可以在 .env.production
配置文件中找到。
数据库
通过 Laravel 的 MySql 驱动程序支持 Google Cloud SQL。连接配置由 artisan 命令添加到 config/database.php
下的 cloudsql
。可以使用 --db-socket
、--db-name
和 --db-host
选项通过 artisan 命令配置连接参数。
数据库相关环境变量在 .env.production
和 .env.local
文件中设置。
生产环境配置为使用套接字连接,而本地配置为通过 Google Cloud SQL 实例的 IPv4 地址连接。使用 Google 开发者控制台以获取套接字连接字符串并启用数据库实例的 IPv4 地址。
只有在工作在 local
环境时才支持迁移。
要使用 production
或 local
环境,请将相应的文件重命名为 .env
。
文件系统
为了在 GAE 上支持 Laravel 文件系统,Artisan 命令修改 config/filesystem.php
以包含额外的磁盘
'gae' => [ 'driver' => 'gae', 'root' => storage_path().'/app', ],
并在 .env.production
文件中添加以下行
FILESYSTEM = gae
优化
优化允许应用程序减少对 GCS 的使用,GCS 是目前在 GAE 平台上可用的唯一读写存储。
为了优化视图编译,可以使用包含的 cachefs
文件系统来存储使用 memcached
服务编译的视图。cachefs
不为应用程序提供可靠的存储解决方案,使用 memcached
存储的信息将根据 memcached
规则进行管理,并且可能在 memcached
决定时被删除。由于视图可以在没有任何信息丢失的情况下重新编译,因此使用 cachefs
存储编译后的视图是合适的。
cachefs
具有以下结构
/ +-- bootstrap +-- cache +-- framework +-- views
'/framework/views' 用于存储编译后的视图。
使用以下选项在 .env.production
和/或 .env.local
文件中启用此功能
CACHE_COMPILED_VIEWS = true
'/bootstrap/cache' 用于存储 services.json
、config.php
和 routes.php
文件,为了控制这些文件的缓存,请在 .env.production
和/或 .env.local
文件中使用以下选项
CACHE_SERVICES_FILE = true CACHE_CONFIG_FILE = true CACHE_ROUTES_FILE = true
要使用 config.php
,首先使用 php artisan gae:setup
命令的 --cache-config
选项生成它。routes.php
必须使用 php artisan route:cache
命令生成。
缓存相关选项
- 只要存在
memcached
服务,就在 GAE 和/或在本地环境中受支持, - 在执行
php artisan gae:setup
命令时禁用。
此外,可以跳过 GSC 存储桶的初始化以提高性能。要这样做,请将以下选项设置在 app.yaml
文件中
env_variables: GAE_SKIP_GCS_INIT: true
存储路径将设置为 GCS 存储桶的 /storage
目录,并且将跳过存储目录结构的创建。
如果不使用,可以删除文件系统初始化以最小化 GCS 使用。要这样做,请从 .env.production
文件中删除以下行
FILESYSTEM = gae
适用于 GAE 的 Artisan 控制台
为了在 GAE 上运行时支持 artisan
命令,该软件包提供了 Artisan Console for GAE
。控制台作为一个独立的服务实现,默认情况下出于安全原因未启用。为了安全地使用控制台,必须保护 /artisan
路由。
安装
在 config/app.php
中包含服务提供程序。
'providers' => [ Shpasser\GaeSupportL5\GaeArtisanConsoleServiceProvider::class ];
将 /artisan
URL 处理程序添加到 app.yaml
文件中。
handlers: - url: /artisan script: public/index.php login: admin secure: always - url: /.* script: public/index.php
/artisan
URL 处理程序必须出现在最后一个处理程序之前(url: /.*
),否则它将被 GAE 忽略。建议的处理程序使用 GAE URL 安全选项来保护路由。有关更多信息,请参阅https://cloud.google.com/appengine/docs/php/config/appconfig#PHP_app_yaml_Secure_URLs。
使用方法
在浏览器中输入URL http://your-app-id.appspot.com/artisan 并使用显示的表单提交 artisan
命令。由于GAE的文件系统是只读的,因此这些命令无法在该文件系统上执行写/更新操作。同样地,由于迁移需要在部署之前在本地开发环境中准备,因此所有命令都在非交互模式下执行(通过自动附加 -n
选项)。
部署
如有需要,备份现有的 .env
文件,并在部署您的应用程序之前将生成的 .env.production
重命名为 .env
。
下载并安装GAE SDK for PHP,然后部署您的应用程序。
已知问题
目前,在GAE上运行时,Laravel计划中的命令不受支持。为了使用 Artisan Console for GAE
,需要编辑应用程序类 app/Console/Kernel
,并删除使用其 schedule()
函数安排的任何命令。