Add Git backup system with S3 integration

- backup_to_s3.sh: Main backup script with S3 upload
- daily_backup.sh: Simple daily backup script
- README_GIT.md: Complete documentation
- .gitignore: Exclude sensitive files and cache
This commit is contained in:
Fedor
2025-09-26 10:46:34 +03:00
parent cf520a7db5
commit b162eddf0a
3 changed files with 271 additions and 0 deletions

165
README_GIT.md Normal file
View File

@@ -0,0 +1,165 @@
# Git Backup System для CRM
## Обзор
Система автоматического бэкапа Git репозитория CRM проекта с возможностью загрузки на S3.
## Файлы
- `backup_to_s3.sh` - Основной скрипт бэкапа с загрузкой на S3
- `daily_backup.sh` - Простой ежедневный бэкап
- `.gitignore` - Исключения для Git
- `backups/` - Папка для локальных бэкапов
## Использование
### Ручной бэкап
```bash
# Создать бэкап с описанием
./backup_to_s3.sh "Описание изменений"
# Создать бэкап с автоматическим описанием
./backup_to_s3.sh
```
### Автоматический ежедневный бэкап
```bash
# Добавить в crontab для ежедневного бэкапа в 2:00
crontab -e
# Добавить строку:
0 2 * * * /var/www/fastuser/data/www/crm.clientright.ru/daily_backup.sh
```
## Настройка S3
### 1. Установка AWS CLI
```bash
# Ubuntu/Debian
sudo apt install awscli
# Или через pip
pip install awscli
```
### 2. Настройка credentials
```bash
aws configure
# Ввести:
# AWS Access Key ID: [ваш ключ]
# AWS Secret Access Key: [ваш секрет]
# Default region name: ru-central1
# Default output format: json
```
### 3. Создание S3 bucket
```bash
aws s3 mb s3://crm-backups --region ru-central1
```
## Структура бэкапов
### Git коммиты
- Каждый бэкап создает коммит с временной меткой
- История изменений сохраняется в Git
### Архивы
- Формат: `crm_backup_YYYYMMDD_HHMMSS.tar.gz`
- Исключения: `.git`, `cache`, `logs`, `test`
- Размер: обычно 50-100MB
### S3 структура
```
s3://crm-backups/
├── crm-git-backup/
│ ├── crm_backup_20240926_104500.tar.gz
│ ├── crm_backup_20240926_120000.tar.gz
│ └── ...
```
## Восстановление
### Из Git
```bash
# Посмотреть историю
git log --oneline
# Откатиться к предыдущей версии
git reset --hard HEAD~1
# Откатиться к конкретному коммиту
git reset --hard <commit-hash>
```
### Из архива
```bash
# Скачать с S3
aws s3 cp s3://crm-backups/crm-git-backup/crm_backup_20240926_104500.tar.gz .
# Распаковать
tar -xzf crm_backup_20240926_104500.tar.gz
```
## Мониторинг
### Проверка статуса
```bash
# Статус Git
git status
# Последние коммиты
git log --oneline -10
# Размер репозитория
du -sh .git
```
### Логи
```bash
# Логи ежедневного бэкапа
tail -f /var/log/cron
# Или добавить логирование в скрипт
./daily_backup.sh >> /var/log/crm_backup.log 2>&1
```
## Безопасность
### Исключенные файлы
- `config.inc.php` - конфигурация БД
- `.env` - переменные окружения
- `cache/` - кеш файлы
- `logs/` - логи
- `*.log` - все лог файлы
### Рекомендации
1. Регулярно проверяйте размер бэкапов
2. Настройте lifecycle policy для S3
3. Используйте разные bucket для разных окружений
4. Шифруйте sensitive данные
## Troubleshooting
### Проблема: "Permission denied"
```bash
sudo chown -R www-data:www-data .
sudo chmod -R 755 .
```
### Проблема: "AWS CLI not found"
```bash
# Установить AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
```
### Проблема: "Bucket does not exist"
```bash
# Создать bucket
aws s3 mb s3://crm-backups --region ru-central1
```
## Контакты
При проблемах обращайтесь к Фёдору.

