Далее пойдет описание самой простой схемы бэкапов для домашних проектов, которую мы применяем на своем сайте.
Начать следует с того что нужно подумать где будет хранить бэкапы, я предлагаю это делать на Bitbucket, если конечно у вас нет еще одного сервера с возможностью поднять там свой git сервер.
Преимущества данного сервиса в том что:
стороннее хранилище (у нас нет еще одного сервера, а делать бэкапы на том же сервере где и сайт помоему не очень логично);
бесплатные приватные репозитории;
авторизация через ssh-ключи.
С созданием аккаунта и репозитория я не думаю что должны возникнуть какие то проблемы, но вот насчет добавления ssh ключей стоит почитать Use deployment keys и Use the SSH protocol with Bitbucket.
Далее когда настроили настроили свой репозиторий, приступаем к залитию нашего сайта на этот самый репозиторий:
1) Идем в каталог с нашим сайтом:
cd ~/htdocs
2) Делаем настройку git’a:
git init
git config user.name "Site Backup"
git config user.email "backup@mail.com"
3) Добавляем путь к нашему репозиторию:
git remote add origin https://username@bitbucket.org/username/site.git
4) Добавляем все файлы сайта:
git add *
5) Делаем коммит:
git commit -m "init"
6) Заливаем все изменения в репозиторий:
git push origin master
Готово! Наш сайт успешно переведен в git репозиторий, теперь настроим чтобы у нас делались бэкапы базы данных и заливались в репозиторий.
Для этого напишем простенький скрипт который будет делать бэкап базы данных:
root@server # cat /usr/local/scripts/db_backup.sh
#!/bin/bash
mysqldump -uusername -ppassword database-name > /path/to/site/backup.sql
if [ -f /path/to/site/backup.sql ];
then
cd /path/to/site
git add backup.sql
git commit -m "Backup from $(date '+%b %d, %Y')"
git push origin master
else
echo "Backup file does not exists!"
exit 1
fi
А теперь добавим задачу в cron, чтобы он выполнялся с некой переодичностью:
root@server # cat >> /etc/crontab
# Push database backup to repository
0 * * * * root /usr/local/scripts/db_backup.sh
Еще можно сделать, чтобы сливались изменения с репозитория, чтобы можно было локально заниматься изменениями на сайте:
# Pull changes from git repository
0 * * * * root cd /path/to/site && git pull
И да не забываем в вашем apache или nginx, заблокировать доступ к папке .git, так как она лежит в корне самого сайта.
Вот пример как это делается в nginx:
location ~ /\.git {
deny all;
}
Так мы быстро и без всяких заморочек делаем бэкап нашего сайта.
Стоит заметить, что при использовании кеширования, создаются временные файлы, которые не нужно добавлять в репу, для этого можно прописать пару нехитрых правил в .gitignore
Описывать их не буду, т.к. случай частный, а у вас может быть по-другому.
Еще добавлю, что помимо Bitbucket мы делаем заливку архива сайта на Google Drive с помощью вот этого скрипта.
Как говорится, много бэкапов мало не бывает, но лучше, чтобы они не понадобились.