Files
umbrix/update-server/DOCKER_STORAGE.md

300 lines
7.7 KiB
Markdown
Raw Permalink Normal View History

# 🐳 Хранение 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**, и т.д.