t-r.de/README.md

109 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Autorenwebseite tobias-radloff.de
Eine moderne statische Autorenwebseite mit Werksseiten, Neuigkeiten, Terminkalender, Newsletterabonnentenverwaltung und Kontaktformular auf Basis von [Pelican](https://getpelican.com).
## 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](https://picocss.com/) tatsächlich verwende ich einen [Fork](https://github.com/Yohn/PicoCSS), der zusätzlich Hamburger-Menüs unterstützt
* [Libertinus Sans](https://github.com/alerque/libertinus) im Development Mode greife ich auf lokale Dateien zurück, im Production Mode stammen sie von einem [CDN](https://www.cdnfonts.com/libertinus-sans.font)
### 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](https://www.lighttpd.net/))
* `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