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

336 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚀 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>
```
## 🎯 Готово!
Теперь система обновлений полностью настроена и готова к использованию!