GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

7 suggerimenti utili per l'hosting automatico di un'istanza Ghost con Docker

Ghost è una piattaforma CMS open source leggera, veloce e incentrata sulla creazione di un sito Web per i membri.

Puoi sempre optare per l'hosting gestito da Ghost stesso. Ma poiché si tratta di un software open source, sei anche libero di ospitarlo sul tuo server e gestirlo tu stesso.

Grazie a servizi cloud come Linode e DigitalOcean, implementare un nuovo server Linux con Ghost installato diventa questione di pochi click.

linode | The Independent Open Cloud for DevelopersLa nostra missione è accelerare l'innovazione rendendo il cloud computing semplice, conveniente e accessibile a tutti. Linode

Sebbene la distribuzione di Ghost sui server cloud sia un'attività relativamente più semplice, la gestione di Ghost potrebbe non essere sempre così facile.

Gestiamo la nostra istanza Ghost per ospitare Linux Handbook da diversi mesi ormai. E questa esperienza ci ha insegnato diverse cose che probabilmente non troverai nella documentazione ufficiale di Ghost.

In questo articolo parlerò di alcuni fattori cruciali da considerare prima di distribuire il tuo blog basato su Ghost sui server di produzione.

Tieni presente che questo articolo riguarda l'immagine Docker di Ghost, creata e gestita dalla comunità di sviluppatori.

Nella community DevOps, ciò per cui ci sforziamo sempre è di avvicinarci il più possibile a uno stato chiamato NoOps. Ma in senso pratico resterà sempre un paradosso.

Qui stiamo cercando di raggiungere lo stesso obiettivo di NoOps ma con una prospettiva ibrida con l'intervento umano ogni volta che è necessario.

Quindi, senza ulteriori indugi, consentitemi di arruolare e descrivere gli elementi essenziali per garantire un'istanza Ghost stabile e con manutenzione minima.

1. Imposta correttamente la configurazione della tua posta

Seguirai i tipi di email ai tuoi membri e abbonati tramite la tua istanza Ghost:

  • E-mail transazionali:per gli accessi dei membri, la conferma dell'iscrizione ecc.
  • E-mail in blocco:per l'invio di newsletter via e-mail tramite Ghost

Se non desideri inviare newsletter tramite Ghost, puoi utilizzare qualsiasi servizio SMTP. Altrimenti, devi usare Mailgun.

Impostazioni SMTP per e-mail transazionali

In teoria, la tua istanza Ghost dovrebbe essere in grado di utilizzare il servizio di posta diretta grazie a Nodemailer.

Tuttavia, ciò potrebbe comportare la mancata riuscita di alcune registrazioni con il messaggio di errore "Inserisci un indirizzo email valido".

Questo è il motivo per cui è necessario configurare le impostazioni SMTP con Mailgun o Amazon SES. Puoi anche provare altri servizi di inoltro e-mail come SendGrid o Mailchimp.

Un'impostazione SMTP tipica, configurata tramite Mailgun è la seguente (impostata tramite un file montato su bind config.production.json ):

  "mail": {
    "transport": "SMTP",
    "options": {
        "service": "Mailgun",
        "host": "smtp.eu.mailgun.org",
        "port": 465,
        "secureConnection": true,
        "auth": {
            "user": "replace-me-with-a-mailgun-configured-email-address",
            "pass": "replace-me-with-the-relevant-mailgun-apikey"
        }
    }
  },

Tieni d'occhio il numero della porta SMTP . A volte le e-mail non riescono a causa del numero di porta. Nel nostro caso, alcune email non funzionavano con la porta 587 e hanno iniziato a funzionare con la porta 465.

Si prega di controllare questa documentazione di Mailgun qui per informazioni complete sulla verifica del dominio e sull'aggiornamento dei record DNS necessari che sono richiesti anche per l'invio di e-mail.

In generale, devi aggiornare i record MX, CNAME e TXT ottenuti da Mailgun all'interno delle impostazioni del record DNS sul pannello del tuo nome di dominio. Su Linode sembrano:

Email in blocco per l'invio di newsletter

Per inviare newsletter in blocco ai tuoi membri, Mailgun è l'unico servizio disponibile disponibile per implementarlo all'interno della tua configurazione Ghost. I servizi di posta elettronica in blocco sono molto diversi dai servizi SMTP convenzionali.

Per configurare correttamente l'e-mail di massa su Ghost per i tuoi membri, devi prima assicurarti che le iscrizioni siano abilitate. Questo è un requisito ovvio.

Ora scorri verso il basso fino alla sezione e-mail ed espandi "Impostazioni newsletter e-mail".

Immettere il nome di dominio configurato di Mailgun e la chiave API. La regione di Mailgun sarebbe "UE" o "USA". Si prega di scegliere quello appropriato.

Se ricordi da sopra nell'esempio delle impostazioni SMTP, il nome della regione, "EU" può essere percepito con il nome dell'host, che è smtp.eu.mailgun.org .

Leggi qui per ulteriori informazioni sul nome di dominio configurato di Mailgun e sulla chiave API. Per selezionare i nomi di dominio, controlla qui.

