Seafile is a piece of software that I use every day that I find exceedingly handy. The elevator pitch is something along the lines of "Like Dropbox, but self-hosted, with versioning." I use it on all of my stuff, and it is fantastic.
I run it on Linux, Windows, and Android. Files are quickly synced between machines, and I don't need to worry about backups on the client. I reformatted my machine to install a fresh copy of Windows 10, and was up and running again very soon after.
Lately I've taken to syncing a music folder between machines. This also works well, even though there are just shy of 20 GB worth of files in it.
It supports encryption, which I use with my main library. This requires a passphrase that is used to decrypt files as they're loaded off the server. Ostensibly, the server administrator is unable to read a the contents of an encrypted library. I understand this isn't entirely the case, and at least the folder structure can be viewed even when using a passphrase. I'm less concerned about this because I'm the admin, but that might be something to think about if you decide to colocate an instance of your own.
One very nice feature that it has is versioning and text diffs. If you change a text file on the client, copies are sent to all of your other Seafile clients logged into the same account. If you want to undo a change, you can go into the web console and revert to an older version, much like how I gather Apple's Time Machine works.
You can share a library with another user, or generate an anonymous link to the repository for public sharing. Links can have an expiry attached to them, which is handy for sharing files with people.
Version conflicts are a bit ugly, but then again they always are. It just creates two copies of the file in question. Unsurprising, really, how else would you resolve a conflict between two versions of a JPEG?
Android support could stand to be better. One nice feature is the ability to upload all photos and/or videos to a specific library as they're taken, or once I get in range of wifi. However, the Android client does not provide the ability to sync a library. Instead, the workaround is to install Foldersync and use the Seafile Webdav bridge. It's a bit clumsy, isn't instant, and doesn't handle deleted files well. But it works well enough.
Installation can be a bit weird. It's a bunch of daemons running independently, and can run from either a sqlite3 file or a mysql server. For reliability and ease-of-setup I'd recommend the sqlite3 approach unless you've got a bunch of users. Paired with letsencrypt, it's a great setup.
Overall, it's been a fantastic piece of software. It handles large repositories, automatic syncing, versioning, and multiple platforms well enough that I recommend it to anyone looking to host their own client file store.