GNU/Linux >> Linux Esercitazione >  >> Linux

Guida completa all'hosting automatico di Ghost CMS con Docker

Ghost è un sistema di gestione dei contenuti open source adatto per blog, newsletter o siti Web di appartenenza.

È superveloce e ottimizzato per la SEO. Lo adoriamo qui su Linux Handbook. Il nostro sito Web utilizza Ghost, ovviamente.

Ora puoi optare per un'istanza Ghost gestita dai creatori di Ghost stesso. Ti costerebbe molto ma non dovrai impegnarti a implementare Ghost, aggiornarlo e mantenerlo. E, naturalmente, aiuta lo sviluppo del progetto Ghost.

Se vuoi evitare di spendere molto o prendere in mano la situazione con un approccio "fai da te", puoi ospitare autonomamente Ghost sul tuo server.

In questo tutorial, ti mostrerò i passaggi per distribuire Ghost con Docker.

Ghosting autonomo con Docker

Ecco la cosa. Alcuni provider di server cloud come DigitalOcean forniscono anche la distribuzione Ghost con un clic. Potrebbe essere la soluzione più semplice se non vuoi il problema della configurazione e configurazione iniziale di Ghost.

A parte questo, vediamo di cosa hai bisogno per distribuire Ghost con Docker su un server Linux.

Requisiti

Oltre alla familiarità con i comandi Linux, anche qui sarà utile conoscere le basi di Docker Compose.

  • Un server Linux. Puoi utilizzare un server fisico, una macchina virtuale o server cloud. Puoi registrarti con il nostro partner Linode e ricevere $ 100 in crediti gratuiti.
  • Docker e Docker Compose installati sul tuo server.
  • Accesso al DNS del tuo dominio in cui desideri implementare Ghost.
  • Configurazione del proxy inverso Nginx con reindirizzamento www/non www e limiti di caricamento consentiti.

Passaggio 0:prepara la configurazione iniziale

Devi avere Docker e Docker Compose installati sul tuo sistema. Puoi fare riferimento a questi tutorial per ottenere istruzioni per Ubuntu.

Oltre a questo, devi anche avere la configurazione del proxy inverso Ngnix. Questo è utile se vuoi avere più di un Ghost o qualche altro servizio web installato sullo stesso server.

Ora, ho trattato questo argomento in dettaglio nel tutorial collegato di seguito, quindi non ripeterò gli stessi passaggi qui. Tuttavia, devi avere questa configurazione sul tuo sistema.

Segui questo tutorial fino al passaggio 4:

Passaggio 1:preparazione del dispiegamento di Ghost

Uso il metodo proxy inverso di Jwilder qui perché tiene conto dei certificati SSL, del reindirizzamento www/non www e dei limiti di caricamento consentiti.

Come gestire i certificati SSL è già descritto nel link condiviso sopra nella sezione requisiti. Inoltre, descriverò come abilitare il reindirizzamento www/non www e aumentare i limiti di caricamento consentiti.

Reindirizzamento WWW/non WWW

A seconda delle tue preferenze SEO, potresti voler impostare il reindirizzamento di www a non www o viceversa. Ad esempio, se il tuo blog è ospitato su domain.com, gli utenti che visitano www.domain.com devono essere reindirizzati ad esso (proprio come funziona il dominio di GitHub).

Allo stesso modo, se lo ospiti su www.domain.com, gli utenti che visitano domain.com devono essere reindirizzati (proprio come funziona il dominio di Linode).

Da WWW a non WWW

Crea un file chiamato www.domain.com all'interno della finestra mobile nginx componi la directory con il seguente contenuto e salvalo:

rewrite ^/(.*)$ https://domain.com/$1 permanent;
Da non WWW a WWW

Crea un file chiamato domain.com all'interno della finestra mobile nginx componi la directory con il seguente contenuto e salvalo:

rewrite ^/(.*)$ https://www.domain.com/$1 permanent;

Supponiamo ora di voler utilizzare WWW per il reindirizzamento non WWW. Tutto quello che devi fare è montare il file nella sezione dei volumi della configurazione del tuo servizio Nginx:

      - ./www.domain.com:/etc/nginx/vhost.d/www.domain.com

Aumenta i limiti di caricamento consentiti

I caricamenti di immagini possono essere influenzati dalla dimensione massima di caricamento predefinita di 50 MB. Per impostare un limite massimo di caricamento ed evitare problemi durante il caricamento di immagini su Docker, ad esempio per 1 GB, crea un file denominato client_max_upload_size.conf e salvalo con il seguente contenuto:

