#!/bin/bash # Скрипт синхронизации только CRM Extensions между тестовой и боевой средой # Автор: Фёдор # Дата: 2025-09-26 set -e # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Пути TEST_DIR="/var/www/fastuser/data/www/crm-test.clientright.ru" PROD_DIR="/var/www/fastuser/data/www/crm.clientright.ru" EXTENSIONS_DIR="crm_extensions" # Функция логирования log() { echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1" } error() { echo -e "${RED}[ERROR]${NC} $1" exit 1 } success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } # Проверка существования директорий check_directories() { log "Проверка директорий..." if [ ! -d "$TEST_DIR/$EXTENSIONS_DIR" ]; then error "CRM Extensions не найдены в тестовой среде: $TEST_DIR/$EXTENSIONS_DIR" fi if [ ! -d "$PROD_DIR" ]; then error "Продакшн директория не найдена: $PROD_DIR" fi success "Директории проверены" } # Создание резервной копии текущих Extensions backup_current() { log "Создание резервной копии текущих CRM Extensions..." if [ -d "$PROD_DIR/$EXTENSIONS_DIR" ]; then BACKUP_NAME="crm_extensions_backup_$(date +%Y%m%d_%H%M%S).tar.gz" BACKUP_PATH="/var/www/fastuser/data/backups/$BACKUP_NAME" mkdir -p "$(dirname "$BACKUP_PATH")" tar -czf "$BACKUP_PATH" -C "$PROD_DIR" "$EXTENSIONS_DIR" if [ $? -eq 0 ]; then success "Резервная копия создана: $BACKUP_PATH" else error "Ошибка создания резервной копии" fi else warning "CRM Extensions не найдены в продакшн среде, пропускаем бэкап" fi } # Синхронизация CRM Extensions sync_extensions() { log "Синхронизация CRM Extensions..." # Удаляем старую версию if [ -d "$PROD_DIR/$EXTENSIONS_DIR" ]; then rm -rf "$PROD_DIR/$EXTENSIONS_DIR" log "Удалена старая версия CRM Extensions" fi # Копируем новую версию cp -r "$TEST_DIR/$EXTENSIONS_DIR" "$PROD_DIR/" if [ $? -eq 0 ]; then success "CRM Extensions скопированы" else error "Ошибка копирования CRM Extensions" fi # Устанавливаем правильные права chown -R fastuser:fastuser "$PROD_DIR/$EXTENSIONS_DIR" find "$PROD_DIR/$EXTENSIONS_DIR" -type f -exec chmod 644 {} \; find "$PROD_DIR/$EXTENSIONS_DIR" -type d -exec chmod 755 {} \; find "$PROD_DIR/$EXTENSIONS_DIR" -name "*.sh" -exec chmod 755 {} \; success "Права доступа установлены" } # Проверка синхронизации verify_sync() { log "Проверка синхронизации..." # Проверяем ключевые файлы KEY_FILES=( "crm_extensions/README.md" "crm_extensions/.env.example" "crm_extensions/nextcloud_api.php" ) for file in "${KEY_FILES[@]}"; do if [ -f "$PROD_DIR/$file" ]; then success "Файл найден: $file" else warning "Файл не найден: $file" fi done # Сравниваем размеры директорий TEST_SIZE=$(du -s "$TEST_DIR/$EXTENSIONS_DIR" | cut -f1) PROD_SIZE=$(du -s "$PROD_DIR/$EXTENSIONS_DIR" | cut -f1) if [ "$TEST_SIZE" = "$PROD_SIZE" ]; then success "Размеры директорий совпадают: ${TEST_SIZE}KB" else warning "Размеры директорий отличаются: тест=${TEST_SIZE}KB, прод=${PROD_SIZE}KB" fi } # Основная функция main() { log "Начало синхронизации CRM Extensions" case "${1:-sync}" in "sync") check_directories backup_current sync_extensions verify_sync success "Синхронизация CRM Extensions завершена!" ;; "backup") check_directories backup_current ;; "verify") check_directories verify_sync ;; *) echo "Использование: $0 {sync|backup|verify}" echo " sync - Синхронизация CRM Extensions (по умолчанию)" echo " backup - Создание резервной копии" echo " verify - Проверка синхронизации" exit 1 ;; esac } # Запуск основной функции main "$@"