CMSstash

Ghost - ein Node-CMS für Publisher

Autor: Sebastian Schürmanns

Ghost richtet sich spätestens seit Version 3 mit der Einführung umfangreicher Subscription- und Membership-Funktionen an professionelle Publisher. Diese Ausrichtung wurde bereits mit der Version 2 vom August 2018 deutlich, als sich Ghost vom reinen Blog-Konzept verabschiedete und variablere Publikations-Formen ermöglichte. Der darauf folgende Umbau hin zu einer Headless Architektur und die Veröffentlichung der Membership-Funktionen mit Version 3 im Oktober 2019 zeugen von einer klaren Roadmap und einer schnellen Transformation.

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 kontroverse Diskussionen um neue Technologien (Node.js vs PHP) 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 und liegen derzeit zwischen 29, Dollar und 199,- Dollar pro Monat.

Ghost für Publisher

Mit seinem Fokus auf professionelle Publisher widmet sich Ghost einer Zielgruppe, die völlig andere Anforderungen an ein CMS stellt. Für Publisher ist nicht die Veröffentlichung von Content das Ziel, sondern die Monetarisierung von Inhalten. Es ist ironisch, dass die Bedürfnisse professioneller Autoren und Publisher von den meisten Content Management Systemen in der Vergangenheit kaum wahrgenommen wurden. Inzwischen ist allerdings ein verstärkter Fokus spürbar. Dafür sprechen Initiativen wie Newspack von WordPress, dafür sprechen auch zahlreiche von Verlagen geführte CMS-Projekte wie Chorus, Arc, Clay oder Thunder, dafür sprechen aber auch zahlreiche Subscription-Startups wie der Newsletter-Service Substack oder hierzulande das von Journalisten gegründete Membership-Startup Steady.

Was bietet Ghost den Publishern konkret? Zunächst einmal ist Ghost für seine sehr fokussierte und moderne Autorenoberfläche bekannt, die in vieler Hinsicht an die viel gerühmte Author Experience der Blog-Plattform Medium erinnert. 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:

Screenshot Ghost Editor

Bereits mit Version 2.0 ist der alte Markdown-Editor durch einen modernen Block-Editor ersetzt worden. Der aktuelle Editor erinnert in der Handhabung stark an Medium, Slack oder eben auch an Gutenberg. 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. Inhalte werden dabei im JSON-Format abgespeichert, was einem recht jungen Trend folgt.

Aus Autoren-Sicht hat der Editor allerdings auch seine Grenzen: Wer beispielsweise Tabellen erstellen will, muss auf die HTML-Syntax ausweichen oder die ebenfalls etwas unbequeme Syntax von Markdown Extra verwenden. Komplexere Inhalte sind damit nur schwer umzusetzbar, allerdings ist Ghost auch eher für einfachere Content-Strukturen gedacht und die Entwicklung des Editors steht noch am Anfang. Am Ende gilt natürlich auch für Ghost, dass nicht alle Autoren das Handling eines modernen Block- und Inline-Editors schätzen.

Das neue Membership-Feature von Ghost lässt sich unter dem Menüpunkt "Lab" sehr einfach anhand dieser Kurz-Anleitung einrichten. Mit dem Eintrag diverser Angaben wie zum Beispiel das Pricing, die Membership-Optionen, die Payment-Informationen und einiges mehr ist alles erledigt. Für das Frontend hat Ghost das frei Verfügbare Theme "Lyra" entwickelt.

Screenshot Einrichtung Ghost Membership

Das Membership-Modul ergänzt die Webseite um einen neuen Login-Bereich und unterteilt die Inhalte zwischen freien Beiträgen, Membership-Inhalten und bezahlten Inhalten. Damit können grundsätzlich die verschiedensten Paid-Modelle umgesetzt werden wie Premium-Content, Paid-Newsletter, Premium-Communities und ähnliches. Einziger Wermutstropen: Derzeit steht als Zahlungsoption nur der Payment-Anbieter Stripe zur Verfügung und die einzig mögliche Währung ist der US-Dollar. Eine (rechtssichere) Nutzung für den deutschen E-Commerce ist damit wohl nicht möglich. Es bleibt zu hoffen, dass Ghost intensiv an einer Lokalisierung und Ausweitung des Moduls arbeitet.

Bereits mit Version 2 hat sich Ghost sehr stark gewandelt und die Publisher als neue Kern-Zielgruppe in den Blick genommen. In Version 2 war in dieser Hinsicht jedoch noch kein echtes Alleinstellungs-Merkmal erkennbar. Mit dem Membership-Feature in Version 3 wird das Versprechen von Ghost nun eingelöst. Damit dürfte sich Ghost eine gute Ausgangsposition im Wettlauf um die Gunst einer neuen Publisher-Generation sichern.

Dienstleister

Wer sich für ein CMS entscheidet, der benötigt für die Einrichtung und Integration des Systems in der Regel Unterstützung von Web-Agenturen oder Freelancern. Wir stellen hier bis zu drei spezialisierte Dienstleister vor. Weitere Dienstleister finden Sie in unserer Datenbank.

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 Node.js und der in Node bereits integrierte Package-Manager NPM installiert werden. 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}} 

Sehr gut dokumentiert sind auch die public und private APIs von Ghost, die den eigentlichen Kern der Software bilden und sämtliche Inhalte ausliefern. Allerdings wurde das System erst im Zuge von Ghost 2 entkoppelt, sodass mit der REST-API nun auch ein Einsatz als Headless-CMS möglich ist. Im Blog von Ghost gibt es eine kurze Einführung zu Headless- und JAMstack-Konzepten, ein Tutorial zur Verwendung von Ghost als Headless CMS findet man zum Beispiel auf Snipcard.

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.Dennoch ist Ghost auch für Nicht-Entwickler eine gute Option.

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-Spanne 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 und Dienstleister finden. Jeder fortgeschrittene JavaScript-Entwickler sollte in der Lage sein, mit Ghost eine individuelle Webseite zu erstellen.

Wann macht Ghost Sinn?

Mit dem neuen Membership-Feature in Version 3 richtet sich Ghost noch stärker als zuvor an professionelle Publisher. Und tatsächlich entwickelt Ghost hier ein spannendes Alleinstellungsmerkmal. Zwar können auch andere Systeme über Plugins und Extensions um ähnliche Funktionen erweitert werden. Solche Umbauten sind jedoch meist recht komplex und ggf. auch kostspielig. Auch wenn die Membership-Features von Ghost noch etwas rudimentär wirken und derzeit auf den US-Markt beschränkt sind - die Aussicht auf eine Content-Monetarisierung "Out of the Box" dürfte die Herzen vieler Publisher höher schlagen lassen.

Daneben bietet sich Ghost natürlich für Corporate Websites und klassischerweise für Blogs an. Genutzt wird Ghost unter anderem von DuckDuckGo, Mozilla oder Tinder. Ghost selbst gibt die Zahl der Installationen mit einer halben Millionen an. Hinzu kommen die zahlreichen Accounts auf Ghost.org. Nicht zuletzt dürfte sich Ghost im weiterhin boomenden Node- und JavaScript-Umfeld sehr gut in die IT-Strategie vieler Unternehmen einfügen.

Regelmäßige Neuigkeiten über Content-Management-Systeme und Website-Publishing gibt es von CMSstash auf Twitter.

Zuletzt aktualisert: 27.10.2019