Files
XC_VM/docs/ru/administration/update-system.md
T

6.1 KiB

⚙️ Механизм обновлений в XC_VM

Система обновлений XC_VM реализована как многоуровневый процесс — от веб-интерфейса до системных скриптов. Такой подход обеспечивает надёжность, автоматизацию и целостность данных при обновлении панели.


📚 Навигация


🔁 1. Инициация обновления

Процесс начинается с нажатия кнопки "Обновить" в веб-интерфейсе панели.

  • Создаётся сигнал update, который записывается в таблицу signals базы данных.
  • Этот сигнал выступает триггером, запускающим дальнейший процесс обновления.

🕒 2. Запуск через CRON

Каждую минуту выполняется системное задание CRON:

/home/xc_vm/console.php cron:root_signals

Крон-задача root_signals проверяет наличие новых сигналов и при обнаружении update запускает:

/home/xc_vm/console.php update update

⚙️ Этот механизм позволяет выполнять обновления автоматически, без ручного вмешательства администратора.


🧠 3. Управление обновлением (PHP-уровень)

Основная логика находится в классе UpdateCommand:

src/cli/Commands/UpdateCommand.php

На этом этапе выполняются следующие действия:

  1. Определение текущей версии панели (MAIN или LB).

  2. Получение данных о новой версии с GitHub:

    • Ссылка на архив обновления.
    • Контрольная сумма (хеш) для проверки целостности.
  3. Скачивание архива во временную директорию.

  4. Проверка соответствия хеш-суммы.

  5. Запуск системного обновления с помощью Python:

sudo /usr/bin/python3 /home/xc_vm/update "/home/xc_vm/tmp/.update.tar.gz" "HASH" > /dev/null 2>&1 &

🐍 4. Системное обновление (Python-уровень)

После вызова передача управления переходит к скрипту:

/home/xc_vm/update

Он выполняет операции на уровне системы:

  1. Повторная проверка контрольной суммы архива.

  2. Остановка панели, чтобы избежать конфликтов при обновлении.

  3. Распаковка обновления в каталог:

    /home/xc_vm/
    
  4. Настройка прав доступа:

    chown -R xc_vm:xc_vm /home/xc_vm/
    
  5. Запуск пост-обновления:

    /home/xc_vm/console.php update post-update
    
  6. Перезапуск панели в рабочем режиме.


🔄 5. Завершение обновления

Финальные действия выполняются в фазе post-update команды UpdateCommand:

  1. Проверка, включено ли автообновление LB:

    • Если обновлялся MAIN, создаются сигналы обновления для всех Load Balancer’ов.
  2. Обновление версии панели в базе данных.

  3. Удаление устаревших файлов.

  4. Повторное выравнивание прав:

    chown -R xc_vm:xc_vm /home/xc_vm/
    
  5. Перезагрузка системных демонов:

    sudo systemctl daemon-reload
    
  6. Проверка статуса панели:

    sudo /home/xc_vm/console.php status
    
  7. Завершение процесса обновления.


✅ 6. Итоговая схема работы

[ Веб-интерфейс ]
        │
        ▼
[ БД: сигнал update ]
        │
        ▼
[ CRON → console.php cron:root_signals ]
        │
        ▼
[ update.php (PHP) ]
        │
        ▼
[ update (Python) ]
        │
        ▼
[ post-update → update.php ]
        │
        ▼
[ Завершение, рестарт демонов, обновление версии ]

🧩 Ключевые особенности

  • 🔒 Двойная проверка целостности (на уровне PHP и Python).
  • 🧠 Автоматическое распространение обновлений между MAIN и LB.
  • 🧹 Очистка устаревших файлов и выравнивание прав доступа.
  • 🔄 Безопасный перезапуск панели после установки.
  • ⚙️ Гибкость и автономность за счёт CRON и сигналов.