La scorsa volta abbiamo analizzato i passaggi per installare sul server dove girerà il nostro sito il cosiddetto boilerplate, ovvero la base standard su cui costruiremo il resto dell’architettura. Il filo conduttore, come dicevo, è rappresentato da Git, un sofisticato sistema che consente di tener traccia delle varie modifiche al codice, oramai ampiamente disponibile su vari servizi hosting di un certo livello. Se mi permetti una piccola marchetta, ti consiglio di provare SupportHost, che offre tutti gli strumenti di cui parlerò in questa guida. Il tassello del puzzle di oggi riguarda la gestione di temi e plugin. Supponiamo che tu abbia già un sito basato su WordPress: di sicuro avrai una manciata di plugin ed almeno un tema che vorrai cominciare a versionare. La prima cosa da fare è creare un profilo su una delle piattaforme Git esistenti sul mercato, ad esempio GitHub. Qui conserveremo tutto il nostro codice, anche se alcuni plugin e temi offrono accesso ai loro repository, credo sia più saggio crearne uno indipendente, in caso decidano di cambiare idea (come mi è capitato già un paio di volte).
Non mi addentrerò nei dettagli di come impostare il proprio account GitHub, incluse le chiavi SSH: esistono già tante guide in proposito (eccone una a caso), quindi ti consiglio di farti un giro su Google, oppure di lasciare un commento qui sotto se hai delle domande specifiche in merito. Imposta GitHub in modo tale che tu possa inviare codice sia dalla macchina virtuale (alla quale ti puoi collegare tramite terminale con vagrant ssh
, una volta posizionatoti nella cartella dove hai l’hai installata), che dal server del tuo provider. In quest’ultimo caso, la chiave è necessaria perché si assume che i repository remoti siano tutti o in parte privati (ad esempio se devi versionare un plugin a pagamento). Nota che in fase d’installazione, la macchina virtuale ha già una chiave pubblica-privata nella cartella .ssh
della tua home, quindi non ti serve generarne una nuova.
Fai un inventario di tutti i temi e plugin che stai usando, e crea un repository privato per ognuno di essi. Se l’autore mette a disposizione un repository pubblico, potresti farne un fork sul tuo account ed usare quello (insieme al versionamento triangolare), ma personalmente preferisco mantenere la procedura quanto più semplice possibile. Ricorda che temi e plugin vanno aggiunti alla cartella content
nella document root del sito, non in wp/wp-content
. Se hai già le cartelle del tema e dei plugin che ti servono, copiale al posto giusto. Alternativamente, usiamo il terminale per installarli nella tua macchina virtuale. Ti basterà trovare il cosiddetto slug per ognuno di essi e, dopo esserti posizionato nella cartella principale del sito, digitare:
wp plugin install plugin-slug
Installa tutto quello che ti serve e quando hai finito, sempre dal terminale, entra nella cartella di ogni plugin/tema ed inizializza il suo repository Git locale:
git init .
Poi copia la stringa di connessione da GitHub (che assomiglia a git@github.com:utente/repo.git
) ed impostala nel repo locale:
git remote add origin git@github.com:utente/repo.git
Imposta le tue credenziali di collegamento:
git config --local user.name "Il tuo nome"
git config --local user.email "latua@email.it"
Ed aggiungi il codice al repo:
git add .
git commit -m "Version x.xx"
git tag x.xx
dove ovviamente metterai la vera versione del plugin su cui stai lavorando, al posto di x.xx. Infine salva il tutto su GitHub:
git push -u origin master; git push --tags
Ripeti queste operazioni per ogni tema e plugin che usi nel tuo sito. Non preoccuparti, tutto questo lavoro va fatto una volta sola: un comodo script incluso con la macchina virtuale che abbiamo installato in precedenza, rende la gestione degli aggiornamenti facile e veloce. Ora collegati via terminale al server remoto, e clona tutti i repository nelle apposite cartelle plugins
e themes
, usando un comando simile a:
git clone git@github.com:utente/repo.git
(niente punto alla fine)
Credo che tu possa già intravedere il flusso delle operazioni a questo punto: gli aggiornamenti si fanno sulla macchina virtuale, e poi si “tirano giù” dal repository al server remoto. Supponiamo ad esempio che il plugin Elementor (slug: elementor
) abbia rilasciato un aggiornamento. Collegati alla tua macchina virtuale con il terminale, posizionati nella document root di WordPress e digita:
wp-update plugin elementor
Questo comando si occuperà di scaricare l’aggiornamento, fare il commit e conservarlo su GitHub, con l’apposito tag che ne indica la versione. Il comando funziona in genere anche con i plugin a pagamento, se implementano il sistema standard di gestione degli aggiornamenti. Verificato che tutto funzioni a dovere, collegati al terminale del server remoto, posizionati nella cartella di Elementor e digita:
git pull
Se noti qualcosa di strano e vuoi tornare indietro nel tempo alla versione precedente, ti basterà fare un
git checkout -b versione_precedente tags/versione_precedente
Alcune considerazioni prima di concludere:
- Nella maggior parte dei casi, se tutto va bene sulla macchina virtuale, c’è una buona probabilità che sarà lo stesso sul server remoto. Comunque, per avere il massimo della tranquillità, ti suggerisco di creare un clone del tuo sito, raggiungibile ad esempio all’indirizzo test.ilmiosito.it. Molti provider offrono comodi pulsanti nel loro cPanel per impostare il sito copia, e per trasferire i dati dall’uno all’altro con poco sforzo. A questo punto, invece che “tirare giù” il codice dal repo al sito vero, prima lo installi sul clone, sincronizzando tutti i contenuti dal sito vero se necessario. Così avrai la certezza che i due siti sono identici in termini di versione di PHP, Apache e via dicendo, e se qualcosa funziona sul clone, allora funzionerà sul sito vero;
- Per tenere sincronizzati i contenuti io uso WP Migrate DB Pro, che si occupa di fare il lavoro sporco con un paio di click. Questo plugin sincronizza non solo i contenuti, ma anche tutta la libreria di immagini e documenti, cambia le URL dove necessario, e tanto altro. Non riesce a fare un merge dei dati sfortunatamente, ma questo non è un problema nella maggior parte dei casi;
- Se ci sono dei temi o plugin che usi in tutte le tue installazioni, puoi fare una fork del mio repository e dichiararli come sottomoduli modificando il file
.gitmodule
incluso. In quel modo non dovrai fare tutto il lavoro che abbiamo visto qui sopra per aggiungere plugin alla tua ricetta; - Tutto bello, diranno alcuni dei miei piccoli lettori, ma come risolvi il problema di versionare la base di dati? Beh, puoi dormire sonni tranquilli, se questo è il tuo cruccio. In una delle puntate successive ti mostrerò uno script che fa al caso tuo.
Qualcuno potrebbe storcere il naso nel notare che, disattivando gli aggiornamenti automatici di WordPress, l’amministratore del sito deve essere sempre vigile e non farsi scappare nulla. Questo è vero, ma se proprio sei pigro e non t’importa se il tuo sito non funziona a causa di un aggiornamento automatico andato male, puoi sempre creare un task ricorrente tramite cron che scarica tutti gli aggiornamenti sulla tua macchina virtuale una o due volte al giorno (lo script wp-update
accetta il parametro all
invece che lo slug del plugin), e poi un altro task sul server che aggiorna tutti i repo qualche minuto dopo.
Ora che tutto è versionato, la prossima volta aggiusteremo i permessi dei file, per prevenire che malintenzionati possano infilarvi qualcosa a nostra insaputa.