2. Scegli MySQL o MariaDB per il database invece di SQLite

Se il tuo blog Ghost è pianificato per l'utilizzo in produzione, ti consiglio di non utilizzare il database SQLite fornito di default all'interno del Ghost Container.

Il motivo per utilizzare il Database consigliato come MySQL o MariaDB è estremamente cruciale quando si dispone di un numero consistente di membri e si desidera inviare loro newsletter via email da Ghost stesso.

L'abbiamo imparato nel modo più duro. Inizialmente, utilizzavamo MailerLite per creare e inviare la newsletter. Quindi abbiamo deciso di sfruttare la funzione di newsletter integrata di Ghost.

A questo punto abbiamo circa 1.100 membri. E questo ha creato un problema poiché SQLite non poteva gestire queste molte query alla volta. Impossibile inviare il post appena creato. I log hanno mostrato questo errore:

Processed job threw an unhandled error
"The email service was unable to send an email batch."

Error ID:
    24bf8000-4f50-11eb-adf5-73dcc562a630

Error Code: 
    SQLITE_ERROR

Non era questo. Si rifiutò persino di esportare 1100 membri. Il download semplicemente non si avvia. Abbiamo scaricato l'intero backup in formato JSON e da lì abbiamo estratto le informazioni sui membri.

Per risolvere questo problema, migra da SQLite a MySQL o MariaDB che diventerebbe un sovraccarico non necessario e comporterebbe tempi di inattività potenzialmente indesiderati durante la migrazione che potrebbero anche durare un periodo di tempo indefinito. Quindi, è sempre meglio distribuire inizialmente Ghost con MySQL o MariaDB come pratica preventiva.

Di seguito è riportato un esempio di una tipica configurazione del servizio di database MariaDB per Ghost su Docker Compose:

    db:
        image: mariadb:10.5.3
        volumes:
            - ghostdb:/var/lib/mysql
        restart: on-failure
        environment:
            MYSQL_RANDOM_ROOT_PASSWORD: 1
            MYSQL_USER: rename-me
            MYSQL_PASSWORD: replace-me
            MYSQL_DATABASE: rename-me

3. Abilita la rotazione del registro

La rotazione del registro è il processo di ripristino automatico dei file di registro dopo un periodo di tempo desiderato. Questo aiuta a evitare la creazione di enormi file di registro che si accumulano e invadono inutilmente lo spazio su disco del server. In pratica, se non includi il seguente snippet nella tua configurazione di Ghost, i file di registro si accumulano a dimensioni enormi comprese tra 15-20 GB!:

  "logging": {
    "path": "content/logs/",
    "level": "info",
    "rotation": {
      "enabled": true,
      "count": 15,
      "period": "1d"
  },

Per una panoramica dettagliata sull'accesso a Ghost, puoi visitare la relativa pagina della documentazione.

3. Usa il proxy inverso

È sempre un ulteriore vantaggio utilizzare un proxy inverso fin dall'inizio, prima di implementare Ghost. Semplifica molto la gestione delle tue applicazioni web sia a breve che a lungo termine.

Come utilizzare il proxy inverso Nginx con più app DockerScopri come distribuire più servizi Web sullo stesso server utilizzando il proxy inverso Nginx e i contenitori Docker. Linux HandbookDebdut Chakraborty

4. Aggiorna Ghost senza tempi di inattività

Se utilizzi il proxy inverso, aggiornare la tua istanza Ghost senza tempi di inattività sarà un lavoro facile.

Ecco cosa ti consiglio. Configura Docker Notification in modo da ricevere una notifica di una nuova immagine Docker dell'istanza Ghost (con l'ultima versione di Ghost).

Quindi puoi seguire questo tutorial per aggiornare il tuo contenitore Docker.

Aggiornamento dei container Docker senza tempi di inattività Una metodologia passo passo che può essere molto utile nelle attività DevOps quotidiane senza sacrificare l'inestimabile tempo di attività. Manuale LinuxAvimanyu Bandyopadhyay

Fortunatamente, non ci sono assolutamente tempi di inattività quando si esegue l'aggiornamento. Se hai già effettuato l'accesso al pannello di amministrazione (diciamo mentre scrivi un articolo), non noterai alcuna anomalia.

Tuttavia, se non hai effettuato l'accesso, fino a quando non rimuovi il contenitore precedente dopo l'aggiornamento, il pannello di amministrazione continuerà a tentare di caricarsi se provi un nuovo accesso.

Ma dal punto di vista della produzione, il blog Ghost stesso continuerebbe a essere disponibile nel front-end anche mentre esegui l'aggiornamento.

6. Imposta sempre una politica di riavvio

Poiché stai utilizzando un contenitore Ghost Docker, è sempre molto importante e necessario specificare una politica di riavvio all'interno della tua configurazione. Ciò garantisce che il tuo container Ghost si riavvii sempre da solo ogni volta che il tuo server fisico è stato riavviato a causa di qualsiasi evento di manutenzione.

