Files
XC_VM/docs/ru/administration/update-system.md
T
Divarion_D dbf535bcc5 docs(translate): robust {N} sentinels + possessive handling; regenerate ru
Fix Markdown-mangling artifacts the free web engine (yandex) produced in the
committed docs/ru, and regenerate the whole tree cleanly (0 fallbacks):

- Sentinel format @@N@@ -> {N}. MT engines are trained to preserve curly
  format-string placeholders, so {N} survives code-heavy lines where @@N@@ (and
  ZZZ…ZZZ, which also duplicated its Z) were split/moved — e.g. the stray
  "@0@@" in the FAQ and "load balancerZ" in the README are gone.
- Possessive: a trailing English `'s` is consumed INTO the masked span and
  dropped on restore. Every sentinel format breaks when a bare `'s` sits right
  after it, and Russian has no possessive `'s`.
- Validate + retry: after restore, any leftover brace fragment triggers a retry
  (the engine is non-deterministic); after a few failures the line stays English
  so a broken token is never emitted.
- Glossary += KeyDB, yt-dlp, Ubuntu, iptables, MAGSCAN.

Regenerated docs/ru (37 files, translators/yandex): no residual sentinels,
mkdocs build --strict clean.
2026-08-21 16:31:01 +03:00

7.0 KiB
Raw Blame History

Механизм обновления в XC_VM

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

📋 Пошаговое руководство со скриншотами см. в разделе Обновление сервера.


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

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

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

2. Триггер CRON

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

/home/xc_vm/console.php cron:root_signals

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

/home/xc_vm/console.php update update

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

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

src/Cli/Commands/UpdateCommand.php

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

  1. Определите текущий тип панели (MAIN или LB).
  2. Извлекать обновленные метаданные из GitHub:
    • Прямая ссылка на архив обновлений.
    • Контрольная сумма SHA для проверки целостности.
  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, что запускает миграцию базы данных и очистку после обновления.


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

Управление передается скрипту на 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

  1. Скопируйте оставшиеся файлы поверх текущей установки:

    cp -a /tmp/xc_vm_update_*/. /home/xc_vm/
    
  2. Закрепить право собственности:

    chown -R xc_vm:xc_vm /home/xc_vm/
    
  3. Выполнение задач после обновления:

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

  5. **Очистите временный каталог и удалите архив.

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


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

Заключительные шаги выполняются на этапе post-update из UpdateCommand:

  1. Если включено автоматическое обновление LB и был обновлен главный узел (MAIN) → создайте сигналы update для всех подсистем балансировки нагрузки.

  2. Обновите версию панели в базе данных.

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

  4. Повторно примените правильные разрешения:

    chown -R xc_vm:xc_vm /home/xc_vm/
    
  5. Перезагрузить systemd демонов:

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

    sudo /home/xc_vm/console.php status
    
  7. Отметьте процесс обновления как завершенный.


6. Полная схема рабочего процесса

[ Web Interface ]
        │
        ▼
[ DB: "update" signal ]
        │
        ▼
[ CRON → console.php cron:root_signals ]
        │
        ▼
[ UpdateCommand (PHP): download + verify hash ]
        │
        ▼
[ update (Python): extract to /tmp → remove excluded → copy over ]
        │
        ▼
[ post-update → UpdateCommand ]
        │
        ▼
[ Finalize, restart daemons, update version in DB ]

ключевые функции

  • **Двойная проверка целостности ** (хэш проверяется как на уровне PHP, так и на уровне Python).
  • **Автоматическое распространение обновлений с MAIN на все подсистемы балансировки нагрузки.
  • **Очистка ** от устаревших файлов и нормализация разрешений.
  • **Перезапуск безопасной панели ** после установки.
  • **Гибкость и автономность ** благодаря запуску по сигналу CRON +.