aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2020-09-09-digitalocean-sync.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/posts/2020-09-09-digitalocean-sync.md')
-rw-r--r--content/posts/2020-09-09-digitalocean-sync.md111
1 files changed, 0 insertions, 111 deletions
diff --git a/content/posts/2020-09-09-digitalocean-sync.md b/content/posts/2020-09-09-digitalocean-sync.md
deleted file mode 100644
index aa3cce4..0000000
--- a/content/posts/2020-09-09-digitalocean-sync.md
+++ /dev/null
@@ -1,111 +0,0 @@
1---
2title: Using Digitalocean Spaces to sync between computers
3url: digitalocean-spaces-to-sync-between-computers.html
4date: 2020-09-09T12:00:00+02:00
5draft: false
6---
7
8I've been using [Dropbox](https://www.dropbox.com/) for probably **10+ years**
9now and I-ve became so used to it that it runs in the background that I don't
10even imagine a world without it. But it's not without problems.
11
12At first I had problems with `.venv` environments for Python and the only
13solution for excluding synchronization for this folder was to manually exclude a
14specific folder which is not really scalable. FYI, my whole project folder is
15synced on [Dropbox](https://www.dropbox.com/). This of course introduced a lot
16of syncing of files and folders that are not needed or even break things on
17other machines. In the case of **Python**, I couldn't use that on my second
18machine. I needed to delete `.venv` folder and pip it again which synced files
19again to the main machine. This was very frustrating. **Nodejs** handles this
20much nicer and I can just run the scripts without deleting `node_modules` again
21and reinstalling. However, `node_modules` is a beast of its own. It creates so
22many files that OS has a problem counting them when you check the folder
23contents for size.
24
25I wanted something similar to Dropbox. I could without the instant syncing but
26it would need to be fast and had the option for me to exclude folders like
27`node_modules, .venv, .git` and folders like that.
28
29I went on a hunt for an alternative to [Dropbox](https://www.dropbox.com/)
30and found:
31
32- [Tresorit](https://tresorit.com/)
33- [Sync.com](https://sync.com)
34- [Box](https://www.box.com/)
35
36You know, the usual list of suspects. I didn't include [Google
37drive](https://drive.google.com) or [One drive](https://onedrive.live.com/)
38since they are even more draconian than Dropbox.
39
40> All this does not stem from me being paranoid but recently these companies
41> have became more and more aggressive and they keep violating our privacy when
42> they share our data with 3rd party services. It is getting out of control.
43
44So, my main problem was still there. No way of excluding a specific folder from
45syncing. And before we go into "*But you have git, isn't that enough?*", I must
46say, that many of the files (PDFs, spreadsheets, etc) I have in a `git` repo
47don't get pushed upstream to Git and I still want to have them synced across my
48computers.
49
50I initially wanted to use [rsync](https://linux.die.net/man/1/rsync) but I would
51need to then have a remote VPS or transfer between my computers directly. I
52wanted a solution where all my files could be accessible to me without my
53machine.
54
55> **WARNING: This solution will cost you money!** DigitalOcean Spaces are $5 per
56month and there are some bandwidth limitations and if you go beyond that you get
57billed additionally.
58
59Then I remembered that I could use something like
60[S3](https://en.wikipedia.org/wiki/Amazon_S3) since it has versioning and is
61fully managed. I didn't want to go down the AWS rabbit hole with this so I
62choose [DigitalOcean Spaces](https://www.digitalocean.com/products/spaces/).
63
64Then I needed a command-line tool to sync between source and target. I found
65this nice tool [s3cmd](https://s3tools.org/s3cmd) and it is in the Ubuntu
66repositories.
67
68```bash
69sudo apt install s3cmd
70```
71
72After installation will I create a new Space bucket on DigitalOcean. Remember
73the zone you will choose because you will need it when you will configure
74`s3cmd`.
75
76Then I visited [Digitalocean Applications &
77API](https://cloud.digitalocean.com/account/api/tokens) and generated **Spaces
78access keys**. Save both key and secret somewhere safe because when you will
79leave the page secret will not be available anymore to you and you will need to
80re-generate it.
81
82```bash
83# enter your key and secret and correct endpoint
84# my endpoint is ams3.digitaloceanspaces.com because
85# I created my bucket in Amsterdam regiin
86s3cmd --configure
87```
88
89After that I played around with options for `s3cmd` and got to the following
90command.
91
92```bash
93# I executed this command from my projects folder
94cd projects
95s3cmd sync --delete-removed --exclude 'node_modules/*' --exclude '.git/*' --exclude '.venv/*' ./ s3://my-bucket-name/projects/
96```
97
98When syncing int he other direction you will need to change the order of the
99`SOURCE` and `TARGET` to `s3://my-bucket-name/projects/` and `./`.
100
101> Be sure that all the paths have trailing slash so that sync knows that this
102> are directories.
103
104I am planning to implement some sort of a `.ignore` file that will enable me to
105have a project-specific exclude options.
106
107I am currently running this every hour as a cronjob which is perfectly fine for
108now when I am testing how this whole thing works and how it all will turn out.
109
110I have also created a small Gnome extension which is still very unstable, but
111when/if this whole experiment pays of I will share on Github.