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:
165
README_GIT.md
Normal file
165
README_GIT.md
Normal 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
74
backup_to_s3.sh
Executable 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
32
daily_backup.sh
Executable 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
|
||||
Reference in New Issue
Block a user