{"id":1416,"date":"2022-02-23T19:22:08","date_gmt":"2022-02-23T18:22:08","guid":{"rendered":"https:\/\/informatik.htwk-leipzig.de\/seminar\/?p=1416"},"modified":"2022-02-27T21:18:49","modified_gmt":"2022-02-27T20:18:49","slug":"ghost-cms","status":"publish","type":"post","link":"https:\/\/informatik.htwk-leipzig.de\/seminar\/lehrveranstaltungen\/betriebliche-informationssysteme\/2022\/ghost-cms\/","title":{"rendered":"Ghost CMS"},"content":{"rendered":"<p>Dieser Beitrag handelt von der Software Ghost CMS (Content Management System). Zu Beginn werden CMS im Allgemeinen betrachtet und im Hinblick auf Ghost CMS genauer aufgef\u00fchrt. Es wird auf die Struktur und den Vergleich zu anderen Systemen eingegangen und das Betreiben und die Installation erl\u00e4utert.<\/p>\n<h1>Was ist ein CMS?<\/h1>\n<p>Als Content Management System (CMS) wird Software bezeichnet, die zur gemeinschaftlichen Erstellung, Bearbeitung, Organisation und Darstellung digitaler Inhalte verwendet wird. So werden mittels dieser Programme Beitr\u00e4ge f\u00fcr Blogs und anderen Formaten generiert. Anwendung finden CMS in Webseiten und anderen Medienformaten. Meist besitzt diese Art von Software graphische Benutzeroberfl\u00e4chen.<\/p>\n<p>Auch ben\u00f6tigen Autoren, die Beitr\u00e4ge erstellen, meist keine, bis wenige Programmier- oder HTML-Kenntnisse. Die Daten der Beitr\u00e4ge k\u00f6nnen dabei \u00fcber Datenbanken abgerufen und generiert werden.<\/p>\n<p>Neben den Propriet\u00e4ren CMS wie Medium gibt es Open-Source Systeme wie WordPress oder auch Ghost. Auf die Unterschiede wird im sp\u00e4teren Vergleich genauer eingegangen.<\/p>\n<h2>Welche Aufgaben erf\u00fcllt ein CMS?<\/h2>\n<p>Nat\u00fcrlich m\u00fcssen diese Systeme bestimmte Kriterien erf\u00fcllen um ihren Zweck gerecht zu werden. Diese Kriterien beinhalten unter anderem eine barrierefreie Darstellung und ein semantisches Ordnen der Inhalte. Auch muss gew\u00e4hrleistet sein, dass Content in andere Arbeitsumgebungen importiert und Exportiert werden kann. Hierbei ist ein effizienter Umgang mit gro\u00dfen Content-Mengen von N\u00f6ten. Bei der Darstellung ist ein responsives Webdesign wichtig, um eine optimale User Experience auf jedem Ger\u00e4t zu gew\u00e4hrleisten.<\/p>\n<p>Neben der Darstellung m\u00fcssen Rollen an verschiedene Nutzer vergeben und identifiziert werden k\u00f6nnen.<\/p>\n<h1>Was ist das Ghost CMS?<\/h1>\n<p>Bei dem System Ghost CMS handelt es sich um eine Open-Source-System mit einer kostenfreien Kernanwendung. Auch ein kostenpflichtiges Preismodell des \u201cPro\u201d Hosting ist vorhanden. Sie fokussiert sich sehr auf die Erstellung und Verwaltung von Inhalten und bietet wenige Freiheiten um dar\u00fcber hinaus genutzt zu werden. Weitere Features sind jedoch eine einfache Verwaltung von Mitgliedern, inklusive einem Abonnement-System, und die Erstellung von Email-Newslettern.<\/p>\n<p>Die Software des ehemaligen Kickstarter-Unternehmens basiert auf Node.js und erm\u00f6glicht ein einfaches Selfhosting durch Docker oder das Ghost command line interface.<\/p>\n<h2>Wo wird das Ghost CMS eingesetzt?<\/h2>\n<p>Im Kern ist Ghost eine Plattform f\u00fcr Blogger und andere Personen die ihren Fokus auf die Ver\u00f6ffentlichung von Inhalten richten. Sie eignet sich allerdings auch sehr gut zum Erstellen von Fotografie- und Podcastwebseiten, Zeitschriften, Guides, Dokumentationen und Firmenwebseiten. Hierbei wird bewusst auf die eingeschr\u00e4nkte Funktionalit\u00e4t zur\u00fcckgegriffen, um den Fokus auf die Ver\u00f6ffentlichung von Inhalten zu legen. Viele Tech-Firmen wie die Mozilla Foundation, DuckDuckGo und DigitalOcean nutzen bereits diese Software, um Inhalte au\u00dferhalb ihres Kernbereiches zu ver\u00f6ffentlichen.<\/p>\n<p>&nbsp;<\/p>\n<h2>Architektur des Ghost CMS<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ghost.org\/images\/docs\/concepts\/ghost-architecture_hu6c4bbd92be6e8f2ca966b7ab8d796eb5_275325_1000x0_resize_q100_h2_box_3.webp\" alt=\"Ghost Architecture\" width=\"1000\" height=\"889\" \/><\/p>\n<p>Die Architektur ist bei Ghost CMS ist in 5 Bereiche aufgebaut. Die so genannte Client App hei\u00dft \u201cGhost Admin\u201d und wird zur Erstellung und Bearbeitung von Inhalten und Einstellungen der gesamten Website verwendet. Separat dazu existiert das Frontend, welches standardm\u00e4\u00dfig mit der Templating Engine &#8222;Handlebars&#8220; betrieben wird. Als Schnittstelle f\u00fcr die Kommunikation mit sowohl der Client App, als auch dem Frontend, existiert der &#8222;Ghost Core&#8220;. Dieser zentrale Server verwaltet jegliche Daten und wird mittels einer JSON API angesteuert.<\/p>\n<p>Die Datenbank, in diesem Fall mit Objektrationaler Abbildung, speichert verschiedenste textbasierte Inhalte. Neben dem ORM-Layer gibt es den \u201cStorage Adapter\u201d. Hierbei handelt es sich um den Datenspeicher f\u00fcr gro\u00dfe Dateien wie Bilder, Videos oder Audio-Dateien. Die Besonderheit bei Ghost CMS ist das Betreiben als Headless CMS um ein eigenes Frontend bauen zu k\u00f6nnen.<\/p>\n<h1>Vergleich verschiedener CMS<\/h1>\n<p>Verglichen mit dem System \u201cMedium\u201d ist Ghost CMS wie zuvor benannt ein Open-Source-System. So ist der der Source Code f\u00fcr die \u00d6ffentlichkeit frei zug\u00e4nglich. Doch gibt es bei Medium nur ein kostenpflichtiges Abo-Modell. Auch besitzt diese Software ein gesperrtes und eingeschr\u00e4nktes Design. Der Marktanteil liegt bei Medium unter einem Prozent des gesamten World Wide Web.<\/p>\n<p>Ghost CMS kann frei und kostenpflichtig genutzt werden und besitzt freie Anpassungsm\u00f6glichkeiten. Auch hier liegt der Marktanteil bei unter einem Prozent. Im Vergleich zu der Software \u201cWordpress\u201d, dem CMS mit dem gr\u00f6\u00dften Marktanteil der Welt (ca. 60 Prozent), ist Ghost ebenfalls Open-Source und bietet freie Anpassungsm\u00f6glichkeiten. Bei beiden System ist eigenes Hosting m\u00f6glich.<\/p>\n<p>Um zu verdeutlichen wie weit WordPress verbreitet ist, wurden ca. 33% aller erstellten Webseiten des Internets mit Hilfe von WordPress erstellt.<\/p>\n<h2>Welche weiteren Typen gibt es noch?<\/h2>\n<p>Neben den klassischen Content Management Systemen wie WordPress und Medium z\u00e4hlen auch E-Commerce-Systeme wie \u201cShopify\u201d und \u201cPrestaShop\u201d zu dieser Kategorie. Diese Seiten erm\u00f6glichen das Erstellen und Administrieren von Online-Shops nach dem Baukastenprinzip.<\/p>\n<h1>Entwicklung mit Ghost und WordPress<\/h1>\n<p>Im Folgenden werden Ghost und WordPress aus der Sicht eines Entwicklers in verschiedenen Gesichtspunkten untersucht und verglichen.<\/p>\n<p>Im Rahmen des Projektes wurde daf\u00fcr die WordPress Seminar Webseite, auf der Sie sich wahrscheinlich gerade befinden, zun\u00e4chst lokal neu aufgesetzt und bez\u00fcglich ihrer Struktur untersucht. In einem weiteren Schritt wurde das Ghost CMS lokal installiert und konfiguriert und anschlie\u00dfend die Daten aus der WordPress Installation importiert. Auf diese Weise k\u00f6nnen die beiden Content Management System optimal verglichen werden.<\/p>\n<h2>Installation<\/h2>\n<p>Bez\u00fcglich der Installation haben die beiden CMS zun\u00e4chst einen sehr grundlegenden Unterschied &#8211; sie verwenden unterschiedliche Programmiersprachen. Bei beiden Systemen wird jedoch die gleiche Datenbank (MySQL) bevorzugt und die Installation beider Systeme ist mit <i>docker-compose<\/i> sehr einfach m\u00f6glich.<\/p>\n<p><b>Ghost:<\/b><b>\u00a0\u00a0\u00a0 <\/b> Node.js<\/p>\n<p><b>WordPress: <\/b>PHP<\/p>\n<h2>Lokale Entwicklung<\/h2>\n<p><b>Ghost<\/b><\/p>\n<ul>\n<li aria-level=\"1\">ausgereiftes command line tool, das <a href=\"https:\/\/ghost.org\/docs\/ghost-cli\/\">Ghost CLI<\/a><\/li>\n<li aria-level=\"1\">produziert funktionierende Installation inkl. Webserver und Datenbank<\/li>\n<li aria-level=\"1\">bietet weitere n\u00fctzliche Commands f\u00fcr Setup &amp; Updates<\/li>\n<\/ul>\n<p><b>WordPress<\/b><\/p>\n<ul>\n<li aria-level=\"1\">Webserver mit PHP und MySQL muss selbst aufgesetzt werden<\/li>\n<li aria-level=\"1\">MySQL muss manuell f\u00fcr die WordPress Installation konfiguriert werden<\/li>\n<li aria-level=\"1\">wird h\u00e4ufig durch MAMP\/XAMPP oder Docker realisiert<\/li>\n<\/ul>\n<h2>Deployment<\/h2>\n<p><b>Ghost<\/b><\/p>\n<ul>\n<li aria-level=\"1\">minimales Setup von nginx und MySQL<\/li>\n<li aria-level=\"1\">Ghost CLI und Server \u00fcbernehmen den Gro\u00dfteil der Konfiguration<\/li>\n<\/ul>\n<p><b>WordPress<\/b><\/p>\n<ul>\n<li aria-level=\"1\">\u00e4hnliches Setup zur lokalen Entwicklungsumgebung, h\u00e4ufig feines Setup der Linux Instanz<\/li>\n<\/ul>\n<p>H\u00e4ufig bieten Hosting-Betreiber auch One-Click-Installationen an, bei diesen ist so gut wie gar kein Setup notwendig, aber meist wird dadurch die Kontrolle \u00fcber das System zu einem gewissen Grad abgegeben.<\/p>\n<h2>Struktur\/Architektur<\/h2>\n<p>In <b>Ghost <\/b>sind die Server Dateien \u201cversteckt\u201d in den node_modules, Modifizierungen an dem Server sind dadurch, abgesehen von einer Fork des Source Codes, nicht wirklich m\u00f6glich.<\/p>\n<p>Der Server stellt jedoch ausgereifte Schnittstellen zur Verf\u00fcgung, die eigene und externe Integrationen und Erweiterungen erm\u00f6glichen. Daf\u00fcr zur Verf\u00fcgung stehen:<\/p>\n<p><i>Admin API:<\/i> Jegliche Funktionalit\u00e4ten des Ghost Admin k\u00f6nnen auch manuell \u00fcber die Admin API durchgef\u00fchrt werden. Dazu geh\u00f6ren zum Beispiel die Erstellung von Posts oder die Verwaltung von Tags.<\/p>\n<p><i>Content API:<\/i> Jeglicher von Ghost verwalteter Inhalt kann \u00fcber diese Schnittstelle abgerufen werden und somit Ghost als ein Headless CMS betrieben oder f\u00fcr Einbettungen in anderen Webseiten verwendet werden. Dies sind \u00f6ffentliche Daten wie die Posts und statischen Seiten.<\/p>\n<p><i>Webhooks:<\/i> Webhooks senden Daten als Reaktion auf bestimmte Ereignisse an eine vorher vom Benutzer spezifizierte Adresse. So kann zum Beispiel in Antwort auf das Update eines Posts ein Befehl eines eigenen Servers ausgef\u00fchrt werden.<\/p>\n<p>&nbsp;<\/p>\n<p>In <b>WordPress<\/b> sind alle Dateien des Servers im Ordner der Installation zug\u00e4nglich und auch editierbar, was eine vollst\u00e4ndige Anpassung der Installation erlaubt.<\/p>\n<p>\u00dcblicherweise werden hierf\u00fcr jedoch Plugins verwendet um eine \u00fcbersichtlichere Struktur und bessere Verwaltung zu erreichen. Mit diesen Plugins k\u00f6nnen ebenfalls alle Aspekte der WordPress Installation (Frontend &amp; Backend) ver\u00e4ndert werden. Daher ist WordPress so unglaublich flexibel und kann sogar als Webshop eingerichtet werden.<\/p>\n<h2>Theming<\/h2>\n<p>Beide Systeme haben einen <i>themes<\/i> Ordner in dem Themes installiert bzw. abgelegt werden k\u00f6nnen. Diese werden auch auf Marktpl\u00e4tzen verkauft.<\/p>\n<p>Das CSS und JS f\u00fcr das Frontend werden jeweils kompiliert und k\u00f6nnen mit eigenen Buildchains nach Belieben konfiguriert werden.<\/p>\n<p>Ein Unterschied besteht jedoch in der Verwendung der Templating Engine:<\/p>\n<p><b>Ghost: <\/b>Handlebars.js<\/p>\n<p><b>WordPress: <\/b>PHP<\/p>\n<h1>Ghost Seminar Webseite<\/h1>\n<p>Die Ghost Seminar Webseite wurde mit Hilfe von <i>docker-compose<\/i> aufgesetzt und ist nur im VPN der HTWK Leipzig zu erreichen.<\/p>\n<p>F\u00fcr die lokale Entwicklung einer Ghost Webseite empfehlen wir jedoch <b>unbedingt<\/b> das Ghost CLI zu verwenden, da man dadurch den vollen Zugriff auf die Dateien der Installation hat. Bei der Verwendung von Docker verschwinden diese nat\u00fcrlich im Container.<\/p>\n<p>&nbsp;<\/p>\n<p>Die URL und die Login-Daten f\u00fcr die Ghost-Instanz sind wie folgt:<\/p>\n\n<p>&nbsp;<\/p>\n<p>F\u00fcr die Installation mit <i>docker-compose<\/i> wurde folgende Dockerfile verwendet:<\/p>\n<details>\n<summary style=\"cursor: pointer;\">\u2023 Click to expand<\/summary>\n<pre>version: '3.1'\r\nservices:\r\n  ghost:\r\n    image: ghost:4-alpine\r\n    restart: always\r\n    depends_on:\r\n      - \"db\"\r\n    ports:\r\n      - 2368:2368\r\n    environment:\r\n      # see https:\/\/ghost.org\/docs\/config\/#configuration-options\r\n      database__client: mysql\r\n      database__connection__host: db\r\n      database__connection__user: root\r\n      database__connection__password: example\r\n      database__connection__database: ghost\r\n      url: http:\/\/141.57.20.69:2368\r\n      # contrary to the default mentioned in the linked documentation, this image defaults to NODE_ENV=production (so development mode needs to be explicitly specified if desired)\r\n      #NODE_ENV: development\r\n\r\n  db:\r\n    image: mysql:5.7\r\n    #restart: always\r\n    environment:\r\n      MYSQL_ROOT_PASSWORD: example\r\n\u00a0\r\n<\/pre>\n<\/details>\n<p>Eine Beispiel-Anfrage an die Admin API mit cURL s\u00e4he wie folgt aus, wobei der <i>API_KEY<\/i> durch den Admin API Key einer selbst erstellten Integration ersetzt werden muss.<\/p>\n<pre>curl -H \"Authorization: Ghost API_KEY\" \\\r\n-H \"Content-Type: application\/json\" \\\r\n-d '{\"posts\":[{\"title\":\"Hello world\"}]}' \\\r\n\"<a href=\"http:\/\/141.57.20.69:2368\/ghost\/api\/v3\/admin\/posts\">http:\/\/141.57.20.69:2368\/ghost\/api\/v3\/admin\/posts<\/a>\"\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h1>Quellen<\/h1>\n<p><a href=\"https:\/\/ghost.org\/alternatives\/\">https:\/\/ghost.org\/alternatives\/<\/a><\/p>\n<p><a href=\"https:\/\/ghost.org\/docs\/\">https:\/\/ghost.org\/docs\/<\/a><\/p>\n<p><a href=\"https:\/\/www.contentmanager.de\/cms\/open-source-cms\/fuenf-dinge-die-ihr-cms-heute-koennen-sollte\/\">https:\/\/www.contentmanager.de\/cms\/open-source-cms\/fuenf-dinge-die-ihr-cms-heute-koenen-sollte\/<\/a><\/p>\n<p><a href=\"https:\/\/www.ionos.de\/digitalguide\/hosting\/cms\/cms-vergleich\/\">https:\/\/www.ionos.de\/digitalguide\/hosting\/cms\/cms-vergleich\/<\/a><\/p>\n<p><a href=\"https:\/\/www.wpbeginner.com\/showcase\/best-cms-platforms-compared\/\">https:\/\/www.wpbeginner.com\/showcase\/best-cms-platforms-compared\/<\/a><\/p>\n<p><a href=\"https:\/\/medium.com\/membership\">https:\/\/medium.com\/membership<\/a><\/p>\n<p><a href=\"https:\/\/wordpress.com\/de\/\">https:\/\/wordpress.com\/de\/<\/a><\/p>\n<p><a href=\"https:\/\/wpengine.com\/blog\/wordpress-vs-medium-infographic\/\">https:\/\/wpengine.com\/blog\/wordpress-vs-medium-infographic\/<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Alle Quellen wurden zuletzt am 26.01.2022 abgerufen<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Beitrag handelt von der Software Ghost CMS (Content Management System). Zu Beginn werden CMS im Allgemeinen betrachtet und im<\/p>\n","protected":false},"author":73,"featured_media":1417,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[38,9,33],"class_list":["post-1416","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-betriebliche-informationssysteme","tag-cms","tag-docker","tag-open-source"],"_links":{"self":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/1416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/users\/73"}],"replies":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/comments?post=1416"}],"version-history":[{"count":5,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/1416\/revisions"}],"predecessor-version":[{"id":1443,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/1416\/revisions\/1443"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/media\/1417"}],"wp:attachment":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/media?parent=1416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/categories?post=1416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/tags?post=1416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}