Come distribuire un blog Ghost con Docker Come configurare un proxy inverso con Apache Come modificare la configurazione dei contenitori Docker in esecuzione Come applicare Git Commit Diffs a file diversi Come proteggere il socket TCP di Docker con TLS Come aggiornare e mantenere Git separato Filiali Cosa sono gli UUID e perché sono utili?

Logo della piattaforma di creazione di contenuti Ghost

Ghost è una popolare piattaforma di creazione di contenuti scritta in JavaScript con Node.js. Il software open source viene fornito con tutto ciò di cui hai bisogno per creare, creare temi, pubblicare e mantenere il tuo blog.

Ghost è un software open source supportato dal servizio ospitato ufficiale Ghost(Pro). Puoi installarlo sul tuo server aggiungendo Node.js e usando Ghost CLI per configurare il tuo stack. Ghost è anche disponibile come immagine Docker che raggruppa tutte le dipendenze per te.

In questa guida utilizzeremo Docker per rendere operativo rapidamente un nuovo blog Ghost. Installa Docker e Docker Compose sul tuo host prima di procedere oltre. Sebbene tu possa distribuire Ghost utilizzando solo Docker, Compose semplifica la fornitura e la gestione dei valori di configurazione necessari al tuo sito per iniziare.

Avvio di un contenitore fantasma

Puoi avviare un sito Ghost di base con un singolo comando Docker:

docker run -d -p 2368:2368 --name simple-ghost ghost:4

Questo farà apparire Ghost sulla sua porta predefinita di 2368. Visita http://localhost:2368 per visualizzare il tuo sito o http://localhost:2368/ghost per accedere al pannello di amministrazione di Ghost. Dovrai fornire alcune impostazioni di prima esecuzione per finalizzare l’installazione di Ghost e creare un account utente iniziale.

Annuncio pubblicitario

Questo approccio è ottimo per una rapida sperimentazione se stai solo provando Ghost. Tuttavia, non abbiamo ancora impostato l’archiviazione persistente, quindi i tuoi dati andranno persi quando il contenitore si fermerà.

Ecco un esempio più completo che utilizza Docker Compose per configurare Ghost con un volume Docker. Monta un volume su /var/lib/ghost/content directory per memorizzare i dati di Ghost al di fuori del contenitore.

version: "3"
services:
  ghost:
    image: ghost:4
    ports:
      - 8080:2368
    environment:
      url: https://ghost.example.com
    volumes:
      - ghost:/var/lib/ghost/content
    restart: unless-stopped
volumes:
  ghost:

Questo file Compose mostra alcune altre modifiche alla configurazione del contenitore. La porta 2368 esposta dal contenitore è mappata alla porta 8080 sul tuo host, consentendoti di utilizzare localhost:8080 per accedere a Ghost. Il criterio di riavvio viene modificato in unless-stopped per assicurarti che il tuo sito si avvii automaticamente dopo il riavvio dell’host.

Ora usa Componi per visualizzare il tuo sito:

docker-compose up -d

Configurazione di Ghost

Ghost supporta diversi parametri di configurazione per personalizzarne il funzionamento e configurare il tuo sito. Quando utilizzi Docker, puoi fornire questi valori come variabili di ambiente.

I file di configurazione di Ghost utilizzano oggetti JSON nidificati per memorizzare i valori. Puoi convertire le chiavi JSON nelle loro controparti variabili di ambiente sostituendo ogni livello dell’albero con __ (doppio trattino basso) caratteri:

# in a JSON config file
{
    "mail": {
        "transport": "SMTP"
    }
}

# as an environment variable
mail__transport=SMTP

Utilizzare il environment campo nel tuo docker-compose.yml per fornire questi parametri al tuo container Ghost:

version: "3"
services:
  ghost:
    environment:
      mail__transport: SMTP
Annuncio pubblicitario

