2010-09-16 10 views
8

Attualmente, ho messo le chiavi che uso per accedere ad altre API e simili nel file environment.rb. In questo modo è disponibile sia quando eseguo localmente, sia anche su heroku.Come proteggere le mie chiavi private quando utilizzo github, heroku e lo sviluppo in locale?

Tuttavia, mi piacerebbe iniziare a rendere il mio codice disponibile pubblicamente tramite github in modo da poter ottenere aiuto.

Quali sono i passaggi che devo fare per fare in modo che ciò accada, in particolare in modo che possa testare localmente e testare su heroku.

Sembra che su heroku ci sia un modo per aggiungere le chiavi da una riga di comando, in modo che non debbano risiedere nell'app ruby-on-rails. Ma che dire dello sviluppo locale?

risposta

4

spostarli in un inizializzatore e aggiungere il file al .gitignore

EDIT:

C'è una directory in config chiamato inizializzatori. Qui è dove si inserisce il codice che dovrebbe essere eseguito una volta all'avvio dell'applicazione. In passato, environment.rb è stato utilizzato per queste impostazioni, ma gli inizializzatori mantengono le cose meglio organizzate. Creerei un file nella directory degli inizializzatori chiamato "load_keys.rb" o qualcosa del genere. In questo file, inseriresti il ​​codice esatto che era nel tuo file environment.rb che non vuoi in github.

+0

ciao, scusa, cosa vuoi dire spostando un inizializzatore? – Angela

+0

No prob, ho aggiornato il mio post originale con ulteriori informazioni sugli inizializzatori. Suppongo che tu sappia cosa sia il segnale di propagazione dato che non l'hai chiesto. –

+0

sì, grazie, ho familiarità con .gitignore :) ho familiarità con la directory ma non ero sicuro di cosa fare con esso .... – Angela

1
  1. Metti le tue chiavi private in ~/.ssh come al solito.
  2. Crittografa le tue chiavi private con una passphrase.
  3. Installa keychain.
  4. Aggiungi eval $(keychain private-key-file1 private-key-file2 private-key-file3; source ~/.keychain/${HOSTNAME}-sh) al tuo ~/.bashrc, ~/.profile, ~/.bash_profile o cosa hai. (Vedere la pagina man keychain per csh, tcsh, zsh, o qualsiasi altra cosa)
16

È possibile utilizzare variabili di ambiente (config vars su Heroku) per memorizzare le chiavi API e non li controllare in fonte.

Per un project che sto lavorando su, io uso un fork di twitter-auth, e cambiato per leggere il segreto del client e la chiave da variabili env:

http://github.com/dpmcnevin/twitter-auth/blob/ace5d60a8ed8121cca4c97ef30a0cd025b99bfe1/lib/twitter_auth.rb#L68

OAuth::Consumer.new(
    ENV['oauth_consumer_key'] || config['oauth_consumer_key'],   
    ENV['oauth_consumer_secret'] || config['oauth_consumer_secret'], 
    options 
) 

ho quindi impostare le chiavi del mio .rvmrc nella directory di progetto per uso locale:

export oauth_consumer_key=xxxxxxxxxxxx 
export oauth_consumer_secret=xxxxxxxxxxxxxxxxxxx 
rvm [email protected] 

E infine istituito l'envi variabili biente su Heroku:

$ heroku config:add oauth_consumer_key=xxxxxxxxxxxxx 
$ heroku config:add oauth_consumer_secret=xxxxxxxxxxxxx 
$ heroku config 
DATABASE_URL   => postgres://..... 
RACK_ENV    => production 
oauth_consumer_key => xxxxxxxxxxxxxxxx 
oauth_consumer_secret => xxxxxxxxxxxxxxxxxxx 

Poi basta fare in modo che il vostro .rvmrc è nel .gitignore e poi si può spingere a github senza esporre alcun tasto API.

+0

Non riesci a leggere le chiavi con heroku config a chiunque abbia accesso al tuo heroku? ? – TLK

Problemi correlati