Files
XC_VM/docs/ru/administration/update-system.md
T
Divarion-D 56dc05a537 docs: fix broken cli-tools links (development/ -> guides/, dead anchors)
update-system.md and faq.md (ru+en) linked to <lang>/development/cli-tools.md,
but the file lives at <lang>/guides/cli-tools.md (as the sidebar already points) —
the old path rendered an empty docsify page. Also repoint two non-existent anchors
(#миграции-базы-данных, #database-migrations) to the real section
(#обновление-бд-после-обновления-версии / #database-updates-after-version-upgrade).
2026-07-08 20:45:28 +03:00

6.9 KiB
Raw Blame History

Механизм обновлений в 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 &

💡 После завершения Python-обновления вызывается console.php update post-update, который запускает миграции базы данных и post-update очистку.


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

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

/home/xc_vm/update

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

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

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

  3. Распаковка архива во временную директорию:

    /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. Копирование оставшихся файлов поверх рабочей установки:

    cp -a /tmp/xc_vm_update_*/. /home/xc_vm/
    
  6. Настройка прав доступа:

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

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

  9. Очистка временной директории и удаление архива.

ℹ️ Один и тот же архив используется для установки и обновления. Фильтрация происходит на сервере во время обновления — список исключаемых каталогов задан непосредственно в src/update.


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 ]
        │
        ▼
[ UpdateCommand (PHP): скачивание + проверка хеша ]
        │
        ▼
[ update (Python): распаковка в /tmp → удаление исключённых → копирование ]
        │
        ▼
[ post-update → UpdateCommand ]
        │
        ▼
[ Завершение, рестарт демонов, обновление версии ]

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

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