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

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 und Maximilian Gaß für ihre sachdienlichen Hinweise und die Vorarbeit.

Ghost installieren

Vorbereitungen

Ghost ist in nodejs geschrieben, daher brauchst du erstmal eine aktuelle Version von nodejs. Wir legen dir die nodejs-Version 4 ans Herz denn aktuell ist Ghost nicht mit dem neuen 5er-Versionszweig von NodeJS kompatibel.

[lisbeth@amnesia ~]$ echo 'export PATH=/package/host/localhost/nodejs-4/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`

Installation

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/.

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, den du dir aussuchen kannst. Ob dein ausgewählter Port bereits vergeben ist, kannst du mittels /usr/sbin/ss -ln | fgrep PORT überprüfen. Bleibt die Ausgabe leer so ist der Port noch frei. Diesen Port benötigst du an zwei kritischen Stellen: Für die config.js und in deiner .htaccess.

Der Einfachkeit halber kannst du deinen freien Port in eine eigene Umgebungsvariable schreiben, so dass weder die config.js noch die .htaccess manuell nachbearbeiten musst:

  [lisbeth@amnesia ~]$ GHOSTPORT=DEINPORT
Hier musst Du natürlich den Port einsetzen den Du Dir ausgesucht hast, wenn Du am Ende immer noch DEINPORT darin stehen hast, machst Du etwas falsch.

Zuerst erstellst du basierend auf der Vorlage deine config.js:

  [lisbeth@amnesia ghost]$ cp config.example.js config.js  

An der config.js müssen nun auch einige Änderungen vorgenommen werden. Relevant ist für dich der Abschnitt, der mit ### Production beginnt. Dort passt du die Blog-URL und den Port an. Dazu öffnest du die config.js mit deinem bevorzugten Texteditor:

  [lisbeth@amnesia ghost]$ vi config.js

Aussehen sollte der production-Abschnitt dann wie folgt:

    production: {
        url: 'http://lisbeth.amnesia.uberspace.de',
        mail: {},
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost.db')
            },
            debug: false
        },
        server: {
            // Host to be passed to node's `net.Server#listen()`
            host: '127.0.0.1',
            // Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
            port: '2368'
        }
    },
Achte darauf, dass Du auch wirklich den production-Abschnitt änderst, es gibt mehrere Abschnitte die ähnlich aussehen, aber unterschiedlich heißen.

Entweder editierst du die Datei nun noch manuell und passt den Port an oder du ersetzt den Standard-Port 2368 mit folgender Zeile durch die zuvor in die Umgebungsvariable $GHOSTPORT geschriebene Portnummer:

  [lisbeth@amnesia ghost]$ sed -i "s/2368/$GHOSTPORT/g" ~/ghost/config.js
  

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.js 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 (Alpha)

Wir gehen in diesem Script davon aus, dass du Ghost strikt nach unserer Anleitung installiert hast. Wenn du von unserer Anleitung abgewichen sein solltest, nimm das Update bitte manuell vor.

Das Aktualisieren von Ghost ist aktuell noch ein etwas komplizierter als du es z.B. von Wordpress gewohnt bist. Zwar planen die Ghost-Entwickler bereits ihren eigenen Update-Mechanismus, doch bis dieser einsatzbereit ist haben wir kurzerhand ein eigenes Shell-Script geschrieben, das unsere Umgebung berücksichtigt. Das Script ist bisher nur auf unseren CentOS 6-Hosts getestet worden.

Weil das Script wohl nur vorübergehend benötigt wird, veröffentlichen wir es als als deutlich gekennzeichnete Alpha-Version, die dir im Optimalfall einige Minuten Arbeit abnimmt. Auch wenn das Script zwar ein Backup deines ghost-Verzeichnisses (nämlich mit angehängtem Datum und aktueller Uhrzeit des Backups in deinem Home-Verzeichnis) erstellt, so empfiehlt sich dennoch ein vorheriger Export deiner Daten im JSON-Format in den Debug-Optionen von Ghost.

Vor dem Update solltest du noch einmal sicherstellen, dass du auch wirklich die aktuellste verfügbare Version von nodejs verwendest. Andernfalls solltest du diese zuvor in deiner ~/.bashrc anpassen und sie mittels source ~/.bashrc neu einlesen. Es kann sonst vorkommen, dass das Update stillschweigend scheitert und dein Blog nicht mehr erreichbar ist.

Das Script lädst du in der aktuellen Version einfach wie folgt:

wget https://raw.github.com/dictvm/shellscripts/master/update-ghost.sh

Dann machst du es ausführbar und führst es aus:

[lisbeth@amnesia ghost]$ chmod +x update-ghost.sh
[lisbeth@amnesia ghost]$ ./update-ghost.sh

Wenn alles erfolgreich verlaufen ist, sollte deine Ghost-Installation nach einer kurzen Downtime nun wieder erreichbar sein.

Im Falle eines weiteren Ghost-Updates muss lediglich die Version im Script angepasst werden:

...
VERSION='0.7.0'
...

node 0.12

Seit Version 0.5.10 ist Ghost auch mit node.js 0.12 kompatibel.

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: 2016/03/14 13:46 von uber