client_max_body_size 1G;

Successivamente è necessario montarlo proprio come descritto con il file precedente:

      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf

Esegui docker-compose up -d dalla directory Nginx per aggiornare la configurazione di Nginx.

Innanzitutto, la configurazione della distribuzione di Ghost consiste essenzialmente in due componenti principali:

  • Backend del database MariaDB
  • Ghost stesso come frontend web

Dato che stai implementando Ghost con Docker, tutti i componenti di cui sopra sono impostati come rispettivi contenitori.

Per il servizio database, utilizzerò una rete interna chiamata ghost poiché deve essere visibile solo per il servizio Ghost.

networks:
  - ghost

Ma per il servizio Ghost, ovviamente, lo stesso net la rete utilizzata nella configurazione del proxy inverso deve essere specificata insieme a ghost rete, e solo allora sarebbe possibile farlo funzionare con il contenitore Nginx Docker.

networks:
  - net
  - ghost

Ora considera come vengono configurati individualmente con Docker Compose:

Per MariaDB, utilizzo l'immagine ufficiale MariaDB 10.5.3 disponibile su Docker Hub:

    ghostdb:
        image: mariadb:10.5.3
        volumes:
            - ghostdb:/var/lib/mysql
        restart: on-failure
        env_file:
            - ./mariadb.env
        networks:
            - ghost

Qui uso un volume chiamato ghostdb per memorizzare i dati del database in /var/lib/mysql . Ho anche impostato  le variabili di ambiente pertinenti nel env_file chiamato mariadb.env :

MYSQL_RANDOM_ROOT_PASSWORD=1
MYSQL_USER=mariadbuser
MYSQL_PASSWORD=mariadbpassword
MYSQL_DATABASE=ghost

Per il servizio Ghost stesso, invece di usare un latest tag, in particolare preferisco utilizzare il numero di versione taggato su Docker Hub lanciato dagli sviluppatori come versione stabile. Ecco, in questo momento in cui scrivo, è 4.5.0 :

    ghost:
        image: ghost:4.5.0
        volumes:
            - ghost:/var/lib/ghost/content
            - ./config.json:/var/lib/ghost/config.production.json
        env_file:
            - ./ghost-mariadb.env
        restart: on-failure
        depends_on: ghostdb
        networks:
            - net
            - ghost

Il binding montato config.json il file è costituito da SMTP (Mailgun) e dalle impostazioni essenziali di rotazione del registro (incentrato sull'errore):

{
  "url": "http://localhost:2368",
  "server": {
    "port": 2368,
    "host": "0.0.0.0"
  },
  "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-of-50-characters"
        }
    }
  },
  "logging": {
    "path": "content/logs/",
    "level": "error",
    "rotation": {
      "enabled": true,
      "count": 10,
      "period": "1d"
  },
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "/var/lib/ghost/content"
  }
}

Se deve utilizzare MySQL/MariaDB, il servizio Ghost deve fare affidamento su ghostdb servizio affinché sia ​​operativo. Questo può essere assicurato solo dopo aver montato il binding di ghost-mariadb.env file (mostrato nella sezione volumi del servizio di database Ghost) con la corretta configurazione del database secondo mariadb.env nel servizio database, che sarebbe:database__client , database__connection__host , database__connection__user , database__connection__password e database__connection__database .

Assegnerò anche a ciascuna delle variabili di ambiente VIRTUAL_HOST e LETSENCRYPT_HOST a entrambi domain.com così come www.domain.com rispettivamente, al fine di garantire che entrambi esistano. Ciò garantisce assolutamente che i reindirizzamenti e i certificati SSL funzionino senza problemi. Voglio che il mio URL principale sia senza www, quindi l'ho impostato come url=https://domain.com . Poiché utilizzerai questa configurazione per l'utilizzo a livello di produzione, il NODE_ENV la variabile è impostata sulla modalità di produzione. È necessario aggiungere anche questi dettagli.

Pertanto, il file di ambiente completo(ghost-mariadb.env ) per il servizio Ghost sarebbe:

VIRTUAL_HOST=domain.com,www.domain.com
LETSENCRYPT_HOST=domain.com,www.domain.com
url=https://domain.com
NODE_ENV=production

database__client=mysql
database__connection__host=ghostdb
database__connection__user=mariadbuser
database__connection__password=mariadbpassword
database__connection__database=ghost

