2011-09-04 11 views
11

Sto distribuendo la mia prima piccola app con MongoDB e Mongoid come driver.MongoDB e Mongoide in produzione

Qual è il modo corretto per utilizzare MongoDB in produzione?

Voglio dire nello sviluppo ho appena iniziato mongod e il gioco è fatto - non sono necessari nome utente o password e sembra non sicuro.

anche Mongoid configurazioni di insiemi di default

production: 
    host: <%= ENV['MONGOID_HOST'] %> 
    port: <%= ENV['MONGOID_PORT'] %> 
    username: <%= ENV['MONGOID_USERNAME'] %> 
    password: <%= ENV['MONGOID_PASSWORD'] %> 
    database: <%= ENV['MONGOID_DATABASE'] %> 

Come dovrei configurare questa opzione e tutto il MongoDB sul mio server di produzione?

risposta

11

Per creare un ambiente di produzione in cui è necessario utilizzare un nome utente e una password per la connessione:

Nella console mongo:

// Add an Admin User (to the admin db) 
use admin 
db.addUser("theadmin", "anadminpassword") 

// Use your database 
use supercool 

// Add a user (to your database) 
db.addUser("joe", "passwordForJoe") 

// show all users: 
db.system.users.find() 

// add readonly user (kinda cool) 
db.addUser("readonly", "passwordForJoe", true) 

Ora, tutte le connessioni al mongodb richiedono l'autenticazione - http://www.mongodb.org/display/DOCS/Security+and+Authentication

Inoltre: è possibile considerare l'utilizzo del proprio firewall linux per consentire solo 27017 dai server Web.

+0

Grazie Jesse! – fl00r

5

MongoDB per impostazione predefinita non supporta l'autenticazione. Questo è di progettazione e dovrebbe essere gestito da singole applicazioni. Ma non è troppo difficile abilitare l'accesso autenticato a MongoDB. Descriverò i passaggi che ho seguito per il mio setup tipico di rail, mongoid, git, capistrano.

  • Prima aggiungere un utente al database di amministrazione. Senza il quale nessuno dei seguenti passaggi funziona.

    use admin 
    db.addUser("heisenberg", "knock-knock") 
    
  • creare un utente al db vostra applicazione utilizzerà. In MongoDB l'autenticazione funziona su una per ogni livello di db

    use breaking_bad 
    db.addUser("gus", "fring") 
    
  • Meglio ancora, creare un utente solo per lettura solo a scopo per la sicurezza e le prestazioni a vantaggio

    use breaking_bad 
    db.addUser("walter", "white", true) 
    
  • attivare il flag di autenticazione per MongoDB di rispettare tutto il tuo hardwork relativo all'autenticazione. Questo può essere fatto tramite un flag --auth sul comando mongodb. O meglio decommentare questa riga nel /etc/mongodb.conf

    auth = true #Uncomment me 
    
  • Ora riavviare il processo MongoDB di pick-up le nuove modifiche.

    service mongodb restart 
    
  • Verificare se si è sulla strada giusta, garantendo che l'applicazione CRUD ora non riesce! Ha perso l'accesso a leggere/scrivere dal tuo mongodb dopotutto. Ora aggiungi il nome utente: e la password: attributi al tuo mongoid.yml sotto il gruppo predefinito.

    production: 
        sessions: 
        default: 
         database: breaking_bad 
         hosts: 
         - albuquerque.com:27017 
         username: gus 
         password: fring 
    
  • Per i punti bonus, rimuovere il mongolo.il file yml dal repository git in quanto questo file ha ormai le credenziali di sicurezza

    git rm mongoid.yml 
    
  • Attività Aggiungere Capistrano che copiano il file mongoid.yml dalla vostra macchina dev per il tuo server e aggiungere i collegamenti simbolici appropriati. Eseguire cap deploy dopo questo

    namespace :mongoid do 
        desc "Copy mongoid config" 
        task :copy do 
        upload "config/mongoid.yml", "#{shared_path}/mongoid.yml", :via => :scp 
        end 
    
        desc "Link the mongoid config in the release_path" 
        task :symlink do 
        run "test -f #{release_path}/config/mongoid.yml || ln -s #{shared_path}/mongoid.yml #{release_path}/config/mongoid.yml" 
        end 
    end 
    
  • Utilizzare l'impostazione bind_ip nel /etc/mongodb.conf per raccontare MongoDB per accettare solo le connessioni dal server web

  • usare iptables per le impostazioni del firewall configurato per proteggere ulteriormente il impostare. O usarlo all'interno di una VPN.

Ulteriori approfondimenti:

http://docs.mongodb.org/manual/tutorial/control-access-to-mongodb-with-authentication/ http://docs.mongodb.org/manual/administration/security/