Tech

Gestire un blog con Ghost!

Un nuovo inizio sul blog con il mio progetto di hosting a microservizi, una panoramica completa su come utilizzo Ghost CMS per fare blogging.
Constantin Minov 6 min lettura
Ghost CMS - Un'architettura blog a microservizi

Nel 2016 ho avviato questo Blog su Wordpress per poi passare a Squarespace. Diciamo che l’esperienza nella progettazione e nella creazione di siti web non mi manca ma ho voluto delegare per un periodo la parte tecnica a qualcun altro.

Evidentemente Squarespace è un posto ideale per ospitare siti web con zero effort ma tuttavia, c'è molto di più che puoi fare altrove qualora non ti mancano le skills.

Spesso cerco opportunità per sfidare me stesso e crescere come persona e di recente mi sono imbattuto in questa nuova piattaforma di blogging minimalista chiamata Ghost.

Ho pensato che, in fin dei conti, potevo progettare una piattaforma a microservizi basata su ghost, portarla nel cloud e poi eventualmente trasferire il mio blog.

Ho deciso cosi di ospitare questo blog in autonomia per 3 diversi motivi:

  1. Avere il controllo sui miei dati. Come proprietario di contenuti, posso controllare se/quando vengono cancellati e sopratutto dove vengono realmente localizzati i miei dati insieme a quelli degli utenti stessi.
  2. Renderlo scalabile e modulare. Con l'aiuto dei microservizi posso scalare lungo l’asse Z, come lungo l’asse X, senza preoccuparmi di chi è il mio provider hosting di turno. Posso tranquilamente avere il deployment delle risorse in specifiche zone e regioni (volendo anche multiple).
  3. Farlo come hobby creativo. Coltivare dei progetti creativi personali è un ottimo strumento per allenarsi, sperimentare, provare nuove cose, mantenere la mente aperta e infine portarsi a casa un sentimento di gratificazione.

L'architettura

Alla fine, dopo molte riflessioni, ho deciso di ospitare il mio blog sfrutando un'architettura a microservizi basata su Docker, utilizzando un CMS chiamato Ghost facendo leva su Mysql per la banca dati e Caddy come webserver.  

Ho deciso inoltre di automatizzare questo processo e rendere l'archittettura scalabile e modulare.

Come vedremo, questo blog non è legato ad alcun vendor, paese, cloud specifico e può essere spostato in pochi minuti ovunque nel mondo a un costo molto basso o quasi nullo.

Caddy Ghost CMS Mysql
L'architettura Ghost CMS

Ed ecco qui i prerequisiti per la ricetta!!!🤩

Ghost

Ho scelto ghost come frontend perché semplice e intuitivo, gode di strumenti seo efficienti, si gestisce da solo la cache e sopratutto possiede un'interfaccia particolarmente bella, molto pulita ed ordinata.

MySQL

Come tutti i frontend, Ghost necessita di avere un servizio di database come una banca dati, ma a diferernza di altre piaffatorme, può funzionare solo con database MySQL. (In realtà supporta anche altri database ma è fuori scopo dato che vorrei tenere le cose semplici).

Caddy

Naturalmente, gli utenti devono essere in grado di raggiungere l'istanza Ghost dal wild, wild, web e per questo è assolutamente necessario configurare un web server. Qui ho scelto Caddy al posto di Nginx perché elimina le complessità associate al rilasco del SSL, il quale diciamo è diventato un aspetto fondamentale per il web dei nostri giorni. Nella mia architettura, Ghost si troverà dietro un server Caddy che fa da reverse proxy.

Docker

Ho scelto docker come motore per gestire tutti i miei container e rendere più facile e sicura la portabilità delle applicazioni insieme all’attività di deployment.

GitHub

Un approccio dichiarativo mi aiuta ad automatizzare la gestione dell'infrastruttura e della configurazione. Questo consiste di una semplice enunciazione di fatti scritti come per esempio: "installa docker, ghost, configura il database, aggiungi caddy, esegui un restore da un backup e vai in onda". L'esatta struttura del progetto viene salvata nel repository Github.

Cloud

Perché limitarsi a un unico hosting provider quando oggi, grazie al modello di cloud computing puoi utilizzare una combinazione di cloud. Facendo leva su questo concetto, posso tranquilamente avere il deployment delle risorse in specifiche zone e regioni (volendo anche multiple) su AWS, Vultr, Hetzner, Oracle Cloud, Azure, GCP, oppure qualsiasi altro cloud in qualunque angolo nel mondo.

Ghost CMS
Ghost CMS - multi cloud

Plugin o Servizi

Ogni blog ha la necessità di avere dei plugin o servizi specifici, in base alle esigenze del webmaster.

Ecco qui alcuni importanti nel mio caso ...

