shpasser/gae-support-l5

为 Laravel 5.1 应用提供 Google App Engine 支持。

1.4.12 2016-04-09 17:48 UTC

README

Join the chat at https://gitter.im/shpasser/GaeSupportL5 Latest Stable Version Total Downloads Latest Unstable Version License

为 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。支持邮件消息的 sendertoccbccreplyTosubjectbodyattachment 部分。

队列

修改后的队列配置文件 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 环境时才支持迁移。

要使用 productionlocal 环境,请将相应的文件重命名为 .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.jsonconfig.phproutes.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() 函数安排的任何命令。