Le incongruenze nei dati di cui sopra potrebbero far passare erroneamente Ghost a SQLite. Tu non lo vuoi. Quindi assicurati che tutti i parametri sopra corrispondano correttamente al servizio di database discusso per mariadb.env sopra.

Ciascuno dei servizi di database avrà i propri rispettivi volumi Docker per la memorizzazione dei dati degli utenti e dei contenuti. Li creerò come volumi esterni:

docker volume create ghostdb
docker volume create ghost

Ora devi includere un  volumes sezione all'interno del file di composizione della finestra mobile con i seguenti  dettagli:

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

Ora hai i componenti necessari per distribuire Ghost.

Fase 2:distribuzione di Ghost

Ora dovresti avere il file  docker-compose pronto. È ora di usare questo file.

Crea la directory di composizione della finestra mobile Ghost sul tuo server:

mkdir ghost

Vai nella directory per modificare i file necessari:

cd ghost

Ora crea il seguente file di composizione mobile basato sulle nostre discussioni finora:

version: '3.7'
services:
    ghostdb:
       image: mariadb:10.5.3
       volumes:
          - ghostdb:/var/lib/mysql
       restart: on-failure
       env_file:
          - ./mariadb.env
       networks:
          - ghost

    ghost:
      image: ghost:4.5.0
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost
volumes:
  ghost:
    external: true
  ghostdb:
    external: true

networks:
  net:
    external: true
  ghost:
    internal: true

Inoltre, non dimenticare di creare gli altri file di configurazione come discusso sopra:config.json , mariadb.env e ghost-mariadb.env all'interno della stessa directory.

Avvia l'istanza Ghost:

docker-compose up -d

Accedi al dominio Ghost specificato nella configurazione utilizzando l'URL del dominio specificato.

Fase 3:configurazione del tuo account Ghost Admin

Tieni presente che per configurare il tuo account amministratore, devi andare su domain.com/ghost e segui le istruzioni sullo schermo fino a quando non avrai rivendicato il tuo sito come amministratore fantasma.

Per ricontrollare, conferma che stai effettivamente utilizzando MySQL/MariaDB e non SQLite. Vai alla tua icona utente in basso a sinistra:

Ora puoi essere sicuro che stai effettivamente utilizzando il contenitore del database separato che verrà visualizzato come mysql indipendentemente dal fatto che tu stia utilizzando un'immagine Docker MySQL o MariaDB:

Puoi anche vedere che gli altri tre parametri:Versione, Ambiente e Posta, sono impostati come previsto in base ai nostri passaggi sopra menzionati. Quindi è tutto! Hai distribuito Ghost con successo come istanza self-hosted sul tuo server!

Suggerimenti per la manutenzione dell'istanza Ghost self-hosted

Ecco alcuni suggerimenti che ti aiuteranno a mantenere la tua istanza Ghost.

Monitoraggio dei log di Ghost in tempo reale

Se desideri controllare i log del contenitore mentre è distribuito in tempo reale, puoi eseguire:

docker logs -f ghost_ghost_1

Backup e ripristino dei volumi Ghost senza tempi di inattività

Utilizzando un approccio cloud + locale, puoi eseguire il backup e il ripristino dei tuoi volumi fantasma senza tempi di inattività.

Aggiorna Ghost Container senza tempi di inattività

Con il --scale flag su Docker Compose, puoi creare un nuovo contenitore basato sull'ultima versione di Ghost. Al termine, puoi rimuovere quello vecchio. Ciò si traduce in zero tempi di inattività.

Ci sono altri suggerimenti che puoi leggere nell'articolo qui sotto.

Potresti anche voler distribuire e gestire temi Ghost utilizzando le azioni GitHub per semplificare il tuo lavoro.

Se riscontri un bug, hai problemi o hai un suggerimento, faccelo sapere lasciando un commento qui sotto.


Linux
  1. Come installare WordPress con Docker, una guida facile da seguire

  2. Guida completa per principianti alla registrazione Docker

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

  4. Guida completa all'auto-hosting di Rocket.Chat con Docker

  5. Come aggiornare il contenitore Docker senza tempi di inattività

Guida completa ai comandi di Sed [spiegata con esempi pratici]

Guida completa all'auto-hosting plausibile [Alternativa a Google Analytics rispettosa della privacy]

Una guida completa per installare Tomcat su Linux

Ubuntu Firewall UFW – Una guida completa

Installa Docker su Ubuntu:una guida passo passo

Comandi della directory Linux:una guida completa