Compare commits

..

No commits in common. "e30bc6cd0651c563652f43f269656cc453b0b51e" and "87d3e7d133482df88c83272053c2ac99aa13f77d" have entirely different histories.

3 changed files with 85 additions and 53 deletions

66
DEPENDENCIES.md Normal file
View File

@ -0,0 +1,66 @@
# 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
Ich verwende Pelican v4.11.0 mit Markdown-Support (`pip install pelican[markdown]`) in einer eigenen `venv`-Umgebung. Pelican setzt `python3` voraus.
In einer eigenen `venv`-Umgebung verwende ich Pelican (v4.11.0) mit Markdown-Support, installiert mittels `pip install pelican[markdown]`. Pelican setzt `python3` voraus.
Außerdem nutze ich folgende Pelican-Plugins:
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
@ -16,11 +16,11 @@ Außerdem nutze ich folgende Pelican-Plugins:
### 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 lade ich sie von einem [CDN](https://www.cdnfonts.com/libertinus-sans.font) herunter
* [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: alle Sourcefiles für meine Werke und Texte direkt aus der `the_works`-Datenbank erzeugen
* TODO: die Sourcefiles für meine Werke und Texte sollen direkt aus der `the_works`-Datenbank erzeugt werden
### Termine
@ -33,13 +33,11 @@ Das Script `utils/refresh-events.py` benötigt folgende Python-Packages (beide v
@TODO: benutze ich das Script überhaupt noch?
Das Script `utils/crop_image_to_bbox.py` benötigt folgende Python-Packages:
* `PIL`
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 Shellscript `utils/favicon-from-svg.sh`. Es benötigt die folgenden Linux-Packages:
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`
@ -47,21 +45,24 @@ Um aus einer einzelnen SVG-Datei Favicons in allen nötigen Größen zu erzeugen
### Deployment Tool
* `lftp` FTP-Client
* `lftp`
### Auf dem Produktionsserver
* `php` (aktuell v8.1)
* PHP-Datenbanktreiber (aktuell `pdo_sqlite`)
* PHP-Package `PHPMailer` (im Repository enthalten)
* `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 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
* `deploy.ini` Zugangsdaten für den Upload auf den Produktionsserver
* `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
@ -89,46 +90,13 @@ Das Projekt wird in diesen Dateien konfiguriert:
Pelican kennt Artikel und Seiten. Ich verwende diese wie folgt:
* meine einzelnen Werke und News-Posts sind Artikel; alle Sourcefiles liegen in Unterverzeichnissen von `content/posts/`
* 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 (größtenteils) Genres; ich habe aber zB auch englischsprachige Texte per Schlagwort markiert
* Schlagworte entsprechen weitgehend den Genres, geben aber auch zB englischsprachige Texte an
* 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
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

View File

@ -1,13 +1,11 @@
;<?php die(); ?>
[general]
; base URL do not close with '/'!
; do not close with '/''
site_url = https://www.example.com
; email address to send emails to
notificationAddress = mail@example.com
; some string to salt subscribers' email addresses for a non-recreatable md5 hash
; string that will be concatenated with email address to create a non-recreatable md5 hash
uniqueKey = "some string"
; status code returned after any PHP script exits gracefully
statusCode = "HTTP/1.1 303 See Other"
[smtp]