134 lines
3.1 KiB
Markdown
134 lines
3.1 KiB
Markdown
# 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/<ICS_FILENAME>` → 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. |