196 lines
6.9 KiB
Bash
196 lines
6.9 KiB
Bash
|
|
#!/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
|