Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Was fehlt?

Es liegt in der Natur der Sache: Ein Wiki ist niemals fertig. Wir geben uns große Mühe, mit der Entwicklung Schritt zu halten; lassen Supportanfragen direkt in neue Artikel einfließen … aber auch wir sind nicht perfekt. Wenn du hier nicht fündig wirst: Nicht schmollen - Bescheid sagen! Unter hallo@uberspace.de steht dir unser Team gerne bereit. Hand drauf!

cool:ghost
Alle Anleitungen in diesem Wiki beziehen sich auf Uberspace 6. Die Dokumentation für U7 findest du im neuen Manual.

Mit Ghost ein schlankes Blog betreiben

Ghost ist ein ambitioniertes Open Source-Projekt, das es sich zum Ziel gesetzt hat, eine freie, schlanke Blog-Plattform zu werden, da vorhandene Blog-Software inzwischen zu komplexen Content Management Systemen angewachsen sind. Ghost beschreibt sich selbst ganz treffend mit den Worten A beautifully designed platform dedicated to one thing: Publishing.

Dabei setzt es auf ein einfaches Interface und verwendet als Beschreibungssprache für die Formatierung der Texte Markdown und übersetzt dieses nach dem WYSIWYG-Prinzip in eine Echtzeit-Ansicht der finalen HTML-Ausgabe. Noch dazu ist Ghost responsive und sieht auf dem Smartphone, dem Tablet und dem Notebook schick aus.

Bedanken möchten wir uns im Vorfeld bei allen Ubernauten, die in der Vergangenheit ihre Ghost-Installationen dokumentiert haben. Vor allem gilt unser Dank Christoph Voigt, Jan Beilicke, Tobias Rademacher, Maximilian Gaß und Benjamin Ißleib für ihre sachdienlichen Hinweise und die Vorarbeit.

Ghost installieren

Wir gehen im Folgenden Artikel davon aus, dass Du Ghost aus dem Verzeichnis ~/ghost heraus betreiben möchtest. Sollte dem nicht so sein, musst Du den Pfad jeweils entsprechend anpassen.

Wir raten ausdrücklich davon ab, Ghost direkt aus dem DocumentRoot ~/html heraus zu betreiben (oder irgendeinem Unterordner davon oder überhaupt einem Ordner unterhalb von /var/www/virtual/$USER/). Befindet sich die Ghost-Installation nämlich im DocumentRoot, so sind config-Dateien, deine sqlite-Datenbank und der nodejs-Code über den Browser erreichbar. Damit liessen sich Passwörter und unveröffentlichte Artikel auslesen - oder gar automatisiert feststellen, welche User veraltete und künftig ggfs. anfällige Versionen von Ghost einsetzen. Bitte sieh also von der Installationen direkt im DocumentRoot (also in ~/html bzw /var/www/virtual/lisbeth/html/) ab und installiere Ghost in Dein Home-Verzeichnis unter /home/$USER/ bzw. /home/lisbeth/.

Vorbereitungen

Ghost ist in nodejs geschrieben, daher brauchst du erstmal eine aktuelle Version von nodejs. Wir legen dir die nodejs-Version 6 ans Herz denn aktuell ist dies die letzte LTS-Version.

[lisbeth@amnesia ~]$ echo 'export PATH=/package/host/localhost/nodejs-8/bin:$PATH' >> ~/.bash_profile
[lisbeth@amnesia ~]$ source ~/.bash_profile
[lisbeth@amnesia ~]$ node -v

Der letzte Befehl sollte dann die in dem PATH angegebenen Version von nodejs ausgeben.

Wenn jemand bereits sqlite3 mittels npm installiert hat, kann es zu Schwierigkeiten kommen. Daher passen wir temporär die Umgebungsvariable an, die das Temp-Verzeichnis des Uberspace vorgibt:

  [lisbeth@amnesia ~]$ export TMPDIR=`mktemp -d /tmp/XXXXXX`

Um mit npm global Pakete installieren zu können ist das Setzten eines Prefix-Pfads in der .npmrc nötig:

