diff --git a/Dockerfile b/Dockerfile index 6eeb095..3eb2567 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,13 @@ FROM python:3.11-slim -# Установка системных зависимостей +# Установка системных зависимостей для PostgreSQL и приложения RUN apt-get update && apt-get install -y \ build-essential \ curl \ git \ + libpq-dev \ + postgresql-client \ + pkg-config \ && rm -rf /var/lib/apt/lists/* # Создание рабочей директории diff --git a/app/fastapi_main.py b/app/fastapi_main.py index 62bf943..2644a81 100644 --- a/app/fastapi_main.py +++ b/app/fastapi_main.py @@ -55,6 +55,40 @@ async def lifespan(app: FastAPI): try: await logger.ainfo("=== FastAPI Application Starting ===") + # === DEBUG: PostgreSQL DRIVERS VALIDATION === + await logger.ainfo("=== DEBUGGING psycopg2 ERROR ===") + + # Проверка psycopg2 + try: + import psycopg2 + await logger.ainfo("✅ psycopg2 импортирован успешно", version=psycopg2.__version__) + except ImportError as e: + await logger.aerror("❌ ОШИБКА: psycopg2 не найден", error=str(e)) + except Exception as e: + await logger.aerror("❌ ОШИБКА: psycopg2 другая ошибка", error=str(e)) + + # Проверка asyncpg + try: + import asyncpg + await logger.ainfo("✅ asyncpg импортирован успешно", version=asyncpg.__version__) + except ImportError as e: + await logger.aerror("❌ ОШИБКА: asyncpg не найден", error=str(e)) + except Exception as e: + await logger.aerror("❌ ОШИБКА: asyncpg другая ошибка", error=str(e)) + + # Проверка SQLAlchemy драйверов + try: + from sqlalchemy.dialects import postgresql + await logger.ainfo("✅ SQLAlchemy PostgreSQL диалект доступен") + except ImportError as e: + await logger.aerror("❌ ОШИБКА: SQLAlchemy PostgreSQL диалект недоступен", error=str(e)) + + # Проверка DATABASE_URL + from app.core.config import DATABASE_URL + await logger.ainfo("🔧 DATABASE_URL конфигурация", url=DATABASE_URL) + + await logger.ainfo("=== END DEBUGGING ===") + # Инициализация базы данных await logger.ainfo("Initializing database connection...") await db_manager.initialize() diff --git a/docker-compose.yml b/docker-compose.yml index 5f31224..e56bb71 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,15 +9,15 @@ services: container_name: my-network-node restart: unless-stopped ports: - - "15100:15100" - - "3000:15100" # Альтернативный порт для nginx + - "8000:8000" + - "3000:8000" # Альтернативный порт для nginx environment: - # Database - - DATABASE_URL=sqlite+aiosqlite:///app/data/my_network.db + # Database - PostgreSQL для production + - DATABASE_URL=postgresql+asyncpg://mynetwork:password@postgres:5432/mynetwork # Application - API_HOST=0.0.0.0 - - API_PORT=15100 + - API_PORT=8000 - DEBUG=false - ENVIRONMENT=production @@ -27,9 +27,9 @@ services: # MY Network specific - MY_NETWORK_MODE=main-node - - MY_NETWORK_PORT=15100 + - MY_NETWORK_PORT=8000 - MY_NETWORK_HOST=0.0.0.0 - - BOOTSTRAP_NODE=my-public-node-3.projscale.dev:15100 + - BOOTSTRAP_NODE=my-public-node-3.projscale.dev:8000 # Monitoring - MONITORING_ENABLED=true @@ -42,6 +42,9 @@ services: # Cache (Redis optional) - REDIS_ENABLED=false - CACHE_ENABLED=false + depends_on: + postgres: + condition: service_healthy volumes: - ./data:/app/data - ./logs:/app/logs @@ -50,7 +53,7 @@ services: - ./bootstrap.json:/app/bootstrap.json:ro - ./.env:/app/.env:ro healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:15100/health"] + test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 @@ -73,6 +76,12 @@ services: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-mynetwork} -d ${POSTGRES_DB:-mynetwork}"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s networks: - my-network profiles: diff --git a/requirements.txt b/requirements.txt index 8a3df11..5932a21 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,36 +1,80 @@ -# Минимальные зависимости для MY Network v2.0 +# FastAPI Migration Requirements - MY Network v3.0 +# Полная миграция от Sanic к FastAPI с совместимостью + +# === Core FastAPI Stack === fastapi==0.104.1 -uvicorn==0.24.0 -sanic==23.12.1 -python-dotenv==1.0.0 -httpx==0.25.0 -aiofiles==23.2.1 -pydantic==2.5.2 -pydantic-settings==2.1.0 - -# База данных (optional) -sqlalchemy==2.0.23 -asyncpg==0.29.0 -alembic==1.13.1 - -# Для безопасности -pyjwt==2.8.0 -bcrypt==4.1.2 -cryptography==43.0.3 - -# Кэш (optional) -redis==5.0.1 - -# Утилиты -structlog==23.2.0 -psutil==5.9.6 - -# Мониторинг и WebSocket -websockets==12.0 +uvicorn[standard]==0.24.0 python-multipart==0.0.6 -# Аудио обработка +# === Authentication & Security === +python-jose[cryptography]==3.3.0 +passlib[bcrypt]==1.7.4 +python-jwt==4.0.0 +pyjwt==2.8.0 +bcrypt==4.1.2 + +# === Database & ORM === +sqlalchemy==2.0.23 +alembic==1.12.1 +asyncpg==0.29.0 +psycopg2-binary==2.9.9 + +# === Caching & Redis === +redis==5.0.1 +aioredis==2.0.1 + +# === Cryptography === +cryptography==41.0.7 +ed25519==1.5 +pynacl==1.5.0 +PyNaCl==1.5.0 +base58==2.1.1 + +# === HTTP & API === +httpx==0.25.2 +aiohttp==3.9.0 +requests==2.31.0 + +# === Data Processing === +pydantic==2.5.0 +pydantic-settings==2.1.0 + +# === Validation & Parsing === +email-validator==2.1.0 +python-dateutil==2.8.2 + +# === File Handling === +python-magic==0.4.27 +pillow==10.1.0 +aiofiles==23.2.1 + +# === Monitoring & Logging === +structlog==23.2.0 +psutil==5.9.6 +prometheus-client==0.19.0 + +# === WebSocket Support === +websockets==12.0 + +# === Audio Processing === pydub==0.25.1 -# Email валидация для pydantic -email-validator==2.1.0 \ No newline at end of file +# === Development & Testing === +pytest==7.4.3 +pytest-asyncio==0.21.1 +pytest-cov==4.1.0 +black==23.11.0 +isort==5.12.0 +flake8==6.1.0 + +# === Environment & Configuration === +python-dotenv==1.0.0 +pyyaml==6.0.1 + +# === Compatibility Libraries === +typing-extensions==4.8.0 +starlette==0.27.0 + +# === Optional: Production Deployment === +# uvloop==0.19.0 # Для лучшей производительности (разкомментировать в production) +# gunicorn==21.2.0 # Для production deployment \ No newline at end of file