Ghost ist eine leistungsstarke Open-Source-Publishing- und Blog-Plattform, die auf nodejs basiert. Es ist gut gestaltet und einfach zu bedienen. Die Ghost-Plattform ist in JavaScript geschrieben und verwendet node.js als Laufzeitumgebung. Die erste Ghost-Version, die 2013 unter der MIT-Lizenz veröffentlicht wurde..
Traefik ist ein moderner HTTP-Reverse-Proxy und Load-Balancer für Microservices. Traefik macht die Bereitstellung aller Microservices einfach, integriert in vorhandene Infrastrukturkomponenten wie Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul usw.
In diesem Tutorial zeigen wir Schritt für Schritt, wie Sie Ghost als Docker-Container installieren und konfigurieren. Wir werden Ghost unter der neuesten Docker CE-Version installieren und konfigurieren, MySQL als Datenbank und Traefik als Reverse Proxy verwenden.
Voraussetzungen
- Ubuntu 18.04 LTS
- Root-Rechte
Was wir tun werden
- Installieren Sie Docker CE auf Ubuntu 18.04 LTS
- Docker für Nicht-Root-Benutzer einrichten
- Installieren Sie Docker Compose
- Ghost Stack konfigurieren
- Erstellen Sie ein benutzerdefiniertes Netzwerk
- Erstellen Sie ein Projektverzeichnis
- MySQL-Container erstellen und konfigurieren
- Traefik-Reverse-Proxy erstellen und konfigurieren
- Ghost-Container erstellen und konfigurieren
- Ghost mit MySQL und Traefik bereitstellen
- Testen
Schritt 1 – Docker CE auf Ubuntu 18.04 LTS installieren
Der erste Schritt in diesem Tutorial ist die Installation der neuesten Docker-ce-Version des Systems. Die Docker-ce-Version kann aus dem offiziellen Docker-Repository installiert werden.
Fügen Sie den Docker-Schlüssel und das Docker-ce-Repository hinzu.
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"
Der Befehl aktualisiert automatisch alle Repositories auf dem System.
Installieren Sie nun Docker mit dem folgenden apt-Befehl.
sudo apt install docker-ce -y
Nachdem die Installation abgeschlossen ist, starten Sie den Docker-Dienst und aktivieren Sie ihn so, dass er jedes Mal beim Systemstart gestartet wird.
systemctl start docker
systemctl enable docker
Die neueste Docker-ce-Version wurde auf dem Ubuntu 18.04-System installiert.
Schritt 2 – Richten Sie Docker für Nicht-Root-Benutzer ein
In diesem Leitfaden werden alle Container-Microservices unter dem normalen/Nicht-Root-Benutzer ausgeführt. Daher müssen wir den Benutzer so konfigurieren, dass er den Docker-Container ausführen und den sudo-Befehl für Root-Rechte ausführen kann.
Erstellen Sie einen neuen Benutzer namens „hakase“ und erstellen Sie das Passwort.
useradd -m -s /bin/bash hakase
passwd hakase
Weisen Sie nun den Benutzer „hakase“ den Gruppen „sudo“ und „docker“ zu.
usermod -a -G root hakase
usermod -a -G docker hakase
Und starten Sie den Docker-Dienst neu.
systemctl restart docker
Der 'hakase' kann jetzt den Docker-Container ausführen und den sudo-Befehl für Root-Rechte ausführen.
Melden Sie sich als Benutzer „hakase“ an und führen Sie den Docker-Container „hello-world“ aus.
su - hakase
docker run -it hello-world
Und folgendes ist das Ergebnis.
Schritt 3 – Docker Compose installieren
In diesem Tutorial installieren wir Docker Compose 1.21 aus einer Binärdatei im Github-Repository.
Laden Sie die Docker-Compose-Binärdatei in das Verzeichnis „/usr/local/bin“ herunter.
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
Und machen Sie die Datei „docker-compose“ ausführbar, indem Sie die Dateiberechtigung ändern.
sudo chmod +x /usr/local/bin/docker-compose
Docker Compose wurde installiert - überprüfen Sie es mit dem folgenden Befehl.
docker-compose version
docker version
Docker-compose 1.21 mit Docker-ce 1.18 wurde installiert.
Schritt 4 – Ghost Stack konfigurieren
In diesem Schritt konfigurieren wir den Docker und erstellen eine neue Docker-Compose-Datei für die Ghost-Installation.
Wir werden ein neues benutzerdefiniertes Docker-Netzwerk erstellen und eine neue Docker-Compose-YML-Datei erstellen, die drei Hauptdienste enthält, einschließlich MySQL-Datenbank, Traefik-Reverse-Proxy und Ghost-Blog selbst.
Erstellen Sie ein benutzerdefiniertes Netzwerk
Zeigen Sie das verfügbare Docker-Netzwerk mit dem folgenden Docker-Netzwerkbefehl an.
docker network ls
Erstellen Sie ein neues benutzerdefiniertes Docker-Netzwerk für den Traefik-Reverse-Proxy mit dem Namen „traefiknet“.
docker network create traefiknet
Überprüfen Sie nun erneut das verfügbare Netzwerk auf dem Docker-System.
docker network ls
Das benutzerdefinierte Netzwerk für Treafik mit dem Namen „traefiknet“ wurde erstellt.
Erstellen Sie ein Projektverzeichnis
Nach dem Erstellen des benutzerdefinierten Docker-Netzwerks erstellen wir ein neues Projektverzeichnis mit dem Namen „ghost“ und erstellen eine neue docker-compose.yml-Datei.
Melden Sie sich beim Benutzer „hakase“ an.
su - hakase
Erstellen Sie ein neues „Geister“-Verzeichnis und ändern Sie das Arbeitsverzeichnis dorthin.
mkdir ghost/
cd ghost/
Und erstellen Sie eine neue Docker-Compose-Datei.
touch docker-compose.yml
MySQL-Dienst erstellen und konfigurieren
MySQL ist der erste Dienst, den wir erstellen möchten, und wir möchten den MySQL-Container mit den folgenden Konfigurationen erstellen.
- Wir werden das Docker-Image von MySQL 5.7 verwenden.
- Mounten Sie das MySQL-Datenverzeichnis im lokalen Docker-Host-Verzeichnis.
- Ausführen des MySQL-Dienstes im lokalen internen Netzwerk.
- MySQL-Benutzer und Passwort konfigurieren.
- MySQL-Root-Passwort:mypassword
- Datenbank für den Geist namens 'ghostdb' mit Benutzer 'ghost' und Passwort ist 'ghostdbpass'
- Der MySQL-Container erhält den Namen „mysql“.
Erstellen Sie im Verzeichnis „ghost“ ein neues Verzeichnis mit dem Namen „data“ und bearbeiten Sie die Datei „docker-compose.yml“.
mkdir -p data/
vim docker-compose.yml
Fügen Sie die Konfiguration unten ein.
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
Speichern und beenden.
Traefik-Reverse-Proxy erstellen und konfigurieren
Nach dem Erstellen des MySQL-Dienstes erstellen und konfigurieren wir den Traefik-Reverse-Proxy-Container.
Bevor wir das Skript „docker-compose.yml“ bearbeiten, müssen wir eine neue Traefik-Konfiguration mit dem Namen „traefik.toml“ erstellen.
vim traefik.toml
Traefik-Regelkonfiguration unten einfügen.
#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"
Speichern und beenden.
Jetzt müssen wir eine neue Datei für die SSL-Letsencrypt-Konfiguration ‚acme.json‘ erstellen. Es wird verwendet, um alle Letsencrypt-Protokolle zu speichern.
Erstellen Sie die leere Datei „acme.json“ und ändern Sie die Berechtigung auf 600.
touch acme.json
chmod 600 acme.json
Als Nächstes bearbeiten wir das Skript „docker-compose.yml“ und fügen die Konfiguration des Traefik-Dienstes hinzu.
- Wir werden das neueste Traefik-Docker-Image verwenden.
- Der Container erhält den Namen „traefik“
- Es wird das benutzerdefinierte Netzwerk „traefiknet“ verwendet und stellt die HTTP- und HTTPS-Ports bereit.
- Mounten Sie die Docker-Sock-Datei und die Traefik-Konfiguration 'traefik.toml' und 'acme.json'
- Wir haben die Traefik-Dashboard-URL und das Backend über die Docker-Labels definiert.
Bearbeiten Sie die „docker-compose.yml“.
vim docker-compose.yml
Fügen Sie die Traefik-Dienstkonfiguration unten ein.
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
Speichern und beenden.
Ghost-Service erstellen und konfigurieren
Nach der Konfiguration des Traefik-Reverse-Proxys erstellen wir die Hauptkonfiguration des Ghost-Dienstes.
Konfigurationsdetails, die wir erstellen möchten.
- Wir werden Ghost v1 und die kleine alpine Docker-Version verwenden.
- Wir werden das Ghost-Content-Verzeichnis in das lokale Verzeichnis mit dem Namen „Blog“ einhängen.
- Der Geisterdienst wird auf dem Standardport mit dem Domänennamen „gho.hakase-labs.io“ ausgeführt, die Konfiguration erfolgt über Docker-Labels.
- Der Geisterdienst wird zwei Docker-Netzwerke verwenden, intern und traefiknet.
- Wir konfigurieren die MySQL-Datenbankdetails aus der MySQL-Containerkonfiguration.
- Und der Ghost wird gestartet, wenn der Traefik- und MySQL-Container läuft.
Erstellen Sie ein neues Verzeichnis mit dem Namen „blog“ und bearbeiten Sie die Datei „docker-compose.yml“.
mkdir -p blog/
vim docker-compose.yml
Fügen Sie die Konfiguration unten ein.
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
Speichern und beenden.
Und jetzt haben wir alle Verzeichnisse und Konfigurationen wie unten gezeigt.
tree
Schritt 5 – Bereitstellen von Ghost mit MySQL und Traefik
Um unseren gesamten Ghost-Stack-Dienst zu erstellen und auszuführen, können wir den folgenden Befehl verwenden.
docker-compose up -d
Überprüfen Sie nach Abschluss alle laufenden Dienste.
docker-compose ps
Und das Folgende ist das Ergebnis.
Wenn Sie einen Fehler haben, überprüfen Sie das Containerprotokoll mit den folgenden Befehlen.
docker-compose logs mysql
docker-compose logs traefik
docker-compose logs ghost
Der Ghost-Stack mit MySQL und dem Traefik-Reverse-Proxy ist in Betrieb.
Schritt 6 – Testen
Öffnen Sie das Traefik-Dashboard mit seiner URL, meine ist http://traef.hakase-labs.io/
Melden Sie sich mit Benutzer und Passwort in der Datei „traefik.toml“ an.
Und es folgt das Traefik-Dashboard.
Geben Sie für die Ghost-Installation die Ghost-URL in die Adressleiste ein, meine ist http://gho.hakase-labs.io/
Und Sie erhalten die Ghost-Homepage.
Besuchen Sie nun die Admin-Seite, um einen neuen Admin-Benutzer einzurichten und zu konfigurieren. Meine URL lautet: http://gho.hakase-labs.io/admin/
Klicken Sie auf die grüne Schaltfläche, um einen neuen Administratorbenutzer zu erstellen.
Geben Sie den detaillierten Benutzer, das Passwort und die E-Mail-Adresse ein und klicken Sie erneut auf die grüne Schaltfläche.
Um ein neues Mitglied oder einen neuen Benutzer einzuladen, klicken Sie auf den Link "Ich mache das später...".
Jetzt erhalten Sie das Ghost Dashboard.
Und nach dem Erstellen des Beispielbeitrags ist das folgende Ergebnis.
Die Ghost-Blog-Installation mit MySQL-Datenbank und Traefik Reverse Proxy in der Docker-Umgebung wurde erfolgreich abgeschlossen.
Referenzen
- https://hub.docker.com/_/ghost/
- https://docs.traefik.io/