Ghost è una potente piattaforma di pubblicazione e blog open source basata su nodejs. È ben progettato e facile da usare. La piattaforma fantasma è scritta in JavaScript e utilizza node.js come ambiente di runtime. La prima versione Ghost rilasciata nel 2013 con licenza MIT..
Traefik è un moderno proxy inverso HTTP e un servizio di bilanciamento del carico per microservizi. Traefik semplifica l'implementazione di tutti i microservizi, integrandoli con i componenti dell'infrastruttura esistente come Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul ecc.
In questo tutorial, mostreremo passo dopo passo come installare e configurare Ghost come contenitore Docker. Installeremo e configureremo Ghost con l'ultima versione di Docker CE, useremo MySQL come database e useremo Traefik come proxy inverso.
Prerequisiti
- Ubuntu 18.04 LTS
- Privilegi di root
Cosa faremo
- Installa Docker CE su Ubuntu 18.04 LTS
- Imposta Docker per utenti non root
- Installa Docker Compose
- Configura lo stack fantasma
- Crea una rete personalizzata
- Crea una directory di progetto
- Crea e configura MySQL Container
- Crea e configura il proxy inverso Traefik
- Crea e configura Ghost Container
- Distribuisci Ghost con MySQL e Traefik
- Test
Passaggio 1 - Installa Docker CE su Ubuntu 18.04 LTS
Il primo passo che faremo in questo tutorial è installare l'ultima versione docker-ce del sistema. La versione docker-ce può essere installata dal repository docker ufficiale.
Aggiungi la chiave mobile e il repository docker-ce.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Il comando aggiornerà automaticamente tutti i repository sul sistema.
Ora installa la finestra mobile usando il comando apt di seguito.
sudo apt install docker-ce -y
Al termine dell'installazione, avvia il servizio Docker e abilitalo all'avvio ogni volta all'avvio del sistema.
systemctl start docker
systemctl enable docker
L'ultima versione docker-ce è stata installata sul sistema Ubuntu 18.04.

Passaggio 2:installazione della finestra mobile per utenti non root
In questa guida, tutti i microservizi del contenitore verranno eseguiti con l'utente normale/non root. Quindi dobbiamo configurare l'utente per poter eseguire il contenitore Docker ed eseguire il comando sudo per i privilegi di root.
Crea un nuovo utente chiamato 'hakase' e crea la password.
useradd -m -s /bin/bash hakase
passwd hakase
Ora assegna l'utente 'hakase' ai gruppi 'sudo' e 'docker'.
usermod -a -G root hakase
usermod -a -G docker hakase
E riavvia il servizio Docker.
systemctl restart docker
Il 'hakase' ora può eseguire il contenitore docker ed eseguire il comando sudo per i privilegi di root.

Accedi come utente 'hakase' ed esegui il contenitore hello-world della finestra mobile.
su - hakase
docker run -it hello-world
E di seguito il risultato.

Passaggio 3 - Installa Docker Compose
In questo tutorial, installeremo la finestra mobile compose 1.21 da un file binario sul repository Github.
Scarica il binario di composizione mobile nella directory '/usr/local/bin'.
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
E rendi eseguibile il file 'docker-compose' modificando l'autorizzazione del file.
sudo chmod +x /usr/local/bin/docker-compose
La finestra mobile Compose è stata installata:controllala utilizzando il comando seguente.
docker-compose version
docker version

Docker-compose 1.21 con Docker-ce 1.18 è stato installato.
Passaggio 4:configurazione dello stack fantasma
In questo passaggio, configureremo la finestra mobile e creeremo un nuovo file di composizione della finestra mobile per l'installazione fantasma.
Creeremo una nuova rete personalizzata Docker e creeremo un nuovo file yml di composizione Docker che contiene tre servizi principali, tra cui il database MySQL, il proxy inverso di Traefik e il blog Ghost stesso.
Crea una rete personalizzata
Mostra la rete Docker disponibile utilizzando il comando di rete Docker di seguito.
docker network ls
Crea una nuova rete Docker personalizzata per il proxy inverso traefik denominata 'traefiknet'.
docker network create traefiknet
Ora controlla di nuovo la rete disponibile sul sistema Docker.
docker network ls