Fare riferimento alla documentazione di Ghost per un elenco completo delle opzioni supportate. È possibile configurare un sistema di posta, utilizzare un URL separato per accedere al pannello di amministrazione, ignorare i percorsi delle directory e attivare le opzioni di privacy tramite le variabili di ambiente disponibili.

Il url l’opzione è particolarmente importante in quanto è richiesta per i siti di produzione dal vivo. Questo definisce l’URL che i visitatori esterni utilizzeranno per accedere al tuo sito. Impostalo sul nome di dominio del tuo sito nel tuo docker-compose.yml:

environment:
  url: https://ghost.example.com

Utilizzo di un database esterno

Per impostazione predefinita, Ghost utilizza un database SQLite archiviato come file nella directory dei contenuti del tuo sito. Verrà mantenuto come parte del volume Docker creato sopra. È invece possibile utilizzare un database MySQL esterno fornendo i dettagli di connessione tramite database-variabili di ambiente prefissate:

services:
  ghost:
    # ...
    environment:
      database__client: mysql
      database__connection__host: ghost_mysql
      database__connection__user: root
      database__connection__password: databasePw
      database__connection__database: ghost

  ghost_mysql:
    image: mysql:5.7
    expose:
      - 3306
    environment:
      MYSQL_DATABASE: ghost
      MYSQL_ROOT_PASSWORD: databasePw
    volumes:
      - mysql:/var/lib/mysql
    restart: unless-stopped

volumes:
  mysql:

Questo file Compose include un altro servizio che esegue MySQL in un contenitore aggiuntivo. Le variabili d’ambiente sono impostate sul servizio Ghost per fornire i dettagli della connessione MySQL. Un separato mysql il volume viene creato per rendere persistenti i file di archiviazione del database.

Compose collega automaticamente i servizi a una rete Docker. Ghost può raggiungere il ghost_mysql container utilizzando il nome del servizio come nome host. Se si desidera utilizzare un database MySQL esistente non Dockerizzato, è possibile rimuovere il file ghost_mysql definizione del servizio e fornire invece l’indirizzo IP, il nome dello schema del database e le credenziali utente del server MySQL.

Inoltro del traffico al tuo container

Ora il tuo sito Ghost dovrebbe essere operativo ma è ancora esposto sulla porta 8080. Se non eseguirai nient’altro sul tuo host, potresti invece associare la porta 80 o 443 per renderla direttamente accessibile tramite il nome di dominio del tuo server. In altre situazioni, usa un proxy inverso come NGINX per inoltrare il traffico dal web al tuo container Ghost.

Aggiungi NGINX al tuo host:

sudo apt update
sudo apt install nginx

# Allow HTTP/HTTPS traffic through the firewall
sudo ufw allow 80
sudo ufw allow 443

Definisci un host NGINX per il tuo sito in /etc/nginx/sites-available/ghost.example.com:

server {
    
    server_name ghost.example.com;
    index index.html;

    access_log /var/log/nginx/ghost_access.log
    error_log /var/log/nginx/ghost_error.log error;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Original-IP $remote_addr;
    }

}
Annuncio pubblicitario

Questo file configura NGINX a cui inoltrare il traffico ghost.example.com fino alla porta 8080 in poi localhost, che in precedenza era legato al tuo container Ghost. Abilita il nuovo file di configurazione collegandolo a NGINX sites-enabled directory:

sudo ln -s /etc/nginx/sites-available/ghost.example.com /etc/nginx/sites-enabled/ghost.example.com

Riavvia NGINX per applicare le modifiche:

sudo service nginx restart

Ora puoi configurare SSL con il servizio gratuito Let’s Encrypt. Aggiungi Let’s Encrypt’s Certbot per automatizzare l’emissione e il rinnovo dei certificati:

sudo apt install certbot

Usa Certbot per ottenere certificati per il tuo sito NGINX:

sudo certbot --nginx

