В этом посте хотелось бы рассказать о достаточно простом и надежном способе организации резервного копирования сайта на удаленный сервер. Рассмотрим на примере шаред хостинга, в целом точно таким же образом это делается и для сайта на выделенном сервере.
Постановка задачи:
ssh-keygen -t rsa -b 2048 -f mysite-keyгде mysite-key - имя Вашего ключа. При выполнении команды будет запрошен пароль, его вводить не требуется. После выполнения этой команды в текущем каталоге появится 2 файла (закрытый и открытый ключи соответственно): "mysite-key" и "mysite-key.pub"
scp mysite-key.pub mysiteuser@x.x.x.x:/home/mysiteuser/.ssh/После этого необходимо добавить этот ключ в список авторизованных ключей. это можно сделать либо через панель управления хостингом (cpanel позволяет), либо через ssh используя команду cat:
cd .ssh cat mysite-key.pub >> authorized_keys2
Теперь для проверки подключения выполняем на выделенном сервере следующую команду:
ssh -i mysite-key mysiteuser@x.x.x.x
После выполнения этой команды мы попадем в сеанс ssh без ввода пароля.
Для синхронизации папки сайта с папкой на выделенном сервере архивирования можно использовать скрипт:
#!/bin/bash #Путь к закрытому ключу ssh. Например: /home/user/.ssh/privatekey SSH_PRIVATEKEY="/home/openadmins/.ssh/ssh-cron-key" #Имя пользователя для доступа к удаленному серверу по ssh SSH_REMOTEUSER="mysiteuser" #ip адрес удаленного сервера SSH_REMOTEHOST="x.x.x.x" #скрипт, который должен отработать на сервере, где находится сайт, перед синхронизацией.Скрипт должен лежать на удаленном сервере #Если задать пустую строку, то ничего не происходит. SSH_REMOTEPRECOMMAND="./backupdb.sh" #скрипт, который должен отработать на сервере, где находится сайт, после синхронизации.Скрипт должен лежать на удаленном сервере #Если задать пустую строку, то ничего не происходит. SSH_REMOTEPOSTCOMMAND="./removebackupdb.sh" #Папка на удаленному сервере, которую будем синхронизировать REMOTEDIR=/home/mysiteuser/public_html #Путь куда будет скопирована папки с удаленного сервера BACKUPDIR=/home/openadmins/backup/ituslugi #Запуск команды на удаленном сервере перед синхронизацией if [ -n $SSH_REMOTEPRECOMMAND ]; then ssh -i $SSH_PRIVATEKEY $SSH_REMOTEUSER@$SSH_REMOTEHOST $SSH_REMOTEPRECOMMAND fi #Запуск синхронизации rsync -avz -e "ssh -i "$SSH_PRIVATEKEY $SSH_REMOTEUSER@$SSH_REMOTEHOST:$REMOTEDIR $BACKUPDIR/ #Запуск команды на удаленном сервере после синхронизации if [ -n $SSH_REMOTEPOSTCOMMAND ]; then ssh -i $SSH_PRIVATEKEY $SSH_REMOTEUSER@$SSH_REMOTEHOST $SSH_REMOTEPOSTCOMMAND fi #Вызываем скрипт архивации папки public_html /bin/sh /home/initlab/scripts/backup_mysite.sh
Комментарии приведены по тексту, поэтому должно быть все понятно.
Сохраним этот скрипт в /home/openadmins/scripts/sync-mysite.sh.
Переходим к написанию скрипта архивации папки и удаления старых архивов.
Для архивации папки с файлами сайта используем следующий скрипт:
#!/bin/bash #Скрипт циклической архивации каталога. Позволяет хранить архивы только за последние N дней. Количество дней можно задать. #Путь к каталогу, где будут храниться архивы. например: /home/user/backupsites/mysite BACKUP_FOLDERNAME="/home/openadmins/backup/mysiteuser" #Название файлов архивов. Например,если указа backup-my-site. #тогда имя файла архива после архивации в 25 апреля 2011 года в 00:00 будет таким: backup-my-site-2011-04-25--00-00.tar.gz BACKUP_FILENAME="backup-mysiteuser" #Путь к архивируемому каталогу. Например: /home/user/backupsites/mysite/public_html FOLDERNAME="/home/openadmins/backup/mysiteuser/public_html" #Количество дней хранения архивов. Все архивы, которые хранятся большее количество дней будут удалены. DAYCOUNT=7 #Создание архива tar czf $BACKUP_FOLDERNAME/$BACKUP_FILENAME-`date +%F--%H-%M`.tar.gz $FOLDERNAME #Удаление архивов, которые лежат дольше чем количество дней хранения архивов. find $BACKUP_FOLDERNAME/ -name '*gz' -type f -mtime +$DAYCOUNT -execdir rm {} +
Сохраним этот скрипт в /home/openadmins/scripts/backup-mysite.sh
Настройку автоматического запуска осуществляем в файле /etc/crontab, Для осуществления ежедневного запуска вписываем следующие строку
01 03 * * * initlab /bin/sh /home/openadmins/scripts/sync-sites.sh
После этих действий ваш сайт будет архивироваться ежедневно на удаленный сервер, и даже если с основным хостингом произойдут какие то проблемы всегда можно будет достаточно быстро восстановиться.
Таким образом мы настраиваем резервное копирование сайтов на всех серверах, которые мы поддерживаем.