PUBLIC_URL: Kalender-Link per Umgebungsvariable (HTTPS hinter Proxy)

This commit is contained in:
2026-01-29 14:02:44 +01:00
parent 221e9eb8d6
commit 51e7cdd85c
3 changed files with 11 additions and 4 deletions

View File

@@ -82,6 +82,7 @@ Die eigentliche iCal-Datei für Abos und direkten Download ist unter `/calendar.
- `KANTINE_BASE_URL` Basis-URL der Kantine (Standard: `http://kantine-bhz.de`)
- `REFRESH_INTERVAL_SECONDS` Sekunden zwischen Aktualisierungen (Standard: 86400 = 24 h)
- `PUBLIC_URL` Öffentliche Basis-URL (z. B. `https://kantine.elpatron.me`). Wenn gesetzt, wird diese URL für die Kalender-Abo-URL auf der Startseite verwendet. **Empfohlen hinter HTTPS-Proxy**, falls der Proxy keine `X-Forwarded-Proto`/`X-Forwarded-Host`-Header sendet sonst erscheint dort weiterhin `http://`.
---
@@ -92,11 +93,12 @@ Für den Betrieb als Container (z. B. auf einem Server):
**Build und Run:**
```bash
docker build -t kantine2ical .
docker run -p 8000:8000 kantine2ical
docker run -p 8000:8000 -e PUBLIC_URL=https://kantine.elpatron.me kantine2ical
```
(Ersetzen Sie `https://kantine.elpatron.me` durch Ihre öffentliche HTTPS-URL. Dann zeigt die Startseite die Kalender-URL mit `https://`.)
- **Startseite** (Anleitung + Abo-URL): `http://<host>:8000/`
- **iCal-Abo:** `http://<host>:8000/calendar.ics`
- **Startseite** (Anleitung + Abo-URL): `http://<host>:8000/` bzw. Ihre HTTPS-URL
- **iCal-Abo:** `http://<host>:8000/calendar.ics` bzw. `https://<host>/calendar.ics`
**Mit Docker Compose:**
```bash

4
app.py
View File

@@ -19,6 +19,8 @@ from kantine2ical import BASE_URL, empty_ical_bytes, refresh_speiseplan
# Konfiguration (Umgebungsvariablen mit Fallback)
KANTINE_BASE_URL = os.environ.get("KANTINE_BASE_URL", BASE_URL)
REFRESH_INTERVAL_SECONDS = int(os.environ.get("REFRESH_INTERVAL_SECONDS", "86400")) # 24h
# Öffentliche Basis-URL (z. B. https://kantine.elpatron.me), wenn Proxy keine X-Forwarded-* sendet
PUBLIC_URL = os.environ.get("PUBLIC_URL", "").strip().rstrip("/")
# Template-Ordner immer relativ zu dieser Datei (funktioniert mit Gunicorn/Docker)
_template_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "templates")
@@ -90,7 +92,7 @@ def _format_last_refresh() -> str | None:
@app.route("/")
def index():
"""Startseite mit Anleitung zur iCal-Einbettung (Google und andere)."""
base = request.url_root.rstrip("/")
base = PUBLIC_URL or request.url_root.rstrip("/")
calendar_url = f"{base}/calendar.ics"
last_refresh_str = _format_last_refresh()
try:

View File

@@ -4,3 +4,6 @@ services:
ports:
- "8000:8000"
restart: unless-stopped
environment:
# Öffentliche HTTPS-URL, damit die Startseite den Kalender-Link mit https anzeigt
- PUBLIC_URL=https://kantine.elpatron.me