È stata creata la rete personalizzata per Treafik denominata 'traefiknet'.
Crea una directory di progetto
Dopo aver creato la rete personalizzata della finestra mobile, creeremo una nuova directory di progetto denominata 'ghost' e creeremo un nuovo file docker-compose.yml.
Accedi all'utente 'hakase'.
su - hakase
Crea una nuova directory 'fantasma' e cambia la directory di lavoro in essa.
mkdir ghost/
cd ghost/
E crea un nuovo file di composizione della finestra mobile.
touch docker-compose.yml
Crea e configura il servizio MySQL
MySQL è il primo servizio che vogliamo creare e vogliamo creare il contenitore MySQL con le configurazioni seguenti.
- Utilizzeremo l'immagine Docker MySQL 5.7.
- Monta la directory dei dati MySQL nella directory host della finestra mobile locale.
- Esecuzione del servizio MySQL sulla rete interna locale.
- Configura utente e password MySQL.
- Password radice MySQL:miapassword
- Il database per il fantasma denominato 'ghostdb' con utente 'ghost' e password è 'ghostdbpass'
- Il contenitore MySQL sarà denominato 'mysql'.
All'interno della directory 'ghost', crea una nuova directory denominata 'data' e modifica il file 'docker-compose.yml'.
mkdir -p data/
vim docker-compose.yml
Incolla la configurazione qui sotto.
version: '3.3'
services:
mysql:
image: mysql:5.7
restart: always
volumes:
- ./data:/var/lib/mysql
labels:
- "traefik.enable=false"
networks:
- internal
environment:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_USER: ghost
MYSQL_PASSWORD: ghostdbpass
MYSQL_DATABASE: ghostdb
container_name: mysql Salva ed esci.
Crea e configura il proxy inverso Traefik
Dopo aver creato il servizio MySQL, creeremo e configureremo il container proxy inverso traefik.
Prima di modificare lo script 'docker-compose.yml', dobbiamo creare una nuova configurazione di traefik denominata 'traefik.toml'.
vim traefik.toml
Incolla la configurazione della regola traefik di seguito.
#Traefik Global Configuration
debug = false
checkNewVersion = true
logLevel = "ERROR"
#Define the EntryPoint for HTTP and HTTPS
defaultEntryPoints = ["https","http"]
#Define the HTTP port 80 and
#HTTPS port 443 EntryPoint
#Enable automatically redirect HTTP to HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
#Enable Traefik Dashboard on port 8080
#with basic authentication method
#hakase and password
[entryPoints.dash]
address=":8080"
[entryPoints.dash.auth]
[entryPoints.dash.auth.basic]
users = [
"hakase:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.",
]
[api]
entrypoint="dash"
dashboard = true
#Enable retry sending a request if the network error
[retry]
#Define Docker Backend Configuration
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "hakase-labs.io"
watch = true
exposedbydefault = false
#Letsencrypt Registration
#Define the Letsencrypt ACME HTTP challenge
[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
[acme.httpChallenge]
entryPoint = "http" Salva ed esci.
Ora dobbiamo creare un nuovo file per la configurazione SSL Letsencrypt 'acme.json'. Viene utilizzato per archiviare tutti i Letencrypt genera un registro.
Crea il file vuoto "acme.json" e cambia l'autorizzazione a 600.
touch acme.json
chmod 600 acme.json
Successivamente, modificheremo lo script 'docker-compose.yml' e aggiungeremo la configurazione del servizio traefik.
- Utilizzeremo l'ultima immagine Docker Traefik.
- Il contenitore sarà denominato 'traefik'
- E' utilizzata la rete personalizzata 'traefiknet' ed espone le porte HTTP e HTTPS.
- Monta il file sock docker e la configurazione di traefik 'traefik.toml' e 'acme.json'
- Abbiamo definito l'URL della dashboard di traefik e il back-end tramite le etichette docker.
Modifica 'docker-compose.yml'.
vim docker-compose.yml
Incolla la configurazione del servizio traefik di seguito.
traefik:
image: traefik:latest
command: --docker
ports:
- 80:80
- 443:443
labels:
- "traefik.enable=true"
- "traefik.backend=dashboard"
- "traefik.frontend.rule=Host:traef.hakase-labs.io"
- "traefik.port=8080"
networks:
- traefiknet
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/traefik.toml
- ./acme.json:/acme.json
container_name: traefik
restart: always Salva ed esci.
Crea e configura il servizio Ghost
Dopo aver configurato il proxy inverso traefik, creeremo la configurazione del servizio fantasma principale.
Dettagli di configurazione che vogliamo creare.
- Utilizzeremo la versione Ghost v1 e Small Docker Alpine.
- Monteremo la directory dei contenuti fantasma nella directory locale denominata 'blog'.
- Il servizio fantasma verrà eseguito sulla porta predefinita con il nome di dominio 'gho.hakase-labs.io', la configurazione tramite etichette docker.
- Il servizio fantasma utilizzerà due reti docker, interna e traefiknet.
- Stiamo configurando i dettagli del database MySQL dalla configurazione del contenitore mysql.
- E il ghost verrà avviato quando il contenitore traefik e MySQL sarà attivo e funzionante.
Crea una nuova directory denominata 'blog' e modifica il file 'docker-compose.yml'.
mkdir -p blog/
vim docker-compose.yml
Incolla la configurazione qui sotto.
ghost:
image: ghost:1-alpine
restart: always
ports:
- 2368
volumes:
- ./blog:/var/lib/ghost/content
labels:
- "traefik.enabled=true"
- "traefik.backend=ghost"
- "traefik.frontend.rule=Host:gho.hakase-labs.io"
- "traefik.docker.network=traefiknet"
- "traefik.port=2368"
networks:
- internal
- traefiknet
environment:
database__client: mysql
database__connection__host: mysql
database__connection__user: ghost
database__connection__password: ghostdbpass
database__connection__database: ghostdb
container_name: ghost
depends_on:
- mysql
- traefik
networks:
traefiknet:
external: true
internal:
external: false Salva ed esci.

E ora abbiamo tutte le directory e le configurazioni come mostrato di seguito.
tree

Passaggio 5 - Distribuisci Ghost con MySQL e Traefik
Per creare ed eseguire tutto il nostro servizio di stack fantasma, possiamo utilizzare il comando seguente.
docker-compose up -d

Al termine, controlla tutti i servizi in esecuzione.
docker-compose ps
E il seguente è il risultato.

In caso di errore, controlla il registro del contenitore utilizzando i comandi seguenti.
docker-compose logs mysql
docker-compose logs traefik
docker-compose logs ghost

Lo stack fantasma con MySQL e il proxy inverso di Traefik è attivo e funzionante.
Fase 6 - Test
Apri la dashboard di Traefik con il suo URL, il mio è http://traef.hakase-labs.io/
Accedi con l'utente e la password nel file 'traefik.toml'.

E di seguito c'è la dashboard di Traefik.

Per l'installazione di Ghost, digita l'URL fantasma nella barra degli indirizzi, il mio è http://gho.hakase-labs.io/
E otterrai la home page dei fantasmi.

Ora visita la pagina di amministrazione per impostare e configurare un nuovo utente amministratore. Il mio URL è: http://gho.hakase-labs.io/admin/
Fai clic sul pulsante verde per creare un nuovo utente amministratore.

Digita il dettaglio utente, password, email e fai nuovamente clic sul pulsante verde.

Per invitare un nuovo membro o utente, fai clic sul link "Lo farò più tardi..".

Ora otterrai la dashboard di Ghost.

E dopo aver creato il post di esempio, il risultato è il seguente.

L'installazione del blog Ghost con database MySQL e Traefik Reverse Proxy nell'ambiente Docker è stata completata con successo.
Riferimenti
- https://hub.docker.com/_/ghost/
- https://docs.traefik.io/