- 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.
385 lines
14 KiB
Bash
385 lines
14 KiB
Bash
#!/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
|