Files
XC_VM/docs/ru/administration/update-system.md
T
Divarion-D d9bbd6c35b build: unify install and update into a single archive
Replace separate install/update build targets with a single archive that
serves both purposes. The update script (src/update) now extracts to a
temp directory, removes excluded dirs (binaries, config, user data), and
copies remaining files over the live installation.

Changes:
- Remove main_update, lb_update, lb_update_copy_files,
  main_update_copy_files Makefile targets and UPDATE_EXCLUDE_DIRS var
- Move exclude dirs list into src/update (Python) where filtering
  actually happens at runtime
- Rewrite doUpdate() to use tempdir extraction with try/finally cleanup
- Make delete_files_list/lb_delete_files_list gracefully skip when
  LAST_TAG is empty (warn instead of error)
- Simplify CI workflows: one make command per variant instead of
  conditional install + update steps
- Add ARCHITECTURE.md §5.5 documenting update flow
- Update en/ru docs: update-system.md, updates_checklist.md
- Update makefile-build.instructions.md with new targets
2026-04-12 17:38:35 +03:00

7.3 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 &

🐍 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 и сигналов.