uploader-bot/docs/MIGRATION_GUIDE.md

347 lines
11 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.

# Руководство по миграции на асинхронную архитектуру с Redis
Это руководство поможет вам безопасно обновить существующую систему My Uploader Bot до новой асинхронной архитектуры с поддержкой Redis кэширования, сохранив полную совместимость с текущими данными и настройками.
## ⚠️ ВАЖНО: Резервное копирование
**Перед началом миграции обязательно создайте резервные копии:**
```bash
# Остановите существующие контейнеры
docker-compose down
# Создайте резервную копию базы данных
docker run --rm \
-v my-uploader-bot_sqlStorage:/var/lib/mysql \
-v $(pwd)/backup:/backup \
mariadb:11.2 \
mysqldump -h maria_db -u myuploader -p myuploader > /backup/database_backup_$(date +%Y%m%d_%H%M%S).sql
# Создайте резервную копию файлов
cp -r /Storage /Storage_backup_$(date +%Y%m%d_%H%M%S)
# Создайте резервную копию конфигурации
cp docker-compose.yml docker-compose.yml.backup
cp .env .env.backup
```
## Шаг 1: Обновление конфигурационных файлов
### 1.1 Обновите docker-compose.yml
Замените ваш текущий `docker-compose.yml` на совместимую версию:
```bash
# Переименуйте существующий файл
mv docker-compose.yml docker-compose.yml.old
# Скопируйте новую совместимую версию
cp docker-compose.compatible.yml docker-compose.yml
```
### 1.2 Обновите .env файл
```bash
# Переименуйте существующий .env
mv .env .env.old
# Скопируйте новую совместимую версию
cp .env.compatible .env
# Перенесите ваши существующие настройки
# Отредактируйте .env и добавьте ваши текущие значения:
# - MYSQL_PASSWORD (ваш текущий пароль)
# - SECRET_KEY (ваш текущий ключ)
# - JWT_SECRET_KEY (ваш текущий JWT ключ)
# - Другие специфичные настройки
```
### 1.3 Обновите requirements.txt
```bash
# Переименуйте существующий файл
mv requirements.txt requirements.txt.old
# Скопируйте новую совместимую версию
cp requirements.compatible.txt requirements.txt
```
## Шаг 2: Добавление новых модулей
### 2.1 Обновите core модули
Замените существующие модули на совместимые версии:
```bash
# Создайте резервные копии существующих модулей
mkdir -p app/core/backup
cp app/core/database.py app/core/backup/database.py.old
cp app/core/config.py app/core/backup/config.py.old
# Используйте новые совместимые модули
cp app/core/database_compatible.py app/core/database.py
cp app/core/config_compatible.py app/core/config.py
```
### 2.2 Добавьте систему кэширования
```bash
# Добавьте новый модуль кэширования
# Файл app/core/cache.py уже создан
# Добавьте совместимые модели
cp app/core/models/base_compatible.py app/core/models/base.py
cp app/core/models/user_compatible.py app/core/models/user.py
cp app/core/models/content_compatible.py app/core/models/content.py
```
## Шаг 3: Постепенное обновление
### 3.1 Запуск с Redis (рекомендуется)
```bash
# Запустите только Redis для тестирования
docker-compose up -d redis
# Проверьте, что Redis работает
docker-compose exec redis redis-cli ping
# Должно вернуть: PONG
```
### 3.2 Запуск основных сервисов
```bash
# Запустите MariaDB
docker-compose up -d maria_db
# Дождитесь готовности базы данных
docker-compose logs -f maria_db
# Ждите сообщения: "mysqld: ready for connections"
# Запустите основное приложение
docker-compose up -d app
# Проверьте логи
docker-compose logs -f app
```
### 3.3 Запуск дополнительных сервисов
```bash
# Запустите остальные сервисы поочередно
docker-compose up -d indexer
docker-compose up -d ton_daemon
docker-compose up -d license_index
docker-compose up -d convert_process
# Проверьте статус всех сервисов
docker-compose ps
```
## Шаг 4: Проверка работоспособности
### 4.1 Проверка API
```bash
# Проверьте основной API
curl http://localhost:15100/health
# Проверьте подключение к базе данных
curl http://localhost:15100/api/v1/health/database
# Проверьте Redis подключение
curl http://localhost:15100/api/v1/health/cache
```
### 4.2 Проверка существующих данных
```bash
# Войдите в контейнер приложения
docker-compose exec app python3 -c "
from app.core.database_compatible import init_database, get_async_session
from app.core.models.user_compatible import User
import asyncio
async def check_data():
await init_database()
async with get_async_session() as session:
from sqlalchemy import select
result = await session.execute(select(User))
users = result.scalars().all()
print(f'Found {len(users)} users in database')
asyncio.run(check_data())
"
```
### 4.3 Проверка кэширования
```bash
# Проверьте работу Redis кэша
docker-compose exec app python3 -c "
from app.core.cache import init_cache, cache
import asyncio
async def test_cache():
await init_cache()
await cache.set('test_key', 'test_value', 60)
value = await cache.get('test_key')
print(f'Cache test: {value}')
asyncio.run(test_cache())
"
```
## Шаг 5: Настройка для продакшена
### 5.1 Обновите переменные окружения
В файле `.env` убедитесь, что настроены:
```env
# Безопасность
SECRET_KEY=your-production-secret-key
JWT_SECRET_KEY=your-production-jwt-key
# База данных
MYSQL_PASSWORD=your-secure-database-password
# Redis (если используете внешний Redis)
REDIS_HOST=redis
REDIS_PASSWORD=your-redis-password # Если нужен
# Кэширование
CACHE_ENABLED=true
REDIS_ENABLED=true
# Производительность
DATABASE_POOL_SIZE=20
DATABASE_MAX_OVERFLOW=30
REDIS_MAX_CONNECTIONS=50
# Логирование
LOG_LEVEL=INFO
LOG_FORMAT=json
```
### 5.2 Настройте мониторинг
```bash
# Добавьте мониторинг Redis
docker-compose exec redis redis-cli info memory
# Добавьте мониторинг MariaDB
docker-compose exec maria_db mysql -u root -p -e "SHOW PROCESSLIST;"
# Проверьте использование ресурсов
docker stats
```
## Откат изменений
Если что-то пошло не так, вы можете быстро откатиться:
```bash
# Остановите новые контейнеры
docker-compose down
# Восстановите старые конфигурации
mv docker-compose.yml.old docker-compose.yml
mv .env.old .env
mv requirements.txt.old requirements.txt
# Восстановите старые модули
cp app/core/backup/database.py.old app/core/database.py
cp app/core/backup/config.py.old app/core/config.py
# Запустите старую версию
docker-compose up -d
```
## Производительность и мониторинг
### Мониторинг Redis
```bash
# Мониторинг использования памяти Redis
docker-compose exec redis redis-cli info memory
# Мониторинг команд Redis
docker-compose exec redis redis-cli monitor
# Статистика кэша
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 "SHOW STATUS LIKE 'Queries';"
# Размер базы данных
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'
GROUP BY table_schema;
"
```
## Возможные проблемы и решения
### Проблема: Redis не запускается
```bash
# Проверьте порты
netstat -tulpn | grep 6379
# Проверьте логи Redis
docker-compose logs redis
# Очистите данные Redis если нужно
docker volume rm my-uploader-bot_redis_data
```
### Проблема: Ошибки подключения к базе данных
```bash
# Проверьте статус MariaDB
docker-compose exec maria_db mysqladmin -u root -p status
# Проверьте переменные окружения
docker-compose exec app env | grep MYSQL
# Пересоздайте подключение
docker-compose restart app
```
### Проблема: Высокое использование памяти
```bash
# Настройте лимиты Redis в .env
REDIS_MAX_CONNECTIONS=30
DATABASE_POOL_SIZE=10
# Перезапустите сервисы
docker-compose restart
```
## Заключение
После успешной миграции ваша система получит:
1.**Асинхронную архитектуру** - лучшая производительность
2.**Redis кэширование** - быстрый доступ к данным
3.**Обратная совместимость** - все данные сохранены
4.**Улучшенный мониторинг** - больше метрик
5.**Масштабируемость** - готовность к росту нагрузки
Система остается полностью совместимой с существующими данными и конфигурациями, но получает современную асинхронную архитектуру и кэширование для лучшей производительности.
**Рекомендация**: Проводите миграцию в нерабочее время и тщательно тестируйте каждый шаг.