#!/bin/bash # # Backup a site. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public # License along with this program. If not, see # . # Load. source $APP_BASE/lib/hydra/functions || exit 1 hydra_config_load # Basic parameters. SITES="/var/sites" SITE="$1" PACK="$1.tar.bz2" DATE="`date +%Y%m%d`" DEST="$SITES/backups/site/$SITE/`facter hostname`/$DATE" # Syntax check. if [ -z "$SITE" ]; then hydra_action_usage exit 1 fi # Determine site location. if [ "$SITE" == "git" ] && [ "$SITE" == "svn" ]; then LOCATION="/var" else LOCATION="$SITES" fi # Set backups user. if hydra_check_user backups; then BACKUPS_USER="backups" else BACKUPS_USER="root" fi # Set backups group. if hydra_check_group backups; then BACKUPS_GROUP="backups" else BACKUPS_GROUP="root" fi # Create folder mkdir -p $DEST cd $DEST # Password setup if [ ! -e "$SITES/backups/site/$SITE/.htpasswd" ]; then touch $SITES/backups/site/$SITE/.htpasswd chmod 640 $SITES/backups/site/$SITE/.htpasswd chown root.$BACKUPS_GROUP $SITES/backups/site/$SITE/.htpasswd fi # Access setup if [ ! -e "$SITES/backups/site/$SITE/.htaccess" ]; then cat > $SITES/backups/site/$SITE/.htaccess <<-EOF AuthType Basic AuthName "Backup $SITE" AuthUserFile $SITES/backups/site/$SITE/.htpasswd Require valid-user EOF fi # Backup site if [ -d "$SITES/$SITE" ]; then echo "Backing up site folder..." tar jcvf $PACK $LOCATION/$SITE md5sum $PACK > $PACK.md5 sha1sum $PACK > $PACK.sha1 chown root.$BACKUPS_GROUP $PACK* chmod 640 $PACK* echo "Saved $DEST/$PACK" fi # Backup database if [ -d "/var/lib/mysql/$SITE" ]; then echo "Backing up database $SITE..." mysqldump $SITE > $SITE.sql bzip2 $SITE.sql md5sum $SITE.sql.bz2 > $SITE.sql.bz2.md5 sha1sum $SITE.sql.bz2 > $SITE.sql.bz2.sha1 chown root.$BACKUPS_GROUP $SITE.sql* chmod 640 $SITE.sql* echo "Saved $DEST/$SITE.sql.bz2" else echo "Database not found, please backup it manually" fi