Files
umbrix/update-server/DOCKER_STORAGE.md
Umbrix Developer 76a374950f 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
2026-01-17 13:09:20 +03:00

7.7 KiB
Raw Permalink Blame History

🐳 Хранение 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:

При 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):

  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, и т.д.