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