CMSstash

Ghost - Node-CMS für Blogs und Websites

Autor: Sebastian Schürmanns

Ghost ist das bekannteste CMS auf Basis von Node.js. Mit Version 2.0 hat Ghost im August 2018 einen Wechsel von einer reinen Blog-Plattform hin zu einer allgemeinen Plattform für Webseiten vollzogen. Die Entwicklung ist nicht ganz ohne Ironie, da der Gründer O'Nolan im Jahr 2013 einen ähnlichen Werdegang von WordPress zum Anlass genommen hatte, um mit Ghost eine reduzierte und rein auf das Bloggen spezialisierte Plattform zu schaffen. Im Unterschied zu WordPress ist Ghost allerdings auch in der Version 2.0 immer noch extrem reduziert und auf die Bedürfnisse von Autoren fokussiert.

Das Node-CMS Ghost

Initiiert wurde Ghost im Jahr 2013 von dem Entwickler John O'Nolan und der Co-Founderin Hannah Wolfe. Nachdem O'Nolan seine Idee zu einer Blog-Plattform im November 2012 veröffentlicht hatte, folgte Ende April 2013 eine viel beachtete Kickstarter-Kampagne, die bereits nach einem Tag erfolgreich finanziert war und zahlreiche Diskussionen um neue Technologien und um WordPress auslöste. Nach dem Erfolg der Kickstarter-Kampagne wurde die Ghost Foundation mit Sitz in Singapur gegründet. Mit der Foundation ist Ghost als Open Source Software (MIT-Lizenz) verankert, die Software ist über GitHub für selbst gehostete Webseiten frei verfügbar. Einnahmen erzielt das Ghost-Team mit dem kommerziellen Hosting-Service der Ghost-Plattform. Die Preise haben sich mehrfach verändert, mit Version 2.0 startet die günstigste Version bei 29,- Dollar im Monat.

Ghost für Autoren

Ghost war schon immer für seine intuitive und reduzierte Autoren-Oberfläche bekannt. Mit Ghost 2.0 dürften sich die Autoren noch wohler fühlen. Man startet mehr oder weniger auf einem leeren Blatt Papier und erstellt die Inhalte im WYSIWYG-Modus: Text-Formatierungen, Bild-Uploads oder das Embedding von externen Inhalten sind mit simplen Klick schnell und einfach erledigt. Dabei lenkt durch das extrem reduzierte Interface so gut wie nichts von der Content-Erstellung ab:

Der neue Editor von Ghost 2.0

Mit Version 2.0 ist der alte Markdown-Editor durch einen neuen Editor ersetzt worden, der in der Handhabung stark an Medium und Slack erinnert. Die Markdown-Syntax ist nicht mehr erforderlich und nur noch optional vorhanden, was vor allem Mainstream-Autoren freuen wird. Technisch hat sich Ghost dabei von dem verbreiteten Markdown-Editor SimpleMDE verabschiedet und stattdessen einen eigenen Editor unter dem Namen "koenig" entwickelt, der auf dem Editor-Framework Mobiledoc-Kit (Ember.js) basiert. Mit dem neuen Editor werden die Inhalte nicht mehr im Markdown-Format abgespeichert, sondern im JSON-Format.

Job-Angebote für CMS-Experten

CMS-Experten wie Web-Entwickler, Produkt-Owner oder Projekt-Manager sind heiß begehrt. Daher bietet CMSstash in Zukunft ein Job-Board an. Job-Board ansehen

Aus Autoren-Sicht hat der Editor allerdings auch seine Grenzen: Wer beispielsweise Tabellen erstellen will, muss auf die HTML-Syntax ausweichen. Markdown Extra wird nicht untersützt. Komplexere Inhalte sind damit nur schwer umzusetzbar, allerdings ist Ghost auch eher für einfachere Content-Strukturen gedacht und die Entwicklung des Editors steht mit Ghost 2.0 noch am Anfang.

Mit der Version 2.0 schließt Ghost einmal mehr an die Spitze einer Entwicklung auf, die zahlreiche andere Systeme noch vor sich haben oder derzeit durchlaufen. Die Usability von Editoren wie Slack oder Medium ist zwar nicht für alle Website-Typen unumstritten und das formular-basierte Editing dürfte weiterhin seinen Platz in der CMS-Welt haben. Doch zumindest für einfach strukturierte Inhaltsseiten dürfte sich die neue Generation der Editoren auf mittlere Sicht durchsetzen, auch wenn diese Umstellungen wie bei WordPress und Gutenberg nicht selten von kontroversen Diskussionen begleitet werden.

Ghost für Entwickler

Der Technologie-Stack von Ghost war zu seiner Entstehungszeit neu und aufsehenerregend: Mit Node.js als serverseitiger Sprache, Ember.js für die Admin-Oberfläche und Handlebars.js als Template-Sprache setzt Ghost komplett auf JavaScript, während die Speicherung von Daten mit einer MySQL-Datenbank vergleichsweise traditionellen Mustern folgt. Inzwischen ist serverseitiges JavaScript in der Entwickler-Szene stark verbreitet, allerdings gilt auch heute noch, dass die meisten Mainstream-Hoster in ihren Standard-Angeboten kein Node.js anbieten.

