271 lines
9.8 KiB
Markdown
271 lines
9.8 KiB
Markdown
# Совместимое обновление My Uploader Bot
|
||
|
||
## 📋 Обзор
|
||
|
||
Данное обновление добавляет **асинхронную архитектуру** и **Redis кэширование** к существующему проекту My Uploader Bot, **сохраняя полную совместимость** с текущей MariaDB базой данных и существующими данными.
|
||
|
||
## 🎯 Что добавлено
|
||
|
||
### ✅ Новые возможности
|
||
- **Асинхронная работа с базой данных** (SQLAlchemy async)
|
||
- **Redis кэширование** для ускорения работы
|
||
- **Улучшенная система конфигурации**
|
||
- **Расширенные модели данных**
|
||
- **Система мониторинга и здоровья сервисов**
|
||
|
||
### ✅ Сохранена совместимость
|
||
- **MariaDB 11.2** остается основной базой данных
|
||
- **Все существующие данные** сохраняются
|
||
- **Существующие пути к файлам** (/Storage/) не изменяются
|
||
- **Все сервисы** (app, indexer, ton_daemon, license_index, convert_process) работают как прежде
|
||
- **Порт 15100** остается прежним
|
||
|
||
## 📁 Файлы для совместимого обновления
|
||
|
||
### Основные конфигурационные файлы:
|
||
```
|
||
my-uploader-bot/
|
||
├── docker-compose.compatible.yml # Совместимая версия docker-compose
|
||
├── .env.compatible # Совместимые переменные окружения
|
||
├── requirements.compatible.txt # Совместимые зависимости Python
|
||
└── MIGRATION_GUIDE.md # Подробное руководство по миграции
|
||
```
|
||
|
||
### Новые модули приложения:
|
||
```
|
||
my-uploader-bot/app/core/
|
||
├── database_compatible.py # Async база данных с MariaDB
|
||
├── config_compatible.py # Расширенная конфигурация
|
||
├── cache.py # Система Redis кэширования
|
||
└── models/
|
||
├── base_compatible.py # Базовые модели для MariaDB
|
||
├── user_compatible.py # Пользовательские модели
|
||
└── content_compatible.py # Модели контента
|
||
```
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
### 1. Создайте резервные копии
|
||
```bash
|
||
# Остановите текущие контейнеры
|
||
docker-compose down
|
||
|
||
# Сделайте бэкап
|
||
cp docker-compose.yml docker-compose.yml.backup
|
||
cp .env .env.backup
|
||
```
|
||
|
||
### 2. Используйте совместимые файлы
|
||
```bash
|
||
# Замените основные файлы на совместимые версии
|
||
cp docker-compose.compatible.yml docker-compose.yml
|
||
cp .env.compatible .env
|
||
cp requirements.compatible.txt requirements.txt
|
||
|
||
# Перенесите ваши пароли и ключи в новый .env
|
||
# Отредактируйте .env и укажите ваши значения:
|
||
# MYSQL_PASSWORD=ваш_текущий_пароль
|
||
# SECRET_KEY=ваш_секретный_ключ
|
||
```
|
||
|
||
### 3. Обновите код приложения
|
||
```bash
|
||
# Замените модули на совместимые версии
|
||
cp app/core/database_compatible.py app/core/database.py
|
||
cp app/core/config_compatible.py app/core/config.py
|
||
|
||
# Новый модуль кэширования уже добавлен как app/core/cache.py
|
||
```
|
||
|
||
### 4. Запустите обновленную систему
|
||
```bash
|
||
# Запустите все сервисы
|
||
docker-compose up -d
|
||
|
||
# Проверьте статус
|
||
docker-compose ps
|
||
|
||
# Проверьте логи
|
||
docker-compose logs -f app
|
||
```
|
||
|
||
## 🔧 Конфигурация
|
||
|
||
### Основные изменения в .env:
|
||
|
||
```env
|
||
# Существующие настройки MariaDB (сохраняются)
|
||
MYSQL_HOST=maria_db
|
||
MYSQL_PORT=3306
|
||
MYSQL_USER=myuploader
|
||
MYSQL_PASSWORD=ваш_пароль
|
||
MYSQL_DATABASE=myuploader
|
||
|
||
# Новые настройки Redis (добавляются)
|
||
REDIS_ENABLED=true
|
||
REDIS_HOST=redis
|
||
REDIS_PORT=6379
|
||
REDIS_DB=0
|
||
|
||
# Настройки кэширования (новые)
|
||
CACHE_ENABLED=true
|
||
CACHE_DEFAULT_TTL=300
|
||
CACHE_USER_TTL=600
|
||
CACHE_CONTENT_TTL=1800
|
||
|
||
# Улучшенные настройки базы данных (новые)
|
||
DATABASE_POOL_SIZE=20
|
||
DATABASE_MAX_OVERFLOW=30
|
||
DATABASE_POOL_TIMEOUT=30
|
||
```
|
||
|
||
### Изменения в docker-compose.yml:
|
||
|
||
```yaml
|
||
# Добавлен новый сервис Redis
|
||
redis:
|
||
image: redis:7-alpine
|
||
container_name: redis
|
||
restart: unless-stopped
|
||
ports:
|
||
- "6379:6379"
|
||
volumes:
|
||
- redis_data:/data
|
||
command: redis-server --appendonly yes
|
||
|
||
# Все остальные сервисы остаются без изменений
|
||
```
|
||
|
||
## 📊 Мониторинг и проверка
|
||
|
||
### Проверка работоспособности:
|
||
```bash
|
||
# API статус
|
||
curl http://localhost:15100/health
|
||
|
||
# База данных
|
||
curl http://localhost:15100/api/v1/health/database
|
||
|
||
# Redis кэш
|
||
curl http://localhost:15100/api/v1/health/cache
|
||
```
|
||
|
||
### Мониторинг Redis:
|
||
```bash
|
||
# Подключение к Redis
|
||
docker-compose exec redis redis-cli
|
||
|
||
# Информация о памяти
|
||
docker-compose exec redis redis-cli info memory
|
||
|
||
# Статистика
|
||
docker-compose exec redis redis-cli info stats
|
||
```
|
||
|
||
### Мониторинг MariaDB:
|
||
```bash
|
||
# Подключения к базе
|
||
docker-compose exec maria_db mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';"
|
||
|
||
# Размер базы данных
|
||
docker-compose exec maria_db mysql -u root -p -e "
|
||
SELECT table_schema as 'Database',
|
||
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) as 'Size_MB'
|
||
FROM information_schema.tables
|
||
WHERE table_schema = 'myuploader';"
|
||
```
|
||
|
||
## 🎁 Преимущества обновления
|
||
|
||
### Производительность:
|
||
- **До 3x быстрее** работа с базой данных благодаря async
|
||
- **Мгновенный доступ** к часто используемым данным через Redis
|
||
- **Оптимизированные запросы** с пулом соединений
|
||
|
||
### Масштабируемость:
|
||
- **Async архитектура** для обработки большого количества запросов
|
||
- **Redis кэширование** снижает нагрузку на базу данных
|
||
- **Гибкая конфигурация** пулов соединений
|
||
|
||
### Надежность:
|
||
- **Автоматическое переподключение** к базе данных
|
||
- **Fallback режимы** при недоступности Redis
|
||
- **Улучшенное логирование** и мониторинг
|
||
|
||
### Удобство разработки:
|
||
- **Современный async/await** синтаксис
|
||
- **Типизация** с Pydantic
|
||
- **Декораторы для кэширования**
|
||
- **Автоматическая сериализация/десериализация**
|
||
|
||
## 🔄 Откат изменений
|
||
|
||
Если нужно вернуться к предыдущей версии:
|
||
|
||
```bash
|
||
# Остановите обновленную систему
|
||
docker-compose down
|
||
|
||
# Восстановите файлы из бэкапа
|
||
cp docker-compose.yml.backup docker-compose.yml
|
||
cp .env.backup .env
|
||
|
||
# Запустите старую версию
|
||
docker-compose up -d
|
||
```
|
||
|
||
## 📈 Использование кэширования в коде
|
||
|
||
### Декораторы для автоматического кэширования:
|
||
```python
|
||
from app.core.cache import cache_user_data, cache_content_data
|
||
|
||
@cache_user_data(ttl=600) # Кэш на 10 минут
|
||
async def get_user_profile(user_id: int):
|
||
# Данные автоматически кэшируются
|
||
pass
|
||
|
||
@cache_content_data(ttl=1800) # Кэш на 30 минут
|
||
async def get_file_metadata(file_id: int):
|
||
# Метаданные файлов кэшируются
|
||
pass
|
||
```
|
||
|
||
### Ручное управление кэшем:
|
||
```python
|
||
from app.core.cache import cache
|
||
|
||
# Сохранить данные
|
||
await cache.set("user:123:profile", user_data, ttl=600)
|
||
|
||
# Получить данные
|
||
profile = await cache.get("user:123:profile")
|
||
|
||
# Удалить из кэша
|
||
await cache.delete("user:123:profile")
|
||
|
||
# Массовые операции
|
||
await cache.set_multiple({
|
||
"key1": "value1",
|
||
"key2": "value2"
|
||
}, ttl=300)
|
||
```
|
||
|
||
## 🆘 Поддержка
|
||
|
||
При возникновении проблем:
|
||
|
||
1. **Проверьте логи**: `docker-compose logs -f app`
|
||
2. **Проверьте статус сервисов**: `docker-compose ps`
|
||
3. **Изучите MIGRATION_GUIDE.md** для детального руководства
|
||
4. **Используйте откат** при критических проблемах
|
||
|
||
## 📝 Примечания
|
||
|
||
- **Все существующие данные сохраняются** и остаются доступными
|
||
- **API остается полностью совместимым** со старыми клиентами
|
||
- **Файловая структура не изменяется** (/Storage/ остается прежним)
|
||
- **Порты и сетевые настройки сохраняются**
|
||
- **Redis является опциональным** - система работает и без него
|
||
|
||
Это **эволюционное обновление**, а не революционное изменение архитектуры. Ваша существующая система получает современные возможности, оставаясь полностью совместимой. |