Hey all, writing up some notes from a recent migration. To me (as but an enthusiast) how to go about this was not obvious from the docs or existing posts, so hopefully this is helpful to others.
My setup for context:
cloudron: a hetzner auction server with mixed HDD+SDD
backup box: a storage VPS in a different geographical location, using SSHFS (encrypted rsync)
had a good experience with this so far, the ability to use hardlinks is a game changer for storage size, as well as not being charged per request
requires manually setting up a secure ssh box. I used unattended-upgrades and ufw
for peace of mind, i also do an offline manual backup to a drive at home every ~3-6 months
Mixed HDD+SSD was useful for keeping cost low while balancing the needs of large apps like Nextcloud vs most other apps on cloudron. I haven't had much luck mounting external storage, so liked the idea of a bigger drive locally. the deal i found happened to have 3 drives and i laid them out like this
2x512GB SSD with RAID1; default drive mounted at /, for apps where i care about both uptime & speed (email,websites..)
1x1TB SSD; less critical apps where i care about speed, media-heavy apps like immich
1x2TB HDD; large storage apps (Nextcloud)
I haven't yet set up email RAID monitoring if anyone has advice there
Before the migration i had to
partition drives, mount extra SSD and HDD in /etc/fstab, set up RAID
whitelist ip of the new server in my domain provider's API if needed. this was the case for namecheap.
note down my ssh private key from the backup user (normally in /home/yellowtent/ssh) on the old server before powering it down. the backup config file doesn't include this automatically.
i think it's best to harden SSH and firewall after fully completing restore. i tried to do this after installing cloudron but before restoring via the web interface, but seemed to always run into issues. not sure if other people have had this experience.
I ran into an issue where on my root 0.5TB drive, nextcloud would not fit. there wasn't a clear way to assign a data directory for it in advance of restore, so i had to restore it on a per-app basis via the following:
start the restore via https://your-new-ip
wait until the dashboard is up
mount additional drives as volumes (i used filesystem(mountpoint)). I believe currently mounting them in /etc/fstab does not automatically make them recognized within cloudron.
go to large app->uninstall menu->Archive
there didn't seem to be a way to pause the restore, or change data directory while running the restore, so this was the only way i found to prevent completely filling my drive. after a while when restore for other apps finished, this app was left in Error state and I could then successfully archive on the second attempt.
download app backup config from backups->archive
install new instance of large app from the appstore that matches the backup app version
download a specific version of an app by changing the appstore URL: ie https://my.server.com/#/appstore/com.nextcloud.cloudronapp?version=5.5.2 <-- change to version=x.x.x
move this app's data directory to the volume where your additional drive is mounted (app settings->storage->data directory)
import app backup using the config file downloaded earlier
Curious how other's experience has been with large migrations, if you've found easier ways. Also your server/backup setups for dealing with apps like Nextcloud. I think some of this process can be improved or clarified in documentation/error messages. I.e. a note to remember to whitelist new server IP in domain provider API.
Having an option to mount volumes and assign per-app data-directory as part of the restore wizard would be fantastic.