347 lines
11 KiB
Markdown
347 lines
11 KiB
Markdown
# Руководство по миграции на асинхронную архитектуру с 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. ✅ **Масштабируемость** - готовность к росту нагрузки
|
||
|
||
Система остается полностью совместимой с существующими данными и конфигурациями, но получает современную асинхронную архитектуру и кэширование для лучшей производительности.
|
||
|
||
**Рекомендация**: Проводите миграцию в нерабочее время и тщательно тестируйте каждый шаг. |