19 KiB
19 KiB
🚀 MY UPLOADER BOT - DOCKER SETUP
Полное руководство по развертыванию MY Uploader Bot с использованием Docker
📋 Содержание
- Локальное тестирование
- Production развертывание
- Архитектура системы
- On-Demand Converter
- Мониторинг и логи
- Безопасность
- 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 контейнеров:
- Image собирается один раз при установке системы
- MY Uploader Bot создает контейнеры по мере поступления задач конвертации
- Контейнеры автоматически удаляются после завершения задач
- Параллельная обработка до 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 Network
- API Documentation
- Development Guide
- Security Guidelines
- Converter Module Guide
🎉 Поздравляем! MY Uploader Bot успешно развернут в production!
Система готова к работе с:
- ⚡ On-demand конвертацией медиа файлов
- 🔒 Безопасностью корпоративного уровня
- 📊 Автоматическим мониторингом
- 🚀 Высокой производительностью
- 🌍 Распределенной MY Network