Признаюсь, я ленив местами. То что можно сделать автоматизированно — я делаю (если смогу побороть лень :-D) И тут представилась такая возможность. Я решил обойтись без панели управления VESTACP и руками настроить сервер для своего сайта.
Сделал по быстрому, и тут встал вопрос о резервном копировании. В панели управления для этого была специальная настройка и всё было замечательно (если не считать того, что периодически панель забывала чистить за собой временные файлы резервных копий и забивала свободное место на диске) однако на сервере настроенном руками, резервное копирование тоже надо делать ручками. Итак, задача:
- Делать копии всех сайтов пользователя что есть на сервере.
- Делать копии всех баз данных пользователя mysql что есть на сервере.
- Хранить копии определенное время.
- Хранить копии бекапов на удаленном сервере.
- Копии делать 1 раз в день в автоматическом режиме.
Будем исходить из ТЗ. Имеем:
- Удаленный сервер remote.site.ru с работающим по стандартному 22 порту сервером ssh на котором есть директория /home/user/backup
- Сервер с сайтами site.ru расположенными в директории /home/serv/sites
- MySQL сервер на site.ru к которой мы имеем доступ от имени пользователя serv
Наши действия:
Создаем директорию под локальные бэкапы:
mkdir -p /home/serv/backup
Создаем ключ ssh с помощью которого будем заходить на домашний сервер и копировать туда файлы:
ssh-keygen -f ~/.ssh/id_rsa -q -P "" cat ~/.ssh/id_rsa.pub
В выхлопе получим что-то вроде:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLVDBIpdpfePg/a6h8au1HTKPPrg8wuTrjdh0QFVPpTI4KHctf6/FGg1NOgM++hrDlbrDVStKn/b3Mu65//tuvY5SG9sR4vrINCSQF++a+YRTGU6Sn4ltKpyj3usHERvBndtFXoDxsYKRCtPfgm1BGTBpoSl2A7lrwnmVSg+u11FOa1xSZ393aaBFDS555GlJf1SojWYIAbE25Xe3z5L232vZ5acC2PJkvKctzvUttJCP91gbNe5FSwDolE44diYbNYqEtvq2Jt8x45YzgFSVKf6ffnPwnUDwhtvc2f317TKx9l2Eq4aWqXTOMiPFA5ZRM/CF0IJCqeXG6s+qVfRjB
Идем на remote.site.ru сервер и добавляем туда наш ключ в файл ~/.ssh/authorized_keys Если этого файла нет, то его надо создать и выставить на него права:
mkdir ~/.ssh chmod 0700 ~/.ssh touch ~/.ssh/authorized_keys echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLVDBIpdpfePg/a6h8au1HTKPPrg8wuTrjdh0QFVPpTI4KHctf6/FGg1NOgM++hrDlbrDVStKn/b3Mu65//tuvY5SG9sR4vrINCSQF++a+YRTGU6Sn4ltKpyj3usHERvBndtFXoDxsYKRCtPfgm1BGTBpoSl2A7lrwnmVSg+u11FOa1xSZ393aaBFDS555GlJf1SojWYIAbE25Xe3z5L232vZ5acC2PJkvKctzvUttJCP91gbNe5FSwDolE44diYbNYqEtvq2Jt8x45YzgFSVKf6ffnPwnUDwhtvc2f317TKx9l2Eq4aWqXTOMiPFA5ZRM/CF0IJCqeXG6s+qVfRjB" >> ~/.ssh/authorized_keys chmod 0644 ~/.ssh/authorized_keys
Теперь наш сервер с сайтами будет подключаться к удаленному серверу без пароля.
Следующий шаг — добавляем скрипт и настраиваем его:
nano ./backup.sh
Каждый шаг скрипта я снабдил комментарием:
#!/bin/bash ########################################### # Предварительные настройки и переменные # ########################################### #Директория с сайтами SITE_DIR='/home/serv/sites' #Директория для резервных копий BACKUP_DIR='/home/serv/backup' #Имя резервной копии в зависимости от даты BACKUP_NAME=$(date "+%Y%m%d") #Сервер куда будут складываться копии резервных копий REMOTE_HOST='remote.site.ru' #Директория на удаленном сервере куда будут складываться копии резервных копий REMOTE_DIR='/home/user' #Пользователь под которым мы заходим на удаленный сервере REMOTE_USER='user' #Настройки базы данных #Пользователь БД DB_USER='serv' #Пароль пользователя БД DB_PASS='serv_password333' #Сервер базы данных DB_HOST='localhost' ########################################### # Рабочая часть скрипта # ########################################### #Создаем архив с файлами сайтов tar -zcf "$BACKUP_DIR/sites_$BACKUP_NAME.tar.gz" $SITE_DIR #Создаем архив баз данных доступных пользователю mysqldump -u $DB_USER -h $DB_HOST -p$DB_PASS -A | gzip -c > "$BACKUP_DIR/mysql-db-$BACKUP_NAME.dump.gz" #Смотрим файлы старше 5 дней и если есть - то удаляем. find $BACKUP_DIR -type f -mtime +5 -exec rm {} \; #Синхронизируем нашу директорию с резервными копиями с директорией на удаленном сервере через ssh rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" $BACKUP_DIR $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR
Теперь дадим права на запуск нашему скрипту:
chmod +x ./backup.sh
Ну и напоследок- добавим выполнение скрипта на полтретьего ночи каждый день:
crontab -e 30 2 * * * /home/serv/backup.sh
Вот, в принципе и всё.