[lisbeth@amnesia ~]$ cat > ~/.npmrc <<__EOF__
prefix = $HOME
umask = 077
__EOF__

Installiere knex-migrator:

[lisbeth@amnesia ~]$ npm install -g knex-migrator

Installation

Die Installation von Ghost erweist sich als verhältnismäßig einfach. Zuerst lädst du das aktuelle zip-Archiv herunter, entpackst es in einem eigenen Verzeichnis und startest mittels npm install --production die Installation der nötigen Abhängigkeiten.

[lisbeth@amnesia ~]$ curl -L https://ghost.org/zip/ghost-latest.zip -o ghost-latest.zip
[lisbeth@amnesia ~]$ unzip ghost-latest.zip -d ghost && cd ghost
[lisbeth@amnesia ghost]$ npm install --python="/usr/local/bin/python2.7" --production
Durch die Angabe der spezifischen Python-Version ist die obige Zeile distributions-unabhängig. Auf einem CentOS 6-Host kannst darauf optional verzichten. Wir lassen sie die Einfachheit halber stehen.

Die Installation der Abhängigkeiten dauert einige Minuten.

Ghost konfigurieren

Obwohl es seit Version 0.4 möglich ist, Ghost in einem Unterordner zu installieren, geht das bei uns nicht. Unser Apache unterstützt aus Sicherheitsgründen die ProxyPassReverse-Anweisungen nicht, die Ghost für dieses Setup benötigt.

Als nächstes benötigst du einen Port >61000 und <65535. Folgender Befehl sucht Dir einen zufälligen raus und prüft direkt, dass da nicht schon etwas anderes läuft.

[lisbeth@amnesia ~]$ GHOSTPORT=$(( $RANDOM % 4535 + 61000)); netstat -tulpen | grep $GHOSTPORT && echo "versuch's nochmal"

Diesen Port benötigst du an zwei kritischen Stellen: Für die config.production.js und in deiner .htaccess. Um ihn dir ausgeben zu lassen, verwendest Du einfach echo.

[lisbeth@amnesia ~]$ echo $GHOSTPORT

Nun muss die Konfigurationsdatei, die config.production.json etwas angepasst werden:

  [lisbeth@amnesia ghost]$ nano core/server/config/env/config.production.json

Aussehen sollte die Datei dann wie folgt:

{
    "url": "DEINEURL",
    "database": {
        "client": "mysql",
        "connection": {
            "host"     : "localhost",
            "user"     : "DEINUSERNAME",
            "password" : "DEINMYSQLPASSWORD",
            "database" : "DEINEMYSQLDATENBANK",
            "charset"  : "utf8"
        }
    },
    "server": {
        "host": "127.0.0.1",
        "port": "GHOSTPORT"
    },
    "auth": {
        "type": "password"
    },
    "paths": {
        "contentPath": "content/"
    },
    "logging": {
        "level": "info",
        "rotation": {
            "enabled": true
        },
        "transports": ["file", "stdout"]
    }
}
Ersetze die großgeschriebenen Werte durch die für deinen Account zutreffenden. Die MySQL-Zugangsdaten findest du in der .my.cnf. Die Zeile mit der url, welche der entsprechen sollte, unter der du Ghost erreichen möchtest, und der Part „server“ sind in der vorhandenen Datei nicht vorgesehen und müssen ergänzt werden. Da .json-Dateien es sehr genau nehmen mit der Syntax, empfiehlt sich diese nochmal mittels eines extra Tools zu prüfen. Das kann eine Menge Zeit und Frust sparen.

Nun initialisiere die Datenbank:

[lisbeth@amnesia ghost]$ NODE_ENV=production knex-migrator init

Ghost nach draußen erreichbar machen

Nun erstellst du in deinem DocumentRoot noch eine .htaccess-Datei, so dass du dein Ghost-Blog entweder über https://lisbeth.amnesia.uberspace.de erreichst:

