Docker Gids: Inzet van Ghost Blog met MySQL en Traefik met Docker

Ghost is een krachtig open bron publicatie en blog platform gebaseerd op nodejs. Het is goed ontworpen en gemakkelijk te gebruiken. Het ghost platform is geschreven in JavaScript en gebruikt node.js als runtime omgeving. De eerste Ghost versie verscheen in 2013 onder de MIT licentie…

Traefik is een moderne HTTP reverse proxy en load balancer voor microservices. Traefik maakt het inzetten van alle microservices eenvoudig, geïntegreerd met bestaande infrastructuurcomponenten zoals Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul enz.

In deze zelfstudie laten we stap-voor-stap zien hoe je Ghost installeert en configureert als Docker container. We zullen Ghost installeren en configureren onder de nieuwste Docker CE versie, de MySQL als databank gebruiken en de Traefik als Reverse Proxy gebruiken.

Vereisten

  • Ubuntu 18.04 LTS
  • Root voorrechten

Wat we zullen doen

  1. Installeer Docker CE op Ubuntu 18.04 LTS
  2. Docker instellen voor niet-root gebruiker
  3. Installeer Docker Compose
  4. Configureer Ghost Stack
    • Creëer een Aangepast Netwerk
    • Maak een Project Directory aan
    • Maak en Configureer een MySQL Container
    • Maak en Configureer Traefik Reverse Proxy
    • Ghost Container aanmaken en configureren
  5. Zet Ghost in met MySQL en Traefik
  6. Testen van

Stap 1 – Installeer Docker CE op Ubuntu 18.04 LTS

De eerste stap die we in deze zelfstudie zullen doen is de nieuwste docker-ce versie op het systeem installeren. De docker-ce versie kan geïnstalleerd worden uit de officiële docker repository.

Voeg de docker sleutel en docker-ce repository toe.

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"

Het commando zal automatisch alle repositories op het systeem bijwerken.

Installeer nu docker met het onderstaande apt commando.

sudo apt install docker-ce -y

Nadat de installatie voltooid is, start je de docker service en schakel je die in om telkens bij het opstarten van het systeem te starten.

systemctl start docker
systemctl enable docker

De nieuwste docker-ce versie is geïnstalleerd op het Ubuntu 18.04 systeem.

Docker CE installeren

Stap 2 – Docker instellen voor niet-root gebruiker

In deze gids zullen alle container microservices onder de gewone/niet-root gebruiker draaien. We moeten dus de gebruiker instellen om de Docker container te kunnen draaien en het sudo commando voor root rechten uit te voeren.

Maak een nieuwe gebruiker met de naam ‘hakase’ en maak het wachtwoord.

useradd -m -s /bin/bash hakase
passwd hakase

Wijs de ‘hakase’ gebruiker nu toe aan de groepen ‘sudo’ en ‘docker’.

usermod -a -G root hakase
usermod -a -G docker hakase

En start de docker service opnieuw.

systemctl restart docker

De ‘hakase’ kan nu de docker container draaien en het sudo commando uitvoeren voor root privileges.

Docker instellen voor niet-root gebruiker

Log in als gebruiker ‘hakase’ en voer de docker hello-world container uit.

su - hakase
docker run -it hello-world

En het volgende is het resultaat.

Test docker als niet-root gebruiker

Stap 3 – Installeer Docker Compose

In deze tutorial installeren we de docker compose 1.21 uit een binair bestand op de Github repository.

Download de docker-compose binary naar de ‘/usr/local/bin’ map.

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

En maak het ‘docker-compose’ bestand uitvoerbaar door de bestandstoestemming te veranderen.

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

De docker compose is geïnstalleerd – controleer het met het onderstaande commando.

docker-compose version
docker version

Installeer Docker Compose

Docker-compose 1.21 met Docker-ce 1.18 is geïnstalleerd.

Stap 4 – Configureer Ghost Stack

In deze stap configureren we de docker en maken we een nieuw docker-compose bestand voor de ghost installatie.

We maken een nieuw docker-aangepast netwerk aan en maken een nieuw docker-compose yml bestand dat drie hoofddiensten bevat, waaronder MySQL database, Traefik reverse proxy, en Ghost blog zelf.

Maak een aangepast netwerk

Toon het beschikbare docker netwerk met het onderstaande docker network commando.

docker network ls

Maak een nieuw aangepast docker netwerk voor de traefik omgekeerde proxy met de naam ’traefiknet’.

docker network create traefiknet

Controleer nu opnieuw het beschikbare netwerk op het docker systeem.

docker network ls

Creëer een Aangepast Netwerk

Het aangepaste netwerk voor Treafik met de naam ’traefiknet’ is aangemaakt.

Maak een projectdirectory

Na het aanmaken van het docker aangepaste netwerk maken we een nieuwe projectdirectory aan met de naam ‘ghost’ en maken we een nieuw docker-compose.yml bestand.

Meld je aan als gebruiker ‘hakase’.

su - hakase

Maak een nieuwe ‘ghost’ map aan en verander de werkdirectory daarin.

mkdir ghost/
cd ghost/

En maak een nieuw docker-compose bestand aan.

touch docker-compose.yml

Maak en configureer de dienst MySQL

