Docker Guide · 8 min read · Feb 04, 2026

Guida Docker: Distribuzione del Blog Ghost con MySQL e Traefik con Docker

Ghost è una potente piattaforma di pubblicazione e blog open source basata su nodejs. È ben progettata e facile da usare. La piattaforma Ghost è scritta in JavaScript e utilizza node.js come ambiente di runtime. La prima versione di Ghost è stata rilasciata nel 2013 sotto la licenza MIT..

Traefik è un moderno proxy inverso HTTP e bilanciatore di carico per microservizi. Traefik rende facile il deployment di tutti i microservizi, integrandosi con componenti infrastrutturali esistenti come Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul, ecc.

In questo tutorial, mostreremo passo dopo passo come installare e configurare Ghost come container Docker. Installeremo e configureremo Ghost sotto l’ultima versione di Docker CE, utilizzeremo MySQL come database e utilizzeremo Traefik come Reverse Proxy.

Requisiti

  • Ubuntu 18.04 LTS
  • Privilegi di root

Cosa faremo

  1. Installare Docker CE su Ubuntu 18.04 LTS
  2. Configurare Docker per Utente Non-root
  3. Installare Docker Compose
  4. Configurare Ghost Stack - Creare una Rete Personalizzata
    • Creare una Directory di Progetto
    • Creare e Configurare il Container MySQL
    • Creare e Configurare il Proxy Inverso Traefik
    • Creare e Configurare il Container Ghost
  5. Distribuire Ghost con MySQL e Traefik
  6. Testare

Passo 1 - Installare Docker CE su Ubuntu 18.04 LTS

Il primo passo che faremo in questo tutorial è installare l’ultima versione di docker-ce del sistema. La versione docker-ce può essere installata dal repository ufficiale di docker.

Aggiungi la chiave docker 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 docker utilizzando il comando apt qui sotto.

sudo apt install docker-ce -y

Dopo che l’installazione è completata, avvia il servizio docker e abilitalo per l’avvio ogni volta all’avvio del sistema.

systemctl start docker  
systemctl enable docker

L’ultima versione di docker-ce è stata installata sul sistema Ubuntu 18.04.

Installing Docker CE

Passo 2 - Configurare Docker per Utente Non-root

In questa guida, tutti i microservizi container saranno eseguiti sotto l’utente normale/non-root. Quindi dobbiamo configurare l’utente per poter eseguire il container Docker e 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

L’utente ‘hakase’ può ora eseguire il container docker e il comando sudo per i privilegi di root.

Setup Docker for Non-root User

Accedi come utente ‘hakase’ e esegui il container hello-world di docker.

su - hakase  
docker run -it hello-world

Ecco il risultato.

Test docker as non-root user

Passo 3 - Installare Docker Compose

In questo tutorial, installeremo il docker compose 1.21 da un file binario nel repository di Github.

Scarica il file binario docker-compose 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 il file ‘docker-compose’ eseguibile cambiando i permessi del file.

sudo chmod +x /usr/local/bin/docker-compose

Il docker compose è stato installato - controllalo usando il comando qui sotto.

docker-compose version  
docker version

Install Docker Compose

Docker-compose 1.21 con Docker-ce 1.18 è stato installato.

Passo 4 - Configurare Ghost Stack

In questo passo, configureremo il docker e creeremo un nuovo file docker-compose per l’installazione di ghost.

Creeremo una nuova rete personalizzata docker e creeremo un nuovo file yml docker-compose che contiene tre servizi principali, inclusi il database MySQL, il proxy inverso Traefik e il blog Ghost stesso.

Creare una Rete Personalizzata

Mostra la rete docker disponibile utilizzando il comando docker network qui sotto.

docker network ls

Crea una nuova rete docker personalizzata per il proxy inverso traefik chiamata ‘traefiknet’.

docker network create traefiknet

Ora controlla di nuovo la rete disponibile sul sistema docker.

docker network ls

Create a Custom Network

La rete personalizzata per Treafik chiamata ‘traefiknet’ è stata creata.

Creare una Directory di Progetto

Dopo aver creato la rete docker personalizzata, creeremo una nuova directory di progetto chiamata ‘ghost’ e creeremo un nuovo file docker-compose.yml.

Accedi all’utente ‘hakase’.

su - hakase

Crea una nuova directory ‘ghost’ e cambia la directory di lavoro in essa.

mkdir ghost/  
cd ghost/

E crea un nuovo file docker-compose.

touch docker-compose.yml

Creare e Configurare il Servizio MySQL

MySQL è il primo servizio che vogliamo creare, e vogliamo creare il container MySQL con le configurazioni qui sotto.

  • Utilizzeremo l’immagine docker MySQL 5.7.
  • Monta la directory dei dati MySQL nella directory host locale di docker.
  • Esegui il servizio MySQL sulla rete interna locale.
  • Configura l’utente e la password di MySQL. - Password di root MySQL: mypassword
  • Database per ghost chiamato ‘ghostdb’ con utente ‘ghost’ e password ‘ghostdbpass’
  • Il container MySQL sarà chiamato ‘mysql’.

