Some years ago I already played with ownCloud, trying to set up my personal cloud and get rid of third party services for keeping my stuff in sync across multiple devices. And while I already liked it at that time, there still were things I couldn’t do with it, so I eventually gave up on it.
Some months ago I decided to give it another shot and installed ownCloud (which is now migrated to Nextcloud) as well as some other services aiming to replace iCloud, the cloud service by Apple that I used until then. But this was not only about curiosity and being independent of third-party services, it also had real-world values, including better troubleshooting and a more file-aware synchronisation of data, getting rid of the vendor lock in, better service quality (e.g. syncing Photos to iCloud is a pain in the ass 4 out of 5 times).
Additionally, I don’t wanna trust anyone but me with my data - even though it’s nothing of special interest, still I like being the one in control over my own data. While this may not apply to iCloud itself, there are many other cloud providers with dubious business models giving you “free” accounts, but most of the time the reason might be that you are not the customer, but the product, so for example I’m not willing to put my stuff on Google’s servers.
In this article, I will show what tools I use and how I set them up to achieve my goals. If you tinker with the idea of running your own infrastructure, this might give you some interesting insights on which apps I consider worth using.
My goal was to replace all of the iCloud services with own, self-hosted services that I can trust. Below is a screenshot of the iCloud control panel in macOS (in german language, but below I will describe what it is about).
iCloud currently offers the following services:
- File sync (“iCloud Drive”) -> Nextcloud
- Photos (“iCloud Photo Library”) -> Nextcloud
- Mail -> Own mail server + Rainloop
- Contacts -> Nextcloud Contacts
- Calendar -> Nextcloud Calendar
- Reminders -> IMAP Reminders on own mail server
- Browser sync (“Safari”) -> Firefox Sync Server
- Notes -> Nextcloud Notes
- Password sync (“Keychain”) -> KeePass DB on Nextcloud
- Remote access (“Back to my mac”) -> IKEv2 VPN + docker-ddns
- Find my iPhone -> Nextcloud PhoneTrack
- iWork for iCloud -> Nextcloud with Onlyoffice
So, I wanted to replace all of them. But as there is even more Apple services that I use, I also wanted to replace the following:
Dangers & Realism
Of course it would be presumptuous to think that I could do better than a big company like Apple does, but this was not the goal. I just wanted to replace those services with alternatives while trying to keep the loss in overall user experience as small as possible.
But there are also dangers when self-hosting all your stuff, including the possibility of data loss, additional maintenance work etc. But as I think I’m quite good in managing that, it was okay for me to deal with that additional stuff. So, if you also want to move your data into your own four walls, you should also take that into consideration.
In my case I’m running most of that stuff on a virtual machine that runs Debian GNU/Linux at home on my NAS that runs FreeBSD and is only accessible within my local network. All services are running as Docker containers and I made sure that - if I used any existing image - I reviewed the Dockerfile and all dependencies beforehand to make sure I don’t get any crap. My storage is powered by ZFS on a raidz2 (which gives me redundancy, checksumming, snapshotting etc.) with off-site backup that let’s me sleep at night.
Additionally I own a VPS at Hetzner. This is used for some stuff that I can’t provide from within my home network like email.
In the following articles in this series I will describe how I set up my environment including client-side applications for macOS and iOS (which are my targets, but for the most purposes you will also find clients for Windows, Linux and Android) and migration of the existing data from iCloud.