как мы делаем бэкап сайта в git репозиторий


Далее пойдет описание самой простой схемы бэкапов для домашних проектов, которую мы применяем на своем сайте.

Начать следует с того что нужно подумать где будет хранить бэкапы, я предлагаю это делать на 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 с помощью вот этого скрипта.

Как говорится, много бэкапов мало не бывает, но лучше, чтобы они не понадобились.

comments powered by Disqus