If you are not familiar with what NextCloud is, it is an alternative to Google Workspace (minus the email service) that one can self-host. It is also open source, which makes it even more attractive. Self-hosting can be done by deploying the software yourself on your own hardware (which is what I did) or using a virtual private server.
Whilst I have subscribed to iCloud+, which I share with family members. Unfortunately, the user limit of 6, without the ability to include more users, is not an ideal solution for my entire family (wife, kids, siblings, parents). Subscribing to another iCloud+ is expensive. Besides, it pays to have a back-up that you own and have full control of, right?
I already have a Raspberry Pi (RPi) that serves as my media and Pi-Hole server, but I still have a spare RPi that can serve as the NextCloud server. NextCloud.com provides several ways of installing it, but I decided on NextCloudPi (optimized for RPi). Instead of flashing a pre-installed NextCloud image on an SD card, I decided between installing it on the bare machine or via docker on RaspberryOS. I remember reverting from a docker image to a bare-machine install for the kids' Minecraft server, but thought I'd give docker another go.
Before pulling the docker image, the server needs to have a domain name. Since my ISP do not provide static IP to residential subscribers, dynamic dns service, like ddclient, is needed. I did not know that CloudFlare, which is my domain's name server, supports it. After a few configuration trials, I managed to make it work - every time my home IP changes, it updates the CloudFlare DNS! Now I can mask my home IP address behind CloudFlare's proxy services.
After configuring the home router to forward some ports to my RPi, I pulled the docker image and started configuring it. I had it up and running in less than 30 minutes (depends on how fast your internet connection is, of course), including installing a LetsEncrypt certificate!
Everything is running from an SD card, which definitely is not sufficient to store the family's calendars, notes, and files. Hooking up a 2TB portable HDD solves this, but for some reason, the documentation of NextCloudPi has no information on how to add an external drive when you are using a docker image (if there is one, I couldn't find it)! Bummer!
I thought that I made a mistake in choosing a dockerized NextCloudPi - was it the Minecraft experience all over again? I figured that cloning the SD card directly to the 2TB external drive might do the trick (I have not tried it yet, there is always a first time). What is the worse thing that can happen? I will just reinstall RaspberryOS and ditch docker, right?!
Took a few minutes to clone the SD card to the external drive, and with the Raspberry Pi configured to boot from USB before SD card, I turned the RPi off, removed the SD card and turned it back on, whilst having my fingers crossed. A few minutes later, the server is up and running! A raspi-config sequence to expand the filesystem to take advantage of the available space later, the NextCloudPi has access to the full 2TB (well, less than that, of course) storage! Whew!
Now with the NextCloud instance running at home, it is now ready for the family's data. One thing I noticed is that NextCloudPi supports WebAuthn right off the bat! Yeah, no additional app needed. Created a keys using a Yubikey and a Passkey, which makes it easy to do password-less login from my Apple devices. How cool is that? I did install a third-party application to handle the Time-based One-Time-Password (TOTP), as back-up.
If you plan on deploying your own NextCloud, the domain name requirement is optional, specially if you only want to access it from within your home network (you can access it through the IP address). So, what's next to self-host? Any ideas?