
Building a Distributed File Sync in Ruby - daftpanda
https://blog.sourcerer.io/a-distributed-file-sync-in-ruby-dbcf63a7cdf8
======
tlrobinson
I’ve been wanting a robust open source, end-to-end encrypted, Dropbox-like
system for awhile.

Bonus points if it has any of the following features:

* certain nodes can store encrypted blobs without being able to decrypt them

* certain nodes can have read but not write access

* certain nodes can have access only to specific subdirectories

* you could set a policy for retaining old versions of files, to use it as a backup system

Is there anything like this out there?

I wonder if IPFS (and eventually Filecoin) would be a good foundation for such
a system.

~~~
jepper
Check out [https://syncthing.net/](https://syncthing.net/)

Written in Go, its lightweight (runs on my beaglebone and pi's) and has been
absolutely stable for me for years (100 GB, 10+ devices). It hits all the
requirement except encrypted nodes.

~~~
reacharavindh
Syncthing looks like everything I'd want. But, I cannot consider it because I
wont be able to access my data from ios/iPhone. Hopefully someone builds that
integration in future...

~~~
emptyparad0x
You could use a combination of syncthing and NextCloud.

NextCloud checks some of your boxes, and is a nice front-end that could run on
top of a syncthing synchronized folder.

~~~
reacharavindh
Cool idea. I will try this combination soon. For someone who has not been
following the projects, NextCloud vs Owncloud? Which one should I choose now?

~~~
emptyparad0x
Definitely NextCloud.

------
stevekemp
The design seems nice and clean, and the primitives on the back-end are about
the right level. I wrote something similar, with golang, as a replicated
object-storage system. Although I didn't call it S3 I nearly did:

[https://github.com/skx/sos/](https://github.com/skx/sos/)

Obviously there is a difference between "object store" and "file store", but
it isn't so bad. I have a similar replication scheme:

* Each node knows the objects it hosts.

* Each host can poll others to see what a node should have.

* Missing blobs can be synced.

------
SkyLinx
Interesting project! As a Ruby developer I love what you have accomplished
with do little code

