2009-08-15 14 views
5

Ho lavorato in un'azienda di sviluppo web in cui disponevamo delle nostre macchine locali, un server di staging e un numero di server di produzione. Abbiamo lavorato su mac in perl e abbiamo usato svn per il commit in stage e script perl da caricare sui server di produzione. Ora sto lavorando sul mio progetto e vorrei trovare buone pratiche per lo sviluppo web quando si utilizza il web hosting condiviso e non si lavora da un ambiente basato su Unix (con tutta la magia che potrei fare con script perl/bash/cron jobs etc)Le migliori pratiche per la distribuzione (php/mysql) all'hosting condiviso?

Quindi la mia domanda è dato le mie condizioni, che sono:

  • sto utilizzando un unico standard web hosting condiviso da un provider esterno (con accesso SSH)
  • sto lavorando con almeno un'altra persona e destinato a usare SVN per il controllo del codice sorgente
  • Sto sviluppando php/mysql in Windows (ma usando linux è una possibilità)

Quale configurazione suggerisci per test, implementazione, migrazione di codice/dati? Ho un server xampp installato sul mio computer locale, ma non ero sicuro dei metodi utilizzati per migrare i dati, ecc. Sotto Windows.

risposta

10

Ho alcuni progetti personali su PHP per l'hosting condiviso; Ecco un paio di pensieri, da quello che sto facendo su uno di quelli (quello più attivo e che richiede almeno un metodo di sincronizzazione semiautomatico):

Alcune parole sulla mia configurazione :

  • Qualche tempo fa, avevo tutto su SVN; ora, sto usando bazaar; ma l'idea è esattamente la stessa (ad eccezione, con bazar, ho la storia locale e tutto ciò che)
  • ho un accesso SSH al server di produzione, come si fa
  • Io lavoro su Linux exclusivly (così , quello che faccio potrebbe non essere così facile con le finestre)

Ora, come lavoro:

  • Tutto ciò che ha te sia sul server di produzione (codice sorgente, immagini, .. .) si impegna a SVN/bazarr/qualunque cosa
  • Io lavoro a livello locale, con Apache/PHP/MySQL (io uso un dump del DB di produzione che ho importare a livello locale una volta ogni tanto)
  • io sono l'unico lavorando a quel progetto; probabilmente sarebbe OK per una piccola squadra di 2/3 sviluppatori, ma non di più.

