Skip to content

Backups

Geekonomics stores all data in two places:

  • data/geekonomics.db — the SQLite database (all transactions, accounts, invoices, clients, users)
  • uploads/ — receipt file attachments

Both are in bind-mounted directories outside the container, so Docker rebuilds never affect them. But you still need to back them up.

Manual backup

bash
# Backup the database
cp /mnt/user/appdata/geekonomics-app/data/geekonomics.db \
   /mnt/user/appdata/geekonomics-app/backups/geekonomics-$(date +%Y%m%d).db

# Backup uploads (optional, but recommended)
tar -czf /mnt/user/appdata/geekonomics-app/backups/uploads-$(date +%Y%m%d).tar.gz \
         /mnt/user/appdata/geekonomics-app/uploads/

Hot backups

SQLite supports hot backups while the database is in use. You can copy geekonomics.db without stopping the container.

If you see .db-wal or .db-shm files alongside the database, include them in the backup — they contain uncommitted transactions that haven't been checkpointed yet.

Automated backup via cron (Unraid)

Add a cron job on the Unraid server. In Unraid, use the User Scripts plugin or add to the cron file directly:

bash
# Daily at 2:00 AM — keep 30 days of backups
0 2 * * * cp /mnt/user/appdata/geekonomics-app/data/geekonomics.db \
             /mnt/user/backups/geekonomics/geekonomics-$(date +\%Y\%m\%d).db && \
           find /mnt/user/backups/geekonomics/ -name "*.db" -mtime +30 -delete

Restoring from backup

  1. Stop the container:

    bash
    cd /mnt/user/appdata/geekonomics-app
    docker compose stop
  2. Replace the database file:

    bash
    cp /path/to/backup/geekonomics-20260101.db data/geekonomics.db
    # Remove any stale WAL files
    rm -f data/geekonomics.db-shm data/geekonomics.db-wal
  3. Restart:

    bash
    docker compose start

What's NOT in the database

Receipt files are stored in uploads/ as plain files, not inside the database. If you restore a database backup but not the matching uploads backup, transaction records will reference attachments that no longer exist.

Back up both data/ and uploads/ for a complete restore.

Google Drive / cloud sync (optional)

For offsite backups, use rclone to sync your backup directory to Google Drive or any cloud storage:

bash
# Install rclone and configure a remote called "gdrive"
rclone copy /mnt/user/backups/geekonomics gdrive:backups/geekonomics

# Add to cron after the backup step

Rclone supports 40+ cloud providers. See rclone.org for setup instructions.

Geekonomics — self-hosted bookkeeping for small businesses