IGMG Gebetszeiten → iCalendar (.ics) Feed (Docker + Traefik)
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
.icsDatei und eineindex.htmlin ein Docker-Volume
-
Web-Container (nginx)
- liefert das Volume
/datavia HTTP aus - Traefik routet von außen auf nginx
- liefert das Volume
Container bauen und pushen
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t gitea.home.musaberdem.de/musabe24/igmg-ics-updater:1.0.0 \
-t gitea.home.musaberdem.de/musabe24/igmg-ics-updater:latest \
--push \
./updater
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t gitea.home.musaberdem.de/musabe24/igmg-ics-web:1.0.0 \
-t gitea.home.musaberdem.de/musabe24/igmg-ics-web:latest \
--push \
-f ./web/Dockerfile \
.
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/<ICS_FILENAME>→ abonnierbarer Kalenderfeed/data/index.html→ Landing-Page (Link + letzte Aktualisierung)
Konfiguration
Konfiguration erfolgt über eine .env Datei im Projektordner.
Beispiel .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 trICS_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.