# 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 `.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 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 ``` ```bash 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/` → 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.