From: [email protected]
Date: 2018-01-22
Subject: DIY Dropbox

I've been a Dropbox user for a long time. When I signed up, I want-
ed an easy, off-site backup, a way to share select files with  oth-
ers,  and  to be able to access my files from my other machines and
my phone. For a while, everything was great.  The  client  software
worked  flawlessly on Windows, MacOS, and Linux. Even the UI is ex-
cellent. But, I noticed that Dropbox started making it  harder  for
people to access the files I shared with them.

It  started  by  putting  up optional sign up forms with a cleverly
hidden opt-out link. Over time, sign up became mandatory. Now I can
only share files with other Dropbox users. That's not what i signed
up for. I understand that Dropbox needs to make money. Today,  they
do that by showing investors that they are growing. One key measure
of growth is the number of user accounts they have.  So,  it  makes
sense  to make every effort to get people to sign up.  But, in this
case, they are not gaining users through the value of their service
- they are using the value of my relationships and my data to force
people to sign up. Not cool, guys.

My plan was to substitute my VPS for the Dropbox service.  Initial-
ly, I did some experiments with rsync. It's actually quite powerful
and well-documented, but it doesn't handle deleted files very well.
After  a  little  more  searching,  I set up Bitpocket [1].  It's a
script that extends rsync with sophisticated  handling  of  deleted
files. It also keeps backup information and provides a synchroniza-
tion log. Bitpocket runs on my desktop and syncs changes with a set
of  folders on my VPS. This is the foundation of my DIY Dropbox so-
lution and serves to backup my files. Next, I need to  share  files
with others and access my files from my phone.

To  access these files from my phone, I needed a file transfer app.
I installed vsftpd on my VPS and installed a secure ftp  client  on
my  phone.  I  had to put a copy of my key file on my phone so that
the sftp client could connect to my VPS. Now I can easily  transfer
files between my VPS and my phone.

There are two ways I share files with other people. One is to share
a file with a specific person or people. The other  is  to  make  a
file  available  publicly. In the first case, I can download a file
to my phone or desktop and then attach it to an email. This can  be
cumbersome or impossible for very large files, but does the job for
smaller files like PDFs and images. I haven't  worked  out  how  to
privately  share very large files. This could be accomplished using
a simple web application that generates a unique key that is  asso-
ciated  with  a  given  file.  This  application would just need to
stream the file associated with a requested key.  Alternatively,  I
could encrypt the file with the intended recipient's public key and
share the encrypted file publicly.

To publicly share files, I set up Apache web server on my  VPS.   I
drop the files I want to share into a folder that is symlinked from
a folder accessible to Apache. Once the file is  in  place,  I  can
just  publish  a  link to the file. If someone wants to go hunting,
that's fine, they will only find files that I've  chosen  to  share
with everyone.

That's  it!  I have, more or less, replaced Dropbox with Apache and
vsftpd on my VPS, rsync/Bitpocket on my desktop, and an sftp client
on  my phone. That said, this doesn't replace any of the collabora-
tion features of Dropbox, but the reason I signed up  with  Dropbox
in the first place was to share files with people without requiring
them to sign up for something they may not want or need.  In  addi-
tion,  I'm sure there are a lot of interesting things I can do with
such a loosely-coupled solution.

References

[1]: https://github.com/sickill/bitpocket