Esta página aún no está traducida y se muestra en inglés. La traducción llegará pronto.

Backups and upgrades

Back up Checky's SQLite database (snapshots or continuous Litestream replication), restore it, and upgrade safely on Docker and Cloudflare.

Backups on Docker

All data is one SQLite file, /data/checky.db in the checky-data volume.

Snapshot (simple, a few seconds of downtime) — run in the directory with docker-compose.yml:

docker compose stop checky
mkdir -p backup-$(date +%F)
docker run --rm -v checky_checky-data:/data -v "$PWD/backup-$(date +%F)":/b busybox sh -c 'cp /data/checky.db* /b/'
docker compose start checky

Checky folds its write-ahead log into checky.db when it stops, so that file alone is complete; the command copies the -wal/-shm files too in case the container was killed instead of stopped. The volume name is <project>_checky-data; the project is the directory name (here checky). Check with docker volume ls.

Restore a snapshot (replaces the current data):

BACKUP=backup-2026-10-01   # the folder you want to restore
docker compose stop checky
docker run --rm -v checky_checky-data:/data -v "$PWD/$BACKUP":/b:ro busybox \
  sh -c 'rm -f /data/checky.db* && cp /b/checky.db* /data/ && chown 65532:65532 /data/checky.db*'
docker compose start checky

Continuous backups with Litestream (recommended): replicate every change to S3-compatible storage (Cloudflare R2, AWS S3, Backblaze, MinIO). Set LITESTREAM_BUCKET, LITESTREAM_ACCESS_KEY_ID, LITESTREAM_SECRET_ACCESS_KEY (for R2 also LITESTREAM_ENDPOINT=https://<account>.r2.cloudflarestorage.com and LITESTREAM_REGION=auto) and start with the Litestream sidecar from the repository:

docker compose -f docker-compose.yml -f deploy/litestream/docker-compose.litestream.yml up -d

A fresh server with an empty volume restores itself from the replica on first start.

Portable: owners can download the whole organization as one file (Settings → Move your data → Export) — see Moving.

Test a restore now and then — a backup you never restored is a hope, not a backup.

Backups on Cloudflare

D1 Time Travel keeps 30 days of history (wrangler d1 time-travel info DB, restore with wrangler d1 time-travel restore). For an extra copy: wrangler d1 export DB --remote --output backup.sql.

Upgrading

Read the release notes first (changelog); major versions list required steps. Admins see an “update available” notice in the app; security releases are highlighted.

Docker — back up, then:

docker compose pull
docker compose up -d
docker compose logs -f checky
curl -s https://checky.example.com/health   # {"status":"ok","version":"…"}

Database migrations run automatically on start. Image tags: x.y.z (exact), x.y (patch updates of one minor), latest. Pin x.y in production (CHECKY_IMAGE=ghcr.io/sonnenglas/checky:2.1) and move to the next minor deliberately.

Cloudflare — sync your fork with the release tag (Workers Builds deploys it), or run pnpm --filter @checky/worker run deploy from a checkout. D1 migrations are applied as part of the deploy.

Rolling back

Migrations only go forward. To roll back, restore the backup taken before the upgrade and run the previous image (Docker) or Worker version (wrangler rollback). Never run an older version against a database a newer version has migrated.

Licence and updates

A self-host licence covers releases dated within its update period. Newer releases still install and run — the key never expires — but renewing keeps you covered for updates and security fixes.

¿Necesitas ayuda con la instalación? contáctanos