KeystoneJS - Ein CMS-Framework mit Node

Keystone gilt neben Ghost als das bekannteste Open Source Content Management System auf Node.js-Basis. KeystoneJS ist allerdings kein fertiges CMS, sondern ein CMS- und Entwicklungs-Framework mit einer aktiven, allerdings auch vergleichsweise kleinen Community.

KeystoneJS ist ein bekanntes CMS-Framework mit NodeJS

Gegründet wurde Keystone 2013 von dem australischen Entwickler Jed Watson. Bis heute setzt sich das Kern-Team von Keystone aus Entwicklern der australischen Agentur Thinkmill zusammen. Ab 2017 ist es zumindest gemessen an den Contribution auf GitHub deutlich ruhiger um Keystone geworden, bis im Juli 2018 die neue Version 4 von KeystoneJS erschienen ist. Für künftige Versionen ist eine native Unterstützung derzeit angesagter Technologien wie ReactJS und GraphQL geplant.

#Keystone für Redakteure

In der Standard-Installation verfügt Keystone erst einmal nur über eine reine Autoren-Oberfläche ohne weitere Administrations- und Einstellungsmöglichkeiten. Übliche Features wie System-Einstellungen, Plugins oder Themes sind in der Keystone-Oberfläche nicht vorhanden. Der Autor bekommt über ein eher schmuckloses Dashboard Zugriff auf die verschiedenen Inhalts-Typen wie Artikel, Seiten, Kategorien oder Medien. Für die Pflege und Erstellung von Inhalten stehen traditionelle Formulare zur Verfügung. Die Oberfläche erscheint im bekannten Bootstrap-Design:

Die eher traditionelle Autoren-Oberfläche von KeystoneJS

Für ein Node-CMS ist der Verzicht auf jegliche Errungenschaften moderner Frontend-UIs etwas erstaunlich. Bis auf das Einfügen von Bildern gibt es kein Drag & Drop, kein Incontent-Editing, keine integrierte Preview und auch keinen modernen Editor wie beispielsweise bei dem Node-CMS Ghost. Die Oberfläche ist reduziert, schlicht und solide. Allerdings sollte man sich als normaler User nicht von Reviews in die Irre führen lassen, die Keystone als Alternative zu Systemen wie WordPress beschreiben: Allein die Abwesenheit erweiterter Einstellungsmöglichkeiten und das Fehlen einer Plugin-Architektur beschränken den Einsatz für normale Autoren doch recht drastisch. Keystone ist ein CMS-Framework und in erster Linie ein Werkzeug für JavaScript- und Node-Entwickler und weniger ein fertiges Autoren-Werkzeug für flexible Website-Konzepte.

#Keystone für Entwickler

Keystone folgt einem modernen JavaScript-Stack mit Node.js, dem bekannten Micro-Framework Empress.js und einer MongoDB-Datenbank. Mit Keystone Version 4 wurde die Admin-Oberfläche mit React.js, Redux, und Elemental UI als Single-Page-Application neu entwickelt. Damit setzt Keystone auf sehr verbreitete Technologien.

Für eine lokale Test-Installation müssen auf dem System Node.js, der Package-Manager npm und die MongoDB installiert sein:

  • Nodejs kann bei Nodejs.org heruntergeladen werden.
  • Der Package-Manager NPM wird automatisch mit Nodejs installiert.
  • Die Datenbank kann bei MongoDB heruntergeladen werden.

Wie bei modernen JavaScript-Projekten üblich wird KeystoneJS per npm über die Konsole heruntergeladen und installiert. Dazu reicht nach der Installation von Node und npm ein einfacher Konsolen-Befehl:

npm install keystone --save

Keystone ist kein fertiges CMS, sondern ein Web-Framework. Das merkt man bereits bei dem Setup einer neuen Webseite. Ein manuelles Setup wird in der Keystone-Dokumentation zwar detailliert beschrieben, ist allerdings derart aufwändig, dass man für einen ersten Eindruck besser auf ein automatisches Setup mit dem Programm Yeoman zurückgreifen sollte. Dafür reichen die folgenden drei Konsolen-Befehle:

npm install -g yo  // installiert yeoman
npm install -g generator-keystone  // installiert den Keystone Generator
yo keystone  // startet das Setup für ein neues Projekt

Das Setup fragt über die Konsole diverse Details zum neuen Projekt ab, unter anderem die Zugangs-Daten, die gewünschte Template-Sprache und diverse Zusatz-Features für die Webseite. Wer einen schnellen Eindruck bekommen will, sollte das Blog-Feature mit installieren, da sonst im Admin-Panel erst einmal keine neuen Seiten erstellt werden können.

Nach dem Setup wechselt man in das Verzeichnis der Webseite ( z.B. my-project) und startet über die Konsole das Projekt und den Node-Server mit:

node keystone

Die Webseite ist über http://0.0.0.0:3000 oder http://localhost:3000 erreichbar.

