- Changed window size to mobile phone format (400x800) - Removed width condition for ActiveProxyFooter - now always visible - Added run-umbrix.sh launch script with icon copying - Stats cards now display on all screen sizes
300 lines
7.7 KiB
Markdown
300 lines
7.7 KiB
Markdown
# 🐳 Хранение APK файлов в Docker контейнере
|
||
|
||
## 📋 Проблема
|
||
|
||
При размещении update-server в Docker контейнере, нужно решить где хранить APK файлы (обычно 50-100 MB каждый).
|
||
|
||
## ✅ Решение: Docker Volume
|
||
|
||
### Вариант 1: Named Volume (Рекомендуется)
|
||
|
||
**docker-compose.yml:**
|
||
```yaml
|
||
version: '3.8'
|
||
|
||
services:
|
||
update-server:
|
||
image: php:8.3-cli
|
||
container_name: umbrix-update-server
|
||
working_dir: /var/www
|
||
command: php -S 0.0.0.0:8000
|
||
ports:
|
||
- "8000:8000"
|
||
volumes:
|
||
# Код сервера (read-only)
|
||
- ./update-server:/var/www:ro
|
||
# Файлы обновлений (read-write)
|
||
- umbrix-downloads:/var/www/downloads
|
||
# Логи (read-write)
|
||
- umbrix-logs:/var/www/logs
|
||
restart: unless-stopped
|
||
|
||
volumes:
|
||
umbrix-downloads:
|
||
driver: local
|
||
umbrix-logs:
|
||
driver: local
|
||
```
|
||
|
||
**Преимущества:**
|
||
- ✅ Файлы сохраняются при пересоздании контейнера
|
||
- ✅ Легко делать backup: `docker cp`
|
||
- ✅ Данные изолированы от кода
|
||
|
||
**Как загружать APK:**
|
||
```bash
|
||
# 1. Соберите APK
|
||
flutter build apk --release
|
||
|
||
# 2. Скопируйте в volume
|
||
docker cp build/app/outputs/flutter-apk/app-release.apk \
|
||
umbrix-update-server:/var/www/downloads/android/umbrix-1.7.1.apk
|
||
|
||
# 3. Обновите latest.json через веб-панель
|
||
# http://your-server:8000/admin/
|
||
```
|
||
|
||
---
|
||
|
||
### Вариант 2: Bind Mount (Для разработки)
|
||
|
||
**docker-compose.yml:**
|
||
```yaml
|
||
services:
|
||
update-server:
|
||
volumes:
|
||
- ./update-server:/var/www
|
||
# Downloads доступны локально
|
||
- ./downloads:/var/www/downloads
|
||
```
|
||
|
||
**Преимущества:**
|
||
- ✅ Прямой доступ с хоста
|
||
- ✅ Удобно для разработки
|
||
- ✅ Можно редактировать напрямую
|
||
|
||
**Недостатки:**
|
||
- ⚠️ Нужно следить за правами доступа
|
||
- ⚠️ Файлы привязаны к хосту
|
||
|
||
**Загрузка:**
|
||
```bash
|
||
# Просто скопируйте файл
|
||
cp build/app/outputs/flutter-apk/app-release.apk \
|
||
downloads/android/umbrix-1.7.1.apk
|
||
```
|
||
|
||
---
|
||
|
||
### Вариант 3: Внешнее хранилище (Продакшен)
|
||
|
||
Для продакшена лучше использовать CDN или объектное хранилище:
|
||
|
||
**Примеры:**
|
||
- 🌐 **CloudFlare R2** (S3-совместимый, бесплатный)
|
||
- 🌐 **AWS S3** + CloudFront
|
||
- 🌐 **DigitalOcean Spaces**
|
||
- 🌐 **Azure Blob Storage**
|
||
- 🌐 **Backblaze B2**
|
||
|
||
**docker-compose.yml с S3:**
|
||
```yaml
|
||
services:
|
||
update-server:
|
||
environment:
|
||
- STORAGE_TYPE=s3
|
||
- S3_BUCKET=umbrix-updates
|
||
- S3_REGION=eu-central-1
|
||
- AWS_ACCESS_KEY_ID=${AWS_KEY}
|
||
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET}
|
||
```
|
||
|
||
**latest.json:**
|
||
```json
|
||
{
|
||
"download_url": "https://cdn.umbrix.net/downloads/android/umbrix-1.7.1.apk"
|
||
}
|
||
```
|
||
|
||
**Преимущества:**
|
||
- ✅ Быстрая доставка (CDN)
|
||
- ✅ Неограниченное место
|
||
- ✅ Автоматический backup
|
||
- ✅ Не нагружает ваш сервер
|
||
|
||
---
|
||
|
||
## 📊 Сравнение вариантов
|
||
|
||
| Вариант | Разработка | Продакшен | Сложность | Стоимость |
|
||
|---------|-----------|-----------|-----------|-----------|
|
||
| Named Volume | ⭐⭐⭐ | ⭐⭐⭐ | Низкая | Бесплатно |
|
||
| Bind Mount | ⭐⭐⭐⭐⭐ | ⭐⭐ | Низкая | Бесплатно |
|
||
| S3/CDN | ⭐⭐ | ⭐⭐⭐⭐⭐ | Средняя | $5-20/мес |
|
||
|
||
---
|
||
|
||
## 🚀 Быстрый старт (Named Volume)
|
||
|
||
**1. Создайте docker-compose.yml:**
|
||
```bash
|
||
cd /home/vodorod/dorod/hiddify-umbrix-v1.7.0
|
||
cat > docker-compose.yml << 'EOF'
|
||
version: '3.8'
|
||
|
||
services:
|
||
update-server:
|
||
image: php:8.3-cli
|
||
container_name: umbrix-update-server
|
||
working_dir: /var/www
|
||
command: php -S 0.0.0.0:8000
|
||
ports:
|
||
- "8000:8000"
|
||
volumes:
|
||
- ./update-server:/var/www:ro
|
||
- umbrix-downloads:/var/www/downloads
|
||
- umbrix-logs:/var/www/logs
|
||
restart: unless-stopped
|
||
|
||
volumes:
|
||
umbrix-downloads:
|
||
umbrix-logs:
|
||
EOF
|
||
```
|
||
|
||
**2. Запустите:**
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
**3. Загрузите APK:**
|
||
```bash
|
||
# Соберите
|
||
flutter build apk --release
|
||
|
||
# Загрузите в контейнер
|
||
docker cp build/app/outputs/flutter-apk/app-release.apk \
|
||
umbrix-update-server:/var/www/downloads/android/umbrix-1.7.1.apk
|
||
|
||
# Проверьте
|
||
docker exec umbrix-update-server ls -lh /var/www/downloads/android/
|
||
```
|
||
|
||
**4. Обновите latest.json через веб-панель:**
|
||
```
|
||
http://localhost:8000/admin/
|
||
```
|
||
|
||
---
|
||
|
||
## 🔒 Защита от конфликта с оригинальным Hiddify
|
||
|
||
### ✅ Убедитесь что настроено:
|
||
|
||
**lib/core/model/constants.dart:**
|
||
```dart
|
||
// Ваш сервер обновлений
|
||
static const useCustomUpdateServer = true; // ← ДОЛЖНО БЫТЬ true
|
||
|
||
// URL вашего сервера
|
||
static const customUpdateServerUrl = "https://api.umbrix.net/api.php";
|
||
```
|
||
|
||
**Что проверить:**
|
||
```bash
|
||
# 1. Проверьте константы
|
||
grep "useCustomUpdateServer" lib/core/model/constants.dart
|
||
|
||
# 2. Должно вывести:
|
||
# static const useCustomUpdateServer = true;
|
||
```
|
||
|
||
### ⚠️ Если false - приложение будет проверять GitHub!
|
||
|
||
**При `useCustomUpdateServer = false`:**
|
||
- ❌ Обращается к https://api.github.com/repos/hiddify/hiddify-app/releases
|
||
- ❌ Увидит оригинальные обновления Hiddify
|
||
- ❌ Предложит скачать оригинальную версию
|
||
|
||
**При `useCustomUpdateServer = true`:**
|
||
- ✅ Обращается к вашему серверу
|
||
- ✅ Видит только ваши обновления
|
||
- ✅ Полный контроль
|
||
|
||
---
|
||
|
||
## 🎯 Рекомендации
|
||
|
||
### Для локальной разработки:
|
||
```bash
|
||
# Используйте PHP встроенный сервер
|
||
cd update-server && php -S localhost:8000
|
||
```
|
||
|
||
### Для тестирования в Docker:
|
||
```bash
|
||
# Named Volume
|
||
docker-compose up -d
|
||
```
|
||
|
||
### Для продакшена:
|
||
```yaml
|
||
# docker-compose.yml
|
||
services:
|
||
update-server:
|
||
image: php:8.3-fpm
|
||
volumes:
|
||
- ./update-server:/var/www
|
||
- umbrix-downloads:/var/www/downloads
|
||
|
||
nginx:
|
||
image: nginx:alpine
|
||
ports:
|
||
- "443:443"
|
||
volumes:
|
||
- ./nginx.conf:/etc/nginx/nginx.conf
|
||
- umbrix-downloads:/var/www/downloads:ro
|
||
- ./ssl:/etc/nginx/ssl
|
||
```
|
||
|
||
---
|
||
|
||
## 📦 Backup файлов обновлений
|
||
|
||
### Из Named Volume:
|
||
```bash
|
||
# Backup
|
||
docker run --rm \
|
||
-v umbrix-downloads:/data \
|
||
-v $(pwd):/backup \
|
||
alpine tar czf /backup/downloads-backup.tar.gz /data
|
||
|
||
# Restore
|
||
docker run --rm \
|
||
-v umbrix-downloads:/data \
|
||
-v $(pwd):/backup \
|
||
alpine tar xzf /backup/downloads-backup.tar.gz -C /
|
||
```
|
||
|
||
### Из Bind Mount:
|
||
```bash
|
||
# Просто архивируйте
|
||
tar czf downloads-backup.tar.gz downloads/
|
||
```
|
||
|
||
---
|
||
|
||
## 💡 Итого
|
||
|
||
**Для вас (Umbrix):**
|
||
1. ✅ Используйте **Named Volume** в Docker
|
||
2. ✅ `useCustomUpdateServer = true` уже установлено
|
||
3. ✅ Загружайте APK через `docker cp`
|
||
4. ✅ Управляйте через веб-панель http://localhost:8000/admin/
|
||
5. ✅ **НЕ будет** конфликта с оригинальным Hiddify!
|
||
|
||
**Версии теперь логичные:**
|
||
- Текущая: **1.7.0 dev**
|
||
- Доступна: **1.7.1**
|
||
- Следующая: **1.7.2**, **1.8.0**, и т.д.
|