t-r.de/README.md

4.1 KiB
Raw Blame History

Autorenwebseite tobias-radloff.de

Eine moderne statische Autorenwebseite mit Werksseiten, Neuigkeiten, Terminkalender, Newsletterabonnentenverwaltung und Kontaktformular auf Basis von Pelican.

Dependencies

Pelican

In einer eigenen venv-Umgebung verwende ich Pelican (v4.11.0) mit Markdown-Support, installiert mittels pip install pelican[markdown]. Pelican setzt python3 voraus.

Plugins für Pelican:

  • pelican-yaml-metadata ermöglicht das Einlesen von Metadaten im YAML-Format
  • pelican-image-process erlaubt das Bearbeiten von Bildern beim Erzeugen der Seite

CSS und Schriften

  • Pico CSS tatsächlich verwende ich einen Fork, der zusätzlich Hamburger-Menüs unterstützt
  • Libertinus Sans im Development Mode greife ich auf lokale Dateien zurück, im Production Mode stammen sie von einem CDN

Werke und Texte

  • TODO: die Sourcefiles für meine Werke und Texte sollen direkt aus der the_works-Datenbank erzeugt werden

Termine

Das Script utils/refresh-events.py benötigt folgende Python-Packages (beide via pip installierbar):

  • caldav
  • vobject

Bildverarbeitung

@TODO: benutze ich das Script überhaupt noch?

Das Script utils/crop_image_to_bbox.py setzt die Python-Bibliothek PIL voraus.

Favicon

Um aus einer einzelnen SVG-Datei Favicons in allen nötigen Größen zu erzeugen, nutze ich das Script utils/favicon-from-svg.sh. Es setzt voraus:

  • inkscape
  • pngquant
  • image-magick

Deployment Tool

  • lftp

Auf dem Produktionsserver

  • php (aktuell 8.1)
  • Datenbanktreiber, aktuell pdo_sqlite
  • PHPMailer (im Repository enthalten)

Konfiguration

Das Projekt wird in diesen Dateien konfiguriert:

  • pelicanconf.py und publishconf.py enthalten die Pelican-Konfiguration für Development bzw. Production Mode
  • config.ini enthält die Zugangsdaten für Datenbank und SMTP-Server); üblicherweise ist diese Datei ein Symlink zu einer der folgenden Dateien
    • config.dev.ini Werte für den Development Mode
    • config.prod.ini Werte für den Production Mode
    • und config.example.ini ist ein Beispieldatei mit Dummy-Werten
  • deploy.ini FTP-Zugangsdaten für den Produktionsserver
  • events.ini Zugangsdaten für den CalDAV-Server

Ausführen

Seite im Development Mode (neu) erzeugen

  • make clean Output-Verzeichnis leeren
  • make html alle HTML-Seiten neu erzeugen, die nicht im Output-Verzeichnis vorhanden sind oder deren Sourcefiles sich seit dem letzten Erzeugen verändert haben
  • make regenerate auf Änderungen in Sourcefiles lauschen und entsprechende Seiten neu erzeugen
  • sudo lighttpd -f lighttpd.conf Test-Webserver starten (Kontaktformular und Newsletteran-/-abmeldung erzeugen POST-Requests, doch der mit Pelican mitgelieferte Webserver verarbeitet nur GET-Requests; ich teste die Seite daher mit lighttpd)
  • utils/refresh-events.py CalDAV-Termine neu einlesen

Seite im Production Mode (neu) erzeugen

  • make clean Output-Verzeichnis leeren
  • make publish Seite mit Produktionsparametern neu erzeugen (liest automatisch Termine neu ein)

Deployment

  • deploy-via-ftp.sh Seite auf den Produktionsserver hochladen

Dokumentation

Aufbau der Webseite

Pelican kennt Artikel und Seiten. Ich verwende diese wie folgt:

  • meine einzelnen Werke sowie News-Posts sind Artikel; die Sourcefiles liegen in content/posts/
    • die Kategorie entspricht der Werksart (Romane, Kurzprosa, Lyrik, Weitere, News); alle Sourcefiles einer Kategorie liegen im gleichnamigen Unterverzeichnis (zB content/posts/romane/)
    • Schlagworte entsprechen weitgehend den Genres, geben aber auch zB englischsprachige Texte an
  • alles andere sind Seiten; die Sourcefiles liegen in content/pages/

Templates

Termine neu einlesen

TODOs

  • Seite schneller laden (lazy loading?)
  • the_works anbinden, sodass die Werk-Seiten aus der DB automatisch übernommen werden