GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Vollständiger Leitfaden für selbsthostendes Ghost-CMS mit Docker

Ghost ist ein Open-Source-Content-Management-System, das sich für Blogs, Newsletter oder Mitglieder-Websites eignet.

Es ist superschnell und SEO-optimiert. Wir lieben es hier bei Linux Handbook. Unsere Website verwendet natürlich Ghost.

Jetzt können Sie sich für eine verwaltete Ghost-Instanz von den Machern von Ghost selbst entscheiden. Es würde Sie viel kosten, aber Sie müssen sich keine Mühe geben, Ghost bereitzustellen, zu aktualisieren und zu warten. Und natürlich hilft es der Entwicklung des Ghost-Projekts.

Wenn Sie vermeiden möchten, viel auszugeben oder die Dinge mit einem „Do-it-yourself“-Ansatz selbst in die Hand nehmen möchten, können Sie Ghost selbst auf Ihrem Server hosten.

In diesem Tutorial zeige ich Ihnen die Schritte zum Bereitstellen von Ghost mit Docker.

Selbsthostender Ghost mit Docker

Hier ist das Ding. Einige Cloud-Server-Anbieter wie DigitalOcean bieten auch Ghost-Bereitstellung mit einem Klick. Das könnte der einfache Ausweg sein, wenn Sie sich den Ärger mit der anfänglichen Einrichtung und Konfiguration von Ghost ersparen möchten.

Mal sehen, was Sie brauchen, um Ghost mit Docker auf einem Linux-Server bereitzustellen.

Anforderungen

Neben der Vertrautheit mit Linux-Befehlen ist hier auch die Kenntnis der Grundlagen von Docker Compose hilfreich.

  • Ein Linux-Server. Sie können einen physischen Server, eine virtuelle Maschine oder Cloud-Server verwenden. Sie können sich bei unserem Partner Linode anmelden und 100 $ an kostenlosen Credits erhalten.
  • Docker und Docker Compose auf Ihrem Server installiert.
  • Zugriff auf das DNS Ihrer Domain, in der Sie Ghost bereitstellen möchten.
  • Nginx-Reverse-Proxy-Setup mit www/nicht-www-Umleitung und zulässigen Upload-Limits.

Schritt 0:Bereiten Sie die Ersteinrichtung vor

Docker und Docker Compose müssen auf Ihrem System installiert sein. Sie können sich auf diese Tutorials beziehen, um Anweisungen für Ubuntu zu erhalten.

Abgesehen davon müssen Sie auch Ngnix-Reverse-Proxy-Setup haben. Dies ist vorteilhaft, wenn Sie mehr als einen Ghost oder einen anderen Webdienst auf demselben Server installieren möchten.

Nun, ich habe dieses Thema im unten verlinkten Tutorial ausführlich behandelt, sodass ich die gleichen Schritte hier nicht wiederholen werde. Dieses Setup muss jedoch auf Ihrem System vorhanden sein.

Folgen Sie diesem Tutorial bis Schritt 4:

Schritt 1:Vorbereitung der Bereitstellung von Ghost

Ich verwende hier die Reverse-Proxy-Methode von Jwilder, da sie SSL-Zertifikate, www/non-www-Umleitung und zulässige Upload-Limits berücksichtigt.

Der Umgang mit SSL-Zertifikaten ist bereits in dem oben geteilten Link im Abschnitt Anforderungen beschrieben. Außerdem werde ich beschreiben, wie man die www/nicht-www-Umleitung aktiviert und die zulässigen Upload-Limits erhöht.

WWW/Nicht-WWW-Umleitung

Abhängig von Ihren SEO-Präferenzen möchten Sie möglicherweise die Umleitung von www zu nicht-www oder umgekehrt festlegen. Wenn Ihr Blog beispielsweise auf domain.com gehostet wird, müssen Benutzer, die www.domain.com besuchen, dorthin umgeleitet werden (wie die Domain von GitHub funktioniert).

Ebenso müssen Benutzer, die domain.com besuchen, umgeleitet werden, wenn Sie sie auf www.domain.com hosten (wie die Domain von Linode funktioniert).

WWW zu Nicht-WWW

Erstellen Sie eine Datei namens www.domain.com innerhalb des nginx docker compose Verzeichnisses mit folgendem Inhalt und speichern Sie es:

rewrite ^/(.*)$ https://domain.com/$1 permanent;
Nicht-WWW zu WWW

Erstellen Sie eine Datei namens domain.com innerhalb des nginx docker compose Verzeichnisses mit folgendem Inhalt und speichern Sie es:

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