Eine lokale Test-Installation von Ghost ist vergleichsweise schnell durchgeführt. Dafür muss lediglich im Vorfeld Node.js installiert werden, der automatisch den Package-Manager npm mitbringt. Anschließend kann über die Konsole mit einem kurzen npm-Befehl das CLI (Command Line Interface) von Ghost heruntergeladen werden:

npm install -g ghost-cli

Mit dem CLI lässt sich eine lokale Installation in einem neuen (leeren) Ordner mit einem einzigen Befehl erzeugen:

ghost install local

Nach der Installation wird Ghost automatisch gestartet und ist über die folgende URL erreichbar:

http://localhost:2368

Weitere nützliche CLI-Befehle sind ghost start, ghost stop und ghost restart. Ein detailliertes Setup ist über ghost setup möglich, allerdings wird das Setup bereits bei der Installation im Hintergrund ausgeführt und damit auch eine Datenbank (MySQL oder SQLite3 bei einer lokalen Installation) sowie alle nötigen Ressourcen eingerichtet. Das Standard-Theme "Caspar" dient gleichzeitig als Mini-Einführung in das System. Wer den Admin-Bereich besuchen will, gelangt automatisch auf einen Einrichtungs-Assistent unter http://localhost:2368/ghost/#/setup/one.

Mit Ghost 2.0 wurden zahlreiche neue Features für Entwickler eingeführt, die eine Erstellung von Webseiten auch jenseits einfacher Blog-Konzepte ermöglichen. Die wichtigsten Features sind neben einem Multi-Language-Support die neuen Custom Routes, mit denen sich beliebige Seiten- und URL-Strukturen abbilden lassen. Routes sind in anderen Systemen Alltag, von daher mag es etwas verwundern, dass Ghost die Custom Routes erst mit der Version 2.0 eingeführt hat. Allerdings hat sich Ghost eben auch erst mit Version 2.0 von dem starren Blog-Konzept gelöst, bei dem Custom Routes mehr oder weniger überflüssig waren.

Routes werden bei Ghost mit YAML definiert, einer vor allem bei jüngeren Systemen weit verbreiteten und sehr einfachen Auszeichnungssprache. Im einfachsten Fall wird bei einer Route die URL mit einem Template gemapped:

routes:
  /: home
  /about/careers/: about-careers
  /about/team/: about-team

Allerdings können auch noch zahlreiche andere Aspekte wie Filter oder Controller angegeben werden:

routes:
  /custom-slug/: # index URL
    controller:   # type of route, 'channel' is the only supported value (optional)
    filter:          # a filter string (optional)
    data:         # a data object (optional)
    rss:          # true/false (optional, default: true)
    content_type: # content type, eg 'rss' for RSS (optional, default: html)

Neben den einfachen Routes gibt es auch noch Collections (eine Gruppe von Posts mit dem gleichen Filter wie zum Beispiel Blog-Posts) oder Taxonomies (eine Gruppe von Posts mit den gleichen Eigenschaften wie zum Beispiel einen Autor oder einen Tag). Der Unterschied zwischen beiden Varianten ist, dass eine Collection Bestandteil der URL eines Artikels ist (z.b. "meine-seite/blog/mein-artikel"), während ein Tag nicht Bestandteil der URL eines Artikels ist (z.B. "meine-seite/mein-artikel" der auch unter der URL "meine-seite/tag/technologie" aufgelistet wird).

routes:
  /: home
  /about/careers/: about-careers
  /about/team/: about-team

collections:
  /:
    permalink: /{slug}/
    template:
      - index

taxonomies:
  tag: /tag/{slug}/
  author: /author/{slug}/

Die Entwicklung von Themes folgt dagegen dem üblichen Muster und nutzt das verbreitete Handlebars.js als Template-Sprache. Ein Theme besteht mindestens aus drei Dateien:

Ein typisches Post-Template kann beispielsweise so aussehen (Ausschnitt):

