| content | ||
| theme | ||
| utils | ||
| .gitignore | ||
| config.example.ini | ||
| DEPENDENCIES.md | ||
| deploy-via-ftp.sh | ||
| Makefile | ||
| pelicanconf.py | ||
| publishconf.py | ||
| README.md | ||
| t-r.de.code-workspace | ||
| tasks.py | ||
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-Formatpelican-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):
caldavvobject
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:
inkscapepngquantimage-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.pyundpublishconf.py– enthalten die Pelican-Konfiguration für Development bzw. Production Modeconfig.ini– enthält die Zugangsdaten für Datenbank und SMTP-Server); üblicherweise ist diese Datei ein Symlink zu einer der folgenden Dateienconfig.dev.ini– Werte für den Development Modeconfig.prod.ini– Werte für den Production Mode- und
config.example.iniist ein Beispieldatei mit Dummy-Werten
deploy.ini– FTP-Zugangsdaten für den Produktionsserverevents.ini– Zugangsdaten für den CalDAV-Server
Ausführen
Seite im Development Mode (neu) erzeugen
make clean– Output-Verzeichnis leerenmake html– alle HTML-Seiten neu erzeugen, die nicht im Output-Verzeichnis vorhanden sind oder deren Sourcefiles sich seit dem letzten Erzeugen verändert habenmake regenerate– auf Änderungen in Sourcefiles lauschen und entsprechende Seiten neu erzeugensudo 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 leerenmake 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
- die Kategorie entspricht der Werksart (Romane, Kurzprosa, Lyrik, Weitere, News); alle Sourcefiles einer Kategorie liegen im gleichnamigen Unterverzeichnis (zB
- 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