Quello che ho fatto prima:

  • ho avuto qualche script PHP che controllò il server SVN per la modifica tra "ultima revisione spinto alla produzione" e HEAD
    • Sto indovinando questo fatto in casa Lo script PHP è simile allo script Perl attualmente utilizzato.^
  • Questo script ha creato un elenco di directory/file da caricare in produzione
  • E caricato quelli tramite accesso FTP
  • Questo non era molto soddisfacente (c'erano errori nel mio script, suppongo; Non ho mai avuto il tempo di correggerli); e mi ha costretto a ricordare il numero di revisione del tempo ho ultima spinto alla produzione (beh, era stato archiviato automaticamente in un file dallo script, quindi non è così difficile ^^)

quello che faccio adesso:

  • Quando si passa al bazar, non ho voglia di riscrivere lo script, che non ha funzionato molto bene comunque
  • ho lasciato cadere la sceneggiatura totalmente
  • Come ho accesso ssh al server di produzione , Io uso rsync per sincronizzare dalla mia macchina di sviluppo al server di produzione, quando ciò che ho localmente è considerato stabile/pronto per la produzione.

Un paio di note di quel modo di fare le cose:

  • Non ho un server di gestione temporanea: il mio setup locale è abbastanza vicino a uno
  • Non avendo un server di gestione temporanea della produzione è ok per un progetto semplice con uno o due sviluppatori
  • Se avessi un server di gestione temporanea, probabilmente sarei andare con:
    • fare un "svn update" su di esso quando si vuole STA ge
    • quando è OK, lanciare il comando rsync dal server di gestione temporanea (che saranno BA presso l'ultima revisione "stabile", quindi su OK per essere spinto alla produzione)
  • Con un progetto più grande, con più sviluppatori, probabilmente non andrei con quel tipo di setup; ma trovo tutto OK per un progetto personale (non troppo grande).


L'unica cosa "speciale", il quale potrebbe essere "linux-oriented" è usando rsync; una ricerca rapida sembra indicare che esiste un eseguibile rsync che può essere installato su Windows: http://www.itefix.no/i2/node/10650

Non l'ho mai provato, però.


Come sidenote, ecco cosa il mio comando rsync assomiglia:

rsync --checksum \ 
    --ignore-times \ 
    --human-readable \ 
    --progress \ 
    --itemize-changes \ 
    --archive \ 
    --recursive \ 
    --update \ 
    --verbose \ 
    --executability \ 
    --delay-updates \ 
    --compress --skip-compress=gz/zip/z/rpm/deb/iso/bz2/t[gb]z/7z/mp[34]/mov/avi/ogg/jpg/jpeg/png/gif \ 
    --exclude-from=/SOME_LOCAL_PATH/ignore-rsync.txt \ 
    /LOCAL_PATH/ \ 
    [email protected]:/REMOTE_PATH/ 

sto usando le chiavi private/pubbliche mecanism, quindi rsync non chiede una password, btw.

E, naturalmente, io in genere utilizzano lo stesso comando in modalità "dry-run" prima, per vedere che cosa sta per essere synchorised, con l'opzione "--dry-run"

E il ignore-rsync.txt contiene un elenco di file che io non voglio essere spinto alla produzione:

.svn 
cache/cbfeed/* 
cache/cbtpl/* 
cache/dcstaticcache/* 
cache/delicious.cache.html 
cache/versions/* 

Qui, ho solo evitare che directory di cache di essere spinto alla produzione - sembra logico non inviare quelli, come dati di produzione non è la stessa come lo sviluppo dati.

(Sto solo notando c'è ancora il ".svn" in questo file ... potrei toglierlo, come io non uso SVN più per quel progetto ^^)


Speranza questo aiuta un po '...

+1

Grazie mille. A volte mi sorprende anche lo sforzo che persone come te mettono in risposta con dettagli e chiarezza. – zenna

+1

Prego :-) (Alcune risposte che ottengo e/o vedere mi stupiscono anche io ;-) quindi, quando posso aiutare ... beh, questo è ciò che SO è per!) –

1

Per quanto riguarda SVN, suggerirei di andare con un host SVN dedicato come beanstalk o utilizzare la stessa macchina server per eseguire un server SVN in modo che entrambi gli sviluppatori possano risolverlo.

In quest'ultimo caso, lo script di implementazione sposterebbe semplicemente i bit in una cartella Web di staging (accessibile tramite beta.mysite.com) e quindi un altro script di distribuzione potrebbe spostarlo nella directory Web live. Distribuire direttamente sul sito live non è ovviamente una buona idea.

Se si decide di accedere a un host dedicato o si desidera eseguire l'implementazione dalla propria macchina al server, utilizzare rsync. Questa è anche la mia configurazione attuale. RSync esegue sincronizzazioni differenziali (su SSH) quindi è veloce ed è stato creato proprio per questo tipo di cose.

Man mano che cresci, puoi iniziare a utilizzare gli strumenti di costruzione con test delle unità e quant'altro. Questo lascia solo il problema di sincronizzazione dei dati.

I dati di sincronizzazione solo da remoto -> locale e utilizzare un file batch DOS che esegue questa operazione su SSH utilizzando mysqldump. Cygwin è utile per le macchine Windows ma puoi saltarlo. Lo script di importazione SQL esegue anche una query su una riga per aggiornare alcune celle come hostname e web root per la distribuzione locale.

Una volta completata questa configurazione, è possibile concentrarsi solo sulla scrittura di codice e sulla distribuzione remota o sulla sincronizzazione locale e la distribuzione diventa un processo a un clic.

+0

Grazie, ho usato Assembla per l'host SVN, quindi non posso realmente eseguire script su quel server. – zenna

+0

Poiché il codice è sincronizzato sulla macchina, è possibile eseguire gli script dalla propria macchina (oppure il proprio partner può eseguirli sulla propria macchina). Gli script possono anche essere archiviati nel depot. – aleemb

1

Un'opzione consiste nell'utilizzare un framework dedicato per l'attività. Capistrano si adatta molto bene ai linguaggi di scripting come php. È basato su Ruby, ma se fai una ricerca, dovresti essere in grado di trovare le istruzioni su come usarlo per la distribuzione di applicazioni php.

Problemi correlati