617 lines
19 KiB
Markdown
617 lines
19 KiB
Markdown
# 🚀 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** |