Files
crm.clientright.ru/erv_project_tools/backup_erv.sh

196 lines
6.9 KiB
Bash
Raw Normal View History

#!/bin/bash
# Скрипт резервного копирования проекта ERV
# Автор: Фёдор
# Дата: $(date +%Y-%m-%d)
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Настройки
PROJECT_PATH="/var/www/fastuser/data/www/erv.clientright.ru"
BACKUP_DIR="/var/www/fastuser/data/www/crm.clientright.ru/erv_project_tools/backups"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="ci20465_erv"
DB_USER="ci20465_erv"
DB_PASS="c7vOXbmG"
# Создаем директорию для бэкапов если её нет
mkdir -p "$BACKUP_DIR"
echo -e "${GREEN}=== Резервное копирование проекта ERV ===${NC}"
echo "Дата: $(date)"
echo "Проект: $PROJECT_PATH"
echo "Бэкап директория: $BACKUP_DIR"
echo ""
# Функция для логирования
log() {
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
}
error() {
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ОШИБКА:${NC} $1"
}
warning() {
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] ПРЕДУПРЕЖДЕНИЕ:${NC} $1"
}
# Проверяем существование проекта
if [ ! -d "$PROJECT_PATH" ]; then
error "Директория проекта не найдена: $PROJECT_PATH"
exit 1
fi
log "Начинаем резервное копирование..."
# 1. Резервное копирование базы данных
log "Создаем резервную копию базы данных..."
DB_BACKUP_FILE="$BACKUP_DIR/erv_db_$DATE.sql"
if mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$DB_BACKUP_FILE" 2>/dev/null; then
log "База данных успешно сохранена: $DB_BACKUP_FILE"
# Сжимаем файл БД
gzip "$DB_BACKUP_FILE"
log "База данных сжата: ${DB_BACKUP_FILE}.gz"
else
error "Не удалось создать резервную копию базы данных"
exit 1
fi
# 2. Резервное копирование файлов проекта
log "Создаем резервную копию файлов проекта..."
FILES_BACKUP_FILE="$BACKUP_DIR/erv_files_$DATE.tar.gz"
# Исключаем ненужные папки и файлы
tar -czf "$FILES_BACKUP_FILE" \
--exclude="$PROJECT_PATH/uploads/*" \
--exclude="$PROJECT_PATH/cache/*" \
--exclude="$PROJECT_PATH/vendor/*" \
--exclude="$PROJECT_PATH/.git" \
--exclude="$PROJECT_PATH/*.log" \
-C "$(dirname "$PROJECT_PATH")" \
"$(basename "$PROJECT_PATH")" 2>/dev/null
if [ $? -eq 0 ]; then
log "Файлы проекта успешно сохранены: $FILES_BACKUP_FILE"
else
error "Не удалось создать резервную копию файлов"
exit 1
fi
# 3. Резервное копирование критически важной папки cache
log "Создаем резервную копию папки cache (критически важно)..."
CACHE_BACKUP_FILE="$BACKUP_DIR/erv_cache_$DATE.tar.gz"
if [ -d "$PROJECT_PATH/cache" ]; then
tar -czf "$CACHE_BACKUP_FILE" -C "$PROJECT_PATH" cache 2>/dev/null
if [ $? -eq 0 ]; then
log "Папка cache успешно сохранена: $CACHE_BACKUP_FILE"
else
warning "Не удалось создать резервную копию папки cache"
fi
else
warning "Папка cache не найдена"
fi
# 4. Резервное копирование папки uploads (пользовательские файлы)
log "Создаем резервную копию папки uploads..."
UPLOADS_BACKUP_FILE="$BACKUP_DIR/erv_uploads_$DATE.tar.gz"
if [ -d "$PROJECT_PATH/uploads" ]; then
tar -czf "$UPLOADS_BACKUP_FILE" -C "$PROJECT_PATH" uploads 2>/dev/null
if [ $? -eq 0 ]; then
log "Папка uploads успешно сохранена: $UPLOADS_BACKUP_FILE"
else
warning "Не удалось создать резервную копию папки uploads"
fi
else
warning "Папка uploads не найдена"
fi
# 5. Создаем информационный файл о бэкапе
INFO_FILE="$BACKUP_DIR/backup_info_$DATE.txt"
cat > "$INFO_FILE" << EOF
Резервная копия проекта ERV
============================
Дата создания: $(date)
Версия скрипта: 1.0
Автор: Фёдор
Созданные файлы:
- База данных: ${DB_BACKUP_FILE}.gz
- Файлы проекта: $FILES_BACKUP_FILE
- Папка cache: $CACHE_BACKUP_FILE
- Папка uploads: $UPLOADS_BACKUP_FILE
Размеры файлов:
$(du -h "$BACKUP_DIR"/*$DATE* 2>/dev/null)
Системная информация:
- ОС: $(uname -a)
- Диск: $(df -h "$BACKUP_DIR" | tail -1)
- Память: $(free -h | grep Mem)
EOF
log "Информационный файл создан: $INFO_FILE"
# 6. Очистка старых бэкапов (старше 30 дней)
log "Очищаем старые резервные копии (старше 30 дней)..."
find "$BACKUP_DIR" -name "erv_*" -type f -mtime +30 -delete 2>/dev/null
log "Старые резервные копии удалены"
# 7. Проверяем размеры созданных файлов
log "Проверяем размеры созданных файлов..."
ls -lh "$BACKUP_DIR"/*$DATE* 2>/dev/null
# 8. Итоговая статистика
TOTAL_SIZE=$(du -sh "$BACKUP_DIR"/*$DATE* 2>/dev/null | awk '{sum+=$1} END {print sum "K"}')
echo ""
log "=== РЕЗЕРВНОЕ КОПИРОВАНИЕ ЗАВЕРШЕНО ==="
log "Общий размер резервных копий: $TOTAL_SIZE"
log "Все файлы сохранены в: $BACKUP_DIR"
echo ""
# Проверяем доступность внешних сервисов
log "Проверяем доступность внешних сервисов..."
# Проверка SMS API
if curl -s --connect-timeout 5 https://online.sigmasms.ru/api/ > /dev/null; then
log "SMS API (SigmaSMS) доступен"
else
warning "SMS API (SigmaSMS) недоступен"
fi
# Проверка DaData API
if curl -s --connect-timeout 5 https://suggestions.dadata.ru/ > /dev/null; then
log "DaData API доступен"
else
warning "DaData API недоступен"
fi
# Проверка CRM API
if curl -s --connect-timeout 5 https://form.clientright.ru/ > /dev/null; then
log "CRM API (ClientRight) доступен"
else
warning "CRM API (ClientRight) недоступен"
fi
echo ""
log "Резервное копирование завершено успешно!"
echo ""
# Отправляем уведомление (если настроено)
if [ -f "/usr/bin/mail" ]; then
echo "Резервное копирование ERV завершено успешно. Дата: $(date)" | mail -s "ERV Backup Complete" admin@clientright.ru 2>/dev/null
fi
exit 0