MySQL is de eerste dienst die we willen aanmaken, en we willen de MySQL container aanmaken met onderstaande configuraties.

  • We zullen het MySQL 5.7 docker image gebruiken.
  • Mount de MySQL gegevensmap naar de lokale docker host directory.
  • Draai de MySQL service op het lokale interne netwerk.
  • Configureer MySQL gebruiker en wachtwoord.
    • MySQL root wachtwoord: mypassword
    • Database voor de ghost heet ‘ghostdb’ met gebruiker ‘ghost’ en wachtwoord is ‘ghostdbpass’
  • De MySQL container krijgt de naam ‘mysql’.

Maak binnen de ‘ghost’ map een nieuwe map met de naam ‘data’ en bewerk het ‘docker-compose.yml’ bestand.

mkdir -p data/
vim docker-compose.yml

Plak de configuratie hieronder.

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

Sla op en sluit af.

Maak en configureer Traefik Reverse Proxy

Na het aanmaken van de MySQL dienst, zullen we de traefik reverse proxy container aanmaken en instellen.

Voor we het ‘docker-compose.yml’ script bewerken, moeten we een nieuwe traefik configuratie maken met de naam ’traefik.toml’.

vim traefik.toml

Plak de traefik regelconfiguratie hieronder.

#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"

Sla op en sluit af.

Nu moeten we een nieuw bestand maken voor de SSL Letsencrypt configuratie ‘acme.json’. Het wordt gebruikt om alle logs in op te slaan die Letsencrypt genereert.

Maak het lege ‘acme.json’ bestand aan en verander de toestemming in 600.

touch acme.json
chmod 600 acme.json

Vervolgens bewerken we het ‘docker-compose.yml’ script en voegen de traefik dienstconfiguratie toe.

  • We zullen het nieuwste traefik docker image gebruiken.
  • De container krijgt de naam ’traefik’.
  • Hij gebruikt het aangepaste netwerk ’traefiknet’, en stelt de HTTP en HTTPS poorten bloot.
  • Monteer het docker sock bestand en de traefik configuratie ’traefik.toml’ en ‘acme.json’
  • We definieerden de traefik dashboard URL en backend via de docker labels.

Bewerk de ‘docker-compose.yml’.

vim docker-compose.yml

Plak de traefik dienstconfiguratie eronder.

  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

Sla op en sluit af.

Maak en configureer de spookdienst

Na het configureren van de traefik reverse proxy, maken we de hoofdconfiguratie van de ghost service.

Configuratiedetails die we willen maken.

  • We zullen de ghost v1 en de kleine docker alpine versie gebruiken.
  • We zullen de ghost inhoudsmap mounten naar de lokale map met de naam ‘blog’.
  • De ghost dienst zal draaien op de standaard poort met de domeinnaam ‘gho.hakase-labs.io’, de configuratie via docker labels.
  • De spookdienst zal twee docker netwerken gebruiken, intern en traefiknet.
  • We configureren de gegevens van de MySQL databank uit de configuratie van de mysql container.
  • En de ghost zal gestart worden als de traefik en de MySQL container up and running zijn.

Maak een nieuwe map met de naam ‘blog’ en bewerk het ‘docker-compose.yml’ bestand.

mkdir -p blog/
vim docker-compose.yml

Plak er de onderstaande configuratie in.

  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

Sla op en sluit af.

Maak en configureer Ghost Service

En nu hebben we alle directory en configuratie zoals hieronder getoond.

tree

config-bestanden

Stap 5 – Zet Ghost in met MySQL en Traefik

Om al onze ghost stack diensten te bouwen en te draaien, kunnen we het onderstaande commando gebruiken.

docker-compose up -d

Zet Ghost in met MySQL en Traefik

Als het klaar is, controleer je alle draaiende diensten.

docker-compose ps

En het volgende is het resultaat.

docker-compose ps

Als je een fout hebt, controleer dan het container log met onderstaande commando’s.

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

controleer het containerlogboek

De ghost stack met MySQL en de Traefik reverse proxy is up and running.

Stap 6 – Testen

Open het Traefik dashboard met zijn URL, de mijne ishttp://traef.hakase-labs.io/

Log in met de gebruiker en het wachtwoord op het ’traefik.toml’ bestand.

Inloggen op Traefik

En hierna volgt het Traefik dashboard.

Traefik dashboard

Voor de Ghost installatie typ je de ghost URL in de adresbalk, de mijne ishttp://gho.hakase-labs.io/

En je krijgt de ghost startpagina.

Ghost Blog draait op Docker

Bezoek nu de admin pagina om een nieuwe admin gebruiker in te stellen en te configureren. Mijn URL is: http://gho.hakase-labs.io/admin/

Klik op de groene knop om een nieuwe admin gebruiker aan te maken.

Ghost installatieprogramma

Type detail gebruiker, wachtwoord, e-mail, en klik weer op de groene knop.

Creëer admin login

Om een nieuw lid of gebruiker uit te nodigen, klik je op de ‘I will do this later…’ link.

Nodig gebruikers uit

Nu krijg je het Ghost Dashboard.

Spook Dashboard

En na het maken van de voorbeeldpost is het volgende het resultaat.

Ghost glog draait in Docker container

Ghost blog installatie met MySQL database en Traefik Reverse Proxy op de Docker omgeving is met succes voltooid.

Referenties