3.7 KiB
Migrating the Omada Controller: desktop → homeserver
Done 2026-10-04 — the controller now runs on the OptiPlex (
192.168.30.20, see homeserver.md). What actually happened: backup exported on the desktop controller (6.3.0.45), restored in the new controller's setup wizard (same version), then the controller's built-in device migration pointed all five devices at192.168.30.20— no device reboots needed. The desktop instance was stopped withdocker compose down. The guide below is kept for reference (e.g. a future hardware swap).
Once a new homeserver is provisioned and set up with Docker, move the Omada Software Controller there permanently so it doesn't depend on the desktop being on. This is a backup/restore move, not a live migration — plan for a few minutes of controller downtime (the ER605 itself keeps routing traffic the whole time; only controller management is briefly unavailable).
Before you start
- Note the exact controller version running on the desktop (
Settings → Aboutor the version shown in the container image tag, e.g.mbentley/omada-controller:6.3.0.x). - The new host's Compose setup must run the same major.minor(.patch) version as the desktop at restore time. TP-Link's controller cannot restore a backup taken by a newer version into an older one — it corrupts the database. If you want to upgrade, upgrade after the restore succeeds on matching versions, not before.
- The new host needs to be reachable from the ER605 for adoption to keep working post-migration — either on the same L2 segment, or with the gateway's controller "inform URL" pointed at the new host's address (Omada gateways support setting this manually under the standalone/local management settings if they're ever on different segments).
Steps
- On the desktop controller:
Settings → Maintenance → Backup→ create a manual backup (or use Auto Backup if one's already scheduled) and download the backup file. - On the new host: copy
../docker/omada/compose.yamlover via the Ansible-managed Docker setup, keeping the image tag identical to what the desktop was running. - Bring the container up on the new host (
docker compose up -d), open its controller UI, and go through the setup wizard just far enough to reach the option to restore from a backup instead of creating a new site — this is usually offered right at first login (RestorealongsideCreate New Controller). - Upload the backup file from step 1 and let it restore. The controller restarts once done.
- Confirm the ER605 (and anything else already adopted) shows up and reconnects on the new controller. Give discovery a minute — devices need to re-inform to the new controller address.
- Once confirmed working, stop and remove the desktop instance (
docker compose down, and clean up theomada-data/omada-logsvolumes there if you're done with them) — don't leave two controllers able to fight over the same devices. - If you do want to move to a newer controller version, do that now, as a separate step, against the new instance only — bump the image tag,
docker compose up -d, and let it run its own internal DB migration.
If versions don't match
If the desktop somehow ended up ahead of what you initially deploy on the new host:
- Deploy the exact matching version on the new host first (adjust the image tag).
- Restore the backup — this will succeed since versions match.
- Then bump the new host's image tag to the newer version and let it self-upgrade the database in place.
Never try to restore a newer-version backup directly into an older controller — see the note in status.md.