Every now and then, I have a specific need and I write a little script to get something done on my server. Recently, I was looking into writing a new script but instead opted to write a more comprehensive program.
I recently saw that the folks at Spatie were working on a comprehensive backup solution, and I figured I should build something similar and simpler for my own use case. (This means that this package won’t really receive any updates or such.)
So, Aegis was born. It is a very simple console app: you specify jobs in a YAML file, and the app will run those jobs and create an archive of a specific directory and send it to a destination of choice. All that you have to do is run Aegis periodically with a cronjob.
For my own use case, I wanted Aegis to be able to create two gzipped tarballs of projects I run on my own server. The YAML file for these jobs looks like this:
jobs:
nicoverbruggen.be:
source:
path: /var/www/nicoverbruggen.be
exclude:
- ./.git
- ./vendor
- ./node_modules
- ./storage/framework
- ./storage/debug
destination:
name: dropbox
path: /site/
other.nicoverbruggen.be:
source:
path: /var/www/other.nicoverbruggen.be
exclude:
- ./.git
- ./vendor
- ./bin
destination:
name: dropbox
path: /other/
After specifying what jobs need to run, it’s just a matter of setting up a cronjob. I actually wanted to make sure a database dump of nicoverbruggen.be was included, so I set up a little script, lovingly called dumpie
:
echo "Dumping database of nicoverbruggen.be...";
mysqldump nicoverbruggen > /var/www/nicoverbruggen.be/storage/dump.sql;
echo "Done.";
rm /var/www/nicoverbruggen.be/storage/dump.sql;
Before dumpie
will do any work, though, I need to set up the credentials for mysqldump
, via the ~/.my.cnf
file. This is better than putting plain-text password credentials in the script.
[mysqldump]
user=root
password=root
Obviously, my password for MySQL is not actually that, but you get the idea. Finally, all that was left was to set up my crontab, via crontab -e
:
# Take a backup of the database with dumpie every day at midnight (0:00)
0 0 * * * /home/nico/utils/dumpie > /home/nico/dumpie.log
# Take a backup with Aegis every Sunday at 1:00
0 1 * * 0 /home/nico/aegis/aegis backup:dropbox /home/nico/aegis/jobs/backup.yaml > /home/nico/aegis.log
With this, I get a nice backup of my important websites delivered to my personal Dropbox every Sunday at 1:00. It’s great to have backups like this, even though I still have server backups via my VPS provider.
This is one of those fun side projects that doesn’t need to become anything bigger, but fulfills a nice purpose that makes my life a little easier.