C'era una volta, c'era un file. Era sul tuo computer e volevi farlo su un server.
Vi siete mai chiesti perché ci sono così tanti modi per farlo? Spiegheremo alcune delle basi della distribuzione in questo articolo in modo da capire quando usare cosa. Iniziamo!
FTP, o File Transfer Protocol, è considerato da molte persone il modo in cui la vecchia scuola "mette su un sito". È un protocollo, che in pratica significa che esistono un insieme di regole che sia il computer locale che la macchina host concordano e possono inviare messaggi. FTP non è un "programma" di per sé, ma piuttosto come una linea telefonica.
Quindi, se l'FTP è una linea telefonica vecchia scuola (che funziona ancora bene), l'SFTP è come una rete 4G
Offre un nuovo protocollo per le due macchine per parlare (non che sia necessariamente più veloce, comunque). SFTP è alimentato da SSH, che essenzialmente crittografa i messaggi che vengono passati tra le due macchine; quindi qualsiasi rete malintenzionata di terze parti o non attendibile non può ottenere una sospensione dei dati non elaborati durante il trasferimento.
Se non l'hai capito, FTP e SFTP sono entrambi protocolli di trasferimento file. Tuttavia, SFTP (e altri protocolli di trasferimento basati su SSH) trasferisce i file e crittografa il trasferimento. "Non ho bisogno di crittografia", si potrebbe dire. Molte persone pensano allo stesso modo; tuttavia, gli sviluppatori lungimiranti e gli strumenti moderni si orienteranno verso metodi più sicuri. L'hai già sentito prima - Meglio prevenire che curare.
Ma non ho voglia di affrontare il problema.
Prima di tutto, se questo è il tuo lavoro, succhialo. Puoi stare con la tua zona di comfort (sai, l'FTP funziona ancora, proprio come il tuo telefono fisso). Ma non vuoi migliorare? Dopotutto, è per questo che sei qui, giusto?
Ora, se sei ancora un po 'pigro ma come l'idea di una facile adozione, puoi utilizzare SFTP con quasi tutti i client FTP. È più sicuro Assicurati che il tuo server supporti SSH (la porta 22, in genere, deve essere aperta) e dovresti essere a posto. Ma il punto di questo articolo non è quello di farti pensare a crittografia e sicurezza di trasferimento; è per farti pensare a una strategia di implementazione più solida.
"Ma non ho voglia di passare attraverso il guaio." ... se questo è il tuo lavoro, succhialo
Se hai sviluppato per un po 'di tempo, probabilmente hai seguito la creazione di un sito e trascinando e rilasciando i tuoi file sul tuo client FTP (o facendo doppio clic o premendo "sync" o ...). Questo è tecnicamente una strategia di implementazione, anche se non molto robusta. Certo, un sacco di volte questo tipo di strategia funzionerà bene, specialmente se sei l'unica persona che potrà mai toccare i file, e non hai magicamente mai sovrascritto o cancellato un file importante. Ma, ancora, sei qui per stare meglio, vero? E tu sei un mago.
Distribuzione, nella sua forma più semplice, sta prendendo del codice e rendendolo codice "live". Con il trasferimento di un index.html
file nella directory di servizio, si sta distribuendo. Infatti, alla fine della giornata, tutte le strategie di implementazione (a meno che non si stia utilizzando un sistema di app compilato) essenzialmente spostano file o versioni di file nella "directory di lavoro corrente", o cambiano quelli che sono già presenti. Ad esempio, potresti apportare modifiche allo stesso modo index.html
file direttamente sul server, e questo sarebbe effettivamente "distribuire" quelle modifiche al pubblico. Ma l'implementazione può essere molto di più.
Il tuo team ha mai installato un sistema che richiede di avvisare tutti quando hai inviato un file sul server tramite FTP? O forse devi riavviare un server Django o Rails dopo aver cambiato il codice. Se lo fai come parte della routine di far riflettere il tuo sito sulle modifiche che hai apportato, fa parte del processo di implementazione.
Quindi, se l'implementazione implica la realizzazione di un certo insieme di codice e file, come può esserci molto più di SFTP? "Cos'è Git, e perché dovrebbe interessarti?" stai chiedendo Git è un sistema di controllo della versione o VCS. È uno dei tanti VCS che abbiamo scelto spudoratamente come nostro preferito. Spiegheremo perché dopo, ma prima parliamo che cosa è.
I sistemi di controllo delle versioni svolgono molti compiti, ma il più importante è fornire una rete di sicurezza agli sviluppatori, in particolare ai team di sviluppo. Abbiamo già detto prima che FTP e SFTP possono essere perfettamente a posto se sei perfetto e non sovrascriveresti mai un file o eliminerai involontariamente una cartella importante. Ma se non l'hai ancora fatto, non ti preoccupare - succederà prima o poi. È quasi certo che sia successo alla tua squadra se non hai trovato un sistema di soluzione. Ma anche quei sistemi di workaround sono un dolore. Ad esempio, la tua directory CSS è mai stata così?
Se è così, stai mantenendo versioni di fogli di stile che alla fine lo farai fondersi insieme. Per inciso, Git fa questo, ma lo fa molto meglio, più veloce e più robusto di quanto tu possa fare da solo. Mantieni un file CSS diverso ogni volta che apporti alcune modifiche? Nel caso in cui vuoi tornare esattamente a come quel file si trovava ad un certo punto nel tempo? Certo che no. Ma Git farà esattamente questo per te, e non hai un casino di file sparpagliati e oscuri sistemi di denominazione ovunque. Oltre a questo, Git è abbastanza intelligente da sapere come prendere il tuo styles.css
archiviare e unirlo con Mary o John's styles.css
file. Inoltre, le versioni di Git sono non interi file; invece, sono memorizzati in delta, che è essenzialmente una rappresentazione in codice di basso livello delle differenze tra un file e un altro file. Ciò significa che diverse versioni sono molto più piccole e molto più veloci da trasferire quando arriva il momento di distribuirle.
Ma niente di tutto questo ha nulla a che fare con l'implementazione, tu dici? Hai ragione, i sistemi di controllo delle versioni in gran parte fanno semplicemente quello che suggerisce il loro nome: mantieni le versioni in ordine. Ma hanno anche la capacità di comunicare attraverso i diversi protocolli che abbiamo discusso prima. Git può leggere tramite HTTP e leggere e scrivere tramite SSH. (Leggi di più sui protocolli di trasferimento qui.)
Quindi, se Git ha queste connessioni dirette attraverso i protocolli di trasferimento, puoi spingere le versioni avanti e indietro con il tuo team attraverso un server locale, GitHub o il tuo server live. Ed è così che Git si inserisce nella distribuzione. Spingi il tuo codice, Mary e John spingono il loro codice, quindi chiunque si occupi della distribuzione sul tuo team accederà al server e unirà il codice nell'ambiente live. Git offre la possibilità di avere più destinazioni e rami di codice per spingere versioni diverse in luoghi diversi. Una pratica comune è quella di disporre di un server di "staging", in cui viene spinto il codice per controllarlo in un ambiente live su un dominio di sviluppo privato. Un altro flusso di lavoro possibile è quello di non collegare mai i repository locali della tua squadra al repository live e consentire al dispositivo di staging solo la possibilità di inviare al server live. Questo crea un sistema per la revisione che non può essere saltato.
Diverse versioni sono molto più piccole e molto più veloci da trasferire, quando arriva il momento di distribuirle.
Oltre a staging, branch, destinazioni multiple di implementazione e controllo robusto della versione, Git offre hook, come "post-receive", in grado di eseguire qualsiasi tipo di azione che è possibile organizzare. Forse vuoi un ramo "spider", dove quando il codice arriva in un punto del tuo server, il post riceve lo spinge su più postazioni (remote o in altro modo). Inoltre, utilizzando una piattaforma come GitHub offre una grande interfaccia grafica per la creazione di ganci. Comunichi facilmente a GitHub di inviarti email (o se sei creativo, collega una notifica Growl) ogni volta che ricevi una spinta da un membro del team, ad esempio.
Ci sono letteralmente migliaia di modi per sviluppare una strategia di distribuzione con Git. È possibile vedere rapidamente che l'utilizzo di VCS per la distribuzione offre alcuni vantaggi, protezione e potenza molto estesi alla distribuzione. Una volta che hai preso il tempo di imparare abbastanza cose su Git per ottenere un flusso di lavoro (e fare qualche errore con esso), il tuo processo di sviluppo trarrà un enorme beneficio.
I seguenti comandi configureranno un repository su una macchina remota, installeranno un repository sul tuo computer locale, aggiungendo il repository remoto come "origine", esegui il checkout di un ramo chiamato "mybranch" che verrà unito al server, spingerà "mybranch" al telecomando, "origine", e infine riaccede al server per unire "mybranch" con il ramo "master" predefinito.
local> ssh nomeutente@remotemachine.com remote> percorso cd / per / progetto remoto / percorso / progetto /> git init remoto / percorso / progetto /> uscita locale> percorso cd / per / locale / progetto locale / percorso / per / local / project> git init local / path / to / local / project> git add. local / percorso / to / local / progetto> git commit -m "initial commit" local / percorso / to / local / project> git checkout mybranch local / percorso / to / local / project> git remote add origine nomeutente@remotemachine.com : percorso / a / progetto locale / percorso / a / locale / progetto> git push origine mybranch local / percorso / a / local / progetto> ssh nomeutente@remotemachine.com remoto> percorso cd / a / progetto remoto / percorso / a / progetto> git unire mybranch
Oltre a creare il proprio flusso di lavoro basato su Git e integrarlo nel proprio server, è possibile utilizzare altri servizi gratuiti, come Heroku ;. Heroku è una soluzione di hosting che ti consente di eseguire poche righe dalla tua app controllata da Git e di distribuirla sul "cloud" (in questo caso, un cluster remoto di server Linux) su Git senza quasi nessuno sforzo. Prenditi qualche minuto per configurare alcune cose e sei pronto per le gare con solo poche righe di codice per una semplice implementazione. Seriamente, sembra qualcosa del genere.
# fai un po 'di lavoro, mantieni la versione controllata con Git ... poi> heroku crea --stack cedar # the --stack cedar fondamentalmente ti permette di creare diversi tipi di app, incluso PHP e Node # ... Heroku ti dirà che sta creando cose , quindi ti dirà che ha aggiunto un telecomando Heroku al tuo repository git> git push heroku master # e il gioco è fatto! Apri l'app distribuita nel tuo browser> heroku open
Altri strumenti simili includono Pagoda Box, che è focalizzato su architetture basate su LAMP, e AppFog e PHPFog, che è molto simile a Heroku.
Finché non ci sono errori nella tua configurazione e hai seguito le linee guida di Heroku su come configurare le app, puoi avere le app Rails, PHP o Node attive e funzionanti in pochi istanti. Oh, e abbiamo detto che puoi creare semplici app di Heroku gratuitamente? Solo dopo aver effettuato l'upgrade a più istanze o memoria, o aver bisogno di aggiungere un database, si dovranno sostenere oneri da Heroku. Altri strumenti simili includono Pagoda Box, che è focalizzato su architetture basate su LAMP, e AppFog e PHPFog, che è molto simile a Heroku. Queste opzioni offrono servizi simili e integrazione Git, con diverse strutture di prezzo. Tutti e tre offrono un'opzione gratuita per la potenza limitata del server. Questi sono chiaramente grandi vantaggi, in quanto richiede un notevole investimento in termini di tempo per ottenere il proprio server configurato con architetture applicative più coinvolte come Rails o Node. Oltre a ciò, il ridimensionamento diventa molto semplice, in quanto tutti e tre questi servizi offrono il bilanciamento del carico e il ridimensionamento su più istanze con un clic di un pulsante. Questi servizi si prendono cura dell'amministrazione del server pesante per te, quindi puoi concentrarti sulla creazione di app, sapendo che esiste una strategia di implementazione ben documentata, sicura e veloce da utilizzare quando sei pronto per la pubblicazione.
Si spera che questo articolo abbia rimosso una certa confusione circa le differenze tra Git (e altri VCS) e FTP / SFTP e che cosa significa il concetto di implementazione. Inoltre, spero che ciò ti abbia incoraggiato a sviluppare la tua strategia di implementazione, con l'assistenza di strumenti come Git e Heroku. Se hai già una strategia, che tipo di cose fai durante la distribuzione?