Angenommen, Sie möchten die Umleitung von WWW zu Nicht-WWW verwenden. Alles, was Sie tun müssen, ist, die Datei im Volumes-Abschnitt Ihrer Nginx-Dienstkonfiguration zu mounten:

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

Zulässige Upload-Limits erhöhen

Bild-Uploads können durch die standardmäßige maximale Upload-Größe von 50 MB beeinträchtigt werden. Erstellen Sie eine Datei mit dem Namen client_max_upload_size.conf, um ein maximales Upload-Limit festzulegen und Probleme beim Hochladen von Bildern auf Docker zu vermeiden, z. B. für 1 GB und speichern Sie es mit folgendem Inhalt:

client_max_body_size 1G;

Später müssen Sie es wie bei der vorherigen Datei beschrieben mounten:

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

Führen Sie docker-compose up -d aus aus dem Nginx-Verzeichnis, um Ihre Nginx-Konfiguration zu aktualisieren.

Zunächst einmal besteht die Ghost-Bereitstellungskonfiguration im Wesentlichen aus zwei Hauptkomponenten:

  • MariaDB-Datenbank-Backend
  • Ghost selbst als Web-Frontend

Da Sie Ghost mit Docker bereitstellen, werden alle oben genannten Komponenten als ihre eigenen jeweiligen Container eingerichtet.

Für den Datenbankdienst verwende ich ein internes Netzwerk namens ghost da es nur für den Ghost-Dienst sichtbar sein muss.

networks:
  - ghost

Aber für den Ghost-Dienst natürlich dasselbe net Netzwerk, das in der Reverse-Proxy-Konfiguration verwendet wird, muss zusammen mit dem ghost angegeben werden Netzwerk, und nur dann wäre es möglich, es mit dem Nginx-Docker-Container zum Laufen zu bringen.

networks:
  - net
  - ghost

Betrachten Sie nun, wie sie mit Docker Compose individuell konfiguriert werden:

Für MariaDB verwende ich das offizielle MariaDB 10.5.3-Image, das auf Docker Hub verfügbar ist:

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

Hier verwende ich ein Volume namens ghostdb um die Datenbankdaten unter /var/lib/mysql zu speichern . Ich setze auch  die relevanten Umgebungsvariablen in der env_file namens mariadb.env :

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

Für den Ghost-Dienst selbst, anstatt einen latest zu verwenden -Tag, bevorzuge ich ausdrücklich die Versionsnummer, die auf dem von den Entwicklern gestarteten Docker Hub als stabile Version gekennzeichnet ist. Hier, zum jetzigen Zeitpunkt, ist es 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

Die Bindung hat config.json gemountet Datei besteht aus SMTP (Mailgun) und wesentlichen Einstellungen für die Protokollrotation (fehlerbezogen):

{
  "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"
  }
}

Wenn MySQL/MariaDB verwendet werden muss, muss sich der Ghost-Dienst auf die ghostdb verlassen Service, damit es betriebsbereit ist. Dies kann nur sichergestellt werden, wenn Sie die ghost-mariadb.env bind gemountet haben Datei (gezeigt im Volumes-Abschnitt des Ghost-Datenbankdienstes) mit der korrekten Datenbankkonfiguration gemäß mariadb.env im Datenbankdienst, das wäre:database__client , database__connection__host , database__connection__user , database__connection__password und database__connection__database .

Ich werde auch jeder der Umgebungsvariablen VIRTUAL_HOST zuweisen und LETSENCRYPT_HOST zu beiden domain.com sowie www.domain.com bzw. um sicherzustellen, dass beide vorhanden sind. Dadurch wird absolut sichergestellt, dass die Umleitungen und SSL-Zertifikate reibungslos und ohne Probleme funktionieren. Ich möchte, dass meine Haupt-URL ohne www ist, also setze ich sie als url=https://domain.com . Da Sie dieses Setup für die Verwendung auf Produktionsebene verwenden werden, ist der NODE_ENV Variable ist auf Produktionsmodus eingestellt. Diese Details müssen ebenfalls hinzugefügt werden.

Daher ist die vollständige Umgebungsdatei (ghost-mariadb.env ) für den Ghost-Dienst wäre:

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

Inkonsistenzen in den obigen Daten könnten dazu führen, dass Ghost fälschlicherweise zu SQLite wechselt. Das willst du nicht. Stellen Sie daher sicher, dass alle oben genannten Parameter korrekt mit dem für mariadb.env besprochenen Datenbankdienst übereinstimmen oben.

Jeder der Datenbankdienste verfügt über seine eigenen jeweiligen Docker-Volumes zum Speichern von Benutzer- und Inhaltsdaten. Ich erstelle sie als externe Volumes:

docker volume create ghostdb
docker volume create ghost