Etwas bedenklich an dem ganzen Prozess ist der Zugriff auf den Cloud-Service Cloudinary für die Speicherung von Bildern. Da man für die produktive Nutzung der Seite einen Zugang bei Cloudinary einrichten muss, dürfte der Nutzer oder Auftraggeber über den Rückgriff auf einen Cloud-Service in der Regel informiert sein. Ganz sichergestellt ist das allerdings nicht. Das kann problematisch werden, da man als Nutzer von dem Cloud-Zugriff in der Admin-Oberfläche erst einmal nichts mitbekommt. Dieser etwas unbekümmerte Zugriff auf externe Dienste und Ressourcen ist typisch für die moderne Frontend-Welt. Es gibt allerdings (auch jenseits der DSGVO) sehr viele Situationen und Szenarien, in denen ein externer Dienst unerwünscht oder sogar absolut Tabu ist. Von daher ist die Entscheidung von Keystone etwas unglücklich, auch wenn man offenbar mit einigem Aufwand eine lokale Speicherung von Bildern erreichen kann.

Bei der Erstellung von Themes arbeitet man bei Keystone mit Models, Middleware, Routes und Views:

  • Im Model definiert man die inhaltliche Struktur eines Seitentyps und damit auch die Eingabefelder für die Autoren im Admin.
  • In der Middleware können beispielsweise Navigationspunkte für den Admin-Bereich hinzugefügt werden, aber natürlich auch andere klassische Middleware-Funktionen wie Flash Messages oder die Authentifizierung für bestimmte Routes.
  • Über die Routes wird die URL-Struktur definiert.
  • Die Views sind die eigentlichen Templates der Webseite. Die Template-Sprache variiert je nach Konfiguration.

Code-Beispiele würden an dieser Stelle den Rahmen sprengen, sind aber leider auch in der Dokumentation von Keystone oft knapp gehalten. Bei der Ursachen-Forschung im Fall von Fehlern ist man dadurch etwas aufgeschmissen.

Schon die oben vorgestellten Grundprinzipien verdeutlichen, dass man es bei Keystone mit einem CMS-Framework und weniger mit einem klassischen CMS zu tun hat. Die Arbeit mit Models und Middleware ist für ein Framework typisch, für die Theme-Entwicklung innerhalb eines CMS aber eher ungewöhnlich. Wer die Arbeit mit Frameworks gewohnt ist, dürfte damit kaum Probleme haben. Wer aus der reinen CMS-Welt stammt, dürfte die sonst üblichen Konzepte wie eine Plugin-Architektur oder ein Permission-Framework vermissen und vor einer etwas größeren Lernkurve stehen.

#Keystone für Nicht-Entwickler

Keystone ist als CMS-Framework für Nicht-Entwickler absolut ungeeignet. Bereits die Installation erfordert den Umgang mit der Konsole und ein vergleichsweise spezielles Know How. Für Einsteiger in JavaScript dürfte das Framework ebenfalls zu komplex sein, da Kenntnisse von Framework-typischen Patterns wie Models, Middleware und Co. vorausgesetzt werden.

#Kosten

KeystoneJS ist komplett kostenfrei und steht als Open-Source-Software unter MIT-LIzenz zur Verfügung. Das CMS-Framework bietet naturgemäß keine fertigen Themes an, sondern versteht sich als reines Entwickler-Werkzeug. Angesichts der Popularität des Frameworks und der hohen Verbreitung von JavaScript dürfte es nicht allzu schwer sein, Freelancer oder Dienstleister für die Erstellung einer individuellen Webseite mit KeystoneJS zu finden. Da allerdings jeder Web-Auftritt individuell entwickelt wird und es durch die fehlende Plugin-Architektur kaum Erweiterungen für Standard-Anforderungen gibt, dürfte es bei der Entwicklung komplexerer Auftritte schnell kostspielig werden.

#Wann macht KeystoneJS Sinn?

Keystone ist kein fertiges CMS, sondern ein CMS-Framework für einfache bis mittelkomplexe Webseiten. Ein Einsatz dürfte vor allem für Webseiten von Privatleuten, kleineren Unternehmen oder dem Mittelstand sinnvoll sein, ggf. auch für kleinere Web-Projekte in größeren Unternehmen. In diesem Anwendungs-Rahmen bewegen sich auch die Beispiel-Webseiten für Keystone in der Version 3.

Eine Entscheidung für KeystoneJS dürfte eher technisch motiviert sein: Aus Redakteurs-Sicht ist das System solide, aber ohne großen Besonderheiten. Und mit knapp 100 MB inklusive aller Node-Dateien ist das System auch nicht unbeding leichtgewichtig. Interessant wird das CMS-Framework vor allem im JavaScript-Umfeld und bei API-Konzepten. Allerdings steht Keystone damit auch im Wettbewerb zu den vielen neueren Headless-CMS. Wer einen Einsatz von KeystoneJS erwägt, sollte außerdem den Rückgriff auf einen externen Cloud-Service für das Bild-Management beachten.

Ob Keystone das richtige Content Management System ist, kann nur eine individuelle Analyse zeigen. Wer dabei auf eine externe Unterstützung zurückgreifen will, der kann sich an unseren Kooperationspartner SUTSCHE wenden. SUTSCHE gehört zu den wenigen Dienstleistern, die nicht implementieren und so die unabhängige CMS-Auswahl im Interesse des Kunden begleiten können.

© by Sebastian Schürmanns, 2017 - 2024. All Rights Reserved. Built with Typemill.