From 689679856140387efd9354a0d19fc6bad6e03790 Mon Sep 17 00:00:00 2001 From: musabe24 Date: Fri, 26 Dec 2025 16:35:34 +0100 Subject: [PATCH] Updated README.md --- README.md | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 115 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 551c5d4..f4b1d82 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,24 @@ -# IGMG Gebetszeiten -> ICS (Traefik File Provider) +# IGMG Gebetszeiten → iCalendar (.ics) Feed (Docker + Traefik) -## Start -```bash -cp .env.example .env -nano .env -docker compose up -d --build -``` +Dieses Projekt erzeugt aus dem IGMG-Gebetskalender (AJAX-Quelle) einen **abonnierbaren iCalendar-Feed (.ics)** und stellt ihn über einen Webserver bereit. +Ein separater Updater-Container aktualisiert den Feed **automatisch** (Standard: **monatlich**). + +Ziel: Du kannst den Link in Google Calendar / iOS Kalender / Outlook etc. als **Kalender-Abo** hinzufügen und bekommst immer die aktuellen Gebetszeiten. + +--- + +## Überblick + +- **Updater-Container** (Python + Cron) + - ruft die IGMG-AJAX-Quelle ab + - parst die HTML-Antwort + - schreibt atomar eine `.ics` Datei und eine `index.html` in ein Docker-Volume + +- **Web-Container** (nginx) + - liefert das Volume `/data` via HTTP aus + - Traefik routet von außen auf nginx + +--- ## Container bauen und pushen ```bash @@ -24,4 +37,98 @@ docker buildx build \ --push \ -f ./web/Dockerfile \ . -``` \ No newline at end of file +``` +--- +## Architektur +``` +Internet +| +| https://gebetszeiten.musaberdem.de/igmg-20020.ics +v +Traefik (File Provider Routing) +| +v +igmg-ics-web (nginx) ---> liest /data (read-only) +| +v +Docker Volume "igmg_ics_data" <--- igmg-ics-updater schreibt /data +^ +| +igmg-ics-updater (cron + python) +``` + +Warum zwei Container? + +- nginx bleibt minimal und sicher (nur statische Dateien) +- Updater hat Schreibrechte und macht die HTTP-Requests + +--- + +## Dateistruktur + +Beispiel-Struktur des Projekts: +``` +igmg-ics/ +docker-compose.yml +nginx.conf +.env.example +traefik/ +dynamic/ +igmg-ics.yml +updater/ +Dockerfile +entrypoint.sh +crontab +update.py +README.md +``` + + +Im Volume `igmg_ics_data` landen: + +- `/data/` → abonnierbarer Kalenderfeed +- `/data/index.html` → Landing-Page (Link + letzte Aktualisierung) + +--- + +## Konfiguration + +Konfiguration erfolgt über eine `.env` Datei im Projektordner. + +### Beispiel `.env` + +```env +TZ=Europe/Berlin +PUID=1000 +PGID=1000 + +CITY_ID=20020 +CITY_SLUG=Blumberg_(DE) +LANG=de + +ICS_FILENAME=igmg-20020.ics +``` + +Erklärung + +- `TZ`: Zeitzone. Wichtig für korrekte Event-Zeiten. +- `CITY_ID`: ID aus der IGMG-URL (id=...) +- `CITY_SLUG`: stadt=... Teil der URL (wird nur als Quell-Link genutzt) +- `LANG`: de oder tr +- `ICS_FILENAME`: Dateiname, unter dem der Feed ausgeliefert wird + +--- + +## Kalender abonnieren + +Der Feed ist erreichbar unter: https://gebetszeiten.musaberdem.de/igmg-20020.ics + +Optional (einige Clients bevorzugen webcal): webcal://gebetszeiten.musaberdem.de/igmg-20020.ics + +### Hinweise zu Kalendern + +- Google Calendar: “Andere Kalender” → “Per URL” → HTTPS-Link einfügen +- iOS / macOS: Kalender → “Kalender hinzufügen” → “Kalenderabonnement” +- Outlook: “Kalender hinzufügen” → “Aus dem Internet” / “Abonnieren” + +Hinweis: Kalender-Abos refreshen oft nur alle paar Stunden oder 1× täglich. \ No newline at end of file