Dipende da cosa ti serve esattamente e da cosa stai cercando. Ma in generale esistono molteplici soluzioni per la "gestione della configurazione come:
- burattino
- cuoco
- cfengine
- ansibile
- sale
ecc. Personalmente consiglierei il burattino in quanto ha una grande comunità e molte ricette fornite dall'esterno. Ciò consente di configurare e gestire i sistemi automaticamente. Se lo combini con repository propri e aggiornamenti automatici tramite ad es. unattended-upgrades
puoi aggiornare automaticamente il sistema.
Un'altra soluzione è semplicemente quella di fornire i propri pacchetti come company-base
ecc. che dipende automaticamente dal software necessario e può configurare automaticamente il sistema.
Dovresti anche esaminare le distribuzioni automatizzate (barebone e virtualizzate). Se lo combini con la gestione della configurazione o con il tuo repository, puoi facilmente automatizzare e reinstallare i tuoi sistemi. Se vuoi iniziare con l'installazione automatizzata, dai un'occhiata a theforman che supporta libvirt così come le installazioni bare bone e ha il supporto per i pupazzi integrato. Se vuoi farlo da solo puoi guardare kickstart (redhat et. al.) o "preseeding" per configurare automaticamente il tuo sistema. Per Debian puoi anche usare qualcosa come debootstrap o un wrapper chiamato grml-debootstrap che supporta le immagini virtualizzate.
Per aiutare a fornire le immagini di VirtualBox per il tuo sviluppatore, dai un'occhiata a vagrant, ti consente di automatizzare la creazione di sistemi virtualizzati con VirtualBox che supporta chef, pupazzi e script di shell per personalizzare il tuo ambiente virtuale.
Se desideri utilizzare la soluzione del tuo provider esistente, dovresti chiedere loro come gestiscono i tuoi sistemi, ma probabilmente sarà una sorta di gestione della configurazione. Potrebbe essere possibile eseguire il loro agente sui tuoi sistemi se puoi accedere al server di configurazione.
Per le parole chiave di Google guarda in devops
, configuration management
, it automation
e server orchestration
.
In breve, automatizza il più possibile e non pensare nemmeno a fare cose manuali.
Ulrich ha già dato la risposta per quanto riguarda la distribuzione del software e la configurazione automatica del server.
I principi alla base di questo sono
- Definisci come dovrebbero apparire i tuoi server - questo include il software comune installato per impostazione predefinita, lo schema di partizionamento e il layout del filesystem
- I server di produzione, staging, test e sviluppo non dovrebbero differire per quanto riguarda questi standard di base (altrimenti incontrerai problemi in seguito, come hai fatto tu)
- Utilizzare una corretta gestione delle modifiche per documentare TUTTE le modifiche apportate (incluse piccole modifiche di una riga in qualsiasi configurazione)
- Cambi sempre prima nel test, poi nello sviluppo, poi nella messa in scena e infine nella produzione
Hai chiesto uno strumento utile per gestire masse di server:il mio preferito è cluster-ssh (cssh
). Digita una volta e apporta modifiche su molti server contemporaneamente.
Se scopri un problema e disponi di una soluzione che lo rimuove:
- Applica la correzione a Test/Dev/Staging/Prod (vedi sopra) se funziona davvero
- Applica la correzione ai tuoi modelli virtuali in modo che i futuri cloni di VM non abbiano quel bug
- Applica la correzione al tuo processo di installazione fisica (kickstart/autoyast/qualsiasi cosa)
- Applica la correzione a TUTTI i server
Se hai a che fare con una massa di server da risolvere, questo è un processo che deve essere ben documentato e alla fine un team diverso dovrebbe verificare se la correzione è stata completamente applicata.
Utilizziamo Mantis (open source, PHP) a tale scopo.
Gestisco circa 30 prodotti e alcune centinaia di server in più paesi. Sono il gestore della configurazione del software, quindi non ho accesso root (per progettazione), non tocco i database o i loro server (di nuovo, per progettazione) e devo fare molti salti mortali a causa della sicurezza aziendale. Ma gestisco le configurazioni in fase di test, staging e produzione, inclusi collegamenti e modifiche al database. Ho un numero di script che vengono inviati ai server utilizzando combinazioni di ssh
, python
e script di shell.
Le cose principali a cui pensare sono:
- Che tipo di interazioni avrai con i tuoi server? Solo caricamenti di file? Esecuzione di programmi da riga di comando? Eseguire client X remoti?
- Quale livello di sicurezza è necessario per accedere a questi server? Firewall, reti sicure, vpn? È
ssh
sufficiente e da una posizione centrale sicura? - Quanto può essere automatizzato su ciascun server? Puoi installare un programma su ogni server ed eseguirlo, o hai bisogno di eseguire lo streaming del programma attraverso qualcosa come
ssh
eseguirlo da remoto? Puoi scriverlo conexpect
o solo un'invocazione da riga di comando?
VirtualBox offre molti strumenti da riga di comando che puoi amministrare semplicemente tramite ssh
o sistemi come puppet
come menziona Ulrich.