Certbot leggerà i tuoi siti NGINX e genererà certificati per i loro server_name campi di configurazione. Riconfigura automaticamente NGINX per servire il certificato con il tuo sito. Ora dovresti essere in grado di accedere al tuo blog Ghost visitando il tuo nome di dominio su HTTPS.

Anche se in questo articolo ci siamo concentrati su NGINX, ci sono altre opzioni per il proxy del traffico web attraverso il tuo container Ghost. Traefik è uno dei principali contendenti che ha un supporto di prima classe per Docker. La distribuzione di un’istanza Traefik ti consente di configurare il routing e l’SSL automatico tramite le etichette Docker che avresti impostato sul tuo contenitore Ghost.

Gestione degli aggiornamenti Ghost

Puoi aggiornare Ghost sostituendo il contenitore Docker del tuo sito con uno nuovo che esegue una versione aggiornata dell’immagine Ghost. Poiché il contenuto del tuo sito è archiviato in modo sicuro in un volume Docker separato, verrà conservato quando il volume verrà ricollegato al nuovo contenitore.

Se stai taggando una versione principale dell’immagine nel tuo docker-compose.yml, ad esempio ghost:4, è possibile eseguire l’aggiornamento all’ultima versione secondaria eseguendo docker-compose up con il --pull bandiera:

docker-compose up -d --pull
Annuncio pubblicitario

Questo indica a Compose di verificare la presenza di modifiche nel tag immagine e di estrarre una versione aggiornata quando disponibile. Sostituirà i tuoi contenitori con nuove istanze utilizzando l’ultima versione dell’immagine che corrisponde al tag.

Quando vuoi cambiare il tag che stai utilizzando, aggiorna il file image riferimento nel tuo docker-compose.yml file. Ripetere docker-compose up -d per estrarre l’immagine e avviare nuovi contenitori. Ad esempio, se Ghost v5 verrà rilasciato in futuro, potresti cambiare il tuo docker-compose.yml a image: ghost:5 per passare alla nuova versione principale.

Docker semplifica l’ottenimento degli aggiornamenti Ghost estraendo l’ultima immagine e sostituendo i contenitori. Tuttavia, dovresti comunque prestare attenzione alle modifiche che stai applicando. Consulta il registro delle modifiche di Ghost prima di eseguire un aggiornamento importante nel caso in cui sia necessario eseguire ulteriori passaggi per completare la migrazione.

Usando ghost-cli

ghost-cli è disponibile all’interno dell’immagine Ghost Docker. Questa utilità viene utilizzata per configurare e mantenere Ghost quando è installato in ambienti tradizionali non containerizzati.

Puoi accedere ghost-cli tramite Docker utilizzando il ghost comando con docker exec. Ecco un esempio che utilizza il version sottocomando per rivelare la versione Ghost che stai usando:

docker exec -it my-ghost-container ghost version

Anche se molti ghost-cli i componenti funzioneranno, alcuni non sono supportati negli ambienti Dockerizzati. Comandi come install, setup, update, e uninstall sono rotti, privi di significato o contrari alle migliori pratiche se utilizzati con l’immagine Docker di Ghost. Ghost e tutte le sue dipendenze sono integrate nell’immagine e non devono essere “installate”; gli aggiornamenti devono essere applicati avviando un nuovo contenitore, come mostrato sopra.

Riepilogo

Ghost è una moderna piattaforma di blogging che offre una dashboard pulita, ricche capacità di creazione di contenuti e temi avanzati e supporto per la personalizzazione. L’uso di Docker per ospitare Ghost semplifica la procedura di configurazione, riduce il numero di pacchetti del sistema operativo necessari e aiuta a rendere il tuo sito più portatile in tutti gli ambienti.

Annuncio pubblicitario

Una volta che il tuo blog Dockerized è operativo, utilizza la documentazione di sviluppo Ghost standard per gestire il tuo sito e il suo contenuto. Puoi configurare abbonamenti, newsletter, temi personalizzati e integrazioni API utilizzando le funzionalità integrate della piattaforma.

Articoli correlati

Ultimi articoli