moved dependencies to and expanded Readme

This commit is contained in:
eclipse 2025-06-11 16:33:49 +02:00
parent bea7df02e1
commit e30bc6cd06
2 changed files with 49 additions and 83 deletions

View File

@ -1,66 +0,0 @@
# t-r.de Dependencies
## Site generation
### Static Site Generator
* pelican with Markdown support (`pip install pelican[markdown]`)
* python3
#### Pelican Plugins
Pip packages
* pelican-yaml-metadata
* pelican-image-process
### Site Display
#### CSS
* Pico CSS ([fork](https://github.com/Yohn/PicoCSS))
#### Fonts
* [Libertinus Sans](https://github.com/alerque/libertinus)
* dev: local files
* prod: [CDN](https://www.cdnfonts.com/libertinus-sans.font)
### Content generation
#### List of books and texts
* ?
#### Event list
* utils/refresh-events.py
depends on:
* caldav
* vobject
#### image processing
* utils/crop_image_to_bbox.py
depends on:
* PIL
#### Favicon
* utils/favicon-from-svg.sh
depends on:
* inkscape
* pngquant
* image-magick
## Deployment
### On production server
* php (aktuell 8.1)
* database driver, e.g. pdo_sqlite
* PHPMailer (included in source)
### FTP tool
* lftp

View File

@ -6,9 +6,9 @@ Eine moderne statische Autorenwebseite mit Werksseiten, Neuigkeiten, Terminkalen
### Pelican ### 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. Ich verwende Pelican v4.11.0 mit Markdown-Support (`pip install pelican[markdown]`) in einer eigenen `venv`-Umgebung. Pelican setzt `python3` voraus.
Plugins für Pelican: Außerdem nutze ich folgende Pelican-Plugins:
* `pelican-yaml-metadata` ermöglicht das Einlesen von Metadaten im YAML-Format * `pelican-yaml-metadata` ermöglicht das Einlesen von Metadaten im YAML-Format
* `pelican-image-process` erlaubt das Bearbeiten von Bildern beim Erzeugen der Seite * `pelican-image-process` erlaubt das Bearbeiten von Bildern beim Erzeugen der Seite
@ -16,11 +16,11 @@ Plugins für Pelican:
### CSS und Schriften ### 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 * [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) * [Libertinus Sans](https://github.com/alerque/libertinus) im Development Mode greife ich auf lokale Dateien zurück, im Production Mode lade ich sie von einem [CDN](https://www.cdnfonts.com/libertinus-sans.font) herunter
### Werke und Texte ### Werke und Texte
* TODO: die Sourcefiles für meine Werke und Texte sollen direkt aus der `the_works`-Datenbank erzeugt werden * TODO: alle Sourcefiles für meine Werke und Texte direkt aus der `the_works`-Datenbank erzeugen
### Termine ### Termine
@ -33,11 +33,13 @@ Das Script `utils/refresh-events.py` benötigt folgende Python-Packages (beide v
@TODO: benutze ich das Script überhaupt noch? @TODO: benutze ich das Script überhaupt noch?
Das Script `utils/crop_image_to_bbox.py` setzt die Python-Bibliothek `PIL` voraus. Das Script `utils/crop_image_to_bbox.py` benötigt folgende Python-Packages:
* `PIL`
### Favicon ### 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: Um aus einer einzelnen SVG-Datei Favicons in allen nötigen Größen zu erzeugen, nutze ich das Shellscript `utils/favicon-from-svg.sh`. Es benötigt die folgenden Linux-Packages:
* `inkscape` * `inkscape`
* `pngquant` * `pngquant`
@ -45,24 +47,21 @@ Um aus einer einzelnen SVG-Datei Favicons in allen nötigen Größen zu erzeugen
### Deployment Tool ### Deployment Tool
* `lftp` * `lftp` FTP-Client
### Auf dem Produktionsserver ### Auf dem Produktionsserver
* `php` (aktuell 8.1) * `php` (aktuell v8.1)
* Datenbanktreiber, aktuell `pdo_sqlite` * PHP-Datenbanktreiber (aktuell `pdo_sqlite`)
* `PHPMailer` (im Repository enthalten) * PHP-Package `PHPMailer` (im Repository enthalten)
## Konfiguration ## Konfiguration
Das Projekt wird in diesen Dateien konfiguriert: Das Projekt wird in diesen Dateien konfiguriert:
* `pelicanconf.py` und `publishconf.py` enthalten die Pelican-Konfiguration für Development bzw. Production Mode * `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.ini` enthält die Zugangsdaten für Datenbank und SMTP-Server sowie einige Einträge für die Newsletteran-/-abmeldung und das Kontaktformular; üblicherweise ist diese Datei ein Symlink zu einer Development- bzw. Production-spezifischen Datei
* `config.dev.ini` Werte für den Development Mode * `deploy.ini` Zugangsdaten für den Upload auf den Produktionsserver
* `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 * `events.ini` Zugangsdaten für den CalDAV-Server
## Ausführen ## Ausführen
@ -90,13 +89,46 @@ Das Projekt wird in diesen Dateien konfiguriert:
Pelican kennt Artikel und Seiten. Ich verwende diese wie folgt: Pelican kennt Artikel und Seiten. Ich verwende diese wie folgt:
* meine einzelnen Werke sowie News-Posts sind Artikel; die Sourcefiles liegen in `content/posts/` * meine einzelnen Werke und News-Posts sind Artikel; alle Sourcefiles liegen in Unterverzeichnissen von `content/posts/`
* die Kategorie entspricht der Werksart (Romane, Kurzprosa, Lyrik, Weitere, News); alle Sourcefiles einer Kategorie liegen im gleichnamigen Unterverzeichnis (zB `content/posts/romane/`) * 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 * Schlagworte entsprechen (größtenteils) Genres; ich habe aber zB auch englischsprachige Texte per Schlagwort markiert
* alles andere sind Seiten; die Sourcefiles liegen in `content/pages/` * alles andere sind Seiten; die Sourcefiles liegen in `content/pages/`
* Seiten haben keine Schlagworte auf und üblicherweise auch keine Kategorie
* nur die Übersichtsseiten der jeweiligen Kategorie gehört ebendieser Kategorie an (so enthält zB `content/pages/romane.md` die Metadatenzeile `category: Romane`)
### Templates ### Templates
Alle Templates liegen im Verzeichnis `theme/templates/`.
#### Basis
Das Basis-Template ist `base.html`, so wie es für Pelican üblich ist. Darin werden der grundsätzliche Seitenaufbau festgelegt, HTML-Metadaten gesetzt und Teil-Templates aus dem Unterverzeichnis `includes/` eingebunden, in denen wiederkehrenden Seitenelemente definiert sind:
* `favicon.html` inklusive HTML-Metadaten
* `jumbotron.html` Seitenheader
* `navbar.html` NavigationsmMenü
* `footer.html` Seitenfooter
Sämtliche First-Level-Templates binden das Basis-Template ein.
#### Seiten und Artikel
Das Template `page.html` definiert den Aufbau einer Einzelseite mit statischem Fließtext und wenigen Bildern. Auf diesem Template beruhen zB die Seiten Impressum, Übermich, Datenschutzerklärung oder die Seiten für die Newsletteran- bzw. -abmeldung.
Alle Werke und Texte hingegen verwenden das Template `article.html`.
#### Übersichtsseiten
* `wide-cards.html` Template der Übersichtsseite über alle Werkskategorien (`werke.md`)
* `cards.html` Template der Übersichtsseiten über alle Werke einer einzelnen Kategorien
#### Spezielle Seiten
* `index.html` Startseitentemplate
* `news.html` Template für den Neuigkeiten-Bereich
* `tag.html` Template für Schlagwortseiten, auf denen alle Werke aufgelistet sind, die mit dem jeweiligen Begriff verschlagwortet sind
* `termine.html` Template für den Terminkalender
### Termine neu einlesen ### Termine neu einlesen