Fang mit dem Log an: docker compose logs --tail 100 checky (Cloudflare: Worker → Logs oder wrangler tail) und
curl -s <BASE_URL>/health.
Der Container startet nicht
Invalid configuration:mit einer Liste — korrigier die genannten Variablen in der.env. Typisch:BETTER_AUTH_SECRET: required in production, ein Secret mit weniger als 32 Zeichen oderuses a published example value; generate a random one(ein Beispiel-Secret wurde kopiert).- Port schon belegt — setz
CHECKY_PORT=3001(oder einen anderen freien Port) in der.env. - Permission denied auf
/data— das Image läuft als uid 65532. Wenn du statt des benannten Volumes ein Host-Verzeichnis einbindest, gib es mitchown -R 65532:65532frei.
Es kommen keine E-Mails an
- In der ersten Logzeile steht
email: console? Dann istSMTP_URLnicht gesetzt — E-Mails werden nur geloggt. - Such im Log nach SMTP-Fehlern (Anmeldung, TLS). Port 465 braucht
smtps://, Port 587smtp://. - Zugestellt, aber im Spam: SPF, DKIM und DMARC für die Domain aus
EMAIL_FROMeinrichten. - Erinnerungen folgen der Benachrichtigungseinstellung jeder Person (alle, nur bei Fälligkeit, nur zur Deadline, keine) und gehen während Abwesenheiten und an Feiertagen nicht raus.
Antworten beantworten den Check-in nicht
EMAIL_REPLY_DOMAINmuss gesetzt sein, bevor die Erinnerung rausgeht (die Reply-To-Adresse steht in der E-Mail).- Docker:
INBOUND_WEBHOOK_SECRETgesetzt, und der Anbieter schickt mit dem Secret an/api/v1/inbound/email.401= falsches Secret,404= Webhook aus (kein Secret konfiguriert). - Antworten zählen bis sieben Tage nach der Deadline, einmal pro Check-in.
Probleme bei der Anmeldung
- Falsche Weiterleitung oder Cookies halten nicht —
BASE_URLmuss genau die URL im Browser sein (Schema, Host, Port, kein Schrägstrich am Ende). - Passkeys scheitern — Passkeys brauchen
https://(oderlocalhost) und hängen am Host ausBASE_URL. Nach einem Domainwechsel legen alle neue Passkeys an. - „Registrierung nicht erlaubt“ — bei Self-Hosting ist nur das erste Konto frei; alle anderen brauchen eine Einladung oder eine verifizierte Domain mit automatischem Beitritt.
- Alle wurden abgemeldet —
BETTER_AUTH_SECREThat sich geändert. - One-Tap-Links sind „ungültig“ —
APP_SECREThat sich geändert, oder der Link ist zu alt.
Live-Updates erscheinen nicht
Das Dashboard aktualisiert sich über Server-Sent Events auf /api/v1/events. Hinter einem Proxy das Puffern
abschalten: Caddy flush_interval -1, nginx proxy_buffering off;. Ein Neuladen der Seite zeigt immer den
aktuellen Stand.
Rate Limiting wirkt hinter einem Proxy falsch
Ohne TRUST_PROXY=true scheinen alle Anfragen von der Adresse des Proxys zu kommen und teilen sich ein Limit. Setz
TRUST_PROXY=true (und CLIENT_IP_HEADERS, falls dein Proxy einen anderen Header nutzt).
SSO und Domains
- Domain-Verifizierung scheitert — der TXT-Eintrag ist noch nicht sichtbar (DNS kann Stunden dauern). Prüfen mit
dig TXT _checky-verification.example.com. Kommt dein Server nicht ancloudflare-dns.com, setzDNS_OVER_HTTPS_URL. - „Domain schon vergeben“ — eine andere Organisation hat sie verifiziert.
- Interner IdP abgelehnt —
SSO_ALLOW_PRIVATE_IDP=truesetzen und die Origin inTRUSTED_ORIGINSeintragen. - SSO geht nach dem Umzug nicht mehr — Redirect-/ACS-URLs beim IdP anpassen und Client-Secrets neu eintragen, falls der Export ohne Passphrase lief.
Feiertage lassen sich nicht importieren
Der Feiertagsimport fragt Nager.Date ab (HOLIDAYS_API_URL). Auf einem Server ohne Internetzugang betreibst du ein
eigenes Nager.Date und zeigst die Variable darauf — oder trägst Feiertage als Abwesenheiten ein.
Import abgelehnt
import.version_unsupported— die Datei stammt aus einem neueren Checky; aktualisiere zuerst das Ziel.- Eine selbst betriebene Installation nimmt einen Import nur an, solange sie leer ist — starte mit einem frischen Volume.
Immer noch nicht weiter?
Schreib an [email protected] mit der Version (/health), wie du Checky betreibst, und den passenden Logzeilen
(vorher Secrets entfernen).