11 KiB
🚀 Umbrix Update Server - Инструкция
📋 Обзор
Umbrix использует систему автообновлений через Sparkle Appcast XML. Приложение проверяет файл appcast.xml на вашем сервере и уведомляет пользователей о новых версиях.
🏗️ Структура системы обновлений
1. appcast.xml - Манифест обновлений
Находится: /home/vodorod/dorod/hiddify-umbrix-v1.7.0/appcast.xml
<item>
<title>Umbrix 2.5.8</title>
<description>🚀 Новые функции...</description>
<pubDate>Sat, 18 Jan 2026 06:00:00 +0000</pubDate>
<sparkle:version>2.5.8</sparkle:version>
<!-- Linux DEB -->
<enclosure
url="http://localhost:8000/downloads/umbrix-2.5.8-linux.deb"
sparkle:version="2.5.8"
sparkle:os="linux-deb"
type="application/x-debian-package" />
</item>
2. Настройки в коде
Файл: lib/core/model/constants.dart
// URL вашего сервера appcast.xml
static const appCastUrl = "http://localhost:8000/api/appcast.xml";
// Для публичного домена:
// static const appCastUrl = "https://updates.umbrix.net/appcast.xml";
📂 Структура веб-сервера
/home/vodorod/update-server/
├── api/
│ └── appcast.xml # Копия из проекта
├── downloads/ # Файлы обновлений
│ ├── umbrix-2.5.8-linux.deb
│ ├── umbrix-2.5.8-linux.rpm
│ ├── umbrix-2.5.8-linux.AppImage
│ └── umbrix-2.5.8-windows.exe
└── admin/ # Ваш Update Manager (localhost:8000/admin/)
└── index.html
🔄 Процесс публикации обновления
Шаг 1: Собрать новую версию
cd ~/dorod/hiddify-umbrix-v1.7.0
./build-all-packages.sh
Шаг 2: Скопировать файлы на сервер
# Создать папку для версии
mkdir -p /home/vodorod/update-server/downloads/
# Скопировать пакеты
cp dist/2.5.8+258/umbrix-2.5.8+258-linux.deb \
/home/vodorod/update-server/downloads/umbrix-2.5.8-linux.deb
cp dist/2.5.8+258/umbrix-2.5.8+258-linux.rpm \
/home/vodorod/update-server/downloads/umbrix-2.5.8-linux.rpm
cp dist/2.5.8+258/umbrix-2.5.8+258-linux.AppImage \
/home/vodorod/update-server/downloads/umbrix-2.5.8-linux.AppImage
Шаг 3: Обновить appcast.xml
Раскомментируйте и измените секцию в appcast.xml:
<item>
<title>Umbrix 2.5.8</title>
<description>🚀 Новые функции:
- Улучшена стабильность
- Исправлены ошибки</description>
<pubDate>Sat, 18 Jan 2026 06:00:00 +0000</pubDate>
<sparkle:version>2.5.8</sparkle:version>
<sparkle:shortVersionString>2.5.8</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>2.0.0</sparkle:minimumSystemVersion>
<!-- Linux DEB (Debian/Ubuntu) -->
<enclosure
url="http://localhost:8000/downloads/umbrix-2.5.8-linux.deb"
sparkle:version="2.5.8"
sparkle:os="linux-deb"
type="application/x-debian-package"
length="30000000" />
<!-- Linux RPM (Fedora/CentOS) -->
<enclosure
url="http://localhost:8000/downloads/umbrix-2.5.8-linux.rpm"
sparkle:version="2.5.8"
sparkle:os="linux-rpm"
type="application/x-rpm"
length="36000000" />
<!-- Linux AppImage (Universal) -->
<enclosure
url="http://localhost:8000/downloads/umbrix-2.5.8-linux.AppImage"
sparkle:version="2.5.8"
sparkle:os="linux-appimage"
type="application/x-appimage"
length="38000000" />
</item>
Шаг 4: Скопировать appcast.xml на сервер
cp appcast.xml /home/vodorod/update-server/api/appcast.xml
🌐 Запуск локального сервера
Вариант 1: Python HTTP сервер (простой)
cd /home/vodorod/update-server
python3 -m http.server 8000
Доступ:
- Appcast:
http://localhost:8000/api/appcast.xml - Скачивания:
http://localhost:8000/downloads/ - Admin:
http://localhost:8000/admin/
Вариант 2: Nginx (продакшн)
server {
listen 8000;
server_name localhost;
root /home/vodorod/update-server;
location /api/appcast.xml {
add_header Content-Type application/xml;
add_header Access-Control-Allow-Origin *;
}
location /downloads/ {
autoindex on;
}
}
📱 Про поле "URL для скачивания APK" в веб-интерфейсе
ВАЖНО: Это поле осталось от оригинального Hiddify (Android приложение). Для Umbrix Linux десктоп оно НЕ используется.
Umbrix для Linux использует:
- ✅ DEB пакеты (Debian/Ubuntu)
- ✅ RPM пакеты (Fedora/CentOS)
- ✅ AppImage (универсальный формат)
Поле "APK" в веб-интерфейсе можно:
- Игнорировать (оставить пустым)
- Переименовать в "URL для скачивания DEB/RPM/AppImage"
- Удалить из веб-интерфейса
🔐 Безопасность
Для продакшн (публичный домен):
- HTTPS обязателен:
static const appCastUrl = "https://updates.umbrix.net/appcast.xml";
- Подписывание обновлений (Sparkle поддерживает):
# Генерация ключей
openssl genrsa -out private_key.pem 2048
openssl rsa -in private_key.pem -pubout > public_key.pem
# Подпись файла
openssl dgst -sha256 -sign private_key.pem \
umbrix-2.5.8-linux.deb > signature.txt
- Добавить signature в appcast.xml:
<enclosure
url="https://updates.umbrix.net/downloads/umbrix-2.5.8-linux.deb"
sparkle:dsaSignature="MC0CFQCqfTq..." />
🧪 Тестирование
1. Проверить доступность appcast.xml
curl http://localhost:8000/api/appcast.xml
2. Проверить в приложении
- Запустить Umbrix
- Зайти в Настройки → Проверить обновления
- Приложение скачает appcast.xml и покажет уведомление о новой версии
3. Логи отладки
В коде установлен _debugUpgrader = true, логи будут в консоли:
[UPGRADER] Checking appcast: http://localhost:8000/api/appcast.xml
[UPGRADER] Current version: 1.7.0
[UPGRADER] Latest version: 2.5.8
[UPGRADER] Update available!
📊 Мониторинг скачиваний
Вариант 1: Nginx access.log
tail -f /var/log/nginx/access.log | grep "/downloads/"
Вариант 2: Python скрипт с логированием
from http.server import HTTPServer, SimpleHTTPRequestHandler
import datetime
class LoggingHandler(SimpleHTTPRequestHandler):
def log_message(self, format, *args):
print(f"[{datetime.datetime.now()}] {args[0]}")
HTTPServer(('', 8000), LoggingHandler).serve_forever()
🚀 Миграция на публичный домен
Когда будете готовы к продакшну:
-
Купить домен:
updates.umbrix.net -
Настроить DNS:
A updates.umbrix.net → 123.45.67.89
- Изменить в коде:
static const appCastUrl = "https://updates.umbrix.net/appcast.xml";
- Пересобрать и выпустить обновление:
./build-all-packages.sh
- Все последующие версии будут проверять новый домен
❓ FAQ
Q: Как часто приложение проверяет обновления?
A: Раз в 12 часов (настройка durationUntilAlertAgain)
Q: Можно ли принудительно проверить обновления?
A: Да, через меню "Настройки → Проверить обновления"
Q: Что делать, если обновление не находится?
A: Проверьте:
- Доступен ли
appcast.xmlпо URL - Версия в
<sparkle:version>больше текущей - Логи отладки в консоли приложения
Q: Как откатить обновление?
A: Удалите или закомментируйте <item> новой версии в appcast.xml
📝 Пример полного appcast.xml
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle">
<channel>
<title>Umbrix Updates</title>
<description>Umbrix VPN автообновления</description>
<link>http://localhost:8000</link>
<language>ru</language>
<!-- Новая версия 2.5.8 -->
<item>
<title>Umbrix 2.5.8</title>
<description>🚀 Новые функции:
- Улучшена стабильность
- Исправлены ошибки
- Добавлена поддержка новых протоколов</description>
<pubDate>Sat, 18 Jan 2026 06:00:00 +0000</pubDate>
<sparkle:version>2.5.8</sparkle:version>
<sparkle:shortVersionString>2.5.8</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>2.0.0</sparkle:minimumSystemVersion>
<enclosure
url="http://localhost:8000/downloads/umbrix-2.5.8-linux.deb"
sparkle:version="2.5.8"
sparkle:os="linux-deb"
type="application/x-debian-package"
length="30000000" />
<enclosure
url="http://localhost:8000/downloads/umbrix-2.5.8-linux.rpm"
sparkle:version="2.5.8"
sparkle:os="linux-rpm"
type="application/x-rpm"
length="36000000" />
<enclosure
url="http://localhost:8000/downloads/umbrix-2.5.8-linux.AppImage"
sparkle:version="2.5.8"
sparkle:os="linux-appimage"
type="application/x-appimage"
length="38000000" />
</item>
<!-- Текущая версия 1.7.0 -->
<item>
<title>Umbrix 1.7.0</title>
<description>Стабильный релиз</description>
<pubDate>Fri, 17 Jan 2026 08:49:07 +0000</pubDate>
<sparkle:version>1.7.0</sparkle:version>
<sparkle:shortVersionString>1.7.0</sparkle:shortVersionString>
</item>
</channel>
</rss>
🎯 Готово!
Теперь система обновлений полностью настроена и готова к использованию!