74
backup_to_s3.sh Executable file
View File

@@ -0,0 +1,74 @@
#!/bin/bash
# Скрипт для бэкапа Git репозитория на S3
# Использование: ./backup_to_s3.sh [описание_изменений]
# Настройки
BUCKET_NAME="crm-backups"
BACKUP_PREFIX="crm-git-backup"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
COMMIT_MESSAGE=${1:-"Auto backup $(date '+%Y-%m-%d %H:%M:%S')"}
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}=== CRM Git Backup to S3 ===${NC}"
# Проверяем, что мы в Git репозитории
if [ ! -d ".git" ]; then
echo -e "${RED}Ошибка: Не найден Git репозиторий${NC}"
exit 1
fi
# Проверяем наличие изменений
if git diff --quiet && git diff --cached --quiet; then
echo -e "${YELLOW}Нет изменений для коммита${NC}"
exit 0
fi
# Добавляем все изменения
echo -e "${YELLOW}Добавляем изменения в Git...${NC}"
git add .
# Создаем коммит
echo -e "${YELLOW}Создаем коммит: $COMMIT_MESSAGE${NC}"
git commit -m "$COMMIT_MESSAGE"
# Создаем архив репозитория
ARCHIVE_NAME="crm_backup_${TIMESTAMP}.tar.gz"
echo -e "${YELLOW}Создаем архив: $ARCHIVE_NAME${NC}"
# Исключаем .git из архива для экономии места
tar --exclude='.git' --exclude='cache' --exclude='logs' --exclude='test' \
-czf "/tmp/$ARCHIVE_NAME" .
# Проверяем размер архива
ARCHIVE_SIZE=$(du -h "/tmp/$ARCHIVE_NAME" | cut -f1)
echo -e "${GREEN}Архив создан: $ARCHIVE_NAME (размер: $ARCHIVE_SIZE)${NC}"
# Загружаем на S3 (если настроен AWS CLI)
if command -v aws &> /dev/null; then
echo -e "${YELLOW}Загружаем на S3...${NC}"
aws s3 cp "/tmp/$ARCHIVE_NAME" "s3://$BUCKET_NAME/$BACKUP_PREFIX/$ARCHIVE_NAME"
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Бэкап успешно загружен на S3${NC}"
echo -e "${GREEN} S3 путь: s3://$BUCKET_NAME/$BACKUP_PREFIX/$ARCHIVE_NAME${NC}"
else
echo -e "${RED}❌ Ошибка загрузки на S3${NC}"
fi
else
echo -e "${YELLOW}⚠️ AWS CLI не установлен, пропускаем загрузку на S3${NC}"
fi
# Очищаем временный файл
rm -f "/tmp/$ARCHIVE_NAME"
# Показываем последние коммиты
echo -e "${GREEN}Последние коммиты:${NC}"
git log --oneline -5
echo -e "${GREEN}=== Backup завершен ===${NC}"

32
daily_backup.sh Executable file
View File

@@ -0,0 +1,32 @@
#!/bin/bash
# Простой ежедневный бэкап Git репозитория
# Добавить в crontab: 0 2 * * * /var/www/fastuser/data/www/crm.clientright.ru/daily_backup.sh
cd /var/www/fastuser/data/www/crm.clientright.ru
# Проверяем наличие изменений
if ! git diff --quiet || ! git diff --cached --quiet; then
echo "$(date): Найдены изменения, создаем бэкап"
# Добавляем все изменения
git add .
# Создаем коммит с временной меткой
git commit -m "Daily backup $(date '+%Y-%m-%d %H:%M:%S')"
# Создаем архив
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
ARCHIVE_NAME="crm_daily_${TIMESTAMP}.tar.gz"
tar --exclude='.git' --exclude='cache' --exclude='logs' --exclude='test' \
-czf "/tmp/$ARCHIVE_NAME" .
# Перемещаем архив в папку backups
mkdir -p backups
mv "/tmp/$ARCHIVE_NAME" "backups/"
echo "$(date): Бэкап создан: backups/$ARCHIVE_NAME"
else
echo "$(date): Нет изменений для бэкапа"
fi