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

172 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Механизм обновления в XC_VM
Система обновления XC_VM реализована как многоуровневый процесс, от веб-интерфейса до сценариев системного уровня. Такой подход обеспечивает надежность, автоматизацию и целостность данных при обновлении панели.
> 📋 Пошаговое руководство со скриншотами см. в разделе [Обновление сервера](../administration/server-update.md).
---
## 1. Инициирование обновления
Процесс начинается, когда администратор нажимает кнопку "Обновить" в веб-интерфейсе.
- Сигнал с именем `update` вставляется в таблицу `signals` в базе данных.
- Этот сигнал действует как **триггер** для всей процедуры обновления.
---
## 2. Триггер CRON
Каждую **минуту** выполняется следующее задание CRON:
```bash
/home/xc_vm/console.php cron:root_signals
```
Задание cron `root_signals` проверяет наличие новых сигналов.
Когда он обнаруживает сигнал `update`, он запускает:
```bash
/home/xc_vm/console.php update update
```
---
## 3. Управление обновлениями (уровеньPHP)
Основная логика находится в классе `UpdateCommand`:
```text
src/Cli/Commands/UpdateCommand.php
```
На этом этапе выполняются следующие действия:
1. Определите **текущий тип панели** (`MAIN` или `LB`).
2. Извлекать обновленные метаданные из **GitHub**:
- Прямая ссылка на архив обновлений.
- Контрольная сумма SHA для проверки целостности.
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`, что запускает [миграцию базы данных](../guides/cli-tools.md#database-updates-after-version-upgrade) и очистку после обновления.
---
## 4. Обновление на системном уровне (уровень Python)
Управление передается скрипту на Python:
```text
/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`) → создайте сигналы `update` для всех подсистем балансировки нагрузки.
2. Обновите **версию панели** в базе данных.
3. Удалите устаревшие файлы.
4. Повторно примените правильные разрешения:
```bash
chown -R xc_vm:xc_vm /home/xc_vm/
```
5. Перезагрузить systemd демонов:
```bash
sudo systemctl daemon-reload
```
6. Проверка состояния панели:
```bash
sudo /home/xc_vm/console.php status
```
7. Отметьте процесс обновления как завершенный.
---
## 6. Полная схема рабочего процесса
```text
[ 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 +.
---