PulseBase nutzt drei externe Dienste die einmalig konfiguriert werden müssen. Zwei davon (Sentry, UptimeRobot) sind kostenlos im Standardumfang.
Was: Automatische, kostenlose TLS-Zertifikate via Let's Encrypt. Relevant für den
Public-SaaS-Modus (make up-public) mit gebündeltem Caddy. Im Heim-Betrieb
(make up) übernimmt das Caddy des homelab-gateway die TLS-Terminierung.
Voraussetzungen:
- Domain zeigt per A-Record auf die öffentliche IP des Servers (vor dem ersten Start!)
- Port 80 und 443 sind auf dem Server erreichbar (Firewall / Portweiterleitung)
Setup (Kurzform — vollständiger Runbook: deployment-public.md):
-
env/.env.publicanlegen undPUBLIC_DOMAIN+ACME_EMAILsetzen:cp env/.env.public.example env/.env.public # PUBLIC_DOMAIN=app.example.com # ACME_EMAIL=deine@email.com
Caddy holt das Zertifikat beim ersten Request automatisch (HTTP-01) und erneuert es selbstständig. Die Zertifikate liegen im persistenten Volume
caddy-data(niemals mitdown -vlöschen → Let's-Encrypt-Rate-Limit). -
Starten:
make up-public
Tipp: zuerst mit der ACME-Staging-CA testen (Zeile in
deploy/Caddyfileeinkommentieren), um das Prod-Rate-Limit (5 gleiche Zertifikate/Woche) nicht zu treffen.
Troubleshooting:
make logs-public # Caddy-Logs — zeigt ACME-Fehler sofortHäufige Fehler: Domain zeigt noch auf falsche IP, Port 80/443 nicht erreichbar.
Was: Sentry fängt unbehandelte Exceptions und logger.error()-Aufrufe ab,
benachrichtigt sofort per E-Mail und zeigt Stack Trace, User-Context und
Request-Details. Ohne Sentry merkst du Fehler erst wenn User sich melden.
Kosten: Kostenlos bis 5.000 Errors/Monat (Sentry Free Plan).
Setup:
-
Account erstellen: sentry.io → New Project → Python → FastAPI
-
DSN kopieren (Format:
https://xxx@oNNNNNN.ingest.sentry.io/NNNNNNN) -
Zentral in
env/.env.appeintragen (wird von allen drei Services geladen):SENTRY_DSN=https://xxx@oNNNNNN.ingest.sentry.io/NNNNNNNAlle drei Services (api, sync, ml) initialisieren Sentry automatisch beim Start, wenn
SENTRY_DSNgesetzt ist (gleiche DSN, unterschiedlicheserver_name).env/.env.appwird vor den Service-spezifischen Files geladen — daher hier eintragen und nicht zusätzlich in.env.api/.env.sync/.env.ml, sonst überschreibt ein dort leeresSENTRY_DSN=den zentralen Wert. -
Alert Rules im Sentry-Dashboard konfigurieren:
- Issues → Alerts → Create Alert Rule
Alert Bedingung Empfehlung Neuer Issue First seen Sofort per E-Mail Error Rate >5 Events / 10 min E-Mail Regression Issue taucht nach Fix wieder auf E-Mail -
Testen:
make logs-dashboard # Zeigt "sentry.initialized" beim API-Start
Hinweis: send_default_pii=False ist gesetzt — keine personenbezogenen Daten
(E-Mail, IP, Session) werden an Sentry gesendet.
PulseBase bündelt kein eigenes Uptime-Monitoring. Je nach Modus:
Heim (make up): Uptime Kuma läuft zentral im homelab-gateway (eigenes Repo),
erreichbar über status.home.lab bzw. die Tailscale-IP. Dort einen Monitor anlegen:
- Monitor Type:
HTTP(s) - URL:
http://pulsebase-api:8000/health(interner Docker-Hostname improxy-Netz) - Heartbeat Interval:
60s - Optional zweiter Monitor auf
http://pulsebase-api:8000/ready(erkennt DB/Migrations-Probleme)
Public SaaS (make up-public): externes UptimeRobot (kostenlos) gegen die
öffentlichen Endpunkte:
https://<domain>/health(primärer Uptime-Monitor)https://<domain>/ready(App + DB + Migrations)- Notification → E-Mail/Telegram
Was /health vs. /ready unterscheidet:
/health→ App läuft (kein DB-Call) — primärer Uptime-Monitor/ready→ App + DB + Migrations OK — für Deployment-Verification
-
env/.env.publicangelegt:PUBLIC_DOMAIN+ACME_EMAILgesetzt - DNS-A-Record auf VPS-IP, Ports 80/443 offen (vor dem ersten Start)
-
env/.env.api:HTTPS_ONLY=true,APP_BASE_URL,TRUSTED_PROXY_CIDRS -
SENTRY_DSNinenv/.env.appeingetragen + Alert-Rules konfiguriert (OBS-L3) -
BETTERSTACK_SOURCE_TOKEN(Logs) gesetzt, UptimeRobot-Monitore auf/health+/ready -
make up-publicgestartet,https://<domain>mit gültigem Let's-Encrypt-Cert geprüft - Backup-Cron +
make restore-testeingerichtet
Vollständiger Runbook: deployment-public.md.