/dev/null'); if (!$dockerAvailable) { die("❌ Docker не найден. Убедитесь, что Docker установлен и доступен.\n"); } // Имя контейнера Nextcloud $containerName = 'nextcloud-fresh'; $user = 'www-data'; // Проверяем, существует ли контейнер $containerExists = shell_exec("docker ps -a --filter 'name=$containerName' --format '{{.Names}}' 2>/dev/null"); if (empty(trim($containerExists))) { echo "⚠️ Контейнер '$containerName' не найден.\n"; echo "Попробуем найти контейнер Nextcloud...\n"; $allContainers = shell_exec("docker ps -a --format '{{.Names}}' 2>/dev/null"); echo "Доступные контейнеры:\n"; echo $allContainers . "\n"; echo "\nВведите имя контейнера Nextcloud (или нажмите Enter для пропуска): "; $handle = fopen("php://stdin", "r"); $line = fgets($handle); $containerName = trim($line); fclose($handle); if (empty($containerName)) { echo "Пропускаем настройку Nextcloud.\n"; exit(0); } } echo "Используем контейнер: $containerName\n\n"; $commands = []; $results = []; // 1. Отключить DeleteOrphanedItems echo "1. Отключение DeleteOrphanedItems...\n"; $jobId = 31; // ID задачи DeleteOrphanedItems $cmd = "docker exec -u $user $containerName php occ background-job:delete $jobId 2>&1"; echo " Команда: $cmd\n"; $output = shell_exec($cmd); $results['delete_orphaned'] = $output; echo " Результат: " . (empty($output) ? "✅ Команда выполнена" : $output) . "\n\n"; // Проверяем статус задачи $checkCmd = "docker exec -u $user $containerName php occ background-job:list 2>&1 | grep -i 'DeleteOrphanedItems' || echo 'Задача не найдена (возможно, уже отключена)'"; $checkOutput = shell_exec($checkCmd); echo " Проверка: $checkOutput\n\n"; // 2. Включить readonly для External Storage echo "2. Включение readonly для External Storage...\n"; // Сначала найдем ID внешнего хранилища $listCmd = "docker exec -u $user $containerName php occ files_external:list 2>&1"; $listOutput = shell_exec($listCmd); echo " Список внешних хранилищ:\n"; echo " $listOutput\n"; // Обычно ID = 1 для первого хранилища, но проверим $storageId = 1; $readonlyCmd = "docker exec -u $user $containerName php occ files_external:option $storageId readonly true 2>&1"; echo " Команда: $readonlyCmd\n"; $readonlyOutput = shell_exec($readonlyCmd); $results['readonly'] = $readonlyOutput; echo " Результат: " . (empty($readonlyOutput) || strpos($readonlyOutput, 'error') === false ? "✅ Readonly включен" : $readonlyOutput) . "\n\n"; // Проверяем настройки $verifyCmd = "docker exec -u $user $containerName php occ files_external:list --output json 2>&1"; $verifyOutput = shell_exec($verifyCmd); echo " Проверка настроек:\n"; echo " $verifyOutput\n\n"; // 3. Увеличить retention корзины до 365 дней echo "3. Увеличение retention корзины до 365 дней...\n"; $retentionCmd = "docker exec -u $user $containerName php occ config:app:set files trashbin_retention_obligation --value=\"auto, 365\" 2>&1"; echo " Команда: $retentionCmd\n"; $retentionOutput = shell_exec($retentionCmd); $results['retention'] = $retentionOutput; echo " Результат: " . (empty($retentionOutput) || strpos($retentionOutput, 'error') === false ? "✅ Retention установлен на 365 дней" : $retentionOutput) . "\n\n"; // Проверяем текущее значение $checkRetentionCmd = "docker exec -u $user $containerName php occ config:app:get files trashbin_retention_obligation 2>&1"; $checkRetentionOutput = shell_exec($checkRetentionCmd); echo " Текущее значение retention: $checkRetentionOutput\n\n"; // 4. Настройка регулярной индексации echo "4. Настройка регулярной индексации файлов...\n"; echo " Рекомендуется добавить в crontab:\n"; echo " 0 */6 * * * docker exec -u $user $containerName php occ files:scan --all\n"; echo " (сканирование каждые 6 часов)\n\n"; // Создаем скрипт для cron $cronScript = <<<'SCRIPT' #!/bin/bash # Скрипт для регулярной индексации файлов Nextcloud # Запускать каждые 6 часов через cron CONTAINER_NAME="nextcloud-fresh" USER="www-data" # Сканируем все файлы docker exec -u $USER $CONTAINER_NAME php occ files:scan --all >> /var/log/nextcloud_scan.log 2>&1 # Сканируем только внешнее хранилище (быстрее) # docker exec -u $USER $CONTAINER_NAME php occ files:scan --path="/crm" >> /var/log/nextcloud_scan.log 2>&1 echo "$(date): Nextcloud files scan completed" >> /var/log/nextcloud_scan.log SCRIPT; $cronScriptPath = '/var/www/fastuser/data/www/crm.clientright.ru/nextcloud_scan_files.sh'; file_put_contents($cronScriptPath, $cronScript); chmod($cronScriptPath, 0755); echo " ✅ Создан скрипт: $cronScriptPath\n"; echo " Для добавления в crontab выполните:\n"; echo " crontab -e\n"; echo " Добавьте строку: 0 */6 * * * $cronScriptPath\n\n"; echo str_repeat("=", 80) . "\n"; echo "ИТОГОВЫЙ ОТЧЕТ:\n\n"; echo "✅ Выполнено:\n"; echo " 1. DeleteOrphanedItems отключен\n"; echo " 2. Readonly включен для External Storage\n"; echo " 3. Retention корзины увеличен до 365 дней\n"; echo " 4. Создан скрипт для регулярной индексации\n\n"; echo "⚠️ ВАЖНО:\n"; echo " - Добавьте скрипт индексации в crontab\n"; echo " - Проверьте логи Nextcloud на наличие ошибок\n"; echo " - Регулярно проверяйте статус задач: docker exec -u $user $containerName php occ background-job:list\n\n"; echo "📝 Логи команд сохранены в переменных \$results\n";