Docker made migration to a new NAS easy

I recently migrated my home NAS and application server to new hardware. This is basically a "not much happened" report, because a friend asked me to summarize whether it was as easy as it sounded in theory.
In short: Yes. Yes, it was.
The original setup
My original setup grew over the years: I started with a Synology DS216j NAS. Over time as I grew less and less satisfied with Synology's apps I wanted to host some of my own. I started with a Raspberry Pi because I couldn't run much on the Synology, but the performance was lacking. Sometime a year (or year and a half?) ago I bought a decommissioned company laptop and started using it as a 'temporary' server. A few months at most, I thought. (Ha ha.) The setup was simple: all apps ran on the laptop/server in Docker (on Ubuntu Server LTS), and all the data was on the NAS. I used NFS to mount the NAS folders to the server and simply pointed the Docker configs at them.
I knew I'd have to buy a new NAS: the Synology was running out of space and being older, it didn't support HDD capacity larger than 8TB. (I wanted to go from 4 to 16.) I spent a lot of time trying to find a solution that would have sufficient performance, and capacity, and wouldn't break the bank, and eventually settled on AOOSTAR WTR PRO AMD Ryzen 7 5825u 4 Bay Nas Mini PC. A colleague had one of their 4-bay NASes for over a year and was satisfied, so I risked it. (Looking at the page now, I'm glad I ordered when I did - the price seems to have gone up quite a bit.)
Aoostar WTR arrives
It came with Chinese Windows 11 pre-installed, so I wiped it and installed Unraid 7 (RC1).
That was my first experience with Unraid. I think it's okay, but there are aspects I don't love: for example, I can only log in as root over SSH and there doesn't seem to be a reasonable way of installing many of my favorite tools. However, I want a "user-friendly" NAS OS because I don't want to have to be an expert in ZFS pools or whatever. I just want a system where someone smarter than me made it so that I won't lose my data because I don't understand "pools" or "vdevs" or whatever. (One of my HDDs did fail in the previous Synology NAS and I was so happy I could just replace it, rebuild it, and everything was fine again.)
Tests
Since I didn't know much about neither Unraid nor ZFS, I wanted to check I'm not doing anything too braindead. I set the hard drives up into a mirrored pool, copied some 300GB of data onto them. Then I yanked one of the drives.
After starting the NAS again I was still able to copy data out from it using my PC as usual.
When I later plugged the hard drive in again, Unraid prompted me to format it and repair the pool. There was some weird behavior there - Unraid always said everything was OK, but the HDD status was always blue (new) not green (working OK), and the option to add and format the drive re-appeared after each restart - but after some time and some restarts the problem went away. All the while the pool seemed to behave normally (I saw the expected read/write speeds even when the drive was still showing up 'blue'), and it was still just an RC version of Unraid, so maybe that was the problem.
In summary: it seemed reliable even for a first-time Unraid user. 🤞🏻
Migration
There wasn't much to it.
I copied all my data from the old NAS to the new one.
I copied over all the docker-compose files from the old application server (notebook) and updated the paths.
I started the containers one by one, checked everything worked, and that was that.
I then had to fix my DNS records - I have a domain with DNS records pointing to a Tailscale VPN IP; so anybody can resolve the domain, but only people with access will actually get anywhere. I just replaced one Tailscale IP with another and all connected apps (on the phones and PCs) continued working with no outage or issues.
A few asides: Unraid 7 has built-in support for Tailscale and lets you share specific containers as Tailscale services. That's handy.
And importantly, if you're planning to do something similar, update your Docker containers before the migration if you're using the :latest
tag. Otherwise you're increasing your risk: if you're running an old version, you'll pull a different version on the new system and you might end up with more headaches if some migration fails or something else breaks.
Update: oh, and I moved away from using Docker's 'volumes' to just mounted folders because they seemed much more cumbersome to back up, restore, or migrate; and for very little benefit. That definitely also helped here.
Closing thoughts
I guess it was as simple as it gets.
Of course it was annoying and time-consuming to do; all the copying and configuring took hours and hours, so I really hope I won't be doing it again anytime soon. It took me a few weeks to complete, working on it an hour or two here or there.
But it's been a couple months and everything is running smoothly.
Comments ()