#! /bin/bash echo "Backify is starting, looking for configuration file..." >&2 config='backup.cfg' config_secured='sbackup.cfg' if config -f "$config"; then echo "Configuration found." >&2 else echo "Configuration not found" >&2 exit fi if egrep -q -v '^#|^[^ ]*=[^;]*' "$config"; then echo "Config file is unclean, cleaning it..." >&2 egrep '^#|^[^ ]*=[^;&]*' "$config" > "$config_secured" config="$config_secured" fi source "$config" echo "Configuration file loaded" >&2 if [ "$EUID" -ne 0 ] then echo "Please run as root" exit fi function makedir { timestamp=$(date +%Y%m%d_%H%M) mkdir /tmp/backify-$timestamp tmpdir="/tmp/backify-$timestamp" } function wwwbackup { if [ "$www_backup" = true ] then echo "Backing up wwwroot..." >&2 mkdir -p $tmpdir/wwwdata cp -r $www_dir/ $tmpdir/wwwdata/ echo "Finished" >&2 fi } function vhostbackup { if [ "$vhost_backup" = true ] then echo "Backing up vhosts..." >&2 mkdir -p $tmpdir/vhosts cp -r $vhost_dir/ $tmpdir/vhosts/ echo "Finished" >&2 fi } function logbackup { if [ "$log_backup" = true ] then echo "Backing up system logs..." >&2 mkdir -p $tmpdir/syslogs cp /var/log/syslog $tmpdir/syslogs/ cp /var/log/message $tmpdir/syslogs/ if [ "$fail2ban_log" = true ] then cp /var/log/fail2ban.log $tmpdir/syslogs/ fi if [ "$log_backup_web" = true] then if [ "$apache" = true ] then mkdir -p $tmpdir/apachelogs cp -r /var/log/httpd $tmpdir/apachelogs fi if [ "$nginx" = true ] then mkdir -p $tmpdir/nginxlogs cp -r /var/log/nginx $tmpdir/nginxlogs fi fi if [ "$log_purge" = true] then echo "Purging logs..." >&2 truncate -s 0 /var/log/syslog truncate -s 0 /var/log/message if [ "$apache" = true ] then # TODO: removal for .1.2.3 logs truncate -s 0 /var/log/httpd/* fi if [ "$nginx" = true ] then # TODO: removal for .1.2.3 logs truncate -s 0 /var/log/nginx/* fi if [ "$fail2ban_log" = true ] then truncate -s 0 /var/log/fail2ban.log fi fi echo "Finished" >&2 fi } function push { if [ "rsync_push" = true ] then #Push - Dockerized if [ "push_clean" = true ] then rm /opt/backify-$timestamp.tar.gz fi fi } function dockerbackup { if [ "docker_enabled" = true] then if [ "docker_images" = true] then echo "Backing up Docker images..." >&2 for i in `docker inspect --format='{{.Name}}' $(docker ps -q) | cut -f2 -d\/` do container_name=$i echo -n "$container_name - " container_image=`docker inspect --format='{{.Config.Image}}' $container_name` mkdir -p $tmpdir/containers/$container_name save_dir="$tmpdir/containers/$container_name/$container_name-image.tar" docker save -o $save_dir $container_image echo "Finished" >&2 done fi fi } function runbackup { if [ "enabled" = true] then # step 1 : create directory makedir # step 2 : www backup wwwbackup # step 3 : vhost backup vhostbackup # step 4: log backup logbackup # step 5: docker backup dockerbackup # archive data echo "Creating backup archive..." >&2 tar -czvf /opt/backify-$timestamp.tar.gz $tmpdir # push data to server push echo "Voila, enjoy the rest of the day" >&2 fi } runbackup