我正在尝试在 GAE 上部署 Laravel 应用程序。如文档中所述,环境变量应该添加到app.yaml
文件中。但由于源代码在 GitHub 中,而且很少有人参与该项目,因此将数据库密码和其他应用程序机密放在文件中绝对不是一个好习惯app.yaml
。另外,我对从我的机器部署应用程序不感兴趣。我应该如何向应用程序提供这些信息,因为.env
文件不受支持,或者无法通过任何其他方式将其放在那里。此外,我将使用推送部署功能从 GitHub 部署 GAE 中的代码。那么我该怎么做呢?
答案1
要回答有关应用机密的问题,您可以使用 Cloud Datastore。如果您尚未使用 Datastore,则可以通过访问控制台并执行以下操作来设置新类型(如架构):
- 前往数据存储页面
- 在数据存储模式下创建数据库
- 前往实体页面
- 创建实体。如果需要,选择一个位置。
- 键入任意名称,例如
Sekrit
Kind - 将密钥标识符设为自定义名称
- 对于第一个,将该名称设为“dbpass”——稍后您将使用此名称来查找它
- 添加一个名为“payload”的字符串属性,其值为您的数据库密码
- 您将使用该属性的名称从 Datastore 对象中获取实际值
- 即使具有单个属性的对象也必须像命名数组一样处理
- 创建实体。
- 对其他
Sekrit
s 重复上述步骤,为每个 s 指定一个唯一名称
然后在你的 Laravel 应用中,你可以通过以下命令访问数据存储区:
require 'vendor/autoload.php';
use Google\Cloud\Datastore\DatastoreClient;
$datastore = new DatastoreClient();
对于您需要检索的每件事,请执行以下操作:
$db_pass_datastore_key = $datastore->key('Sekrit', 'dbpass');
$db_pass_object = $datastore->lookup($db_pass_datastore_key);
$db_pass = $db_pass_object['payload'];
答案2
这个 Composer 包是一个潜在的解决方案。它负责从 Google Datastore 获取变量以及相关缓存:https://github.com/tommerrett/laravel-GAE-secret-manager