Skip to content

Instantly share code, notes, and snippets.

@plasticut
Last active December 20, 2017 07:36
Show Gist options
  • Save plasticut/637c18bd859eb2daa8866b4f5638934e to your computer and use it in GitHub Desktop.
Save plasticut/637c18bd859eb2daa8866b4f5638934e to your computer and use it in GitHub Desktop.
Backup dokku database
#!/bin/bash
APP_NAME=<APP NAME>
HOST=<FTP HOST>
USER=<FTP USER>
PASS=<FTP PASSWORD>
# mongo, mysql, postgres & etc.
DB=mongo
CUR_DATE=$(date +%F-%H-%M)
BACKUP_COUNT=30
CRON_COMMAND="/home/dokku/${APP_NAME}/backup_database.sh > /home/dokku/${APP_NAME}/backup_database.log 2>&1"
CRON_SCHEDULE="0 3 * * *"
cd /home/dokku/${APP_NAME}
# Install cron job
( crontab -u dokku -l | grep -v -F "$CRON_COMMAND" ; echo "$CRON_COMMAND $CRON_SCHEDULE" ) | crontab -u dokku -
# Dump database and gzip it
dokku ${DB}:export ${APP_NAME} | gzip --stdout > "./${APP_NAME}_${CUR_DATE}.tar.gz"
# Upload file to ftp://<host>/<app name>/
ftp -inv $HOST << EOF
user $USER $PASS
mkdir $APP_NAME
cd $APP_NAME
put ${APP_NAME}_${CUR_DATE}.tar.gz
bye
EOF
# Remove local file
rm "./${NAME}_${CUR_DATE}.tar.gz"
# Delete old remote backups
(
while read line; do echo ${line##* }; done << EOF
$(curl -s ftp://$HOST/$APP_NAME/ --user $USER:$PASS)
EOF
) | sort -r | tail -n +$((BACKUP_COUNT+1)) | (
echo user $USER $PASS
echo cd $APP_NAME
while read line; do echo del ${line}; done;
echo bye
) | (
ftp -inv $HOST
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment