Schlagwort: cms

  • Darum habe ich WordPress für kleine Web Projekte verbannt

    Freund: Hilfe, meine Seite wurde gehackt. Was muss ich tun?

    Ich: Hast du WordPress und die Plugins mal aktualisiert?

    Freund: Das letzte Mal vor sechs Monaten.

    Ich, innerlich stöhnend: Ok, dann aktualisiert mal die Seite und dann schauen wir weiter.

    WordPress selber behaupten, dass 27% des Internets auf ihrem CMS läuft. Das entspricht zwar noch nicht der Dominanz, welche Windows mal auf dem Desktop hatte, aber macht diese Plattform dennoch zum lukrativen Ziel für Hacker.

    WordPress ursprünglich als Blogginplattform angedacht wird heute für alle möglichen und unmöglichen Typen von Seiten eingesetzt: Von hochfrequentierten Newsseiten, über E-Commerceseiten bis hin zu kleinen Brochureware Webseiten mit einer handvoll einfachen Seiten.

    Sinnvoll?

    Ich glaube nicht. Daher kurz zu den Basics.

    In meiner Webkarriere habe ich mit drei Arten von Systemen gearbeitet:

    1. Die Klassiker: Datenbankgestützte Systeme wie WordPress, Drupal, TYPO3, Sharepoint, Ghost und und und…
    2. Komplett statische Seiten oder aber gestützt mit einem Static Site Generator wie Jekyll, Hexo oder Wintersmith.
    3. Flat File CMS, Grav, Kirby, Pico und noch ein paar andere

    Mein fast 10 jähriges Blog hat in den fast 10 Jahren Lebenszeit auch schon alle Systeme durchgemacht: Drupal, WordPress, Jekyll und Grav (wobei nur als Test).

    Während die Flatfile CMS sicher nicht die Eierlegendewollmilchsau sind, bieten sie doch einige herausragenden Vorteile.

    Problemzonen von WordPress

    Die Problemzonen von WordPress sind weder der Bauch noch die Beine. Ich sehe 5 Kernprobleme oder Herausforderungen, wenn man mit Datenbankgestützten Systemen (und im Speziellen mit WordPress) arbeitet:

    1. Die ganze Deployment und Staging Sache. Inhalt auf Dev, Test und Prod ist nie wirklich synchron. Dazu kommt, dass viele Konfigurationen in der Datenbank gemacht werden. Diese über die verschiedenen Server zu ziehen ist mühsam und fehleranfällig. Dazu weiter erschwerend ist auch die Sache mit dem Inhalt. Eigentlich müsste das VCS (z.B. Git) sowohl Files als auch Datenbank beinhalten.

    2. Gigantische schöne (und grosse) Themes, vor allem für WordPress. Doch mit dem Theme alleine ist nicht genug. Damit das Theme auch so funktioniert, wie es auf dem Screenshot ausschaut, muss noch Sliderplugin xy und Pagebuilder ab und Module rs installiert werden.

    All diese Themes und Plugin haben meistens ein Ziel: Möglichst viele Usecases möglichst Drag’n’Drop zugänglich zu machen, damit jeder Idiot sie benutzen kann. Der Preis dafür sind komplexe und gigantische Plugins und Themes mit zum Teil kompletten Applikationen innerhalb der Webseite.

    Dazu wird der Source Code mit unnötiger Divitis geflutet und die Pagebuilder führen dazu, dass Styledefinitionen pro Element gemacht werden, was wiederum zu Inkonsistenz im Design führt.

    3. Backup ist teuer oder ein Gebastel. Zwar gibt es zumindest für WordPress entsprechende Plugins, aber so richtig glücklich bin ich damit nicht geworden. Kommt dazu, dass eines der Plugins, die Settings Datei per se nicht inkludiert. Viele der Plugins setzen zudem eine Pro Version voraus, welche monatlich ein paar $$ kostet (Beispiel Vaultpress).

    Die zweite Option ist mit ein paar Scripten selber etwas zu bauen und das dann auf Amazon S3 zu speichern. Funktioniert gut und zuverlässig, aber ist halt ein Gebastel und für den kleinen Mann eher undenkbar.

    4. Unzählige Updates. Viele Module bringen die gewünschte Funktionalität und diese läppern sich schneller zusammen als einem lieb ist: Formulare, Google Analytics, Security, S3, Slider, E-mail und und und. Je grösser die Anzahl umso regelmässiger gilt es zu aktualisieren. Mit jedem neuen Stück Code werden Sicherheitslücken gestopft und neue geöffnet.

    Entweder vor jedem Update ausgiebig in einer Testumgebung testen (wobei wir wieder bei Problem 1 wären) oder auf gut Glück in der produktiven Umgebung aktualisieren und hoffen und beten, dass alles noch funktioniert.

    5. Security. Ich bin bei weitem kein Security Experte, aber SQL Injections gehören zu den viel gesehen Sicherheitslücken. Die Rechnung ist daher ganz einfach: ohne Datenbank gibts auch keine SQL Injections. Weiter wenig förderlich für die Sicherheit ist der Einsatz von PHP als Template Engine.

    Wie funktionieren diese Flat File CMS und was macht sie so genial?

    Nachdem ich über WordPress hergezogen bin, möchte ich schauen, was die Flat File CMS so viel besser macht. Ich nehme hier insbesondere Bezug auf Grav, aber die anderen werden eine ähnliche Mechanik haben.

    1. Inhalt liegt als Markdown in stinknormalen Textdateien. Metadaten können im Kopf des Files «ad-hoc» definiert werden:

    ---
    title: Testartikel
    header_image: header.jpg
    taxonomy:
        category: [Blog]
    ---

    2. Templates sind einfach und direkt. Bei Grav kommt Twig zum Einsatz. In den Templates kann einfach auf diese Header Informationen zugegriffen werden. Kein PHP in Templates bedeutet mehr Sicherheit.

    Theoretisch könnte jeder Artikel eigene Headerinformationen haben, was jedoch wenig förderlich für die Wiederverwendbarkeit ist. Das fehlende «DB-Schema» ersetzt die Planung nicht!

    3. Von Grund auf portabel, versioniert und mit Backup: «git commit, git pull«. Sowohl der Code, als auch der Inhalt ist versioniert. Für Staging: git pull und auf einen Webserver kopieren und schon läuft die Seite 1:1, wie in der Produktion. Damit ist sowohl das Deployment Problem als auch das Backup Problem gelöst. Eine veraltete Testumgebung ist mit Grav und Git Vergangenheit.

    Im Klartext: Ich kann die komplette Webseite in Git ablegen und sie auf jeden beliebigen Webserver klonen und arbeiten.

    Für versionierte Gitbenutzer können alle möglichen Gimmicks eingebaut werden: Autodeployment via Webhooks, Branching Strategie …

    4. Grav bietet eine möchtige Form API und ein Plugin System. Zwar gibt es noch nicht annähernd die Flut an Plugins, wie sie in der WordPress Welt vorhanden sind, aber das ist auch nicht zwingend etwas schlechtes.

    Theoretisch könnte auch eine Gravseite von der Pluginseuche befallen werden, die direkte Codenähe macht es allerdings eher unwahrscheinlich oder zumindest weniger schlimm, als dies bei WordPress der Fall ist. Ein Google Analytics Tracker z.B. liesse sich mit genau zwei Zeilen (1x Config, 1x Template) einbauen.

    5. Geschwindigkeit. Die Einfachheit macht die Systeme schnell. komplizierte Mechanismen, komplexe und schlechte programmierte Plugins fallen weg. Auch Anfragen an die Datenbank fallen weg. Für hohe Lasten mit vielen gleichzeitigen Zugriffen ist wahrscheinlich eine Datenbank besser, aber im Bereich von Otto-Normalsterblich sicher nicht. Für die Optimierung muss lediglich am Webserver Hand angelegt werden.

    Wo liegen die Probleme

    Wo Licht ist fällt auch Schatten. Grav zu skalieren wird wohl nicht ganz so einfach sein, wie das mit einer Datenbank möglich ist. Solange ein Server ausreichend ist, sicher kein Problem, aber sobald nach Loadbalancing gefragt ist, könnte es schwieriger werden. Ich kenne mich jedoch zu wenig damit aus, um eine qualifizierte Aussage zu machen.

    Eine Aussage kann ich jedoch zu Content Management machen. Wenn Content aktiv verwaltet wird und damit gearbeitet wird ist Grav nicht wirklich komfortabel. Ich habe dieses Blog hier auf Grav migriert und ein wenig damit gearbeitet. Spass hat das nicht gemacht.

    Es gibt ein Admininterface, aber um hunderte von Seiten zu verwalten… ich weiss nicht so recht. Da fühle ich mich mit WordPress wohler.

    Wann verzichte ich also auf WordPress?

    Für mich ist WordPress für kleine hauptsächlich statische Seiten definitiv gestorben. Der Overhead und die Risiken und damit die Wartung sind zu gross, als dass die Vorteile überwiegen würden.

    Dazu hat mich die Portabilität mehr als überzeugt und bei einem schief gelaufenen Update einfach mal schnell auf eine vorherige Version zu wechseln gibt mir sehr viel Sicherheit. Auch ein Serverwechsel würde nur wenig Minuten dauern: «git clone».

    Auch die mächtigen Pagebuilder können mich nicht überzeugen. Im Gegenteil: Für mich als Developer sind sie eher hinderlich, mühsam und komplex und für totale Anfänger bergen sie das Potential die Seite zu zerstören.

    Kunden sind zufrieden, wenn sie Texte schnell und einfach anpassen können und sind gerne bereit für grössere Änderungen zum Profi zu gehen.

    Geht es in Richtung Blog oder Community mit viel Interaktion werde ich nach wie vor auf WordPress und Co. setzen.

  • Geeksession – Atom und Grav

    Ich bin viel zu alt, um mich noch mit Code zu plagen. Lieber tummle ich mich in Meetings, schiebe Termine, motiviere Leute, gestalte Kanban Boards und versuche intelligent und allwissend zu sein.

    Ich bin umgeben von jungen dynamischen Freaks und Nerds. Sticker zieren die Macbooks, die Kaffeefahne kündigt das Eintreffen an, bevor sie um die Ecke biegen und das Hemd ist nie gebügelt … meistens sowieso ein T-shirt.

    Das Lebens eines Projektmanagers halt. Auch schön. Anders halt.

    Zwischendurch packt es mich dann trotzdem noch. Meine neueste Spielwiese im Doppelpack:

    Atom

    "Screenshot von Atom Editor" "Atom Editor"
    Angefangen mit Windows Notepad (ja damit habe ich vor Jahrzenten mal Javascript und Java programmiert). Weiter zu Notepad++, irgendwann kamen die Elefanten IDEs rund um Eclipse. Weiter zu Sublime. Der Newcomer, welcher die Entwickler begeisterte und jetzt also bei Atom.

    Der Sprung von Sublime zu Atom ist relativ klein. Was ich extrem schätze ist:

    • Git Integration mittles Git Plus Package! Sehr cool. Besser als bei Sublime
    • Markdown Support und Live Preview fürs Scolling braucht es noch das Package Markdown Scroll Sync
    • Sieht einfach ein bisschen moderner aus

    That’s it. Wie gesagt, der Sprung war nicht besonders gross.

    Grav CMS

    "Screenshot Grav CMS" "Grav CMS Screenshot"
    Auch hier ist mein Leidensweg lang: Joomla, Drupal, WordPress mit einem Schlenker zu Sharepoint, ein paar Ausflüge in die Welt der Static Site Generators zurück zu WordPress und jetzt also neu bei Grav. Das kleine CMS ohne Datenbank.

    Die Static Site Generators fand ich auf Anhieb sympathisch. Ein bisschen yaml und Markdown, mittels Templatesprache die ganzen Attribute Verarbeiten und fertig ist die wunderschöne Seite.

    Klar: Auch in Drupal geht das, Felder zusammenklicken und ein paar Plugins installieren, allerdings meist auf Kosten von vieeeel HTML Code und CSS, welches umgebogen werden muss. Noch schlimmer mit WordPress: Die megabyite schweren Themes mit den wenig sympathischen Pagebuildern. Die sind gut gemeint und sicher auch nützlich, aber ein graus zum Customizen und warten.

    Dazu kommt bei Drupal und Co die ganze Datenbankgeschichte. Auch nicht immer schön und um mal schnell lokal ein paar kleine Änderungen am Code zu machen, bis die Site dann lokal läuft… geht mal schneller mal langsamer.

    Grav CMS verbindet irgendwie die Welten von Drupal und Co. mit den Static Site Generators. Der Inhalt wird in Ordnern in Markdown abgelegt und on-the-fly ins Template eingebaut und als HTML ausgeliefert.

    Passend dazu gibt es ein kleines einfaches Admin Interface, um kleine Änderungen schnell und einfach durchzuführen und dazu eine sehr mächtige Form API.

    Nach 7 Tagen Grav bin ich noch weit davon entfernt ein Experte zu sein, aber ich würde meinen ich finde mich zurecht.

    Wer nicht millionen (oder auch tausende) von Benutzer hat, lediglich ein paar wenige Seiten hat und einfach und direkt mit dem System arbeiten will, für den ist Grav sicher in Versuch wert.

    Einmal Geek immer Geek

    … so schnell werde ich das wohl nicht ablegen. Zwischendurch in die Tasten zu hauen, hat doch etwas beruhigendes.

  • Node.js Monitor PM2

    Eine Node.js Applikation wird normalerweise wie folgt gestartet:
    ~
    node app.js
    ~
    Jetzt läuft die Node Applikationen. Im Vergleich zu PHP ist das ein komplett andere Denkweise: Apache und PHP gehen Hand in Hand. Apache kann gut ohne PHP leben, PHP jedoch kaum ohne Apache (oder entsprechendem Webserver). Mit einer .php Datei allein wird man kaum eine Sinnvolle Web Applikation bauen, mit einer .js Datei hingegen schon.

    Eine Node App ist ein vollwertiger Server

    Um eine Node Applikation zu betreiben ist kein zusätzlicher Webserver notwendig. Der Webserver ist Teil der App. Das hat jedoch auch einige Folgen: Fehler in der Applikation sind fatal. Nehmen wir wieder PHP als Beispiel. Ein Fehler in der Anwendung führen dazu, dass der Request mit einem Error 500 abgebrochen wird. Der nächste User findet wieder eine jungfräuliche Umgebung vor. Anders bei Node.js: Ein Fehler ist fatal, denn er führt dazu dass die ganze Applikation und damit auch der Server abstürzt und nicht mehr wieder selber hoch kommt. Damit bleibt die Node.js App nach einem Fehler nicht mehr erreichbar, bis sie wieder gestartet wird.

    Node Forever

    Das Modul gibts und ist wohl eines der bekannteren. Node Forever schaut, dass eine Node Applikation wenn sie abstürzt wieder gestartet wird. Ich habe mich nie mit Forever beschäftigt sondern bin eigentlich nur zufällig auf pm2 gestossen.

    Node Runner: PM2

    PM2 ist ein exzellentes Modul, scheint stabil zu sein und sehr einfach zu bedienen und bietet ein paar nützliche Features:
    – Autorestart bei Absturz
    – Logging
    – Hot Reload von Code
    – Monitor
    – Load balancing (noch nicht ausprobiert)
    – Mehrere Apps laufen lassen (noch nicht ausprobiert)
    – und noch mehr
    PM2 Node.js Monitor
    Der Monitor für eine Node.js Applikation. Nicht in alle tiefen, aber doch auf einen Blick den Stand.
    Die Installation und die In Betriebnahme ist denkbar einfach:
    ~
    npm install -g pm2
    pm2 start app.js
    ~
    That’s it. Von jetzt an kann die App noch so fehlerhaft sein und regelmässig abstürzen, sie kommt immer wieder hoch (sollte natürlich das Ziel sein, dass das nie vorkommt).

  • Drupal Cron job für Normalsterbliche

    Bisher musste ich den Cronjob immer von Hand durchführen. Das kann doch ziemlich mühsam werden, da es immer mal vergessen wird. Einen Cronjob kann ich jedoch bei meinem Hoster nicht ausführen 🙁 … dazu bezahle ich einfach zu wenig.

    Es gibt aber eine Abhilfe: poormanscron (Armer Manns Cron). Ganz einfach zu installieren nicht zu viel zu konfigurieren und läuft einfach. In der Konfiguration kann festgelegt werden, in welchen Zeitabständen der «Cron» ausgeführt werden soll. Dabei wird im Prinzip lediglich der manuelle Cron ausgeführt, wenn ein Benutzer die Seite betritt und genügend Zeit seit dem letzten Besuch verstrichen ist.

    Ich war schon fast drauf und dran ein solches Modul selber zu schreiben. Zum Glück ist mir das noch über den Weg «gelaufen» 🙂

    Der Performance zu liebe sollte man wohl den Abstand nicht zu klein wählen. Standard ist 60 Minuten… scheint mir ziemlich hoch. Kommt wohl drauf an, was für eine Seite man hat. Für Rapslis World reichen 6 h bei weitem.

    Update 17.12.2007: Gerade ist mir noch etwas über richtige Cronjobs über den Weg gelaufen: www.cronjob.de. Habe es in keiner Weise ausprobiert, aber klingt eigentlich genau danach. Falls jemand schon Erfahrungen damit gesammelt hat, soll er doch bitte einen kleinen Kommentar lassen.

    Update 28.08.2014: Dieser Inhalt ist unter umständen nicht mehr aktuell.

  • Fotogalerie in Drupal

    Eine Fotogalerie lässt sich in Drupal sehr einfach erzeugen. Folgende Module werden dazu benötigt:

    • CCK
    • Imagefiled (für CCK)
    • Imagecache
    • Thickbox
    • Views
    • Views Bonus

    Ein sehr einfaches Tutorial ist auf Drupalcenter zu finden. Eine kleine Zusatzbemerkung:

    Imagefield kann man so konfigurieren, dass man mehrere Fotos hinzufügen kann. Somit ist es eigentlich auch möglich einen Node «Galerie» zu machen. Diesem können dann beliebig viele Fotos hinzugefügt werden (falls eben die Aktion multiple values) aktiviert ist.

    Es mag auf den ersten Blick einfacher erscheinen, da die Views wohl auch gar nicht gebraucht werden und alles in einem Node drin ist -> Eben ein Album. Dadurch wird jedoch die Flexibilität verringert, denn es kann nicht mehr für jedes Bild ein Titel gemacht werden und Kommentare können nur noch für ein Album hinterlegt werden und nicht mehr für ein Foto.

    Schlussendlich ist es wohl eine Geschmackssache, will man sich jedoch für die Zukunft alle Optionen offen halten, so ist sicher die Lösung mit einem Bild pro Node vorzuziehen. Wer es jedoch einfacher will, kann ruhig die multiple value Variante wählen.

    Update: Ein paar kritische Gedanken zur Fotogalerie in Drupal

  • Blog selber hosten oder ein Angebot von WordPress und Co nehmen?

    Seit einiger Zeit nun blogge ich via Blogger.com (sprich Google). Ich bin mir im Moment am Überlegen, das Blog in Drupal zu betreiben, bin mir jedoch noch nicht sicher, da doch einiges an Wartun anfällt. Die klassische Make or Buy Entscheidung.

    Vorteile, das Blog selber zu hosten

    Dazu würde ich die folgenden Punkte zählen

    • Erhöhte Flexibilität, durch volle Kontrolle über Design und Funktionen
    • Einsatz einer Multisite könnte Blog und Private Webseite in einem Guss gebaut werden
    • Spassfaktor, ein wenig basteln und experimentieren
    • Lernfaktor. Jede Seite bringt neue Erfahrungen
    • Voll Kontrolle über den Inhalt.
    • Keine Abhängigkeit von Entscheidungen anderer: Z.B. ist die Kommentarfunktion in Blogger ziemlich nervig.

    Vorteile, das Blog von Google betreiben zu lassen

    • All-inklusiv Paket. Muss mich um nichts kümmern, es wird (hoffentlich) regelmässig ein Backup gemacht, der Speichern kann nicht überlaufen und Updates müssen auch keine gemacht werden.
    • Eingebunden ins Blogger.com Ökosystem. Könnte evtl. ein bisschen mehr Traffic bedeuten.
    • Neue Funktionen werden automatisch eingebunden
    • Ich glaube die haben das Spam Problem im Griff (daher wohl der komische Kommentar Mechanismus)
    • Verfügbarkeit. Ich weiss nicht, ob ich mit einem 5.- Hosting der Verfügbarkeit von Google Konkurrenz machen kann.
    • Skalierbarkeit. Sollte ich auch mal 1 Million Hits pro Tag habe, kann ich immer noch ruhig schlafen (wahrscheinlich nicht mehr, da ich so aufgeregt bin)

    Make or Buy

    Im Herzen ein Techy, geht kein Weg an einem Selbst gehosteten Blog vorbei. Hier kurz etwas ausprobieren, da noch etwas einbauen… ist einfach nicht möglich, wenns nicht meins ist. Daher mein Fazit: Selber hosten.

    Wäre ich ein Journalist oder Schreiber, könnte ich mir gut vorstellen, dass meine Entscheidung anders aussehen könnte. Wahrscheinlich würde ich nicht Blogger wählen, aber die gehosteten WordPress Angebote oder auch die Plattform Medium sind ausgezeichnete Plattformen, wo man sich voll und ganz auf den Inhalt konzentrieren kann.