Files
umbrix/UPDATE_SERVER_README.md
Umbrix Developer e79b508531
Some checks failed
Release / build-release (push) Waiting to run
CI / run (push) Has been cancelled
feat: enable update system with localhost:8000 server
2026-01-18 06:56:35 +03:00

11 KiB
Raw Permalink Blame History

🚀 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" в веб-интерфейсе можно:

  1. Игнорировать (оставить пустым)
  2. Переименовать в "URL для скачивания DEB/RPM/AppImage"
  3. Удалить из веб-интерфейса

🔐 Безопасность

Для продакшн (публичный домен):

  1. HTTPS обязателен:
static const appCastUrl = "https://updates.umbrix.net/appcast.xml";
  1. Подписывание обновлений (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
  1. Добавить 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()

🚀 Миграция на публичный домен

Когда будете готовы к продакшну:

  1. Купить домен: updates.umbrix.net

  2. Настроить DNS:

A updates.umbrix.net → 123.45.67.89
  1. Изменить в коде:
static const appCastUrl = "https://updates.umbrix.net/appcast.xml";
  1. Пересобрать и выпустить обновление:
./build-all-packages.sh
  1. Все последующие версии будут проверять новый домен

FAQ

Q: Как часто приложение проверяет обновления?

A: Раз в 12 часов (настройка durationUntilAlertAgain)

Q: Можно ли принудительно проверить обновления?

A: Да, через меню "Настройки → Проверить обновления"

Q: Что делать, если обновление не находится?

A: Проверьте:

  1. Доступен ли appcast.xml по URL
  2. Версия в <sparkle:version> больше текущей
  3. Логи отладки в консоли приложения

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>

🎯 Готово!

Теперь система обновлений полностью настроена и готова к использованию!