336 lines
11 KiB
Markdown
336 lines
11 KiB
Markdown
|
|
# 🚀 Umbrix Update Server - Инструкция
|
|||
|
|
|
|||
|
|
## 📋 Обзор
|
|||
|
|
|
|||
|
|
Umbrix использует систему автообновлений через **Sparkle Appcast XML**. Приложение проверяет файл `appcast.xml` на вашем сервере и уведомляет пользователей о новых версиях.
|
|||
|
|
|
|||
|
|
## 🏗️ Структура системы обновлений
|
|||
|
|
|
|||
|
|
### 1. **appcast.xml** - Манифест обновлений
|
|||
|
|
Находится: `/home/vodorod/dorod/hiddify-umbrix-v1.7.0/appcast.xml`
|
|||
|
|
|
|||
|
|
```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`
|
|||
|
|
|
|||
|
|
```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: Собрать новую версию
|
|||
|
|
```bash
|
|||
|
|
cd ~/dorod/hiddify-umbrix-v1.7.0
|
|||
|
|
./build-all-packages.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Шаг 2: Скопировать файлы на сервер
|
|||
|
|
```bash
|
|||
|
|
# Создать папку для версии
|
|||
|
|
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`:
|
|||
|
|
|
|||
|
|
```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 на сервер
|
|||
|
|
```bash
|
|||
|
|
cp appcast.xml /home/vodorod/update-server/api/appcast.xml
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🌐 Запуск локального сервера
|
|||
|
|
|
|||
|
|
### Вариант 1: Python HTTP сервер (простой)
|
|||
|
|
```bash
|
|||
|
|
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 (продакшн)
|
|||
|
|
```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 обязателен**:
|
|||
|
|
```dart
|
|||
|
|
static const appCastUrl = "https://updates.umbrix.net/appcast.xml";
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **Подписывание обновлений** (Sparkle поддерживает):
|
|||
|
|
```bash
|
|||
|
|
# Генерация ключей
|
|||
|
|
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
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **Добавить signature в appcast.xml**:
|
|||
|
|
```xml
|
|||
|
|
<enclosure
|
|||
|
|
url="https://updates.umbrix.net/downloads/umbrix-2.5.8-linux.deb"
|
|||
|
|
sparkle:dsaSignature="MC0CFQCqfTq..." />
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🧪 Тестирование
|
|||
|
|
|
|||
|
|
### 1. Проверить доступность appcast.xml
|
|||
|
|
```bash
|
|||
|
|
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
|
|||
|
|
```bash
|
|||
|
|
tail -f /var/log/nginx/access.log | grep "/downloads/"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Вариант 2: Python скрипт с логированием
|
|||
|
|
```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
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **Изменить в коде**:
|
|||
|
|
```dart
|
|||
|
|
static const appCastUrl = "https://updates.umbrix.net/appcast.xml";
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **Пересобрать и выпустить обновление**:
|
|||
|
|
```bash
|
|||
|
|
./build-all-packages.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
5. **Все последующие версии** будут проверять новый домен
|
|||
|
|
|
|||
|
|
## ❓ 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
|
|||
|
|
<?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>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎯 Готово!
|
|||
|
|
|
|||
|
|
Теперь система обновлений полностью настроена и готова к использованию!
|