Как управлять учетными данными с помощью многоэтапного приложения Rails для одной среды? - PullRequest
0 голосов
/ 20 июня 2020

TL; DR

Как использовать файлы учетных данных production.yml.enc и staging.yml.enc в двух производственных и промежуточных приложениях Rails, в то время как приложение имеет только обычные среды development, test и production?

Я использую Heroku и обращаюсь к нему в этом вопросе. Однако это не указано c для этого поставщика.

Подробно

Приложение часто развертывается несколько раз. Экземпляр служит производственным приложением, а другой - промежуточным приложением, которое, как ожидается, будет запущено в производство. Rails упрощает использование этого шаблона, поскольку создавать новые среды очень просто.

Однако Heroku предлагает не делать этого по уважительным причинам. Например, у кого-то может возникнуть соблазн поставить несколько if Rails.env.production? здесь и там, проложив путь для некоторых, «но это работает в постановке !?» в пятницу вечером. Лучше иметь единую производственную среду с разными наборами параметров, чтобы фактически различать этапы (например, другое имя сегмента AWS S3, другой ключ API и т. Д. c.). Чтобы достичь этого, Heroku советует полагаться на переменные среды.

Начиная с Rails 5.2 и более поздних версий в Rails 6, учетные данные удобно обрабатывать через зашифрованные файлы Yaml в config/credentials. Обычно именно здесь желательно хранить все эти переменные, которые меняются от одной среды к другой, вместо использования беспорядочных переменных среды. Этот механизм можно использовать в Heroku благодаря единственной переменной среды RAILS_MASTER_KEY, которая содержит ключ, используемый для расшифровки файла учетных данных.

Но эти части не подходят. Как мы можем создать единую среду production, тогда как файлы учетных данных предназначены для каждой среды?

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Иметь несколько файлов по одному для каждой среды в репозитории исходного кода o локальный диск сервера, работает, но у вас будет несколько файлов с жестко запрограммированными значениями. app, вам понадобится несколько сред разработки и тестирования , чтобы сохранить независимые команды, которые несут полную ответственность за свои Услуги:

  • Разработка
  • Выпуск / Развертывание
  • Операции (не администрирование платформы / системы)

Подход к управлению: вынесите свои конфигурации на внешние платформы, называемые: Configurations Manager

Эти платформы должны иметь следующие функции:

  • создание пары ключ-значение приложением. Как и в веб-панели управления heroku
  • открыть конечную точку http для получения этих переменных из удаленных приложений
  • безопасность

Ваше приложение rails должно получать переменные на этапе запуска или мгновенно, если ваш язык поддерживает горячую перезагрузку переменных.

Вот некоторые менеджеры конфигураций:

При таком подходе у вас будет платформа для управления несколькими приложениями для нескольких сред, таких как создание веб-переменных heroku, но более сложных.

0 голосов
/ 20 июня 2020

Это может быть реализовано с помощью файла и ключа промежуточных учетных данных, а также переключателя в application.rb на основе переменной среды:

  • Создайте и заполните файл и ключ промежуточных учетных данных с EDITOR=vi rails credentials:edit --environment staging.

  • В application.rb добавьте:

    unless ENV['RAILS_CREDENTIALS_CONTENT_FILENAME'].blank?
      config.credentials.content_path = Rails.root.join 'config',
                                                        'credentials',
                                                        ENV['RAILS_CREDENTIALS_CONTENT_FILENAME']
    end
    
  • Установите для переменной среды RAILS_CREDENTIALS_CONTENT_FILENAME значение production.yml.enc или staging.yml.enc, в зависимости от случая. Например, Heroku делает это с:

    heroku config:set -a theapp-staging RAILS_CREDENTIALS_CONTENT_FILENAME=staging.yml.enc
    
  • Возможно, вам придется позаботиться и о RAILS_MASTER_KEY.

...