Schnellstart mit Docker

Checky in etwa zehn Minuten mit Docker Compose auf deinem eigenen Server starten — ein Container, eine SQLite-Datei.

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.

  1. Leg einen DNS-Eintrag (A/AAAA) wie checky.example.com auf deinen Server an.
  2. Setz in der .env BASE_URL=https://checky.example.com, TRUST_PROXY=true und deine SMTP-Daten.
  3. Stell einen Reverse Proxy mit TLS davor. Mit Caddy (automatische Zertifikate) kommt eine docker-compose.override.yml dazu:
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.

  1. 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.

Du kommst nicht weiter? Wir helfen bei der Installation: schreib uns