Uptime kuma

Uptime Kuma è un fantastico strumento di monitoraggio che utilizzo insieme a Telegram per monitorare siti Web e applicazioni in tempo reale.

Kuma / Telegram
Monitoraggio kuma / telegram

Newsletter

Ghost ha la capacità di inviare newsletter senza fare affidamento su software di terze parti e senza costi nascosti. Qui ho utilizzato MailGun, un sistema di email automation integrato direttamente nella piattaforma Ghost.

CDN

Una CDN è un'infrastruttura di rete dislocata geograficamente, con lo scopo di distribuire contenuti nel modo più rapido, economico, affidabile e sicuro. Io la uso principlalmente per tutti i file ospitati dalla media library di Ghost. Qui le scelte sono varie ma alcune delle mie preferite sono BunnyCDN e Amazon Cloudfront

BunnyCDN
Esempio setup Bunny CDN / Ghost

Analytics

Per tutelare la privacy degli utenti che visitano questo blog ho deciso di NON utlizzare Google Analytics. Il mio blog utilizza un servizio di statistica che punta in modo fermo sul rispetto della privacy ed è conforme al GDPR. I dati raccolti sono anonimi e gli utenti NON possono essere identificati. Come proprietario di contenuti, posso controllare se/quando vengono cancellati e sopratutto dove vengono realmente localizzati.

Backup

Per eseguire rapidamente copie di backup dei miei container utilizzo restic. I backup vengono sempre crittografati utilizzando l'algoritmo (AES) con una chiave a 256 bit nel mio posseso, prima ancora di essere depositati nel cloud di Backblaze in Amsterdam o Sacramento. Ho scelto questo approccio per proteggere i miei dati con restrizioni di accesso e utilizzo. Ciò significa che nessuno oltre me può leggere i dati contenuti in questi backup.

Portainer

Utilizzo portainer principalmente per avere un'iterfaccia web per gestire i container Docker nei vari cloud distribuiti. Lo trovo semplice ed intuitivo.

Portainer
Portainer

Make e Zapier

Ho usato Make e Zapier, due strumenti utili per aggiungere ulteriori funzioni dentro Ghost grazie all'integrazione di oltre 4.000 app.

Le sfide

Costruire tutto cio, non è stato proprio banale. D'altronde, i punti piu dolenti sono stati quelli che meno mi aspettavo.

La sfida più importante che ho affrontato, è stata quella relativa alla traduzione in italiano di alcune parti del CMS Ghost. Per esempio: i commenti nativi, le email transazionali e il plugin portal che trovi dietro il pulsante iscriviti. Tuttora, queste parti non sono tradotte dalla comunità di Ghost e a ogni nuovo rilascio mi tocca sistemarle.

Traduzione portal ghost in italiano

La seconda sfida che secondo me ha mi ha rubato tempo sono stati i test funzionali. Toccava ripetere i test ogni volta che apportavo delle modifiche. Tutto sommato è stato un progetto costruttivo.

Il deployment

La prima fase consiste nel decidere quale cloud scegliere. L'unico prerequisito è quello di avere un motore docker pronto con diretto accesso alla docker HUB.

I tempi di deployment in caso di disatro sono abbastanza rapidi .

Basterebbe:

  1. Scaricare il progetto da GitHub
  2. Lanciare la procedura di ricovero dal backup
  3. Eseguire i deploy sequenziale dei vari container
  4. Aggiornare il record DNS

Tutto ciò viene praticamente fatto con un solo comando, eccetto il record DNS che varia a seconda del provider scelto.

I costi

I costi medi vanno dai zero qualora decidi di fare leva sul cloud di Oracle, per arrivare ai 10 euro circa al mese sul cloud AWS per sito. Evidentemente come puoi notare, servono le skill per allestire tutto.

Parlare pero di tariffe fisse mi è molto difficile dato che i costi cloud possono variare nel tempo. Poi dipende tanto dal traffico, numero di utenti, quante newsletter vengono inviate al mese e cosi via.

Condividere è prendersi cura ❤️
Commenti
Indice dei contenuti

💌 Newsletter: Resta aggiornato!!!

Nella newsletter condivido suggerimenti pratici sulla produttività, letture consigliate📚, strumenti per migliorare l'efficienza del tuo lavoro 👨🏼‍💻, contenuti su design visivo 🧑‍🎨 e approfondimenti più importanti del mondo tech.

Ottimo! L'iscrizione è avvenuta con successo.

Bentornato! Ti sei iscritto con successo.

Ti sei iscritto con successo a Minov Blog.

Successo! Controlla la tua email per il link magico per l'accesso.

Successo! I dati di fatturazione sono stati aggiornati.

La fatturazione non è stata aggiornata.