#!/bin/bash DOCKER_UID=1034 DOCKER_GID=100 DT_STAMP=$(date +"%Y-%m-%d_%H:%M:%S") function update_perms() { if [ -d $1 ]; then chown $DOCKER_UID:$DOCKER_GID -R $1 else chown $DOCKER_UID:$DOCKER_GID $1 fi } function list_backups() { tree -sh $1 } function create_backup_dirs() { for var in "$@" do if ! [ -d $var ]; then mkdir $var update_perms $var fi done } function rotate_backups() { find $1 -type d -mtime +7 -delete } function bookstack() { APP_PATH=$1 CTR_NAME="Bookstack" ROOT_CTR_BACKUP_PATH=$APP_PATH/_backups CTR_BACKUP_PATH=$ROOT_CTR_BACKUP_PATH/$DT_STAMP DB_BACKUP_FILE=$CTR_BACKUP_PATH/bookstack_db.sql APP_BACKUP_FILE=$CTR_BACKUP_PATH/bookstack_app.tgz # Print Container Name echo "Backing up $CTR_NAME..." # Create Backup Paths create_backup_dirs $ROOT_CTR_BACKUP_PATH $CTR_BACKUP_PATH docker exec bookstack_db /usr/bin/mysqldump -u bookstack -p bookstackapp --password=nwb9buaBJX7bxt5pnk > $DB_BACKUP_FILE tar -czf $APP_BACKUP_FILE -P $APP_PATH/app_data/www # Change Permissions update_perms $ROOT_CTR_BACKUP_PATH # List Backups list_backups $ROOT_CTR_BACKUP_PATH # Rotate Backups rotate_backups $ROOT_CTR_BACKUP_PATH # Print end of Backup echo "Finished backing up $CTR_NAME" echo "-----------------------------" echo } function gogs() { APP_PATH=$1 CTR_NAME="Gogs" ROOT_CTR_BACKUP_PATH=$APP_PATH/_backups CTR_BACKUP_PATH=$ROOT_CTR_BACKUP_PATH/$DT_STAMP LFS_BACKUP_FILE=$CTR_BACKUP_PATH/gogs_lfs.tgz # Print Container Name echo "Backing up $CTR_NAME..." # Create Backup Paths create_backup_dirs $ROOT_CTR_BACKUP_PATH $CTR_BACKUP_PATH docker exec gogs /app/gogs/gogs backup -c /data/gogs/conf/app.ini --target /data/tmp mv $APP_PATH/data/tmp/*.zip $CTR_BACKUP_PATH tar -czf $LFS_BACKUP_FILE -P $APP_PATH/data/gogs/data/lfs-objects # Change Permissions update_perms $ROOT_CTR_BACKUP_PATH # List Backups list_backups $ROOT_CTR_BACKUP_PATH # Rotate Backups rotate_backups $ROOT_CTR_BACKUP_PATH # Print end of Backup echo "Finished backing up $CTR_NAME" echo "-----------------------------" echo } echo "Docker Backup Script v1.0" echo bookstack "/volume1/Docker/bookstack" gogs "/volume1/Docker/gogs"