It's always sunny without clouds
I blog now monthly since more than 3 years and I nearly missed the deadline this month. The reason is the summer heat, many to-dos for my games and not much inspiration about what to write. So I decided today to write about something that is long due: my no-cloud setup.
I've been cloud free since summer 2023, when I did not renew my Hetzner Storage Share (Nextcloud). At that time I already moved away from all proprietary cloud services, like Google Drive and Photos. Nextcloud works very well and can bring the same experience as the proprietary providers.
But I wanted something simpler and local, without using any "computer in the clouds". To achieve that, I had several different setups but all had this in common
- At least one always-on home server
- Everything stored locally on multiple devices and multiple locations
- Syncthing: to synchronize files between devices
This "setup" is always evolving, because I like to try new things and optimize/refactor everything. Therefore this is no step to step guide on how to replicate it, but more a collection of ideas.
Most cloud services make it very tedious to delete your data. I had to select and delete every single photo manually from Google Photos. The same for my Google Drive files, but luckily I did not have many files there. I later found a browser extension, that can do this automatically, but it was already too late.
Another nightmare was, when I migrated my moms laptop from Windows to Debian. It was very difficult to understand if files where stored on OneDrive or locally on the disk. Therefore I had to manually download every file again, before I was able to move them.
This shows how most cloud providers make it very easy to upload files, but very hard to remove them. The classical lock-in effect with your data and files as hostage. At least now, thanks to the EU Data Act, we can export the data more easily with a few clicks. But removing the data can still be a Sisyphus act (at least when I did leave the cloud).
Now I have everything stored locally on my computers, laptops, phones and tablets. I have to say that I'm no data hoarder with many TB of files. My whole data is about 300GB big, including videos, photos and git repositories.
Having everything local also means that no third party can stop me from accessing my files. Well, technically someone can take all my disks and don't let me access them. But only with physical access and anyways that is very unlikely :-) Cloud services can lock you out for all kind of reasons. If that happens you better be lucky and hope the cloud shows mercy, or loose everything.
And last but not least, I can access all my files instantly, even without internet access. Now most phones auto-magically upload every photo to the cloud and erase the local copy. And apparently also Microsoft decided a long time ago to do the same trick with all files. Good luck when trying to access those files while using a train WiFi while traveling.
First I synchronized only a few files, like some markdown notes and my KeePass file. Then I started to synchronize nearly every file, by over-engineering it, as usual. That worked very well when I still worked on many different computers and laptops. When I tweaked my Neovim or Sway config file at home, I got all changes instantly next day at work. I even had dedicated directories for phones, computers, photos, music. But that made it quite complicated to to reset or setup a new device.
Now I went back to the origins and use it only for notes and KeePass, since I always work from home. If I add a new device, I just install syncthing and add that one single shared directory. And I simply can do git pull on my laptop if needed.
Note: On my Android phones I install Syncthing with Termux and open it manually when needed. Syncthing no longer has an official Android app and therefore I used Syncthing-Fork for some time. Then I switched to the simpler Termux setup, luckily before there was the Syncthing-Fork controversy.
To be able to synchronize files from remote, I started using a small "home server". This allows me to get the latest version of my files everywhere.
First I used a Raspberry Pi 1B, from 2012, with only 512MB of RAM and a single core CPU. Then I replaced that with other devices over time. I used an old fan-less laptop, bought a Raspberry Pi Zero 2 and a Fujitsu Futre S920. Now I use my old (but gold :-) Raspberry Pi 1B again, because I fits my current needs.
Having a home server is kind of very cool and there are many self hosted alternatives. Aside Syncthing, I mainly used it as pi-hole DNS server. Now I plan to run 24/7 tests of my games, to find bugs and edge cases.
Syncthing alone is not a backup tool or strategy. I used to have 2 Syncthing machines in different locations with daily, weekly and monthly backups. The backups are created with rsync inside some bash script that is triggered via cron or systemd. That way I had fully automated synchronization and backups of all files.
Now that second location no longer has internet access and I also no longer sync all files. Therefore I manually backup to external disks and bring them to that second location. This way I always have an external disk attached to my computer. The backup is triggered on every boot and shutdown, via a system-d service. So I can simply grab the disks when I need and bring them with me. That secret second location is simply my parents home :-) Now every time I visit them, I simply swap the disks.
As for every backup strategy, it is very important to make sure that the backup actually works. All my disks and devices are encrypted. I realized a few weeks ago that I did not store the disk encryption keys at my parents home. Therefore if I my house burns down, I could no longer access my data. Now I simply store a USB stick with my KeePass file that contains the keys at their home.
The most important thing is that your setup follows the 3-2-1 backup principle
- 3 copies of the data (one primary copy and two backup copies)
- 2 different media types are involved in storing the copies
- 1 of the copies is stored in a remote location
As far as I know, all currently available solutions need some grade of technical skills. I hope one day it will be easy for everybody to use such no-cloud setups. Probably NAS devices could be the solution. But I think most of them are connected to some cloud service in some way and still need some skills.
If you happen to know a strategy that is very easy to setup and maintain for everybody, let me know!