Datenschutzfreundliche Lo-Fi-Stream-Seite mit zustimmungsbasierter YouTube-Einbindung.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Lo-Fi-Stream-Seite (YouTube-Embed), ausgeliefert von nginx. Seitenaufrufe werden mit einer selbst gehosteten Umami-Instanz gezählt. Umami setzt keine Cookies. Anders als der YouTube-Stream lädt das Tracking ohne vorherige Zustimmung. Der Tracker wird nicht direkt von der Umami-Domain geladen, sondern über die eigene Domain (First-Party-Proxy), weil Content-Blocker den Drittanbieter-Request verwerfen:檢視完整 README ↗
Lo-Fi-Stream-Seite (YouTube-Embed), ausgeliefert von nginx.
| Datei | Zweck |
|---|---|
index.html | Die Seite |
style.css | Styles (extern, damit CSP ohne unsafe-inline geht) |
main.js | Zustimmungsbasierte YouTube-IFrame-API-Einbindung |
default.conf | nginx-Config: Security-Header, CSP, Favicon-Alias, Umami-Proxy |
404.html | Eigene Fehlerseite (nginx error_page) |
favicon.svg | Favicon (auch unter /favicon.ico ausgeliefert) |
robots.txt / sitemap.xml | Suchmaschinen-Metadaten |
social-preview.png | Open-Graph- und Twitter-Vorschaubild |
docker compose up --build
# → http://localhost:8088
Seitenaufrufe werden mit einer selbst gehosteten Umami-Instanz
(https://umami.scruzzi.com) gezählt. Umami setzt keine Cookies. Anders als
der YouTube-Stream lädt das Tracking ohne vorherige Zustimmung.
Der Tracker wird nicht direkt von der Umami-Domain geladen, sondern über die eigene Domain (First-Party-Proxy), weil Content-Blocker den Drittanbieter-Request verwerfen:
| Pfad | Ziel |
|---|---|
/a/script.js | https://umami.scruzzi.com/script.js |
/a/api/send | https://umami.scruzzi.com/api/send |
<script defer src="/a/script.js" data-website-id="…"> in
index.html. Umami leitet den Event-Endpunkt aus dem Script-Pfad ab und
sendet deshalb automatisch an /a/api/send.location =-Blöcke in default.conf. Nur diese beiden
Pfade werden weitergereicht; das Umami-Dashboard ist über die Seite nicht
erreichbar. X-Forwarded-For wird durchgereicht, damit Umami die
Besucher-IP statt der Container-IP sieht.'self' deckt Script und
Events ab.data-website-id-Attribut und stammt aus dem
Umami-Dashboard (Einstellungen → Websites).umami.scruzzi.com. nginx löst den Hostnamen nur beim Start auf; siehe
OPERATIONS.md.GitHub Actions prüft JavaScript, HTML-Metadaten, Security-Header und das
fertige nginx-Image. Der Release-Flow läuft bei Pushes auf main:
Commit (Conventional Commits)
→ Tests + Commitlint + CodeQL
→ isoliertes semantic-release: SemVer-Bump, CHANGELOG, Tag und Release
→ Trivy: Image-Scan auf hohe und kritische Schwachstellen
→ Buildx: AMD64-/ARM64-GHCR-Image mit SBOM und Provenance
→ Dependabot: wöchentliche Updates für Actions, Docker und npm
→ FluxCD rollt die neue Version im Cluster aus
fix: → Patch, feat: → Minor,
BREAKING CHANGE: → Major. Commits wie chore:/docs:/ci: lösen
kein Release aus. chore(deps): erzeugt für ausgerollte
Abhängigkeitsupdates automatisch einen Patch-Release.linux/amd64 und
linux/arm64; beide Varianten werden vor dem Push separat gescannt.