-
Notifications
You must be signed in to change notification settings - Fork 1
Heroku Backup
This tutorial assumes you have access to a remote always-running Linux x86_64 machine, like, for example, from your CS Department.
This is a little tricky, since you can't necessarily follow the simple step
of heroku login, since Heroku will detect the IP address mismatch and
prevent you from continuing.
Instead you need to create a new authorization through the Heroku website ("Account Settings" > "Applications" > "Create authorization")
Then you need to copy the Authorization token and put it in
~/.netrc:
machine api.heroku.com
login YOUR@EMAIL
password AUTHORIZATION_TOKEN
You'll want to protect this file with chmod 600 ~/.netrc to ensure
no one else can read it (this assumes you trust your system administrators,
of course)
Next, put the following in ~/hackerforce-backup.sh:
#!/bin/sh
# Script for installing the Heroku CLI and backing up hackerforce
set -e
# Replace with whatever your hackerforce instance is
# e.g. myhackerforce.herokuapp.com would be myhackerforce
HACKERFORCE=MYHACKERFORCE
cd "$HOME"
if [ ! -d heroku ]
then
HEROKUTAR=heroku-linux-x64.tar.gz
wget "https://cli-assets.heroku.com/$HEROKUTAR"
tar xzvf "$HEROKUTAR" -C heroku
rm "$HEROKUTAR"
fi
export PATH="$PATH:$HOME/heroku/bin"
heroku update
if [ ! -d hackerforce-backups ]
then
mkdir hackerforce-backups
chmod 700 hackerforce-backups
fi
cd hackerforce-backups
heroku run -a "$HACKERFORCE" -- python manage.py dumpdata > "$(date --iso-8601=seconds).json"After that make sure to mark it executable and run it, to make sure it actually
works. If it functions correctly, you should have two new folders: heroku
and hackerforce-backups, and hackerforce-backups should contain a JSON file
with your backups.
For this to be useful, it has to be run regularly. This is precisely what cron allows you to do.
Run crontab -e and add the following lines:
MAILTO=YOUR@EMAIL
7 4 * * * ./hackerforce-backup.sh
(Note that this technically only works on Debian/Ubuntu-based machines, because only their version of cron respects environment variables set in crontabs)
This will backup at 4:07 AM every morning.
Assuming your machine has a working email setup, this will email you once a day about your backups so you can keep an eye on them.
If you don't care use this instead, without the MAILTO:
7 4 * * * ./hackerforce-backup.sh > /dev/null 2>&1
If you don't add the /dev/null bit, Cron will still attempt to send emails,
probably to your local account, which is usually pointless and just takes up
space.
To restore a backup mybackup.json, use the heroku CLI again:
heroku run --no-tty -a myhackerforce -- python manage.py loaddata -e contenttypes --format=json - < mybackup.json
If your backup file begins with the line "Downloading the sponsorship packet to: {} /app/website/static/sponsorship.pdf" you'll need to remove this line in order for the data to load successfully.