<!-- Everything inside the #post tags pulls data from the post -->
{{#post}}

<article class="{{post_class}}">
  <header class="post-header">
    <h1 class="post-title">{{title}}</h1>
    <section class="post-meta">
      <time class="post-date" datetime="{{date format='YYYY-MM-DD'}}">
        {{date format="DD MMMM YYYY"}}
      </time> 
      {{tags prefix=" on "}}
    </section>  
  </header>
  <section class="post-content">
    {{content}}
  </section>     
</article>

{{/post}} 

Die verfügbaren Functions und Helpers werden in der ausführlichen Theme-Dokumentation von Ghost erläutert. Sehr gut dokumentiert sind auch die public und private APIs von Ghost, die den eigentlichen Kern der Software bilden und sämtliche Inhalte ausliefern.

Ghost für Nicht-Entwickler

Der Gründer O'Nolan gehörte ursprünglich zum Entwickler-Team von WordPress und hat Ghost mit dem Anspruch ins Leben gerufen, eine WordPress-Alternative für Blogger zu sein. Dementsprechend kann man auf der Ghost-Plattform als Nicht-Entwickler genauso wie bei Medium einfach einen Account einrichten und loslegen. Schon bei der Entstehung von Ghost wurde jedoch kritisiert, dass mit der Wahl von Node.js als technologische Basis der Betrieb einer selbst gehosteten Ghost-Website im Vergleich zu WordPress deutlich schwerer wird, zumindest sind die Einstiegs-Hürden höher. Auch die Theme-Auswahl im Marketplace ist mit einigen Dutzend Varianten vergleichsweise bescheiden. Hinzu kommen die Einstiegspreise, die sich über die Jahre von 5,- Dollar pro Monat auf jetzt 29,- Dollar erhöht haben.

Dieser Wandel spiegelt sich auch in der aktuellen Headline von Ghost wieder, in der sich Ghost als "professionelle Publishing Plattform" bezeichnet. Ghost vergleicht sich immer noch mit WordPress, Tumblr und Medium, zielt allerdings nicht mehr auf den normalen Hobby-Blogger ab, sondern eher auf professionelle Publisher und Journalisten. Für diese Zielgruppe (und natürlich für JavaScript-Entwickler) ist Ghost immer noch eine der besten Alternativen im Blog-Bereich und künftig möglicherweise auch für normale Webseiten.

Kosten

Als selbstgehostete Software ist Ghost open source und komplett kostenfrei. Dagegen sind Accounts bei der gehosteten Version von Ghost kostenpflichtig. Die Preise sind gestaffelt ( 29,- / 79,- / 199,- Dollar pro Monat) und richten sich nach dem Traffic und der Anzahl der Editoren. Auch die meisten Themes im Marketplace sind kostenpflichtig mit einer Preis-Range zwischen 19,- und 49,- Dollar. Die Entwicklungskosten für eine eigene Ghost-Seite mit einem individuellen Theme dürften im üblichen (eher unteren) Rahmen liegen. Aufgrund der großen Bekanntheit und Verbreitung von Ghost dürfte man relativ einfach Entwickler finden, jeder fortgeschrittene JavaScript-Entwickler sollte eigentlich in der Lage sein, mit Ghost eine individuelle Webseite zu erstellen.

Wann macht Ghost Sinn?

Mit Ghost werden sehr viele bekannte Corporate Blogs betrieben, unter anderem von DuckDuckGo, Mozilla oder Tinder. Vor allem im weiterhin boomenden Node- und JavaScript-Umfeld von Unternehmen fügt sich Ghost sehr gut in die Landschaft ein. Neben den Corporate Blogs gibt es nach wie vor unzählige Blogs von Privat-Personen und aus dem Hobby-Bereich. Ghost selbst gibt die Zahl der Installationen mit einer halben Millionen an, plus die zahlreichen Accounts auf Ghost.org.

Die hohe Verbreitung, die gute Usability und die moderne Technologie machen Ghost auf jeden Fall zu einer spannenden Alternative. Allerdings ist Ghost auch selbst nicht alternativlos: Gerade unter Entwicklern, die von Ghost im Anfangsstadium besonders angesprochen wurden, haben sich für einfache Blogs inzwischen die Static Site Generatoren wie Hugo oder Jekyll etabliert, vermutlich nutzen nur noch die wenigsten Entwickler für ihre Blogs ein klassisches CMS. Gleichzeitig dürften Privat-Personen ohne Entwickler-Kenntnisse wohl immer noch vom Technologie-Stack abgeschreckt werden oder auf bekanntere Plattformen wie Medium ausweichen. Den Anspruch eines WordPress-Killers hat Ghost daher nie erfüllt, und wohl auch vor diesem Hintergrund ist der Wandel zur professionellen Publishing-Plattform mit einer entsprechenden Zielgruppe zu verstehen. In der Zielgruppe der professionellen Publisher und im Bereich der Corporate Blogs hat Ghost aber sicherlich einen starken Stand.

Mit Ghost 2.0 wird das Einsatzfeld nun deutlich erweitert. Man kann gespannt sein, ob sich Ghost nach dem Corporate Blogging auch als Software für einfache Corporate Websites und andere Publishing-Projekte etablieren kann. Für Ghost spricht auf jeden Fall die aktuell sehr angesagte JavaScript-Technologie, die API-Struktur und die lange Erfahrung, die das Team von vielen anderen sehr jungen JavaScript-CMS unterscheidet.

Auch andere Experten lesen gerne gute Inhalte und freuen sich, wenn Du diesen Artikel zum Beispiel über Twitter teilst. Auf Twitter gibt es außerdem von @CMSstash tägliche Updates.

Zuletzt aktualisert: 29.08.2018