Files
crm.clientright.ru/erv_project_tools/maintenance_erv.sh
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

385 lines
14 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт обслуживания проекта ERV
# Автор: Фёдор
# Дата: $(date +%Y-%m-%d)
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Настройки
PROJECT_PATH="/var/www/fastuser/data/www/erv.clientright.ru"
LOG_FILE="/var/www/fastuser/data/www/crm.clientright.ru/erv_project_tools/maintenance.log"
# Функции для логирования
log() {
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
error() {
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ОШИБКА:${NC} $1"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ОШИБКА: $1" >> "$LOG_FILE"
}
warning() {
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] ПРЕДУПРЕЖДЕНИЕ:${NC} $1"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ПРЕДУПРЕЖДЕНИЕ: $1" >> "$LOG_FILE"
}
info() {
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')] ИНФО:${NC} $1"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ИНФО: $1" >> "$LOG_FILE"
}
# Создаем директорию для логов если её нет
mkdir -p "$(dirname "$LOG_FILE")"
echo -e "${GREEN}=== ОБСЛУЖИВАНИЕ ПРОЕКТА ERV ===${NC}"
echo "Дата: $(date)"
echo "Проект: $PROJECT_PATH"
echo ""
# Функция для подтверждения действий
confirm() {
read -p "Продолжить? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
return 0
else
return 1
fi
}
# 1. Очистка временных файлов
cleanup_temp_files() {
log "Очищаем временные файлы..."
# Очистка PHP сессий старше 24 часов
if [ -d "/tmp" ]; then
find /tmp -name "sess_*" -type f -mtime +1 -delete 2>/dev/null
log "Очищены старые PHP сессии"
fi
# Очистка временных файлов в проекте
find "$PROJECT_PATH" -name "*.tmp" -type f -delete 2>/dev/null
find "$PROJECT_PATH" -name "*.log" -type f -mtime +7 -delete 2>/dev/null
log "Очищены временные файлы проекта"
# Очистка кеша браузера (если есть)
if [ -d "$PROJECT_PATH/cache" ]; then
find "$PROJECT_PATH/cache" -name "*.cache" -type f -mtime +30 -delete 2>/dev/null
log "Очищен кеш браузера"
fi
}
# 2. Оптимизация базы данных
optimize_database() {
log "Оптимизируем базу данных..."
DB_NAME="ci20465_erv"
DB_USER="ci20465_erv"
DB_PASS="c7vOXbmG"
if mysql -u"$DB_USER" -p"$DB_PASS" -e "OPTIMIZE TABLE lexrpiority;" "$DB_NAME" > /dev/null 2>&1; then
log "Таблица lexrpiority оптимизирована"
else
error "Не удалось оптимизировать таблицу lexrpiority"
fi
# Проверяем размер базы данных
DB_SIZE=$(mysql -u"$DB_USER" -p"$DB_PASS" -e "SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'DB Size in MB' FROM information_schema.tables WHERE table_schema='$DB_NAME';" 2>/dev/null | tail -1)
info "Размер базы данных: ${DB_SIZE} MB"
}
# 3. Проверка и исправление прав доступа
fix_permissions() {
log "Проверяем и исправляем права доступа..."
# Устанавливаем правильные права для папок
find "$PROJECT_PATH" -type d -exec chmod 755 {} \; 2>/dev/null
log "Установлены права 755 для папок"
# Устанавливаем правильные права для файлов
find "$PROJECT_PATH" -type f -exec chmod 644 {} \; 2>/dev/null
log "Установлены права 644 для файлов"
# Особые права для исполняемых файлов
find "$PROJECT_PATH" -name "*.sh" -exec chmod 755 {} \; 2>/dev/null
log "Установлены права 755 для скриптов"
# Права для папки uploads
if [ -d "$PROJECT_PATH/uploads" ]; then
chmod 755 "$PROJECT_PATH/uploads"
chown -R www-data:www-data "$PROJECT_PATH/uploads" 2>/dev/null
log "Установлены права для папки uploads"
fi
# Права для папки cache (критически важно!)
if [ -d "$PROJECT_PATH/cache" ]; then
chmod 755 "$PROJECT_PATH/cache"
chown -R www-data:www-data "$PROJECT_PATH/cache" 2>/dev/null
log "Установлены права для папки cache"
fi
}
# 4. Проверка целостности файлов
check_file_integrity() {
log "Проверяем целостность файлов..."
CRITICAL_FILES=(
"$PROJECT_PATH/ervws/index.php"
"$PROJECT_PATH/database.php"
"$PROJECT_PATH/sms-test.php"
"$PROJECT_PATH/file-server.php"
"$PROJECT_PATH/common.js"
)
for file in "${CRITICAL_FILES[@]}"; do
if [ -f "$file" ]; then
if [ -r "$file" ] && [ -w "$file" ]; then
log "Файл $file в порядке"
else
warning "Проблемы с правами доступа к файлу $file"
chmod 644 "$file" 2>/dev/null
fi
else
error "Критический файл $file не найден!"
fi
done
}
# 5. Очистка логов
cleanup_logs() {
log "Очищаем старые логи..."
# Очистка логов Apache старше 30 дней
if [ -f "/var/log/apache2/error.log" ]; then
# Создаем архив старого лога
cp /var/log/apache2/error.log /var/log/apache2/error.log.$(date +%Y%m%d) 2>/dev/null
> /var/log/apache2/error.log 2>/dev/null
log "Очищен лог Apache"
fi
# Очистка системных логов
find /var/log -name "*.log" -type f -mtime +30 -delete 2>/dev/null
log "Очищены старые системные логи"
}
# 6. Проверка и обновление зависимостей
check_dependencies() {
log "Проверяем зависимости..."
# Проверяем версию PHP
PHP_VERSION=$(php -v | head -1 | cut -d' ' -f2)
info "Версия PHP: $PHP_VERSION"
# Проверяем расширения PHP
REQUIRED_EXTENSIONS=("mysqli" "curl" "json" "mbstring" "openssl")
for ext in "${REQUIRED_EXTENSIONS[@]}"; do
if php -m | grep -q "$ext"; then
log "Расширение PHP $ext установлено"
else
warning "Расширение PHP $ext не установлено"
fi
done
# Проверяем версию MySQL
MYSQL_VERSION=$(mysql --version | cut -d' ' -f3)
info "Версия MySQL: $MYSQL_VERSION"
}
# 7. Мониторинг производительности
performance_check() {
log "Проверяем производительность..."
# Время отклика сайта
RESPONSE_TIME=$(curl -o /dev/null -s -w '%{time_total}' https://erv.clientright.ru/ 2>/dev/null)
if [ ! -z "$RESPONSE_TIME" ]; then
info "Время отклика сайта: ${RESPONSE_TIME}s"
# Предупреждение если время отклика больше 5 секунд
if (( $(echo "$RESPONSE_TIME > 5" | bc -l) )); then
warning "Медленный отклик сайта: ${RESPONSE_TIME}s"
fi
fi
# Проверяем количество активных соединений
ACTIVE_CONNECTIONS=$(netstat -an | grep :80 | grep ESTABLISHED | wc -l)
info "Активных соединений на порту 80: $ACTIVE_CONNECTIONS"
# Проверяем использование памяти PHP процессами
PHP_MEMORY=$(ps aux | grep php | grep -v grep | awk '{sum+=$6} END {print sum/1024 " MB"}')
info "Использование памяти PHP процессами: $PHP_MEMORY"
}
# 8. Безопасность
security_check() {
log "Проверяем безопасность..."
# Проверяем наличие подозрительных файлов
SUSPICIOUS_FILES=$(find "$PROJECT_PATH" -name "*.php" -exec grep -l "eval\|base64_decode\|system\|exec" {} \; 2>/dev/null)
if [ ! -z "$SUSPICIOUS_FILES" ]; then
warning "Найдены подозрительные файлы:"
echo "$SUSPICIOUS_FILES"
else
log "Подозрительные файлы не найдены"
fi
# Проверяем права доступа к конфиденциальным файлам
SENSITIVE_FILES=("database.php" "sms-test.php")
for file in "${SENSITIVE_FILES[@]}"; do
if [ -f "$PROJECT_PATH/$file" ]; then
PERMS=$(stat -c %a "$PROJECT_PATH/$file")
if [ "$PERMS" != "644" ]; then
warning "Неправильные права доступа к файлу $file: $PERMS"
chmod 644 "$PROJECT_PATH/$file" 2>/dev/null
fi
fi
done
# Проверяем наличие .htaccess файлов
if [ -f "$PROJECT_PATH/.htaccess" ]; then
log "Файл .htaccess найден"
# Проверяем содержимое на предмет подозрительных правил
if grep -q "RewriteRule.*php" "$PROJECT_PATH/.htaccess"; then
warning "Найдены подозрительные правила в .htaccess"
fi
fi
}
# 9. Резервное копирование перед обслуживанием
backup_before_maintenance() {
log "Создаем резервную копию перед обслуживанием..."
BACKUP_DIR="/var/www/fastuser/data/www/crm.clientright.ru/erv_project_tools/pre_maintenance_backup"
mkdir -p "$BACKUP_DIR"
# Копируем критические файлы
cp "$PROJECT_PATH/database.php" "$BACKUP_DIR/" 2>/dev/null
cp "$PROJECT_PATH/sms-test.php" "$BACKUP_DIR/" 2>/dev/null
cp "$PROJECT_PATH/file-server.php" "$BACKUP_DIR/" 2>/dev/null
log "Резервная копия создана в $BACKUP_DIR"
}
# 10. Восстановление после обслуживания
restore_after_maintenance() {
log "Проверяем восстановление после обслуживания..."
# Проверяем доступность сайта
if curl -s --connect-timeout 10 https://erv.clientright.ru/ > /dev/null; then
log "Сайт доступен после обслуживания"
else
error "Сайт недоступен после обслуживания!"
return 1
fi
# Проверяем подключение к БД
DB_NAME="ci20465_erv"
DB_USER="ci20465_erv"
DB_PASS="c7vOXbmG"
if mysql -u"$DB_USER" -p"$DB_PASS" -e "SELECT 1;" "$DB_NAME" > /dev/null 2>&1; then
log "База данных доступна после обслуживания"
else
error "База данных недоступна после обслуживания!"
return 1
fi
}
# Главное меню
show_menu() {
echo ""
echo -e "${BLUE}=== МЕНЮ ОБСЛУЖИВАНИЯ ===${NC}"
echo "1. Полное обслуживание (все операции)"
echo "2. Очистка временных файлов"
echo "3. Оптимизация базы данных"
echo "4. Исправление прав доступа"
echo "5. Проверка целостности файлов"
echo "6. Очистка логов"
echo "7. Проверка зависимостей"
echo "8. Проверка производительности"
echo "9. Проверка безопасности"
echo "0. Выход"
echo ""
}
# Выполнение полного обслуживания
full_maintenance() {
log "Начинаем полное обслуживание системы..."
backup_before_maintenance
cleanup_temp_files
optimize_database
fix_permissions
check_file_integrity
cleanup_logs
check_dependencies
performance_check
security_check
if restore_after_maintenance; then
log "Полное обслуживание завершено успешно!"
else
error "Обнаружены проблемы после обслуживания!"
fi
}
# Основной цикл
while true; do
show_menu
read -p "Выберите опцию (0-9): " choice
case $choice in
1)
echo "Выполнить полное обслуживание?"
if confirm; then
full_maintenance
fi
;;
2)
cleanup_temp_files
;;
3)
optimize_database
;;
4)
fix_permissions
;;
5)
check_file_integrity
;;
6)
cleanup_logs
;;
7)
check_dependencies
;;
8)
performance_check
;;
9)
security_check
;;
0)
log "Выход из программы обслуживания"
break
;;
*)
echo "Неверный выбор. Попробуйте снова."
;;
esac
echo ""
read -p "Нажмите Enter для продолжения..."
done
echo ""
log "Обслуживание завершено. Лог сохранен в: $LOG_FILE"
exit 0