English Version | Русская Версия
[1.22.2] - 2026-04-18
✨ Улучшено:
- Uptime / Бот: Модуль
uptimeпереработан по аналогии с нодами. Теперь отображает полный отчёт из 7 полей: Текущий аптайм ОС, Последнее падение, Последняя перезагрузка, Общее время работы, Время простоя, Простой по интернету, Физическая недоступность. - Uptime / Бекенд: Добавлено накопление
total_online_secondsиtotal_internet_downtime_secondsв циклеagent_monitor, персистентное сохранение в БД каждые 60 секунд и восстановление при запуске черезload_agent_availability_asyncвbot.py. - WebUI / Dashboard: Хинт карточки «Аптайм» на главной странице переработан в полный 7-польный отчёт по аналогии с нодами; добавлена функция
formatDuration. - WebUI / Мониторинг нод: Юзайт аптайм-попапа доработан до полной локализации через
I18N-ключи; строка статуса удалена из всех попапов аптайма. - Ноды / Аптайм: Переработан учёт доступности нод. Сервер теперь накапливает общее время работы и простоя, фиксирует время последнего падения и последней перезагрузки, а также разделяет сетевой простой и физическую недоступность по данным heartbeat и
boot_time. - Bot / WebUI / Dashboard: Отчёт
Аптайм / Даунтаймвыведен в кнопку ноды, в офлайн-карточку, в мониторинг нод и в dashboard-модалки, чтобы одинаковая детализация была доступна во всех интерфейсах. - Selftest: Внешний IP в selftest теперь выводится как
IPv4 / IPv6, а успешность интернет-проверки определяется по доступности хотя бы одного семейства адресов.
🛡️ Безопасность:
- WAF / WebUI: Устранены ложные срабатывания
403 {"error": "Malicious request detected"}на легитимных запросах авторизации и обновления сервера. - WAF: Сигнатуры
COMMAND_INJECTIONсужены, чтобы обычныеform-urlencodedиJSONзапросы больше не блокировались из-за символов&,;и|в безопасном контексте. - WAF / Ноды: Внутренний доверенный endpoint
/api/heartbeat, через который ноды отправляют heartbeat и диагностические данные, исключён из WAF-проверки, чтобы логи и служебный вывод не вызывали ложные блокировкиSQL_INJECTION/XSS/COMMAND_INJECTION. #68 - WAF: Исправлено экранирование regex-паттернов для
XSSиPATH_TRAVERSAL, чтобы защита детектировала реальные атаки, не ломая нормальную работу WebUI. - ORM / Шифрование: Закрыт fail-open в
EncryptedTextField(core/models.py) — при ошибке шифрования или дешифрования теперь выбрасывается явное исключение вместо записи или возврата открытых данных. - Конфигурация / Ключи: Удалено небезопасное хранение ключа шифрования в
config/security.key; приложение теперь требуетDATA_ENCRYPTION_KEYиз окружения и аварийно завершает запуск при его отсутствии или невалидности. - Логирование: Маскирование токенов, IP-адресов, хешей и идентификаторов в
RedactingFormatterтеперь работает всегда, включая debug-режим; сырой вывод возможен только при явномUNSAFE_LOGGING=true. - Docker / Compose: Удалены опасные настройки
privileged,pid: host,network_mode: host,/:/hostи прямой доступ контейнеров кdocker.sock; доступ к Docker API переведён наTecnativa Docker Socket Proxyс ограниченными правами.
⚙️ Архитектура и инфраструктура:
- SQLite / Event Loop:
core/config.pyпереведён с синхронногоsqlite3наaiosqlite; загрузка и сохранение конфигурации стали асинхронными, а горячие пути бота и WebUI переведены наawaitбезto_thread-обходов. - Deploy:
deploy.shиdeploy_en.shобновлены для миграции legacy-ключа шифрования в.env, генерацииDATA_ENCRYPTION_KEYдля новых установок и генерации безопасногоdocker-compose.yml. - Зависимости: Дополнительно зафиксированы версии ключевых Python-зависимостей для снижения риска supply-chain регрессий и улучшения воспроизводимости сборки.
- CI / Зависимости: Устранён конфликт установки
aiogramиaiohttpв GitHub Actions. Пины вrequirements.txtприведены к совместимому и безопасному набору, поэтомуpip install -r requirements.txtи проверкиsafetyбольше не должны падать наResolutionImpossibleи устаревших уязвимых версиях.
🔧 Исправлено:
- Ноды / Уведомления: Дедупликация
alert_agent_down/alert_agent_recoveredвnode/node.pyусилена до уровня состояния инцидента. Теперь нода отправляет только одинdownна активный сбой и только одинrecoveryпосле его подтверждённого завершения, даже при флапающем соединении, рестарте процесса или гонке между параллельными экземплярами. - Ноды / Логи: Шумные повторяющиеся записи
Agent detected as unreachableубраны, а HTML-тело ответов502от Cloudflare в логах ноды сокращено до короткого summary вместо полного дампа страницы ошибки. - Конфигурация / Линтер: Исправлена ошибка
F824вcore/config.py— удалено лишнее объявлениеglobalвload_system_config_async(), которое ломало шаг проверки Python-кода в CI.
Full Changelog: 1.22.1...1.22.2