|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# function: iferror |
| 4 | +# produces an exit code 1 with message |
| 5 | +function iferror { |
| 6 | + if [[ $? -eq 1 ]]; then |
| 7 | + echo $1; exit 1; |
| 8 | + fi |
| 9 | +} |
| 10 | + |
| 11 | +# function: mount_remote_backups |
| 12 | +# mount remote backup for a domain |
| 13 | + |
| 14 | +function mount_remote_backup { |
| 15 | + mnt_dir=/tmp/$RANDOM; |
| 16 | + mkdir $mnt_dir |
| 17 | + scp -r $backup_user@$backup_host:$backup_remote_dir/$domain/* $mnt_dir |
| 18 | + sleep 1 |
| 19 | + set_file_paths |
| 20 | + |
| 21 | +} |
| 22 | + |
| 23 | +# function: set_file_paths |
| 24 | +# set last Wordpress files packges |
| 25 | + |
| 26 | +function set_file_paths { |
| 27 | + |
| 28 | + wp_gz_file=$(find $mnt_dir -type f -name "*.tar.gz" | sort -rn | head -1); |
| 29 | + sql_gz_file=$(find $mnt_dir -type f -name "*.sql.gz" | sort -rn | head -1); |
| 30 | + nginx_file=$(find $mnt_dir -type f -name "*.conf"); |
| 31 | + set_config_parameters |
| 32 | +} |
| 33 | + |
| 34 | +# function: read_root_path |
| 35 | +# read root path from Nginx server configuration |
| 36 | + |
| 37 | +function read_root_path { |
| 38 | + |
| 39 | + domain_string_length=${#domain} |
| 40 | + name_offset=$(($domaing_string_length + 1 )) |
| 41 | + |
| 42 | + if [[ -e $nginx_file ]];then |
| 43 | + wp_path=$(grep -E "root.*$domain" $nginx_file \ |
| 44 | + | awk -v offset=$name_offset -F' ' '{print substr($2, 1, length($2) - offset)}') |
| 45 | + else |
| 46 | + iferror "Site root is not available"; |
| 47 | + fi |
| 48 | +} |
| 49 | + |
| 50 | +# function: restore_files |
| 51 | +# extract files to local root |
| 52 | + |
| 53 | +function restore_files { |
| 54 | + read_root_path |
| 55 | + tar -zxf $wp_gz_file -C $wp_path/. |
| 56 | + echo "Wordpress files now are restored" |
| 57 | + |
| 58 | +} |
| 59 | + |
| 60 | +# function: set_config_parameters |
| 61 | +# get wp-config.php dabase parameters |
| 62 | + |
| 63 | +function set_config_parameters { |
| 64 | + |
| 65 | + restore_files && wp_cnf=$wp_path/wp-config.php |
| 66 | + |
| 67 | + db_name=$(grep "DB_NAME" $wp_cnf | awk -F"'" '{print $4}'); |
| 68 | + db_user=$(grep "DB_USER" $wp_cnf | awk -F"'" '{print $4}'); |
| 69 | + db_password=$(grep "DB_PASSWORD" $wp_cnf | awk -F"'" '{print $4}'); |
| 70 | + db_host=$(grep "DB_PASSWORD" $wp_cnf | awk -F"'" '{print $4}'); |
| 71 | + |
| 72 | + if [[ $db_host == '' ]]; then |
| 73 | + db_host=localhost; |
| 74 | + fi |
| 75 | + restore_database |
| 76 | +} |
| 77 | + |
| 78 | + |
| 79 | + |
| 80 | +# function: restore_database |
| 81 | +# restore database and tables to Mariadb/mysql_root_pass |
| 82 | + |
| 83 | +function restore_database { |
| 84 | + |
| 85 | + zcat $sql_gz_file > /tmp/$domain.sql |
| 86 | + sql="/tmp/$domain.sql" |
| 87 | + mysql -u$db_user -p$db_password -e "create database if not exists $db_name;" \ |
| 88 | + && mysql -u$db_user -p$db_password $db_name < $sql \ |
| 89 | + || iferror "Datase not imported" |
| 90 | + echo "Database now is restored" |
| 91 | +} |
| 92 | + |
| 93 | + |
| 94 | +# function: nginx_disable_server |
| 95 | +# disable server to restore |
| 96 | + |
| 97 | +function nginx_disable_server { |
| 98 | + if [[ -e /etc/nginx/sites-enables/$domain.conf ]]; then |
| 99 | + rm -f /etc/nginx/sites-enabled/$domain.conf; |
| 100 | + systemctl reload nginx; |
| 101 | + fi |
| 102 | + echo "Server $domain disabled" |
| 103 | + |
| 104 | +} |
| 105 | +# function: nginx_enable_server |
| 106 | +# enable again with resotred server |
| 107 | + |
| 108 | +function nginx_enable_server { |
| 109 | + #if [[ -e /etc/nginx/sites-available/$domain.conf ]]; then |
| 110 | + # mv -f /etc/nginx/sites-available ~/.; |
| 111 | + #fi |
| 112 | + cp -fp $mnt_dir/$domain.conf /etc/nginx/sites-available/$domain.conf \ |
| 113 | + && ln -fs /etc/nginx/sites-available/$domain.conf /etc/nginx/sites-enabled/$domain.conf |
| 114 | + systemctl reload nginx |
| 115 | + echo "Server $domain enabled" |
| 116 | + |
| 117 | +} |
| 118 | + |
| 119 | + |
| 120 | +# function: start |
| 121 | +# start to run scrip |
| 122 | + |
| 123 | +function start { |
| 124 | + nginx_disable_server \ |
| 125 | + && mount_remote_backup \ |
| 126 | + && nginx_enable_server |
| 127 | + sleep 4 && rm -fR $mnt_dir |
| 128 | +} |
| 129 | + |
| 130 | +if [[ -e ./params/restore.conf ]];then |
| 131 | + source ./params/restore.conf; |
| 132 | +else |
| 133 | + iferror "First you need configure parameters"; |
| 134 | +fi |
| 135 | + |
| 136 | +if [ "$(id -u)" != "0" ]; then |
| 137 | + echo "This script must be run as root" 1>&2 |
| 138 | + exit 1 |
| 139 | +fi |
| 140 | + |
| 141 | +start |
0 commit comments