Назад | Перейти на главную страницу

Как установить динамические переменные среды в приложении Laravel в AppEngine

Я пытаюсь развернуть приложение Laravel в GAE. Как упоминалось в документации, переменные среды должны быть добавлены в app.yaml файл. Но поскольку исходный код находится на GitHub, и немногие люди участвуют в проекте, не рекомендуется помещать пароль базы данных и другие секреты приложения в app.yaml файл. Также я не заинтересован в развертывании приложения с моей машины. Как мне предоставить эту информацию в приложение как .env файл не поддерживается или его невозможно разместить другими способами. Кроме того, я бы использовал функцию push to deploy для развертывания кода в GAE из GitHub. Итак, как мне это сделать?

Этот пакет композитора является потенциальным решением. Он обрабатывает получение переменных из Google Datastore и соответствующее кеширование: https://github.com/tommerrett/laravel-GAE-secret-manager

Чтобы ответить на ваш вопрос о секретах приложений, вы можете использовать Cloud Datastore. Если вы еще не используете Datastore, вы можете настроить новый тип (например, схему), посетив консоль и выполнив следующие действия:

  • Перейти к Страница хранилища данных
  • Создайте базу данных в режиме хранилища данных
  • Иди в Страница сущностей
  • Создать сущность. При необходимости выберите место.
  • Введите произвольное имя, например Sekrit для добрых
  • Сделайте ключевой идентификатор произвольным именем
  • Для этого первого сделайте это имя "dbpass" - вы будете использовать это имя, чтобы найти его позже.
  • Добавьте свойство String с именем "payload" со значением вашего пароля БД.
    • вы будете использовать имя этого свойства, чтобы получить фактическое значение из объекта Datastore
    • даже объекты с одним свойством должны обрабатываться как именованные массивы
  • Создайте сущность.
  • Повторите для других Sekrits дает каждому уникальное имя

Затем в приложении 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'];