quanto è sicuro / sano utilizzare git per la distribuzione sul mio server di produzione webapp?

3

Ho iniziato con sftp, poi sono passato a WebDAV e attualmente sto usando rsync tramite ssh per distribuire eventuali aggiornamenti / aggiornamenti dal mio server di sviluppo al mio server di produzione.

Non sono ancora molto contento di usare questo sistema e penso che usare git per la distribuzione possa essere migliore, soprattutto a causa della possibilità di ripristinare istantaneamente qualsiasi modifica con un solo comando.

Dopo aver usato ssh tunnel per tirare e spingere sul server di produzione (lasciando il servizio git dietro al firewall), ho anche realizzato che devo modificare .htaccess per negare l'accesso web alla cartella .git.

È questo l'approccio corretto, dovrei controllare qualcos'altro, fare qualcosa in un modo diverso, o dovrei andare in una direzione completamente diversa?

    
posta NotGaeL 01.05.2013 - 13:16
fonte

2 risposte

14

Dipende dal tuo modo esatto di farlo. In questo momento mi sembra che tu abbia un repository git nei tuoi httpdocs a cui sei distribuito, fondamentalmente usando HEAD come il tuo vero sito web - NON è il modo corretto. Non sono sicuro di come sia possibile inviare a questa configurazione?

Quello che vuoi fare è usare un repository nudo fuori dalla cartella httpdocs e controllare i file in httpdocs dopo aver premuto. Mentre questo sembra complicato, è piuttosto facile da fare, ecco un tutorial passo-passo: link

Se il tuo server web ha bisogno di accedere ad alcuni file, come l'installazione di un wordpress, devi aggiungere i comandi chmod e chgrp al gancio di post-ricezione, altrimenti i tuoi file appartengono all'utente sbagliato (quello che hai usato per spingere il commit , non il webserver).

Crea semplicemente un nuovo script per cambiare la proprietà che chiami dall'aggancio post_receive tramite sudo scriptname.sh (assegna a name change_own.sh o qualsiasi altra cosa):

chown -R wwwrun /path/to/httpdocs
chgrp -R www /path/to/httpdocs

e consenti allo script di essere eseguito senza password tramite visudo aggiungendo gituser ALL=(ALL) NOPASSWD: /path/to/change_owner.sh alla fine.

Presupposti fatti: wwwrun - utente del webserver; www - gruppo webserver; gituser - user to push commit

Addendum: un amico ha utilizzato questo metodo e si è lamentato di come ha dovuto aggiornare Wordpress all'infinito. La ragione ovvia è che se la Webapplication si aggiorna da sé, e quindi sostituisce il suo codice, queste modifiche non verranno ritrasferite nel repository, perché il hook funziona solo in un modo. Quindi, dopo ogni commit, l'hook ha annullato tutte le modifiche apportate all'installazione di Wordpress tramite gli aggiornamenti. L'imho soluzione più veloce è quella di eseguire gli aggiornamenti sul computer dello sviluppatore, quindi eseguire il commit per la distribuzione.

    
risposta data 01.05.2013 - 13:35
fonte
2

Penso che usare git per gestire il set di file necessari per eseguire il tuo sito sia un'idea geniale .. in effetti ci sono già diversi servizi che lo fanno (per quanto ne so): l'azzurro di Microsoft e qualche nodo. js hosting di siti come nodester.com, solo per citarne un paio ..

Come ho anche detto @phi, non posizionerei il repository sulle stesse cartelle che pubblichi attraverso il web server, ma ho invece un qualche tipo di procedura che ti permette di "ottenere i file" dal repository git e posizionare dove il tuo server web li utilizzerà.

Assicurati solo di pensare a tutti i dettagli .. ad esempio:

  • se hai file generati dagli utenti, quando esegui il rollback o altrimenti pubblichi di nuovo il tuo sito, devono essere sovrascritti o mantenuti sul posto?
  • se hai dati di database, quando ripubblichi il tuo sito tutto corrisponderà e sarà ok, o dovresti gestire la possibile mancata corrispondenza in qualche modo?

Potrebbero esserci altri colpevoli a cui pensare, ma l'idea generale è bella =)

    
risposta data 01.05.2013 - 18:36
fonte

Leggi altre domande sui tag