gpt4 book ai didi

ruby-on-rails - Rails/Docker - 如何使用 credentials.yml.erc 来保护敏感信息免于进入 docker-compose.yml

转载 作者:行者123 更新时间:2023-11-29 13:43:42 24 4
gpt4 key购买 nike

我正在尝试对我现有的 Rails 应用程序进行 docker 化。我使用 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,所以我将无法使用 docker secrets。由于 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

最佳答案

您可以使用 ENV['DATABASE_URL']setup the database connection而不是弄乱凭据文件。

例如:

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

您可以在 the container config 中设置开发环境变量.以及直接在服务器上的生产凭据,或者如果您通过应用程序配置使用 heroku 等 SAAS 服务。

关于ruby-on-rails - Rails/Docker - 如何使用 credentials.yml.erc 来保护敏感信息免于进入 docker-compose.yml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51787292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com