feat: mobile-like window size and always-visible stats
- 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
This commit is contained in:
299
update-server/DOCKER_STORAGE.md
Normal file
299
update-server/DOCKER_STORAGE.md
Normal file
@@ -0,0 +1,299 @@
|
||||
# 🐳 Хранение 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**, и т.д.
|
||||
Reference in New Issue
Block a user