Se la configurazione Docker generica ha abilitato il ripristino in tempo reale, si consiglia di utilizzare il on-failure politica di riavvio. Per avere una migliore comprensione delle politiche di riavvio, controlla la documentazione ufficiale per un riferimento completo su tali politiche.

In genere, imposti tale criterio di riavvio all'interno del servizio del file Docker Compose come:

restart: on-failure
Criterio di riavvio di Docker [spiegato con esempi]L'utilizzo di un criterio di riavvio può essere estremamente utile per riavviare automaticamente i contenitori in determinati eventi o errori. Manuale LinuxAbhishek Prakash

7. Usa volumi Docker esterni

Se utilizzi volumi che sono stati creati manualmente prima di distribuire Ghost, semplifica la migrazione del contenuto (all'interno dello stesso server o di un altro) se necessario in futuro. Ti dà un maggiore controllo sui tuoi dati poiché sei tu a creare e specificare il volume per l'uso da parte del contenitore Ghost. Altrimenti, dovresti lasciarlo su Docker Compose per crearlo localmente.

Per creare un volume Docker esterno per il contenitore Ghost, utilizzare il comando seguente:

docker volume create ghost

Dove ghost è il nome del tuo volume Docker Ghost esterno.

Visto che ho già detto di optare per un database MySQL o MariaDB per garantire prestazioni migliori con migliaia di utenti, anche il suo volume deve essere creato allo stesso modo:

docker volume create ghostdb

Dove ghostdb è il nome del tuo volume Docker Ghost Database esterno.

Per indicare a Docker Compose di utilizzare questi volumi specifici che hai appena creato sopra, la nostra sezione dei volumi nel file Docker Compose deve essere simile a:

volumes:
  ghost:
    external: true
  ghostdb:
    external: true

Nota come ho specificato che questi volumi Docker sono di natura esterna.

Suggerimento bonus:pianifica backup regolari

Se stai utilizzando Linode, Digital Ocean o qualsiasi altro provider di server cloud simile, ti consigliamo vivamente di abilitare sempre i backup quando crei il tuo server per distribuire Ghost.

Ad esempio, quando crei un server con 1 GB di RAM (chiamato nanode) su Linode, troverai una casella di controllo che chiede di abilitare i backup. Ogni volta che distribuisci un server di produzione, ti consiglio sempre di abilitarlo prima di procedere all'avvio effettivo del server per il primo avvio.

Inoltre, puoi distribuire uno script sul server basato su un crontab per acquisire manualmente un'istantanea dei tuoi volumi Docker esterni per Ghost.

Tecnicamente, i dati di volume discussi nel precedente puntatore 7, in particolare ghost e ghostdb , risiedi localmente in /var/lib/docker/volumes/ghost/_data e /var/lib/docker/volumes/ghostdb/_data rispettivamente. Per archiviarli in modo efficace, puoi utilizzare tar per eseguire il backup di queste due directory su base periodica.

Dal momento che ora sapresti quando questi tar gli archivi sarebbero prontamente disponibili dopo l'archiviazione, puoi anche distribuire un altro script sul tuo sistema locale (che si presume sia in esecuzione in tempo reale a un'ora specifica su base giornaliera a casa o in ufficio) per accedere al server Ghost e recuperare quegli archivi. In questo modo, avresti sempre a disposizione una copia locale aggiornata del tuo blog Ghost, indipendentemente da qualsiasi accesso a Internet.

In alternativa, puoi anche utilizzare l'approccio del backup logico per eseguire il backup del database MySQL con il comando database mysqldump. Su MariaDB, il comando si chiama mariadb-dump che non è altro che un collegamento simbolico allo stesso mysqldump comando.

Un eccellente confronto tra backup fisici e logici può essere trovato qui.

Doma il fantasma

Si trattava di una raccolta di alcuni approcci diversi per ridurre al minimo e impedire che si verificassero potenziali problemi di manutenzione dopo aver distribuito l'istanza Ghost. Spero che ti sia utile ogni volta che avvii o utilizzi il tuo blog su Ghost.

Continueremo il nostro viaggio con Ghost e se dovessimo riscontrare altri problemi che avrebbero potuto essere evitati con una configurazione diversa al momento della distribuzione, aggiorneremo questo articolo.

Se hai suggerimenti in merito ai suggerimenti sopra discussi o ne hai di nuovi, condividili con noi nella sezione conversazione qui sotto. Saremmo lieti di leggere e saperne di più su di te.


Docker
  1. 3 consigli per la stampa con Linux

  2. Rendi la cronologia di Bash più utile con questi suggerimenti

  3. 4 suggerimenti per ottenere un parente più anziano online con Linux

  4. 5 suggerimenti per iniziare con la sicurezza del server Linux

  5. Come installare Jenkins con Docker

Consigli/trucchi utili per Meld per utenti intermedi

Guida Docker:distribuzione di Ghost Blog con MySQL e Traefik con Docker

5 consigli per configurare virtualenvs con Ansible Tower

Come scansionare le immagini del contenitore Docker per le vulnerabilità con Trivy

Come automatizzare gli audit di sicurezza Docker con Docker Bench per la sicurezza

Guida completa all'hosting automatico di Ghost CMS con Docker