uploader-bot/docs/DOCKER_SETUP.md

617 lines
19 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚀 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 <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` со следующими переменными:
```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 <repository-url> /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<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
```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 <converter_container_id>
# Принудительная очистка зависших контейнеров
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**