Rails / Docker - Как использовать credentials.yml.erc для защиты конфиденциальной информации от перехода на docker-compose.yml

Я пытаюсь докеризовать свое существующее приложение рельсов. Я уже довольно давно использую credentials.yml. Мой файл credentials.yml выглядит примерно так:

production:
 db_host: 'localhost'
 db_name: 'prod_db'
 db_username: 'username'
 db_password: 'password'

development:
 db_host: 'localhost'
 db_name: 'dev_db'
 db_username: 'username'
 db_password: 'password'

test:
 db_host: 'localhost'
 db_name: 'test_db'
 db_username: 'username'
 db_password: 'password'

secret_key_base: my_secret_key_base

И мой файл database.yml выглядит так:

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: <%= Rails.application.credentials[Rails.env.to_sym][:db_name] %>
  username: <%= Rails.application.credentials[Rails.env.to_sym][:db_username] %>
  password: <%= Rails.application.credentials[Rails.env.to_sym][:db_password] %>
  host: <%= Rails.application.credentials[Rails.env.to_sym][:db_host] %>
  template: template0

test:
  <<: *default
  database: <%= Rails.application.credentials[Rails.env.to_sym][:db_name] %>
  username: <%= Rails.application.credentials[Rails.env.to_sym][:db_username] %>
  password: <%= Rails.application.credentials[Rails.env.to_sym][:db_password] %>
  host: <%= Rails.application.credentials[Rails.env.to_sym][:db_host] %>
  template: template0

production:
  <<: *default
  database: <%= Rails.application.credentials[Rails.env.to_sym][:db_name] %>
  username: <%= Rails.application.credentials[Rails.env.to_sym][:db_username] %>
  password: <%= Rails.application.credentials[Rails.env.to_sym][:db_password] %>
  host: <%= Rails.application.credentials[Rails.env.to_sym][:db_host] %>
  template: template0

Теперь я не использую docker swarm, поэтому я не смогу использовать секреты докеров. Поскольку изображение postgres требует настройки переменных среды, как мне предоставить учетные данные, не встраивая их в файл docker-compose?

Вот образец моего файла docker-compose.yml:

version: '3'
volumes:
  postgres_data: {}
services:
  app:
    build:
      context: .
      dockerfile: ./docker/app/Dockerfile
    stdin_open: true
    tty: true
    depends_on:
      - db
    volumes:
      - .:/my_app
  db:
    image: postgres:10.3
    volumes:
      - postgres_data:/var/lib/postgresql/data
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
630
1

Ответы 1

Вы можете использовать ENV['DATABASE_URL'] для настроить подключение к базе данных вместо того, чтобы возиться с файлом учетных данных.

Например:

DATABASE_URL=postgresql://localhost/foo?username=bar&password=baz rails s 

Значения в ENV['DATABASE_URL'] объединены со значениями в database.yml, поэтому вы можете просто установить некоторые полезные значения по умолчанию:

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  template: template0

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_test

Вы можете установить env var для разработки в конфигурация контейнера. И производственные учетные данные непосредственно на сервере или, если вы используете службу SAAS, такую ​​как heroku, через конфигурацию приложения.

Я думаю, что докер уже предоставляет имя пользователя и пароль как env vars. docs.docker.com/samples/library/postgres/#postgres_password

max 10.08.2018 16:53

Другие вопросы по теме