Что должно быть удалено из общедоступного контроля исходного кода в Ruby on Rails?

Я искал в Интернете, и я не могу найти хороших / недавних примеров того, что исключить из нового общедоступного приложения rails. Я ищу приложение с открытым исходным кодом на GitHub и мне интересно, какие типы данных должны быть удалены из системы контроля версий.

Из того, что я могу сказать, должно быть config/config.yml файл, который имеет личную информацию. Я просматривал другие файлы, и это выглядит как config/database.yml, config/intializers/secret_token.rb а также config/initializers/session_store.rb также должны быть исключены?

Рекомендуется ли исключать все эти файлы отдельно? Или есть способ получить всю информацию в config/config.yml и называться в каждом из этих файлов? Кроме того, какие файлы и данные должны быть конфиденциальными и скрытыми? Это все из них?

Мне просто интересно, какой подход я должен использовать и какова лучшая практика. Спасибо за любую помощь!

2 ответа

Решение

Я тоже давно в этом разбираюсь; Я хотел, чтобы конфиденциальная информация оставалась скрытой на протяжении всего процесса передачи открытого исходного кода на Github, затем автоматически отправлялась в Travis CI для тестирования, а затем из Travis автоматически развертывалась в Heroku. Вот все подробности того, что я нашел до сих пор, рассматривая различные вопросы и ответы Stackru, блоги и т. Д., Которые, как мы надеемся, послужат вам справочной информацией, даже если только для конфигурации внутри приложения Rails (пропустите любой {{ ... }} ты видишь)

Отказ от ответственности: я ни в коем случае не эксперт здесь, поэтому, пожалуйста, имейте в виду, что, вероятно, есть лучшие способы сделать это, чем то, что я пытаюсь. Я бы хотел научиться новым трюкам в этой теме вопросов и ответов.


Приложение Inside the Rails

В настоящее время я использую драгоценный камень Figaro, чтобы скрыть конфиденциальную информацию в ENV переменные среды В моем (.gitignore г) 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 ключи типа.)

Тестирование на Travis CI

Создайте зашифрованные переменные travis, используя гем Travis. Ключ API Heroku и URL-адрес Heroku Git необходимы, если вы развертываете напрямую в Heroku от работника Travis (подробности см. В этом разделе " Вопросы и ответы по Stackru"), в противном случае вы можете пропустить их, если просто используете его для тестирования:

$ 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 git@heroku.com: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 rake, чтобы автоматически установить переменные среды, которые 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}}

Затем попытайтесь выполнить развертывание.


Это все, что у меня есть сейчас. В данный момент я не уверен, стоит ли мне скрывать больше информации или я недостаточно хорошо это скрываю, но эта работа еще не завершена.

Вы получите разные мнения. ИМХО, рекомендуется включать эти файлы, но не включать в них секретный контент. Документируйте, что вы делаете, чтобы разработчики, которые являются новичками в вашем проекте, знали, что им нужно заполнить.

У Phusion есть хороший пост в блоге о том, как обращаться с секретом сеанса Rails, и о компромиссах, которые вы можете сделать, чтобы включить или исключить информацию:

http://blog.phusion.nl/2013/01/04/securing-the-rails-session-secret/

Мой любимый способ документировать это - использовать задачу "rake setup". У вас может быть задание напечатать, что нужно сделать разработчику - другими словами, вам не нужно автоматизировать все это (хотя это хорошо, если вы можете это сделать).

Если вы хотите стать модным, попросите ваши файлы прочитать секретные настройки из общего каталога /, что также позволяет использовать символьные ссылки для развертывания. Это также описано в блоге Phusion. Вот как я создаю приложения, которые необходимо часто развертывать.

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