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

168 lines
6.9 KiB
Markdown

# Механизм обновлений в XC_VM
Система обновлений XC_VM реализована как многоуровневый процесс: от веб-интерфейса до системных скриптов. Такой подход обеспечивает надёжность, автоматизацию и целостность данных при обновлении панели.
> 📋 Пошаговая инструкция со скриншотами — на странице [Обновление сервера](ru-ru/administration/server-update.md).
---
## 1. Инициация обновления
Процесс начинается с **нажатия кнопки "Обновить"** в веб-интерфейсе панели.
* Создаётся сигнал `update`, который записывается в таблицу `signals` базы данных.
* Этот сигнал выступает **триггером**, запускающим дальнейший процесс обновления.
---
## 2. Запуск через CRON
Каждую **минуту** выполняется системное задание CRON:
```bash
/home/xc_vm/console.php cron:root_signals
```
Крон-задача `root_signals` проверяет наличие новых сигналов и при обнаружении `update` запускает:
```bash
/home/xc_vm/console.php update update
```
> ⚙️ Этот механизм позволяет выполнять обновления **автоматически**, без ручного вмешательства администратора.
---
## 3. Управление обновлением (PHP-уровень)
Основная логика находится в классе `UpdateCommand`:
```
src/Cli/Commands/UpdateCommand.php
```
На этом этапе выполняются следующие действия:
1. Определение **текущей версии панели** (`MAIN` или `LB`).
2. Получение данных о новой версии с **GitHub**:
* Ссылка на архив обновления.
* Контрольная сумма (хеш) для проверки целостности.
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`, который запускает [миграции базы данных](ru-ru/guides/cli-tools.md#обновление-бд-после-обновления-версии) и post-update очистку.
---
## 4. Системное обновление (Python-уровень)
После вызова передача управления переходит к скрипту:
```
/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`, создаются сигналы обновления для всех Load Balancer’ов.
2. Обновление **версии панели** в базе данных.
3. Удаление устаревших файлов.
4. Повторное выравнивание прав:
```bash
chown -R xc_vm:xc_vm /home/xc_vm/
```
5. Перезагрузка системных демонов:
```bash
sudo systemctl daemon-reload
```
6. Проверка статуса панели:
```bash
sudo /home/xc_vm/console.php status
```
7. Завершение процесса обновления.
---
## 6. Итоговая схема работы
```text
[ Веб-интерфейс ]
│
▼
[ БД: сигнал update ]
│
▼
[ CRON → console.php cron:root_signals ]
│
▼
[ UpdateCommand (PHP): скачивание + проверка хеша ]
│
▼
[ update (Python): распаковка в /tmp → удаление исключённых → копирование ]
│
▼
[ post-update → UpdateCommand ]
│
▼
[ Завершение, рестарт демонов, обновление версии ]
```
---
## Ключевые особенности
* 🔒 **Двойная проверка целостности** (на уровне PHP и Python).
* 🧠 **Автоматическое распространение обновлений** между MAIN и LB.
* 🧹 **Очистка устаревших файлов** и выравнивание прав доступа.
* 🔄 **Безопасный перезапуск панели** после установки.
* ⚙️ **Гибкость и автономность** за счёт CRON и сигналов.
---