Back up an app, and prove the restore works
An untested backup is a guess. This walks through backing up one app, deliberately breaking it, restoring, and confirming the data came back.
Time: ~20 minutes Β· Youβll need: one installed app with some data in it
Do this on an app you can afford to lose β the restore step erases the appβs current data before replacing it. Pick something you installed to experiment with, not your only copy of anything.
What youβll have at the end
- A backup archive on disk you can point at
- First-hand proof the restore path works
- A sense of how long it takes, before you need it under pressure
What Hubβs backup actually captures
Per app, Hub archives three things into a single .tar.gz:
| Included | What it is |
|---|---|
app-data/ | The appβs persistent data directory β its database, uploads, and state |
app/ | The installed app definition (compose file, config) |
user-config/ | Your overrides for that app, when you have any |
Nested backups directories are excluded, so backups donβt accumulate inside each other.
Backups land on the same disk as the data they protect, under
<ROOT_FOLDER_HOST>/backups/<app-store>/<app-name>/. That covers a bad update
or a mistaken change. It does not cover the disk failing. For that, copy
archives somewhere else β see Backup and
restore for whole-machine migration.
Put something recognisable in the app
Open the app and create something youβll recognise later β a document, a note, an uploaded photo. You need a specific thing to look for, not a vague sense that it βlooks right.β
Take the backup
On the appβs page in the dashboard, open the backups panel and choose Backup now.
Hub copies the appβs data, config, and any user overrides into a temporary directory, creates a .tar.gz, and moves it into the appβs backup folder. Larger apps take longer β it is a real copy, not a snapshot.
Confirm the archive exists
The Backups list shows each archive with its ID, Date, and Size.
You can also see it on disk:
ls -lh <ROOT_FOLDER_HOST>/backups/<app-store>/<app-name>/Archives are named <app-urn>-<timestamp>.tar.gz. A size of a few hundred bytes means it captured nothing β check the app actually had data before you trust it.
Break something on purpose
This is the part that makes it a drill instead of a ritual.
Go back into the app and delete the thing you created in step 1. Confirm it is really gone from the appβs own interface.
Restore
In the backups list, choose Restore on the archive you made.
Hub warns you that all current data for the app will be erased and replaced with the backupβs contents. That is exactly what you want here β accept it.
Verify
Open the app again and look for the specific thing you deleted.
- Itβs back β your backup and restore path both work.
- Itβs not back β the archive didnβt contain what you assumed. Better to find that out now.
Retention
By default Hub keeps every backup: MAX_BACKUPS defaults to 0, which means unlimited. On a busy app that grows without bound.
You can cap it globally, or per app at install time β the install form has an App backup limit field, where empty means βuse the global settingβ and 0 means unlimited. Values run from 0 to 100.
Hub also offers to back up an app before updating it, in the update flow. Leave that on; it is the cheapest insurance available.
Moving archives off the machine
The backups panel lets you download an archive to whatever device youβre using, and upload a .tar.gz back to an app later. That upload-and-restore path is what makes a backup useful after a disk dies β the archive has to already be somewhere else.
For scheduled copies, see Auto backup your apps using cron.
Next
- Backup and restore β moving a whole Hub to new hardware
- Auto backup your apps using cron β scheduling this
- Backup & Restore β the feature reference