- Исходная задача систем контроля версий, таких, как Git и Mercurial:
- отслеживать историю изменений в исходных текстах при разработке программ,
- обеспечивать коллективную разработку, упрощая обмен обновлениями между разработчиками.
- Неплохая инструкция, написанная чайником для чайников, и комментарии к ней: https://dev.1c-bitrix.ru/community/webdev/user/23706/blog/12414/
- Применительно к веб-сайтам, Git или Mercurial можно использовать, чтобы решать ещё две важных задачи:
- резервное копирование,
- обнаружение взломов.
Обнаружение взломов:
- Создайте файл /etc/cron.daily/site-gitcheck со следующим содержимым:
#!/bin/sh
cd /path/to/site
git status | grep -qi 'nothing to do' && exit 0
git status | mail -s "Achtung, site changed!" webmaster@example.org
chmod +x /etc/cron.daily/site-gitcheck
Например, для Wordpress'a .gitignore будет таким:
wp-content/uploads/*
Резервное копирование:
- Применительно к основному каталогу сайта должно вызываться только вручную после явных исправлений и просмотра git diff, чтобы не пропустить взломы.
- Допустимо вызывать автоматически только применительно к каталогам, в которые разрешена закачка файлов.
- Создайте файл /etc/cron.daily/site2git (и сделайте исполняемым через "chmod +x"):
#!/bin/sh
cd /path/to/site/uploads
git status | grep -qi 'nothing to do' && exit 0
git add -A
git commit -am "AutoBackup-$(date +%Y-%m-%d-%H%M)"
git push
Правила безопасности:
- Каталог .git содержит копии всех файлов на сайте, включая программный код, логины-пароли для подключения к базе данных и т.д.
- Доступ к этому каталогу обязан быть закрыт! Это можно сделать разными способами, в т.ч. настройками операционной системы, веб-сервера или Git.
- Если вы работаете в консоли сервера с правами суперпользователя, то СРАЗУ после создания или клонирования репозитория закройте веб-приложениям доступ к .git следующими командами:
chown root:root .git
chmod 700 .git
- Пример настроек для Nginx:
location ~ /\.well-known/ { alias /path/to/letsencrypt; }
location ~ /\. { deny all; }
- Используйте для этого ключ "--git-dir=путь-каталога".
- Подробная инструкция: https://stackoverflow.com/a/8603156/2743554