- 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
7.7 KiB
7.7 KiB
🐳 Хранение APK файлов в Docker контейнере
📋 Проблема
При размещении update-server в Docker контейнере, нужно решить где хранить APK файлы (обычно 50-100 MB каждый).
✅ Решение: Docker Volume
Вариант 1: Named Volume (Рекомендуется)
docker-compose.yml:
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:
# 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:
services:
update-server:
volumes:
- ./update-server:/var/www
# Downloads доступны локально
- ./downloads:/var/www/downloads
Преимущества:
- ✅ Прямой доступ с хоста
- ✅ Удобно для разработки
- ✅ Можно редактировать напрямую
Недостатки:
- ⚠️ Нужно следить за правами доступа
- ⚠️ Файлы привязаны к хосту
Загрузка:
# Просто скопируйте файл
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:
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:
{
"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:
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. Запустите:
docker-compose up -d
3. Загрузите APK:
# Соберите
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:
// Ваш сервер обновлений
static const useCustomUpdateServer = true; // ← ДОЛЖНО БЫТЬ true
// URL вашего сервера
static const customUpdateServerUrl = "https://api.umbrix.net/api.php";
Что проверить:
# 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:
- ✅ Обращается к вашему серверу
- ✅ Видит только ваши обновления
- ✅ Полный контроль
🎯 Рекомендации
Для локальной разработки:
# Используйте PHP встроенный сервер
cd update-server && php -S localhost:8000
Для тестирования в Docker:
# Named Volume
docker-compose up -d
Для продакшена:
# 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:
# 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:
# Просто архивируйте
tar czf downloads-backup.tar.gz downloads/
💡 Итого
Для вас (Umbrix):
- ✅ Используйте Named Volume в Docker
- ✅
useCustomUpdateServer = trueуже установлено - ✅ Загружайте APK через
docker cp - ✅ Управляйте через веб-панель http://localhost:8000/admin/
- ✅ НЕ будет конфликта с оригинальным Hiddify!
Версии теперь логичные:
- Текущая: 1.7.0 dev
- Доступна: 1.7.1
- Следующая: 1.7.2, 1.8.0, и т.д.