Moving & backups
SoundChex can copy itself — catalogue, media, profiles — to another machine over a tailnet or a forwarded address, with approval required on both ends. And because the database is one SQLite file, everyday backups are refreshingly boring.
Backups
- The catalogue is a single file:
database/database.sqlite. Copy it and you have the titles, artists, profiles, history and resume points. - Artwork and uploads live under
storage/app/public/. - Your media files are wherever your watch folders are — SoundChex never moves them out from under you, so back them up the way you already do.
- Scheduled backups run under the scheduler (Background workers).
Moving to a new machine — the built-in transfer
Both machines run the same SoundChex code. The one being copied approves; the one doing the copying asks and pulls.
Before you start
- Both machines: SoundChex installed and migrated (
php artisan migrate). - Both machines:
php artisan queue:workrunning. This is the one people forget — without it a transfer is approved and then sits doing nothing. - Receiver: enough free disk for what's coming, and
php artisan storage:linkdone, or artwork 404s afterwards. - Reachable: the receiver must be able to open the source in a browser — try
https://<source-address>/soundchex.jsonfirst. If that doesn't answer, nothing below will work.
1. On the receiving machine — ask
Admin → Server transfer. Fill in the source's address, choose what to bring, enter your password, press Ask that server, and note the four-digit code it shows.
| What | Notes |
|---|---|
| The catalogue | Titles, artists, albums, artwork. Minutes. |
| The media files | The actual music, films and books. Hours. |
| Profiles and history | Comes with the catalogue — the database holds both. |
| Settings and keys | Usually leave off — the new machine wants its own. |
Nothing has moved yet. Nothing can move until the next step.
2. On the source machine — approve
The request appears in Admin → Server transfer with the address it came from, what the machine calls itself, what it's asking for, and a four-digit code. Check the code matches the one on the other screen — that's how you know this is the request you just started and not someone else's. Type your password and press Approve.
3. Back on the receiver — start
Press Check for approval. The transfer starts and runs in the background:
- Files already present with the right content are skipped.
- Each file is verified after it arrives; anything corrupt is deleted and recorded rather than kept.
- Pause and resume whenever — it picks up where it stopped, not from the beginning.
- It can be stopped from either end at any moment; every request the receiver makes re-checks that it's still allowed.
Progress shows files done, gigabytes moved, and anything that failed.
After the move
If the old machine is retiring, update anything that pointed at it —
tunnels and tailnet names,
APP_URL, and the devices' saved connections. Scan once on the new machine to
confirm the watch folders resolve.