# 🚀 MY UPLOADER BOT - DOCKER SETUP Полное руководство по развертыванию MY Uploader Bot с использованием Docker ## 📋 Содержание 1. [Локальное тестирование](#локальное-тестирование) 2. [Production развертывание](#production-развертывание) 3. [Архитектура системы](#архитектура-системы) 4. [On-Demand Converter](#on-demand-converter) 5. [Мониторинг и логи](#мониторинг-и-логи) 6. [Безопасность](#безопасность) 7. [Troubleshooting](#troubleshooting) ## 🔧 Локальное тестирование ### Быстрый старт ```bash # 1. Клонирование репозитория git clone cd my-uploader-bot # 2. Создание .env файла cp .env.example .env # Отредактируйте .env файл с локальными настройками # 3. Запуск с Docker Compose docker-compose -f docker-compose.new.yml up -d # 4. Проверка статуса docker-compose -f docker-compose.new.yml ps ``` ### Переменные окружения для локального тестирования Создайте файл `.env` со следующими переменными: ```bash # ============================================================================= # MY UPLOADER BOT - ЛОКАЛЬНЫЕ НАСТРОЙКИ # ============================================================================= # Environment NODE_ENV=development DEBUG=true # Database (PostgreSQL) DATABASE_URL=postgresql://my_user:my_secure_password_123@localhost:5432/my_uploader_db POSTGRES_HOST=localhost POSTGRES_PORT=5432 POSTGRES_DB=my_uploader_db POSTGRES_USER=my_user POSTGRES_PASSWORD=my_secure_password_123 # Redis REDIS_URL=redis://localhost:6379/0 REDIS_HOST=localhost REDIS_PORT=6379 # Security Keys (генерируйте новые для production!) SECRET_KEY=dev_secret_key_change_in_production_123456789 JWT_SECRET=dev_jwt_secret_change_in_production_987654321 ENCRYPTION_KEY=dev_encryption_key_32_chars_long! # MY Network Settings MY_NETWORK_NODE_ID=local-dev-node-$(date +%s) MY_NETWORK_PORT=15100 MY_NETWORK_HOST=0.0.0.0 MY_NETWORK_DOMAIN=localhost MY_NETWORK_SSL_ENABLED=false # API Settings API_HOST=0.0.0.0 API_PORT=15100 API_WORKERS=2 MAX_UPLOAD_SIZE=50MB # Converter Settings (On-Demand) CONVERTER_DOCKER_IMAGE=my-converter:latest CONVERTER_SHARED_PATH=/shared/converter CONVERTER_MAX_PARALLEL=2 CONVERTER_TIMEOUT=300 # Logging LOG_LEVEL=DEBUG LOG_FORMAT=text # Monitoring (опционально) GRAFANA_PASSWORD=admin123 ``` ### Проверка локального развертывания ```bash # Проверка здоровья сервисов curl http://localhost:15100/health curl http://localhost:3000/health # web2-client # Проверка MY Network API curl http://localhost:15100/api/my/bootstrap/config # Проверка converter image docker images | grep my-converter # Просмотр логов docker-compose -f docker-compose.new.yml logs -f app ``` ## 🏭 Production развертывание ### Автоматическое развертывание на пустом сервере **Требования:** - Ubuntu 20.04+ / Debian 11+ / CentOS 8+ - Минимум 2GB RAM, 2 CPU cores, 20GB диска - Root доступ или sudo права - Доменное имя, указывающее на сервер **Одной командой:** ```bash # Скачайте и запустите мастер-скрипт curl -fsSL https://raw.githubusercontent.com/your-org/my-uploader-bot/main/setup_production_server.sh | sudo bash -s -- yourdomain.com ``` ### Ручное развертывание (пошагово) #### 1. Подготовка сервера ```bash # Обновление системы sudo apt update && sudo apt upgrade -y # Установка базовых пакетов sudo apt install -y curl wget git unzip htop nano ufw fail2ban # Создание пользователя для сервиса sudo useradd -m -s /bin/bash service sudo usermod -aG sudo service ``` #### 2. Установка Docker ```bash # Установка Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Установка Docker Compose sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose # Добавление пользователя в группу docker sudo usermod -aG docker service ``` #### 3. Клонирование проекта ```bash # Переключение на пользователя service sudo su - service # Клонирование проекта git clone /home/service/my-uploader-bot cd /home/service/my-uploader-bot # Установка прав доступа chmod +x scripts/*.sh chmod +x *.sh ``` #### 4. Настройка окружения ```bash # Генерация production конфигурации ./scripts/setup_production_env.sh /home/service/my-uploader-bot yourdomain.com # Настройка дополнительных модулей ./scripts/setup_modules.sh /home/service/my-uploader-bot ``` #### 5. Сборка Docker образов ```bash # Сборка основного приложения и converter docker-compose -f docker-compose.production.yml build # Сборка только converter image (для on-demand использования) docker-compose -f docker-compose.production.yml --profile build-only build converter-build ``` #### 6. Настройка Nginx и SSL ```bash # Возврат к root для настройки системных сервисов exit # выход из пользователя service # Установка Nginx и Certbot sudo apt install -y nginx certbot python3-certbot-nginx # Настройка Nginx конфигурации sudo ./scripts/create_nginx_config.sh /home/service/my-uploader-bot yourdomain.com service # Получение SSL сертификата sudo certbot --nginx -d yourdomain.com --non-interactive --agree-tos --email admin@yourdomain.com ``` #### 7. Настройка Firewall ```bash # Базовая настройка UFW sudo ufw default deny incoming sudo ufw default allow outgoing # Разрешение необходимых портов sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp # Включение firewall sudo ufw --force enable ``` #### 8. Создание SystemD сервисов ```bash # Создание сервисов sudo ./scripts/create_systemd_services.sh /home/service/my-uploader-bot service # Запуск сервисов sudo systemctl start my-docker-compose sudo systemctl start my-converter-builder sudo systemctl start my-uploader-bot sudo systemctl start my-network-bootstrap sudo systemctl enable nginx sudo systemctl restart nginx ``` ### Проверка Production развертывания ```bash # Проверка HTTPS доступности curl https://yourdomain.com/health # Проверка MY Network curl https://yourdomain.com/api/my/bootstrap/config # Проверка web2-client curl https://yourdomain.com/web/health # Проверка converter image docker images | grep my-converter # Проверка SSL сертификата openssl s_client -connect yourdomain.com:443 -servername yourdomain.com < /dev/null ``` ## 🏗️ Архитектура системы ```mermaid graph TB Client[👤 Client] --> LB[🌐 Nginx Load Balancer] LB --> App[🚀 MY Uploader Bot
Port: 15100] LB --> Web[💻 Web2 Client
Port: 3000] App --> DB[(🗄️ PostgreSQL
Port: 5432)] App --> Redis[(⚡ Redis
Port: 6379)] App --> MyNet[🌍 MY Network
Bootstrap Node] subgraph "🐳 Docker Network" App Web DB Redis MyNet ConvImg[🖼️ Converter Image
my-converter:latest] end App -.->|On-Demand| ConvContainer1[🔄 Converter Container 1] App -.->|On-Demand| ConvContainer2[🔄 Converter Container 2] App -.->|On-Demand| ConvContainer3[🔄 Converter Container N] ConvImg -.->|Creates| ConvContainer1 ConvImg -.->|Creates| ConvContainer2 ConvImg -.->|Creates| ConvContainer3 ConvContainer1 -.->|Auto-Remove| X1[❌] ConvContainer2 -.->|Auto-Remove| X2[❌] ConvContainer3 -.->|Auto-Remove| X3[❌] subgraph "📊 Monitoring Stack" Prom[📈 Prometheus
Port: 9090] Graf[📊 Grafana
Port: 3001] Loki[📋 Loki
Port: 3100] PT[📝 Promtail] end App --> Prom Web --> Prom PT --> Loki Graf --> Prom Graf --> Loki LB --> Graf ``` ### Компоненты системы | Компонент | Порт | Режим работы | Описание | |-----------|------|-------------|----------| | **MY Uploader Bot** | 15100 | Постоянный | Основное API приложение | | **Web2 Client** | 3000 | Постоянный | Веб интерфейс | | **PostgreSQL** | 5432 | Постоянный | Основная база данных | | **Redis** | 6379 | Постоянный | Кеширование и очереди | | **Nginx** | 80/443 | Постоянный | Reverse proxy + SSL | | **Converter Module** | - | **On-Demand** | 🔄 Конвертер медиа файлов | | **Prometheus** | 9090 | Постоянный | Сбор метрик | | **Grafana** | 3001 | Постоянный | Дашборды мониторинга | | **Loki** | 3100 | Постоянный | Централизованные логи | ## 🔄 On-Demand Converter ### Принцип работы Converter Module работает по принципу **on-demand контейнеров**: 1. **Image собирается один раз** при установке системы 2. **MY Uploader Bot создает контейнеры** по мере поступления задач конвертации 3. **Контейнеры автоматически удаляются** после завершения задач 4. **Параллельная обработка** до N задач одновременно (настраивается) ### Настройки converter в .env ```bash # Converter Settings CONVERTER_DOCKER_IMAGE=my-converter:latest # Имя образа CONVERTER_SHARED_PATH=/shared/converter # Общая папка для файлов CONVERTER_MAX_PARALLEL=3 # Максимум параллельных задач CONVERTER_TIMEOUT=300 # Таймаут задачи (секунды) ``` ### Управление converter ```bash # Проверка готовности converter image docker images | grep my-converter # Пересборка converter image ./rebuild_converter.sh # Просмотр активных converter контейнеров docker ps | grep converter # Мониторинг логов converter заданий docker logs -f # Принудительная очистка зависших контейнеров docker container prune -f ``` ### API endpoints для converter ```bash # Запуск задачи конвертации POST /api/convert/start { "file_id": "uuid", "conversion_type": "video_to_mp4", "options": {...} } # Статус задачи конвертации GET /api/convert/status/{task_id} # Отмена задачи DELETE /api/convert/cancel/{task_id} # Список активных задач GET /api/convert/active ``` ### Преимущества on-demand архитектуры ✅ **Экономия ресурсов** - converter потребляет ресурсы только при работе ✅ **Масштабируемость** - автоматическое создание контейнеров по нагрузке ✅ **Изоляция** - каждая задача выполняется в отдельном контейнере ✅ **Отказоустойчивость** - сбой одного контейнера не влияет на другие ✅ **Легкое обновление** - пересборка image без остановки основной системы ## 📊 Мониторинг и логи ### Доступ к мониторингу ```bash # Grafana Dashboard https://yourdomain.com/grafana # Логин: admin / пароль из .env # Prometheus Metrics https://yourdomain.com/prometheus # Проверка логов docker-compose -f docker-compose.production.yml logs -f app journalctl -u my-uploader-bot -f journalctl -u my-docker-compose -f ``` ### Ключевые метрики - **Производительность**: Response time, throughput, error rate - **Ресурсы**: CPU, Memory, Disk usage - **MY Network**: Количество узлов, скорость репликации - **База данных**: Подключения, запросы, производительность - **Converter**: Активные задачи, время обработки, ошибки ### Алерты Система автоматически создает алерты для: - Высокая нагрузка на CPU (>80%) - Недостаток памяти (<100MB свободно) - Ошибки приложения (>5 за минуту) - MY Network недоступен - SSL сертификат истекает (<30 дней) - Converter задачи зависают (>timeout) ## 🔒 Безопасность ### Безопасность сети ```bash # Проверка открытых портов sudo netstat -tlnp | grep LISTEN # Проверка правил firewall sudo ufw status verbose # Анализ попыток вторжения sudo fail2ban-client status ``` ### Обновления безопасности ```bash # Автоматические обновления безопасности sudo apt install unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades # Регулярная ротация SSL сертификатов sudo crontab -e # Добавить: 0 12 * * * /usr/bin/certbot renew --quiet ``` ### Backup стратегия ```bash # Backup базы данных docker-compose -f docker-compose.production.yml exec postgres pg_dump -U my_user my_uploader_db > backup_$(date +%Y%m%d).sql # Backup конфигурации tar -czf config_backup_$(date +%Y%m%d).tar.gz .env nginx/ ssl/ # Backup converter image docker save my-converter:latest | gzip > converter_image_$(date +%Y%m%d).tar.gz # Автоматический backup (добавить в crontab) 0 2 * * * /home/service/my-uploader-bot/scripts/backup.sh ``` ## 🔧 Troubleshooting ### Частые проблемы #### 1. Приложение не запускается ```bash # Проверка логов docker-compose -f docker-compose.production.yml logs app journalctl -u my-uploader-bot -f # Проверка конфигурации docker-compose -f docker-compose.production.yml config # Проверка переменных окружения cat .env ``` #### 2. База данных недоступна ```bash # Проверка статуса PostgreSQL docker-compose -f docker-compose.production.yml exec postgres pg_isready # Подключение к БД docker-compose -f docker-compose.production.yml exec postgres psql -U my_user -d my_uploader_db # Проверка логов БД docker-compose -f docker-compose.production.yml logs postgres ``` #### 3. SSL сертификат не работает ```bash # Проверка сертификата sudo certbot certificates # Обновление сертификата sudo certbot renew --dry-run # Проверка nginx конфигурации sudo nginx -t ``` #### 4. MY Network недоступна ```bash # Проверка bootstrap узла curl https://yourdomain.com/api/my/bootstrap/config # Проверка логов MY Network docker-compose -f docker-compose.production.yml logs app | grep "MY Network" # Проверка сетевых подключений docker network ls docker network inspect my-uploader-bot_uploader_network ``` #### 5. Converter не работает ```bash # Проверка наличия image docker images | grep my-converter # Пересборка converter image ./rebuild_converter.sh # Проверка активных converter контейнеров docker ps | grep converter # Очистка зависших контейнеров docker container prune -f # Проверка логов последних converter задач docker logs $(docker ps -a | grep converter | head -1 | cut -d' ' -f1) ``` ### Полезные команды ```bash # Полная перезагрузка системы ./stop_all_services.sh && ./start_all_services.sh # Обновление приложения git pull docker-compose -f docker-compose.production.yml pull docker-compose -f docker-compose.production.yml up -d # Очистка неиспользуемых ресурсов docker system prune -a # Мониторинг ресурсов в реальном времени docker stats # Мониторинг converter активности watch 'docker ps | grep converter' ``` ### SystemD сервисы ```bash # Запуск всех сервисов ./start_all_services.sh # Остановка всех сервисов ./stop_all_services.sh # Проверка статуса всех сервисов ./check_services.sh # Пересборка converter image ./rebuild_converter.sh # Просмотр логов отдельных сервисов journalctl -u my-uploader-bot -f journalctl -u my-docker-compose -f journalctl -u my-converter-builder -f ``` ### Контакты поддержки - **GitHub Issues**: [repository-url]/issues - **Documentation**: [repository-url]/wiki - **MY Network**: https://my-network.dev --- ## 📝 Дополнительные ресурсы - [Архитектура MY Network](docs/MY_NETWORK_ARCHITECTURE.md) - [API Documentation](docs/API.md) - [Development Guide](docs/DEVELOPMENT.md) - [Security Guidelines](docs/SECURITY.md) - [Converter Module Guide](docs/CONVERTER.md) --- **🎉 Поздравляем! MY Uploader Bot успешно развернут в production!** Система готова к работе с: - ⚡ **On-demand конвертацией** медиа файлов - 🔒 **Безопасностью корпоративного уровня** - 📊 **Автоматическим мониторингом** - 🚀 **Высокой производительностью** - 🌍 **Распределенной MY Network**