All’interno della directory ‘ghost’, crea una nuova directory chiamata ‘data’ ed edita 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.

Creare e Configurare il Proxy Inverso Traefik

Dopo aver creato il servizio MySQL, creeremo e configureremo il container del proxy inverso traefik.

Prima di modificare lo script ‘docker-compose.yml’, dobbiamo creare una nuova configurazione traefik chiamata ‘traefik.toml’.

vim traefik.toml

Incolla la configurazione della regola traefik qui sotto.

#Traefik Global Configuration
debug = false
checkNewVersion = true
logLevel = "ERROR"

#Definisci l'EntryPoint per HTTP e HTTPS
defaultEntryPoints = ["https","http"]

#Definisci la porta HTTP 80 e
#Porta HTTPS 443 EntryPoint
#Abilita il reindirizzamento automatico da HTTP a HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]

#Abilita il Dashboard di Traefik sulla porta 8080
#con metodo di autenticazione di base
#hakase e password
[entryPoints.dash]
address=":8080"
[entryPoints.dash.auth]
[entryPoints.dash.auth.basic]
    users = [
        "hakase:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.",
    ]

[api]
entrypoint="dash"
dashboard = true

#Abilita il retry per inviare una richiesta se si verifica un errore di rete
[retry]

#Definisci la Configurazione del Backend Docker
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "hakase-labs.io"
watch = true
exposedbydefault = false

#Registrazione Letsencrypt
#Definisci la sfida HTTP ACME di Letsencrypt
[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 memorizzare tutti i log generati da letsencrypt.

Crea il file ‘acme.json’ vuoto e cambia i permessi 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 container sarà chiamato ‘traefik’
  • Utilizza la rete personalizzata ‘traefiknet’ e espone le porte HTTP e HTTPS.
  • Monta il file docker sock e la configurazione traefik ‘traefik.toml’ e ‘acme.json’
  • Abbiamo definito l’URL del dashboard di traefik e il backend tramite le etichette docker.

Modifica il ‘docker-compose.yml’.

vim docker-compose.yml

Incolla la configurazione del servizio traefik qui sotto.

  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.

Creare e Configurare il Servizio Ghost

Dopo aver configurato il proxy inverso traefik, creeremo la configurazione principale del servizio ghost.

Dettagli di configurazione che vogliamo creare.

  • Utilizzeremo la versione ghost v1 e la piccola versione docker alpine.
  • Montiamo la directory dei contenuti di ghost nella directory locale chiamata ‘blog’.
  • Il servizio ghost verrà eseguito sulla porta predefinita con il nome di dominio ‘gho.hakase-labs.io’, la configurazione tramite etichette docker.
  • Il servizio ghost utilizzerà due reti docker, interna e traefiknet.
  • Stiamo configurando i dettagli del database MySQL dalla configurazione del container mysql.
  • E il ghost verrà avviato quando il container traefik e MySQL è attivo e funzionante.

Crea una nuova directory chiamata ‘blog’ ed edita 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.

Create and Configure Ghost Service

E ora abbiamo tutte le directory e la configurazione come mostrato qui sotto.

tree

config files

Passo 5 - Distribuire Ghost con MySQL e Traefik

Per costruire e avviare tutti i nostri servizi ghost stack, possiamo utilizzare il comando qui sotto.

docker-compose up -d

Deploy Ghost with MySQL and Traefik

Quando è completato, controlla tutti i servizi in esecuzione.

docker-compose ps

Ecco il risultato.

Se hai un errore, controlla il log del container utilizzando i comandi qui sotto.

docker-compose logs mysql  
docker-compose logs traefik  
docker-compose logs ghost

check the container log

Lo stack ghost con MySQL e il proxy inverso Traefik è attivo e funzionante.

Passo 6 - Testare

Apri il 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’.

Ecco il dashboard di Traefik.

Traefik dashboard

Per l’installazione di Ghost, digita l’URL di ghost nella barra degli indirizzi, il mio è http://gho.hakase-labs.io/

E otterrai la home page di ghost.

Ghost Blog running on Docker

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

Clicca il pulsante verde per creare un nuovo utente amministratore.

Ghost installer

Digita i dettagli dell’utente, la password, l’email e clicca di nuovo il pulsante verde.

Create admin login

Per invitare un nuovo membro o utente, clicca sul link ‘Lo farò più tardi..’.

Invite users

Ora otterrai il Dashboard di Ghost.

Ghost Dashboard

E dopo aver creato il post di esempio, ecco il risultato.

Ghost glog running in Docker container

L’installazione del blog Ghost con database MySQL e proxy inverso Traefik nell’ambiente Docker è stata completata con successo.

Riferimenti

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.