TL;DR: Script is on this gist
I have an app deployed on Digital Ocean that uses the stack Node.js + MongoDB, and when I first started setting this up (3~4 years ago) I had almost no idea about CI, CD, and managing "big-apps-stuff", so, for most of these problems, I've had to implement a solution from scratch, like a Github push listener that deploys my application on the cloud (more on that later).
Dealing with real data, one thing I had to worry about was backups, and outsourcing that to Digital Ocean was a bit expensive, so I had to project a solution.
These were my requirements:
- It had to store the backups outside my cloud provider
- It had to be run in a daily basis
- A nice-have was to have the data compressed
After a bit of research, it was not hard to setup that solution. MongoDB already comes with a handy
mongodump CLI that is easy configurable and also already supports gzip compression. After my first tests, my database backups generated by the tool were quite small. Its documentation is here.
The first solution I looked for regarding storage was Google Drive, since I had plenty of quota available on my account, and I found this great
gdrive tool (install it here). One thing to notice here is that, for server-to-server applications like this where there's no human involved on the auth, you need to setup a Service Account, but it's not hard.
For running it on a daily basis, I've configured a simple cronjob. If you don't know how to, just read here
Before showing you my final shell script that glued all of this together, I must tell that I've also configured my solution to always have the last backup available on my cloud machine, just for redundancy.
So, here it is:
Feel free to reach me :)