uploader-bot/docs/DOCKER_SETUP.md

19 KiB
Raw Blame History

🚀 MY UPLOADER BOT - DOCKER SETUP

Полное руководство по развертыванию MY Uploader Bot с использованием Docker

📋 Содержание

  1. Локальное тестирование
  2. Production развертывание
  3. Архитектура системы
  4. On-Demand Converter
  5. Мониторинг и логи
  6. Безопасность
  7. Troubleshooting

🔧 Локальное тестирование

Быстрый старт

# 1. Клонирование репозитория
git clone <repository-url>
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 со следующими переменными:

# =============================================================================
# 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

Проверка локального развертывания

# Проверка здоровья сервисов
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 права
  • Доменное имя, указывающее на сервер

Одной командой:

# Скачайте и запустите мастер-скрипт
curl -fsSL https://raw.githubusercontent.com/your-org/my-uploader-bot/main/setup_production_server.sh | sudo bash -s -- yourdomain.com

Ручное развертывание (пошагово)

1. Подготовка сервера

# Обновление системы
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

# Установка 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. Клонирование проекта

# Переключение на пользователя service
sudo su - service

# Клонирование проекта
git clone <repository-url> /home/service/my-uploader-bot
cd /home/service/my-uploader-bot

# Установка прав доступа
chmod +x scripts/*.sh
chmod +x *.sh

4. Настройка окружения

# Генерация production конфигурации
./scripts/setup_production_env.sh /home/service/my-uploader-bot yourdomain.com

# Настройка дополнительных модулей
./scripts/setup_modules.sh /home/service/my-uploader-bot

5. Сборка Docker образов

# Сборка основного приложения и 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

# Возврат к 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

# Базовая настройка 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 сервисов

# Создание сервисов
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 развертывания

# Проверка 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

🏗️ Архитектура системы

graph TB
    Client[👤 Client] --> LB[🌐 Nginx Load Balancer]
    
    LB --> App[🚀 MY Uploader Bot<br/>Port: 15100]
    LB --> Web[💻 Web2 Client<br/>Port: 3000]
    
    App --> DB[(🗄️ PostgreSQL<br/>Port: 5432)]
    App --> Redis[(⚡ Redis<br/>Port: 6379)]
    
    App --> MyNet[🌍 MY Network<br/>Bootstrap Node]
    
    subgraph "🐳 Docker Network"
        App
        Web
        DB
        Redis
        MyNet
        ConvImg[🖼️ Converter Image<br/>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<br/>Port: 9090]
        Graf[📊 Grafana<br/>Port: 3001]
        Loki[📋 Loki<br/>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

# Converter Settings
CONVERTER_DOCKER_IMAGE=my-converter:latest    # Имя образа
CONVERTER_SHARED_PATH=/shared/converter       # Общая папка для файлов
CONVERTER_MAX_PARALLEL=3                      # Максимум параллельных задач
CONVERTER_TIMEOUT=300                         # Таймаут задачи (секунды)

Управление converter

# Проверка готовности converter image
docker images | grep my-converter

# Пересборка converter image
./rebuild_converter.sh

# Просмотр активных converter контейнеров
docker ps | grep converter

# Мониторинг логов converter заданий
docker logs -f <converter_container_id>

# Принудительная очистка зависших контейнеров
docker container prune -f

API endpoints для converter

# Запуск задачи конвертации
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 без остановки основной системы

📊 Мониторинг и логи

Доступ к мониторингу

# 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)

🔒 Безопасность

Безопасность сети

# Проверка открытых портов
sudo netstat -tlnp | grep LISTEN

# Проверка правил firewall
sudo ufw status verbose

# Анализ попыток вторжения
sudo fail2ban-client status

Обновления безопасности

# Автоматические обновления безопасности
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

# Регулярная ротация SSL сертификатов
sudo crontab -e
# Добавить: 0 12 * * * /usr/bin/certbot renew --quiet

Backup стратегия

# 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. Приложение не запускается

# Проверка логов
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. База данных недоступна

# Проверка статуса 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 сертификат не работает

# Проверка сертификата
sudo certbot certificates

# Обновление сертификата
sudo certbot renew --dry-run

# Проверка nginx конфигурации
sudo nginx -t

4. MY Network недоступна

# Проверка 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 не работает

# Проверка наличия 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)

Полезные команды

# Полная перезагрузка системы
./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 сервисы

# Запуск всех сервисов
./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 Uploader Bot успешно развернут в production!

Система готова к работе с:

  • On-demand конвертацией медиа файлов
  • 🔒 Безопасностью корпоративного уровня
  • 📊 Автоматическим мониторингом
  • 🚀 Высокой производительностью
  • 🌍 Распределенной MY Network