mirror of
https://github.com/Vateron-Media/XC_VM.git
synced 2026-10-05 12:02:27 +02:00
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).
168 lines
6.9 KiB
Markdown
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 и сигналов.
|
|
|
|
--- |