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
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

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