Ответ 1
Я изучал это недавно; Я хотел, чтобы конфиденциальная информация скрывалась в процессе нажатия на открытый исходный код Github, а затем автоматически переводилась в Travis CI для тестирования, затем из Travis автоматически развертывается в Heroku. Ниже приведены все детали того, что я нашел до сих пор, глядя на различные StackOverflow Q & As, blogs и т.д., Которые, надеюсь, будут служить для вас ссылкой, даже если только для конфигурации внутри приложения Rails (опустите любой {{ ... }}
см)
Отказ от ответственности: я ни в коем случае не эксперт, поэтому, пожалуйста, имейте в виду, что есть, вероятно, лучшие способы сделать это, чем то, что я пытаюсь. Мне бы хотелось узнать некоторые новые трюки в этом потоке Q & A.
Внутри приложения Rails
В настоящее время я использую Figaro gem, чтобы скрыть конфиденциальную информацию в переменных среды ENV
. В моей (.gitignore
d) config/application.yml я сохраняю следующую информацию:
# App keys
SECRET_TOKEN: # your rake secret generated token
development:
DB_NAME: # your dev db name here
DB_USER: # your dev db username here
DB_PASSWORD: # your dev db password here
test:
DB_NAME: # your test db name here
DB_USER: # your test db username here
DB_PASSWORD: # your test db password here
production:
DB_NAME: # your prod db name here
DB_USER: # your prod db username here
DB_PASSWORD: # your prod db password here
# Third Party keys that you will reference in their relevant files
THIRD_PARTY_API_OR_LICENSE_KEY: # list of whatever api/license keys you use
(DB_NAME
, DB_USER
и DB_PASSWORD
будут использоваться динамически в зависимости от среды, в которой работает ваше приложение).
Пустая версия вышеуказанного файла (config/application.example.yml) помещается в Github с некоторыми инструкциями о том, как его заполнить.
Файлы, которые помещаются в Github и ссылаются на эти переменные, выглядят следующим образом:
конфиг /database.yml
(Postgresql используется здесь, но вы должны иметь возможность изменять настройки для любой используемой базы данных)
postgresql: &postgresql
adapter: postgresql
database: <%= ENV['DB_NAME'] %>
username: <%= ENV['DB_USER'] %>
password: <%= ENV['DB_PASSWORD'] %>
min_messages: ERROR
defaults: &defaults
pool: 5
timeout: 5000
host: localhost
<<: *<%= ENV['DB'] || "postgresql" %>
development:
<<: *defaults
test:
<<: *defaults
production:
<<: *defaults
конфигурации/инициализаторы/secret_token.rb
if Rails.env.production? && ENV['SECRET_TOKEN'].blank?
raise 'SECRET_TOKEN environment variable must be set!'
end
YourApp::Application.config.secret_token =
ENV['SECRET_TOKEN'] || {{WHATEVER_SECRET_TOKEN_RAILS_GENERATED_BY_DEFAULT}}
(Кроме того, любые файлы будут ссылаться на клавиши THIRD_PARTY_API_OR_LICENSE_KEY
-type.)
Тестирование на Travis CI
Создайте зашифрованные переменные travis, используя драгоценный камень Тревиша. Ключ API Heroku и URL Heroku Git необходимы, если вы разворачиваете прямо в Heroku от работника Travis (см. этот StackOverflow Q & A для подробностей), в противном случае вы можете опустите их, если вы просто используете его для тестирования:
$ gem install travis
$ travis encrypt your_username/your_repo HEROKU_API_KEY={{YOUR_HEROKU_API_KEY}}
$ travis encrypt HEROKU_GIT_URL={{YOUR_HEROKU_GIT_URL}} # eg [email protected]:your_app.git
$ travis encrypt DB_NAME={{YOUR_DB_NAME_UNDER_TEST}} # eg your_app_test
$ travis encrypt DB_USER={{YOUR_DB_USER_UNDER_TEST}}
$ travis encrypt DB_PASSWORD={{YOUR_DB_PASSWORD_UNDER_TEST}}
(Кроме того, зашифруйте любые другие ключи, которые могут понадобиться во время тестирования, если они есть...)
Затем добавьте их в .travis.yml
(еще раз Postgresql-сфокусированный, но вы должны иметь возможность изменять настройки для любой используемой базы данных)
env:
global:
- secure: {{YOUR_ENCRYPTED_HEROKU_API_KEY}}
- secure: {{YOUR_ENCRYPTED_HEROKU_GIT_URL}}
- secure: {{YOUR_ENCRYPTED_DB_NAME}}
- secure: {{YOUR_ENCRYPTED_DB_USER}}
- secure: {{YOUR_ENCRYPTED_DB_PASSWORD}}
matrix:
- DB: postgresql
before_script:
- psql -c "create database $DB_NAME;" -U $DB_USER
- RAILS_ENV=test bundle exec rake db:migrate
script:
- bundle exec rspec spec/
after_success:
- gem install heroku
- git remote add heroku $HEROKU_GIT_URL
# ... see link above for the rest of the config content
Несколько переменных, отмеченных с тем же именем secure
, являются точными; они появятся в конфигурации как HEROKU_API_KEY=[secure] HEROKU_GIT_URL=[secure]
и т.д.
Развертывание в Heroku
Используйте задачу рейга Figaro Heroku для автоматической установки переменных окружения, которые Heroku должен видеть в процессе производства:
$ rake figaro:heroku
Или, установите их вручную:
$ heroku config:set SECRET_TOKEN={{YOUR_SECRET_TOKEN}}
$ heroku config:set DB_NAME={{YOUR_DB_NAME_UNDER_PRODUCTION}} # eg your_app_production
$ heroku config:set DB_USER={{YOUR_DB_USER_UNDER_PRODUCTION}}
$ heroku config:set DB_PASSWORD={{YOUR_DB_PASSWORD_UNDER_PRODUCTION}}
$ heroku config:set THIRD_PARTY_API_OR_LICENSE_KEY={{YOUR_THIRD_PARTY_API_OR_LICENSE_KEY}}
Затем выполните попытку развертывания.
Это все, что у меня есть сейчас. Не уверен в данный момент, если я буду скрывать больше информации, или если я не скрываю ее достаточно хорошо, но это незавершенная работа.