I was an early Dropbox user, but was never happy about using a "cloud" service. The "cloud" is just someone else's computer and I've always wanted to use my own computer. I used SparkleShare for several years, but there was never a client for mobile, which limited its utility. But recently, I found out about Syncthing.
Syncthing provides a web-based graphical user interface to set up end-to-end relationships among devices. It tries to be something a non-technical person could use, but I'm not sure there it's quite there yet. It's a somewhat uneasy compromise between the two: I sorta wish it just had plain-text configuration files that I could edit with vim. (Its configuration files are plain text, but XML). In the end, I found that the easiest way to configure things was to use an ssh tunnel so I could configure both ends at the same time in different browser tabs.
ssh [hostname] -L 8333:localhost:8384
I set it up among 4 devices: my Ubuntu server, a Mac desktop, a Mac laptop, and an android phone. I could install via packages on Ubuntu. Simple. On the Mac, I had to move files by hand and missed that I needed to edit one file before starting it. And then that I needed to replace more than one instance of USERNAME in the file. But eventually I got it working. You could fix the directions, but you couldn't fix my pattern of only reading the directions once everything else has failed. It was easy to get it installed on Android except for figuring out how to create folders in the file-system. I could see the DCIM, Music, etc, folders, but didn't see how to create a folder at that level. Eventually, I saw you could select the /storage/emulated/0 folder and THEN create the folder. Very tricksy.
I was worried it wouldn't work properly across my broken NAT gateway, but it was fine. It uses local discovery as well as a distributed network of "discovery" servers to exchange information about where nodes are. It's just a little creepy, but seems to work OK.
One thing Syncthing has taught me is patience. A couple of times, I would set up something at one end, go to the other end and try to set it up there too, only to (eventually) have Syncthing simply ask me if I didn't want to set it up, with the setup already done. Sometimes it takes longer than I think it's going to, but just a little patience—getting a cup of coffee—does the trick.
I still haven't figured out all the configuration options. My brain wants to think in client-server terms, but Syncthing is more peer-to-peer in orientation. But it is highly configurable. It has four or five different options for versioning, including an "external" option, so you can write a script to manage versioning just how you like it.
I still haven't used it long enough to be sure I'm ready to migrate away from Dropbox and Sparkleshare, but initial results are very encouraging—encouraging enough I've given them some money. Now I just need to persuade Phil to set up a peer so we can provide off-site backups for each other. I mean, he's got that Raspberry Pi JUST SITTING THERE…