# Механизм обновлений в XC_VM Система обновлений XC_VM реализована как многоуровневый процесс: от веб-интерфейса до системных скриптов. Такой подход обеспечивает надёжность, автоматизацию и целостность данных при обновлении панели. > 📋 Пошаговая инструкция со скриншотами — на странице [Обновление сервера](ru-ru/administration/server-update.md). --- ## 1. Инициация обновления Процесс начинается с **нажатия кнопки "Обновить"** в веб-интерфейсе панели. * Создаётся сигнал `update`, который записывается в таблицу `signals` базы данных. * Этот сигнал выступает **триггером**, запускающим дальнейший процесс обновления. --- ## 2. Запуск через CRON Каждую **минуту** выполняется системное задание CRON: ```bash /home/xc_vm/console.php cron:root_signals ``` Крон-задача `root_signals` проверяет наличие новых сигналов и при обнаружении `update` запускает: ```bash /home/xc_vm/console.php update update ``` > ⚙️ Этот механизм позволяет выполнять обновления **автоматически**, без ручного вмешательства администратора. --- ## 3. Управление обновлением (PHP-уровень) Основная логика находится в классе `UpdateCommand`: ``` src/Cli/Commands/UpdateCommand.php ``` На этом этапе выполняются следующие действия: 1. Определение **текущей версии панели** (`MAIN` или `LB`). 2. Получение данных о новой версии с **GitHub**: * Ссылка на архив обновления. * Контрольная сумма (хеш) для проверки целостности. 3. Скачивание архива во временную директорию. 4. Проверка соответствия хеш-суммы. 5. Запуск системного обновления с помощью Python: ```bash sudo /usr/bin/python3 /home/xc_vm/update "/home/xc_vm/tmp/.update.tar.gz" "HASH" > /dev/null 2>&1 & ``` > 💡 После завершения Python-обновления вызывается `console.php update post-update`, который запускает [миграции базы данных](ru-ru/guides/cli-tools.md#обновление-бд-после-обновления-версии) и post-update очистку. --- ## 4. Системное обновление (Python-уровень) После вызова передача управления переходит к скрипту: ``` /home/xc_vm/update ``` Он выполняет операции на уровне системы: 1. **Повторная проверка контрольной суммы** архива. 2. **Остановка панели**, чтобы избежать конфликтов при обновлении. 3. **Распаковка** архива во временную директорию: ```bash /tmp/xc_vm_update_*/ ``` 4. **Удаление исключаемых каталогов** из временной копии — бинарники, конфиги и пользовательские данные, которые не должны перезаписываться: `bin/ffmpeg_bin`, `bin/nginx`, `bin/nginx_rtmp`, `bin/php`, `bin/redis`, `bin/install`, `bin/maxmind`, `bin/certbot`, `content`, `backups`, `tmp`, `config`, `signals` 5. **Копирование оставшихся файлов** поверх рабочей установки: ```bash cp -a /tmp/xc_vm_update_*/. /home/xc_vm/ ``` 6. **Настройка прав доступа:** ```bash chown -R xc_vm:xc_vm /home/xc_vm/ ``` 7. **Запуск пост-обновления:** ```bash /home/xc_vm/console.php update post-update ``` 8. **Перезапуск панели** в рабочем режиме. 9. **Очистка** временной директории и удаление архива. > ℹ️ Один и тот же архив используется для установки и обновления. Фильтрация происходит на сервере во время обновления — список исключаемых каталогов задан непосредственно в `src/update`. --- ## 5. Завершение обновления Финальные действия выполняются в фазе `post-update` команды `UpdateCommand`: 1. Проверка, **включено ли автообновление LB**: * Если обновлялся `MAIN`, создаются сигналы обновления для всех Load Balancer’ов. 2. Обновление **версии панели** в базе данных. 3. Удаление устаревших файлов. 4. Повторное выравнивание прав: ```bash chown -R xc_vm:xc_vm /home/xc_vm/ ``` 5. Перезагрузка системных демонов: ```bash sudo systemctl daemon-reload ``` 6. Проверка статуса панели: ```bash sudo /home/xc_vm/console.php status ``` 7. Завершение процесса обновления. --- ## 6. Итоговая схема работы ```text [ Веб-интерфейс ] │ ▼ [ БД: сигнал update ] │ ▼ [ CRON → console.php cron:root_signals ] │ ▼ [ UpdateCommand (PHP): скачивание + проверка хеша ] │ ▼ [ update (Python): распаковка в /tmp → удаление исключённых → копирование ] │ ▼ [ post-update → UpdateCommand ] │ ▼ [ Завершение, рестарт демонов, обновление версии ] ``` --- ## Ключевые особенности * 🔒 **Двойная проверка целостности** (на уровне PHP и Python). * 🧠 **Автоматическое распространение обновлений** между MAIN и LB. * 🧹 **Очистка устаревших файлов** и выравнивание прав доступа. * 🔄 **Безопасный перезапуск панели** после установки. * ⚙️ **Гибкость и автономность** за счёт CRON и сигналов. ---