Benutzer-Werkzeuge

Webseiten-Werkzeuge


cool:ghost
Alle Anleitungen in diesem Wiki beziehen sich auf Uberspace 6. Die Dokumentation für U7 findest du im neuen Manual. Im Lab findest du außerdem von Usern erstellte Anleitungen für verschiedene Projekte.

Uberspace 6 basiert auf CentOS 6, welches ab Ende 2020 keine Updates mehr bekommt. Wir raten dir, bis dahin auf Uberspace 7 umzuziehen. Eine Anleitung zum Umzug findest Du hier: uberspace2uberspace

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
cool:ghost [2019/03/12 12:06]
uberspace [Vorbereitungen]
cool:ghost [2020/04/14 16:35] (aktuell)
uberspace
Zeile 1: Zeile 1:
-====== Mit Ghost ein schlankes Blog betreiben ====== +Hier stand bisher unsere Anleitungum Ghost auf deinem Uberspace zu installieren. ​Da Uberspace 6 Ende 2020 ausläuft (siehe oben) raten wir dringend ​davon ab, noch neue Projekte auf einem 6er Uberspace ​zu startenStattdessen empfehlen ​wir, neue Projekte auf einem neuen Uberspace 7 zu beginnenEine passende ​[[https://lab.uberspace.de/​guide_ghost.html|Ghost-Anleitung]] findest ​du im [[https://lab.uberspace.de/|Lab]].
- +
-Ghost ist ein ambitioniertes Open Source-Projektdas 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 [[http://​daringfireball.net/​projects/​markdown/​|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 [[http://​christophvoigt.com/​how-to-setup-ghost-on-uberspace-de/​|Christoph Voigt]], [[http://​ghost.jotbe.io/​setting-up-ghost-on-uberspace/​|Jan Beilicke]], [[https://​postpoeia.name/​blogs/​mytho/​2013/​09/​21/​ghost-auf-uberspace-installieren/|Tobias Rademacher]],​ [[https://​twitter.com/​mxey|Maximilian Gaß]] und [[https://​dev.kampfq.eu/​2017/​07/​29/​ghost-1-0-auf-uberspace/​|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.  +
- +
-<note important>​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/''​. +
-</​note>​ +
-==== Vorbereitungen ==== +
- +
-Ghost ist in [[development:​nodejs|nodejs]] geschrieben,​ daher brauchst du erstmal eine aktuelle Version von nodejs. Wir legen dir die nodejs-Version ''​10''​ ans Herz denn aktuell ist dies die letzte LTS-Version.  +
- +
-<​code>​ +
-[lisbeth@amnesia ~]$ echo '​export PATH=/​package/​host/​localhost/​nodejs-10/​bin:​$PATH'​ >> ~/​.bash_profile +
-[lisbeth@amnesia ~]$ source ~/​.bash_profile +
-[lisbeth@amnesia ~]$ node -v +
-</​code>​ +
-    +
-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 [[development:​nodejs#​problemfaelle|Schwierigkeiten]] kommenDaher passen ​wir temporär die Umgebungsvariable andie 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: +
- +
-<​code>​ +
-[lisbeth@amnesia ~]$ cat > ~/.npmrc <<​__EOF__ +
-prefix = $HOME +
-umask = 077 +
-__EOF__ +
-</​code>​ +
- +
-Installiere ''​knex-migrator'':​ +
- +
-<​code>​ +
-[lisbeth@amnesia ~]$ npm install -g knex-migrator +
-</​code>​ +
- +
- +
-==== 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. +
- +
-<​code>​ +
-[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 +
-</​code>​  +
- +
-<​note>​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.</​note>​ +
- +
-Die Installation der Abhängigkeiten dauert einige Minuten.  +
-==== Ghost konfigurieren ==== +
- +
-<note important>​Obwohl es seit Version 0.4 möglich ist, Ghost in einem [[http://​www.allaboutghost.com/​how-to-install-ghost-in-a-subdirectory/​|Unterordner]] ​zu installieren,​ geht das bei uns nichtUnser Apache unterstützt aus Sicherheitsgründen die ''​ProxyPassReverse''​-Anweisungen nicht, die Ghost für dieses Setup benötigt. </​note>​ +
- +
-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.  +
- +
-<​code>​ +
-[lisbeth@amnesia ~]$ GHOSTPORT=$(( $RANDOM % 4535 + 61000)); netstat -tulpen | grep $GHOSTPORT && echo "​versuch'​s nochmal"​ +
-</​code>​  +
- +
-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''​. +
- +
-<​code>​ +
-[lisbeth@amnesia ~]$ echo $GHOSTPORT +
-</​code>​  +
- +
-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: +
- +
-<​code>​ +
-+
-    "​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"​] +
-    } +
-+
-</​code>​ +
- +
-<note important>​Ersetze die großgeschriebenen Werte durch die für deinen Account zutreffenden. Die MySQL-Zugangsdaten findest du in der [[database:​mysql#​zugangsdaten|.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 [[https://jsonlint.com/​|Tools]] zu prüfen. Das kann eine Menge Zeit und Frust sparen. ​ </​note>​ +
- +
-Nun initialisiere die Datenbank:​ +
- +
-<​code>​ +
-[lisbeth@amnesia ghost]$ NODE_ENV=production knex-migrator init +
-</​code>​ +
- +
- +
- +
-==== 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:​ +
- +
-<​code>​ +
-[lisbeth@amnesia ghost]$ cat <<​__EOF__ >> ~/html/​.htaccess +
-RewriteEngine On +
-RewriteRule ^(.*) http://​localhost:​$GHOSTPORT/​\$1 [P] +
-__EOF__ +
-</​code>​ +
- +
-<note important>​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.</​note>​ +
- +
-<note important>​ +
-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. +
-</​note>​ +
- +
-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 [[webserver:​htaccess#​rewriterule_mit_proxy|hier]]. +
- +
-==== Ghost als Dienst einrichten ==== +
- +
-<note important>​__**Beachte hierzu bitte auch [[system:​daemontools|unseren daemontools-Artikel]], //​insbesondere//​ die Abschnitte über'​s [[system:​daemontools#​logging|Logging]] und [[system:​daemontools#​einen_daemon_entfernen|das korrekte Entfernen von Diensten]].**__</​note>​ +
- +
-<​code>​ +
-[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 +
-</​code>​ +
- +
-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: +
- +
-<​code>​ +
-[lisbeth@amnesia ghost]$ sed -i -e '​s/​exec/​cd ~\/​ghost\/​\nexec/'​ ~/​etc/​run-ghost/​run +
-</​code>​ +
- +
-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 [[https://www.peleke.de/ueber/​|Frederik Niedernolte]] bedanken, der diese Schritte mal niederschrieb,​ in einem Skript zusammenfasste und uns und Euch [[https://​www.peleke.de/​ghost-1-0-aktualisierung-bei-uberspace/​|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 [[https://​ghost.org/​forum/​installation/​5105-solved-any-way-to-add-a-simple-authentication-method/​12/​|hier]] beschrieben. +
- +
-==== htaccess ==== +
- +
-Einfacher geht es mit einem [[webserver:​htaccess|.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 [[https://​github.com/​cvorn/​uberspace-ghost-password|hier]].+
cool/ghost.txt · Zuletzt geändert: 2020/04/14 16:35 von uberspace