Jetzt müssen Sie ein  volumes hinzufügen Abschnitt in der Docker-Compose-Datei mit den folgenden  Details:

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

Sie verfügen nun über die erforderlichen Komponenten zum Bereitstellen von Ghost.

Schritt 2:Bereitstellen von Ghost

Jetzt sollten Sie die Docker-Compose-Datei bereit haben. Es ist an der Zeit, diese Datei zu verwenden.

Erstellen Sie das Ghost-Docker-Compose-Verzeichnis auf Ihrem Server:

mkdir ghost

Gehen Sie in das Verzeichnis, um die erforderlichen Dateien zu bearbeiten:

cd ghost

Erstellen Sie nun die folgende Docker-Compose-Datei basierend auf unseren bisherigen Diskussionen:

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

Vergessen Sie auch nicht, die anderen Konfigurationsdateien wie oben beschrieben zu erstellen:config.json , mariadb.env und ghost-mariadb.env innerhalb desselben Verzeichnisses.

Starten Sie die Ghost-Instanz:

docker-compose up -d

Greifen Sie mit Ihrer angegebenen Domain-URL auf die in der Konfiguration angegebene Ghost-Domain zu.

Schritt 3:Richten Sie Ihr Ghost-Admin-Konto ein

Beachten Sie, dass Sie zum Einrichten Ihres Administratorkontos zu domain.com/ghost gehen müssen und befolgen Sie die Anweisungen auf dem Bildschirm, bis Sie Ihre Site als Ghost-Administrator beansprucht haben.

Bestätigen Sie zur Überprüfung, dass Sie tatsächlich MySQL/MariaDB und nicht SQLite verwenden. Navigieren Sie unten links zu Ihrem Benutzersymbol:

Jetzt können Sie sicher sein, dass Sie tatsächlich den separaten Datenbankcontainer verwenden, der als mysql angezeigt wird unabhängig davon, ob Sie ein MySQL- oder MariaDB-Docker-Image verwenden:

Sie können auch sehen, dass die anderen drei Parameter:Version, Umgebung und E-Mail, basierend auf unseren oben genannten Schritten wie erwartet eingestellt sind. Das war's! Sie haben Ghost erfolgreich als selbst gehostete Instanz auf Ihrem Server bereitgestellt!

Tipps zur Wartung Ihrer selbstgehosteten Ghost-Instanz

Hier sind ein paar Tipps, die Ihnen bei der Wartung Ihrer Ghost-Instanz helfen werden.

Ghost-Protokolle in Echtzeit überwachen

Wenn Sie die Protokolle des Containers überprüfen möchten, während er in Echtzeit bereitgestellt wird, können Sie Folgendes ausführen:

docker logs -f ghost_ghost_1

Geist-Volumes ohne Ausfallzeit sichern und wiederherstellen

Mit einem Cloud + Local-Ansatz können Sie Ihre Ghost-Volumes ohne Ausfallzeiten sichern und wiederherstellen.

Ghost-Container ohne Ausfallzeiten aktualisieren

Mit der --scale Flag auf Docker Compose können Sie einen neuen Container basierend auf der neuesten Version von Ghost erstellen. Wenn es fertig ist, können Sie das alte entfernen. Dies führt zu null Ausfallzeiten.

Es gibt noch ein paar weitere Tipps, die Sie im folgenden Artikel lesen können.

Möglicherweise möchten Sie auch Ghost-Designs mithilfe von GitHub-Aktionen bereitstellen und verwalten, um Ihre Arbeit zu vereinfachen.

Wenn Sie auf einen Fehler stoßen, Probleme haben oder einen Vorschlag haben, lassen Sie es mich bitte wissen, indem Sie unten einen Kommentar hinterlassen.


Linux
  1. So installieren Sie WordPress mit Docker, eine leicht verständliche Anleitung

  2. Vollständiger Anfängerleitfaden für die Docker-Protokollierung

  3. 7 nützliche Tipps zum Selbsthosten einer Ghost-Instanz mit Docker

  4. Vollständiger Leitfaden zum Selbsthosten von Rocket.Chat mit Docker

  5. So aktualisieren Sie den Docker-Container ohne Ausfallzeiten

Vollständiger Sed-Befehlsleitfaden [Erklärt mit praktischen Beispielen]

Vollständiger Leitfaden für Self-Hosting Plausible [Datenschutzfreundliche Google Analytics-Alternative]

Eine vollständige Anleitung zur Installation von Tomcat unter Linux

Ubuntu Firewall UFW – Eine vollständige Anleitung

Docker auf Ubuntu installieren – Eine Schritt-für-Schritt-Anleitung

Linux-Verzeichnisbefehle:Eine vollständige Anleitung