Quali sono le migliori pratiche per trasferire gli aggiornamenti del sito dall'ambiente dev/stage/testing alla produzione?


8

In questo momento ho un server di sviluppo con una configurazione LAMP di base. Il server di produzione è un slicehost. Ma mi chiedo quale sia il modo migliore per spingere le istanze del codice/db sullo stage dev> stage> production. Ha a che fare con il modo in cui crei le fasi?

Come si fa a far scendere il sito? È possibile anche se non si esegue il bilanciamento del carico?

So che questo è un po 'generale, sto solo cercando di essere indicato nella giusta direzione.

1

Guarderei in una sorta di ambiente di stile "build" automatizzato per lampada in cui sono presenti script che impacchettano e preparano le versioni per ogni ambiente.

Riconosco che non esiste un vero edificio per PHP ma è possibile impostare l'automazione per modificare qualsiasi problema di configurazione o di installazione e salvare tutto in una cartella pronta per essere implementata.

Non credo che sia possibile eliminare completamente i tempi di inattività senza bilanciamento del carico/ambienti di stile Web farm. Tuttavia, il modo più semplice per ridurlo nel mio libro è stabilire un processo di preparazione del codice coerente e testare il processo più volte. L'automazione sarebbe di aiuto lì.

Per quanto riguarda l'atto di copiare effettivamente i file, beh non ne so molto più che usare qualcosa come FTP o qualsiasi altra cosa conveniente. Forse mettendo un messaggio di caricamento. Ancora una volta tutto questo potrebbe essere copiato.

Infine, tenere a mente poiché PHP non è stato creato, potrebbe funzionare bene per tenere traccia delle differenze tra ciò che è ora presente e ciò che è cambiato e spostare solo quei file. A volte questo può aggiungere comunque complessità non necessarie.


2

Io uso .htaccess per creare un jiffy "modalità di manutenzione" in cui solo il mio IP può vedere il sito principale durante l'aggiornamento. Tutti gli altri possono visualizzare un breve messaggio in modo che sappiano che tutto dovrebbe tornare online in pochi clic.

Poi:

  1. Fai tutto il DB modifica
  2. SVN export/caricare i file
  3. Run test automatizzati e dare il più possibile una rapida occhiata per assicurarsi che non c'è niente di terribilmente sbagliato
  4. Ripristinare il file .htaccess

E 'un dato di fatto, ma si dovrebbe verificare le cose come più possibile localmente prima di pus su un server live. Alcune persone usano due server live (come un sottodominio con nome criptico sul server di produzione) per fungere da area di prova per gli aggiornamenti in tempo reale. Ciò può ridurre il tempo di inattività effettivo del sito principale.

Devo sottolineare che è importante non inviare aggiornamenti a un server live senza chiuderlo anticipatamente (soprattutto se si utilizzano i binari ASPNET) poiché gli utenti che tentano di utilizzare il sito durante l'aggiornamento riceveranno messaggi di errore orribili e potresti ottenere i file bloccati.

  0

E aggiungerò che il .htaccess-swap-out, DB-edits, svn checkout/upload di file e test di unità automatizzate possono essere tutti programmati in modo che un aggiornamento avvenga molto, molto più velocemente. 23 set. 082008-09-23 19:14:11


1

Non so se questa sia una buona idea, ma per quanto riguarda i controlli automatici da un sistema di controllo del codice sorgente? Forse con pochi rami di sviluppo: test per il bleeding-edge, sviluppo per la manutenzione/piccoli miglioramenti e produzione per il codice di produzione.Ogni volta che lo sviluppo è stabile, uniscilo nel ramo di produzione e fallo regolarmente controllare dalla macchina di produzione.


0

Per quanto riguarda la pressione dei file su tutti i server Web, scopro che la buona vecchia robocopia fa il trucco. I miei ambienti dev/stage/prod sono ovviamente identici. Basta inserire una pagina temporanea che indica agli utenti che il sito sarà di nuovo indietro.


0

In questo momento usiamo una serie di script di shell con i file di configurazione che tar sui nostri file modificati, li scp a ciascun server nel cluster e quindi li decomprimono una volta che sono lì. Naturalmente questo metodo ha i suoi svantaggi e stiamo pensando a un metodo in cui ogni membro del server ha un client svn installato e, una volta taggato un nuovo rilascio, trasferiamo la copia di lavoro sui server di produzione a quel nuovo tag. Naturalmente, rilasciamo le pubblicazioni durante la nostra ora di manutenzione, quindi non dobbiamo fare nulla di speciale per i nostri utenti (vedono comunque una pagina di manutenzione).


0

Possiedo un'opzione nella mia configurazione di base per consentire l'accesso al sito o un elenco di URL preimpostati Posso reindirizzare tutti gli utenti a (e interrompere qualsiasi traffico API con un codice http appropriato).

Questi URL sono collegamenti a file html statici che spiegano all'utente cosa sta succedendo.

Quando questo è abilitato non ci sono richieste per i database o qualsiasi file poiché tutte le richieste vengono inviate al file HTML prima che possa accadere che mi dà uno spazio 'chiaro' per distribuire eventuali aggiornamenti.


0

apache con compiti per svn e ftp foot il conto per me. Ci sono anche persone che fanno la roba in db con ANT, ma io tendo a volerlo vedere personalmente. Una volta che hai una build pulita e spinta per ftp in tutte le tue sedi, rimarrai stupito di quanto sia facile.