Du brauchst einen Rechner mit Docker und dem Docker-Compose-Plugin (docker compose version) sowie
curl und openssl. Checky läuft als ein einziger Container; alle Daten liegen in einer SQLite-Datei in einem
Docker-Volume.
1. Compose-Datei holen
mkdir checky && cd checky
curl -fsSLO https://raw.githubusercontent.com/sonnenglas/checky/main/docker-compose.yml
2. Konfiguration schreiben
Das legt eine .env mit zwei frischen Zufalls-Secrets an. BASE_URL ist die Adresse, die man im Browser
öffnet — für einen ersten Test auf deinem Rechner ist das http://localhost:3000.
cat > .env <<EOF
BASE_URL=http://localhost:3000
BETTER_AUTH_SECRET=$(openssl rand -base64 48)
APP_SECRET=$(openssl rand -base64 48)
EMAIL_FROM=Checky <[email protected]>
# SMTP_URL=smtps://user:[email protected]:465
EOF
chmod 600 .env
Heb die beiden Secrets gut auf: BETTER_AUTH_SECRET signiert die Sitzungen, APP_SECRET signiert die
One-Tap-Links in den E-Mails und verschlüsselt SSO-Secrets. Ohne SMTP_URL landen E-Mails nur im
Container-Log — für einen Test reicht das; richte den Versand später unter E-Mail ein.
Das Image kommt von ghcr.io/sonnenglas/checky. Compose nimmt :latest, außer du legst mit CHECKY_IMAGE in
der .env eine Version fest, z. B. CHECKY_IMAGE=ghcr.io/sonnenglas/checky:2.0 (für den Produktivbetrieb
empfohlen: x.y bekommt nur Patch-Releases). CHECKY_PORT ändert den veröffentlichten Port (Standard 3000).
3. Checky starten
docker compose up -d
Die Datenbank-Migrationen laufen bei jedem Start. Warte, bis der Health-Check antwortet:
until curl -fsS http://localhost:3000/health; do sleep 2; done
Er gibt {"status":"ok","version":"…"} aus. docker compose logs checky zeigt in der ersten Zeile Modus,
E-Mail-Versand und Scheduler.
4. Deine Organisation einrichten
Öffne http://localhost:3000. Beim ersten Aufruf erscheint die Einrichtung: Leg dein Owner-Konto und deine
Organisation an (oder wähle „Du ziehst von einem anderen Checky um?“, um einen Export einzuspielen). Danach
führt dich das Onboarding durch Firmendaten, Anmeldeoptionen, dein Team, die ersten Fragen und den Rhythmus.
Nur das erste Konto kann frei angelegt werden. Alle anderen kommen per Einladung dazu oder — sobald deine E-Mail-Domain verifiziert ist — indem sie sich mit ihrer Firmenadresse anmelden (SSO und verifizierte Domains).
5. Produktiv gehen
Im echten Betrieb braucht Checky eine öffentliche https-Adresse: Passkeys, sichere Cookies, OAuth für ChatGPT/Claude und SSO-Callbacks hängen davon ab.
- Leg einen DNS-Eintrag (
A/AAAA) wiechecky.example.comauf deinen Server an. - Setz in der
.envBASE_URL=https://checky.example.com,TRUST_PROXY=trueund deine SMTP-Daten. - Stell einen Reverse Proxy mit TLS davor. Mit Caddy (automatische Zertifikate) kommt eine
docker-compose.override.ymldazu:
services:
checky:
ports: !reset []
caddy:
image: caddy:2
restart: unless-stopped
ports: ["80:80", "443:443"]
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-data:/data
volumes:
caddy-data:
und daneben ein Caddyfile:
checky.example.com {
reverse_proxy checky:3000 {
flush_interval -1
}
}
flush_interval -1 reicht Live-Updates (Server-Sent Events) sofort durch. Mit nginx setzt du
proxy_buffering off; für /api/v1/events; Traefik braucht keine Extra-Einstellung.
- Noch einmal
docker compose up -d, dann Backups einrichten — bevor du dein Team einlädst.
Was drinsteckt
- Image: distroless Node 24, amd64 + arm64, läuft als uid 65532, ohne Shell.
- Daten: Volume
checky-data, Datenbank unter/data/checky.db. - Scheduler: im Prozess, jede Minute (Check-ins, Erinnerungen, Webhooks).
- Health:
GET /health, auch für den Container-Healthcheck.