mirror of
https://github.com/Vateron-Media/XC_VM.git
synced 2026-10-28 03:03:18 +01:00
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.
172 lines
7.0 KiB
Markdown
172 lines
7.0 KiB
Markdown
# Механизм обновления в 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 +.
|
||
|
||
---
|