[lisbeth@amnesia ghost]$ cat <<__EOF__ >> ~/html/.htaccess
RewriteEngine On
RewriteRule ^(.*) http://localhost:$GHOSTPORT/\$1 [P]
__EOF__
Aufgepasst: Du solltest diesen Befehl wirklich so wie hier gezeigt ausführen, dazu kopierst Du ihn am besten vollständig in die Shell. Wir machen das absichtlich so, damit die Variable $GHOSTPORT verwendet werden kann. Wenn Du das einfach in einen Dateieditor kopierst, wird es nicht funktionieren.
Wenn du, trotz unserer Empfehlung, die Datei mit cat zu befüllen, doch einen Editor benutzt, bedenke bitte, dass bei
RewriteRule ^(.*) http://localhost:$GHOSTPORT/\$1 [P]

das $1 escaped ist! Der Eintrag muss dann irgendwie so aussehen (also ohne Backslash am Ende), damit das funktioniert:

RewriteRule ^(.*) http://localhost:61001/$1 [P]

61001 ist natürlich zu ersetzen.

Wenn Ghost über eine eigene (Sub-)Domain betrieben werden soll, muss die url-Zeile in der config.production.json entsprechend angepasst werden. Im Falle einer Subdomain gehört die .htaccess dann allerdings in /var/www/virtual/$USER/sub.domain.tld.

Weitere Hinweise zu den RewriteRules mit Proxy findest du hier.

Ghost als Dienst einrichten

Beachte hierzu bitte auch unseren daemontools-Artikel, insbesondere die Abschnitte über's Logging und das korrekte Entfernen von Diensten.
[lisbeth@amnesia ghost]$ test -d ~/service || uberspace-setup-svscan
[lisbeth@amnesia ghost]$ uberspace-setup-service ghost env NODE_ENV=production node ~/ghost/index.js 2>&1

Eine kleine Anpassung der Datei ~/service/ghost/run ist nun noch von Nöten. Vor dem eigentlichen 'exec'-Befehl muss noch das Verzeichnis betreten werden, in das du Ghost installiert hast, also fügst du darüber die Zeile cd ~/ghost/ ein:

[lisbeth@amnesia ghost]$ sed -i -e 's/exec/cd ~\/ghost\/\nexec/' ~/etc/run-ghost/run

Nun musst du den Ghost-Service mittels svc -u ~/service/ghost nur noch starten und kannst dann im Browser https://lisbeth.amnesia.uberspace.de/ghost/ aufrufen, deinen Admin-Account erstellen und loslegen.

Ghost updaten

Da ghost-cli leider root voraussetzet und somit auf Uberspace nicht funktioniert, braucht es für ein Update ein paar Schritte mehr. An dieser Stelle möchten wir uns bei Frederik Niedernolte bedanken, der diese Schritte mal niederschrieb, in einem Skript zusammenfasste und uns und Euch zur Verfügung gestellt hat.

Blog vor öffentlichem Zugriff schützen

Es kann viele Gründe geben, seinen Blog nicht öffentlich zu betreiben. Zum Beispiel, um einen Launch vorzubereiten oder private Inhalte zu teilen.

Auf drei Wegen lässt sich dies realisieren:

nativ

Seit Version 0.6.4 beherrscht Ghost den Passwort-Schutz auch nativ. Nach einem Login im Ghost-Backend kann die Funktion unter General > Make this blog private durch einen Klick auf Enable password protection eingeschaltet werden. Daraufhin muss noch ein Passwort vergeben werden, das dann an die gewünschte Leserschaft herausgegeben werden kann.

Wrapper

Mittels einer Node-Anwendung, die den Zugriff regelt. Diese wird als Wrapper aufgesetzt und inkludiert die Ghost-Anwendung. Wie das geht, wird hier beschrieben.

htaccess

Einfacher geht es mit einem .htaccess-Schutz. Dabei muss jedoch beachtet werden, dass Ghost bei der Anmeldung auf der Admin-Seite unter Umständen die Daten der HTTP-Authentifikation fälschlicherweise verwendet. Daher müssen Seiten unterhalb von /ghost ausgenommen werden. Wie das genau geht, beschreibt einer unserer User hier.

cool/ghost.txt · Zuletzt geändert: 2018/02/27 17:01 von uber