Auf Cloudflare läuft Checky als Worker mit einer D1-Datenbank, zwei Durable Objects (Live-Updates pro Organisation und Rate Limiting), einem Cron Trigger jede Minute und der Web-App als statische Assets. Es ist derselbe Code wie beim gehosteten Dienst, nur im Ein-Organisations-Modus.
Wir empfehlen den Workers-Paid-Plan: Er gibt dem Passwort-Hashing bei der Anmeldung genug CPU-Zeit und hebt die D1-Limits pro Anfrage an (wichtig beim Import einer großen Organisation). Das Bundle passt aber auch in den Free-Plan.
Deploy mit einem Klick
- Klick auf den Deploy-to-Cloudflare-Button in
apps/worker/README.mdim Repository (oder auf deiner Kontoseite nach dem Kauf). - Cloudflare forkt den Code in dein GitHub-Konto, legt die D1-Datenbank und die Durable Objects an und fragt
nach zwei Secrets. Erzeug beide mit
openssl rand -base64 48:BETTER_AUTH_SECRET— signiert die Sitzungen.APP_SECRET— signiert One-Tap-Links und Antwortadressen, verschlüsselt SSO-Secrets.
- Workers Builds baut die Web-App, deployt den Worker und spielt die D1-Migrationen ein.
Nach dem ersten Deploy
- Öffne
https://checky.<deine-subdomain>.workers.devund schließ die Einrichtung ab (Owner-Konto und Organisation) — oder wähle „Du ziehst von einem anderen Checky um?“, um einen Export einzuspielen. - Optional: Eigene Domain hinzufügen (Worker → Settings → Domains & Routes), dann die Variable
BASE_URLauf die endgültigehttps://-URL setzen (Settings → Variables). Passkeys und OAuth-Callbacks hängen an diesem Host. - E-Mail einrichten (unten), optional
CHECKY_LICENSE_KEYund Secrets für Google/Microsoft-Anmeldung (siehe Konfiguration).
E-Mail auf Cloudflare
Versand über das send_email-Binding des Workers:
- Dashboard → deine Domain → Email → Email Routing: aktivieren (legt MX- und SPF-Einträge an).
- Email Sending: die Absenderdomain bzw. -adresse aus
EMAIL_FROMverifizieren (DKIM wird für dich eingetragen). Ohne Email Sending stellt das Binding nur an verifizierte Zieladressen zu — reicht für einen Test, nicht für dein Team. EMAIL_TRANSPORT=cloudflareist der Standard, wenn das Binding existiert (consoleloggt nur, zum Debuggen).
Antworten (Check-in per Reply auf die E-Mail beantworten):
- Such dir eine Subdomain aus, z. B.
reply.example.com, und aktiviere dafür Email Routing. - Routing rules → Catch-all (oder die Adresse
reply+*) → Aktion Send to a Worker → dein Checky-Worker. - Setz
EMAIL_REPLY_DOMAIN=reply.example.com. Zum Testen auf eine Erinnerung mit „ja“ antworten.
SMTP geht aus Workers heraus nicht. Wenn du SMTP brauchst, nimm Docker.
Updates
Synchronisiere deinen Fork mit dem neuen Release-Tag; Workers Builds deployt den nächsten Push automatisch (Worker plus D1-Migrationen). Aus einem lokalen Checkout:
git pull
pnpm install
pnpm --filter @checky/worker run deploy # wrangler deploy + wrangler d1 migrations apply DB --remote
Code rollst du mit wrangler rollback zurück, Daten mit D1 Time Travel (wrangler d1 time-travel restore), siehe
Backups und Updates.
Lokal ausprobieren (ohne Cloudflare-Konto)
cp apps/worker/.dev.vars.example apps/worker/.dev.vars # Beispiel-Secrets ersetzen
pnpm --filter @checky/worker dev # http://localhost:8787, lokale D1
curl "http://localhost:8787/__scheduled?cron=*+*+*+*+*" # einen Scheduler-Tick auslösen
Grenzen
- Der Deploy-Button braucht den Code in einem öffentlichen Repository (oder einer öffentlichen Kopie).
- Der Import einer sehr großen Organisation kann im Free-Plan die D1-Limits pro Anfrage sprengen — nimm dafür den Paid-Plan.