Перейти к содержанию

Справочник по конфигурации

Этот документ предоставляет исчерпывающий справочник по всем опциям конфигурации, доступным в CulicidaeLab Server, включая переменные окружения, настройки приложения и конфигурации развертывания.

Переменные окружения

Конфигурация бэкенда

Основные настройки приложения

Переменная Тип По умолчанию Описание
CULICIDAELAB_APP_NAME string "CulicidaeLab API" Имя приложения, отображаемое в документации API
CULICIDAELAB_API_V1_STR string "/api" Базовый префикс пути для конечных точек API версии 1
ENVIRONMENT string "development" Среда приложения (development, staging, production)

Конфигурация базы данных

Переменная Тип По умолчанию Описание
CULICIDAELAB_DATABASE_PATH string ".lancedb" Путь файловой системы к директории базы данных LanceDB
CULICIDAELAB_DATABASE_TIMEOUT integer 30 Таймаут подключения к базе данных в секундах
CULICIDAELAB_DATABASE_MAX_CONNECTIONS integer 10 Максимальное количество подключений к базе данных

Конфигурация модели

Переменная Тип По умолчанию Описание
CULICIDAELAB_MODEL_PATH string "models/" Путь к директории, содержащей файлы моделей
CULICIDAELAB_SAVE_PREDICTED_IMAGES boolean false Сохранять ли предсказанные изображения на диск
CULICIDAELAB_PREDICTION_TIMEOUT integer 300 Таймаут для предсказаний модели в секундах
CULICIDAELAB_MAX_IMAGE_SIZE integer 10485760 Максимальный размер загружаемого изображения в байтах (10МБ)

Конфигурация безопасности

Переменная Тип По умолчанию Описание
CULICIDAELAB_SECRET_KEY string "" Секретный ключ для управления сессиями и шифрования
CULICIDAELAB_BACKEND_CORS_ORIGINS list ["http://localhost:8765"] Разрешенные CORS источники для доступа фронтенда
CULICIDAELAB_ALLOWED_HOSTS list ["localhost", "127.0.0.1"] Разрешенные заголовки хостов
CULICIDAELAB_RATE_LIMIT_REQUESTS integer 100 Количество запросов в минуту на IP

Конфигурация логирования

Переменная Тип По умолчанию Описание
CULICIDAELAB_LOG_LEVEL string "INFO" Уровень логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL)
CULICIDAELAB_LOG_FILE string "" Путь к файлу логов (пустой для логирования в консоль)
CULICIDAELAB_LOG_FORMAT string "json" Формат логов (json, text)
CULICIDAELAB_LOG_ROTATION boolean true Включить ротацию файлов логов

Конфигурация фронтенда

Настройки приложения

Переменная Тип По умолчанию Описание
FRONTEND_HOST string "localhost" Адрес хоста для сервера фронтенда
FRONTEND_PORT integer 8765 Номер порта для сервера фронтенда
BACKEND_URL string "http://localhost:8000" Базовый URL API бэкенда
FRONTEND_DEBUG boolean false Включить режим отладки для фронтенда

Конфигурация UI

Переменная Тип По умолчанию Описание
FRONTEND_THEME string "light" Тема UI по умолчанию (light, dark, auto)
FRONTEND_LANGUAGE string "en" Язык по умолчанию (en, ru)
FRONTEND_MAP_PROVIDER string "openstreetmap" Провайдер карт
FRONTEND_MAX_UPLOAD_SIZE integer 52428800 Максимальный размер загружаемого файла в байтах (50МБ)
айлы конфигурации

Конфигурация бэкенда (backend/config.py)

Основной класс конфигурации AppSettings предоставляет централизованный доступ ко всем настройкам приложения:

from backend.config import settings

# Доступ к значениям конфигурации
app_name = settings.APP_NAME
database_path = settings.DATABASE_PATH
cors_origins = settings.BACKEND_CORS_ORIGINS

# Доступ к конфигурации модели
model_path = settings.classifier_model_path
predictor_settings = settings.classifier_settings

Свойства конфигурации

class AppSettings(BaseSettings):
    # Основные настройки
    APP_NAME: str = "CulicidaeLab API"
    API_V1_STR: str = "/api"
    DATABASE_PATH: str = ".lancedb"
    SAVE_PREDICTED_IMAGES: str | bool = False
    BACKEND_CORS_ORIGINS: list[str] = ["http://localhost:8765"]

    # Динамические свойства
    @property
    def classifier_settings(self):
        """Возвращает настройки библиотеки culicidaelab"""

    @property
    def classifier_model_path(self) -> str:
        """Возвращает путь к весам модели классификатора"""

Файл окружения (.env)

Создайте файл .env в директории бэкенда для локальной разработки:

# Конфигурация базы данных
CULICIDAELAB_DATABASE_PATH="backend/data/.lancedb"

# Конфигурация модели
CULICIDAELAB_SAVE_PREDICTED_IMAGES=1
CULICIDAELAB_MODEL_PATH="models/"

# Безопасность
CULICIDAELAB_SECRET_KEY="ваш-секретный-ключ-здесь"

# CORS источники (разделенные запятыми)
CULICIDAELAB_BACKEND_CORS_ORIGINS="http://localhost:8765,http://127.0.0.1:8765"

# Логирование
CULICIDAELAB_LOG_LEVEL="DEBUG"
CULICIDAELAB_LOG_FILE="logs/culicidaelab.log"

# Окружение
ENVIRONMENT="development"

Файл продакшн окружения

Для продакшн развертываний используйте более безопасные настройки:

# Путь к продакшн базе данных
CULICIDAELAB_DATABASE_PATH="/var/lib/culicidaelab/data/.lancedb"

# Путь к продакшн модели
CULICIDAELAB_MODEL_PATH="/var/lib/culicidaelab/models/"

# Настройки безопасности
CULICIDAELAB_SECRET_KEY="ваш-очень-безопасный-секретный-ключ-здесь"
CULICIDAELAB_BACKEND_CORS_ORIGINS="https://ваш-домен.com,https://www.ваш-домен.com"
CULICIDAELAB_ALLOWED_HOSTS="ваш-домен.com,www.ваш-домен.com"

# Настройки производительности
CULICIDAELAB_DATABASE_MAX_CONNECTIONS=20
CULICIDAELAB_RATE_LIMIT_REQUESTS=1000

# Логирование
CULICIDAELAB_LOG_LEVEL="INFO"
CULICIDAELAB_LOG_FILE="/var/log/culicidaelab/app.log"
CULICIDAELAB_LOG_FORMAT="json"

# Окружение
ENVIRONMENT="production"

Конфигурация модели

Настройки библиотеки CulicidaeLab

Приложение интегрируется с библиотекой culicidaelab для предсказания видов. Конфигурация модели управляется через систему настроек библиотеки:

from backend.config import get_predictor_settings

# Получить настройки модели
settings = get_predictor_settings()

# Доступ к параметрам модели
confidence_threshold = settings.get_confidence_threshold()
model_weights_path = settings.get_model_weights_path("segmenter")

Структура файлов модели

models/
├── segmenter/
│   ├── weights.pt              # Веса модели
│   ├── config.json            # Конфигурация модели
│   └── metadata.json          # Метаданные модели
├── classifier/
│   ├── weights.pt
│   ├── config.json
│   └── metadata.json
└── preprocessing/
    ├── transforms.json        # Конфигурация предобработки изображений
    └── normalization.json     # Параметры нормализации

Опции конфигурации модели

Настройка Тип По умолчанию Описание
confidence_threshold float 0.5 Минимальная уверенность для предсказаний
max_image_size tuple (1024, 1024) Максимальные размеры изображения
batch_size integer 1 Размер пакета для вывода модели
device string "auto" Устройство для вывода модели (cpu, cuda, auto)
preprocessing dict {} Параметры предобработки изображений

Конфигурация базы данных

Настройки LanceDB

CulicidaeLab использует LanceDB для векторного хранения и поиска по сходству:

# Настройки подключения к базе данных
DATABASE_CONFIG = {
    "path": settings.DATABASE_PATH,
    "timeout": 30,
    "max_connections": 10,
    "vector_dimension": 512,
    "index_type": "IVF_FLAT",
    "metric_type": "L2"
}

Схема базы данных

База данных содержит несколько таблиц для разных типов данных:

Таблица видов

species_schema = {
    "id": "string",
    "name": "string",
    "scientific_name": "string",
    "vector": "vector(512)",
    "metadata": "json",
    "created_at": "timestamp"
}

Таблица наблюдений

observations_schema = {
    "id": "string",
    "species_id": "string",
    "location": "geometry",
    "confidence": "float",
    "image_path": "string",
    "metadata": "json",
    "created_at": "timestamp"
}
```## Ко
нфигурация сервера

### Настройки FastAPI

```python
# Конфигурация приложения FastAPI
app = FastAPI(
    title=settings.APP_NAME,
    description="CulicidaeLab API для идентификации видов комаров",
    version="1.0.0",
    openapi_url=f"{settings.API_V1_STR}/openapi.json",
    docs_url=f"{settings.API_V1_STR}/docs",
    redoc_url=f"{settings.API_V1_STR}/redoc"
)

Конфигурация CORS

# Настройки middleware CORS
app.add_middleware(
    CORSMiddleware,
    allow_origins=settings.BACKEND_CORS_ORIGINS,
    allow_credentials=True,
    allow_methods=["GET", "POST", "PUT", "DELETE"],
    allow_headers=["*"],
)

Конфигурация статических файлов

# Обслуживание статических файлов
app.mount("/static", StaticFiles(directory="backend/static"), name="static")

Конфигурация развертывания

Конфигурация Docker

Переменные окружения для Docker

# docker-compose.yml
environment:
  - CULICIDAELAB_DATABASE_PATH=/app/data/.lancedb
  - CULICIDAELAB_MODEL_PATH=/app/models
  - CULICIDAELAB_SAVE_PREDICTED_IMAGES=1
  - CULICIDAELAB_LOG_LEVEL=INFO
  - ENVIRONMENT=production

Монтирование томов

volumes:
  - ./data:/app/data              # Файлы базы данных
  - ./models:/app/models          # Файлы моделей
  - ./logs:/app/logs              # Файлы логов
  - ./uploads:/app/uploads        # Загрузки пользователей

Конфигурация Nginx

Настройки обратного прокси

# Прокси для API бэкенда
location /api {
    proxy_pass http://backend:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # Настройки таймаута для предсказаний модели
    proxy_read_timeout 300s;
    proxy_connect_timeout 75s;
    proxy_send_timeout 300s;
}

# Прокси для фронтенда
location / {
    proxy_pass http://frontend:8765;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # Поддержка WebSocket для Solara
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Настройки загрузки файлов

# Увеличение лимитов размера загрузки
client_max_body_size 50M;
client_body_timeout 300s;
client_header_timeout 300s;

Конфигурация производительности

Производительность бэкенда

Настройка Разработка Продакшн Описание
Воркеры 1 4-8 Количество воркеров Uvicorn
Таймаут 30с 300с Таймаут запроса
Keep-alive Keep-alive соединения
Макс соединений 10 100 Максимальные одновременные соединения

Производительность фронтенда

Настройка Разработка Продакшн Описание
Режим отладки True False Включить функции отладки
Сжатие ресурсов False True Сжимать статические ресурсы
Кэширование Отключено Включено Включить кэширование браузера

Производительность базы данных

Настройка Малая Средняя Большая Описание
Макс соединений 10 50 100 Размер пула соединений БД
Таймаут запроса 30с 60с 120с Таймаут выполнения запроса
Размер кэша 100МБ 500МБ 1ГБ Размер кэша результатов запросов

Конфигурация мониторинга

Конечные точки проверки здоровья

Конечная точка Метод Описание
/health GET Базовая проверка здоровья
/api/health GET Проверка здоровья API с проверкой БД
/metrics GET Метрики Prometheus (если включены)

Конфигурация логирования

Уровни логов

  • DEBUG: Подробная информация для отладки
  • INFO: Общая информация о потоке приложения
  • WARNING: Предупреждающие сообщения о потенциальных проблемах
  • ERROR: Сообщения об ошибках для обработанных исключений
  • CRITICAL: Критические ошибки, которые могут вызвать сбой приложения

Формат логов

{
  "timestamp": "2024-01-01T12:00:00Z",
  "level": "INFO",
  "logger": "culicidaelab.api",
  "message": "Запрос обработан успешно",
  "request_id": "req_123456",
  "user_id": "user_789",
  "duration_ms": 150,
  "status_code": 200
}

Конфигурация безопасности

Настройки аутентификации

Настройка Тип По умолчанию Описание
SESSION_TIMEOUT integer 3600 Таймаут сессии в секундах
MAX_LOGIN_ATTEMPTS integer 5 Максимальные неудачные попытки входа
PASSWORD_MIN_LENGTH integer 8 Минимальная длина пароля
REQUIRE_HTTPS boolean true Требовать HTTPS в продакшне

Ограничение скорости

# Конфигурация ограничения скорости
RATE_LIMITS = {
    "default": "100/minute",
    "prediction": "10/minute",
    "upload": "5/minute",
    "auth": "20/minute"
}

Безопасность загрузки файлов

# Разрешенные типы файлов и размеры
UPLOAD_CONFIG = {
    "allowed_extensions": [".jpg", ".jpeg", ".png", ".tiff"],
    "max_file_size": 50 * 1024 * 1024,  # 50МБ
    "scan_for_malware": True,
    "validate_image_format": True
}

Устранение проблем конфигурации

Общие проблемы конфигурации

  1. Переменные окружения не загружаются
  2. Проверьте расположение и синтаксис файла .env
  3. Проверьте имена переменных окружения и префиксы
  4. Убедитесь в правильных разрешениях файлов

  5. Проблемы подключения к базе данных

  6. Проверьте, что путь к базе данных существует и доступен для записи
  7. Проверьте настройки таймаута базы данных
  8. Убедитесь в достаточном дисковом пространстве

  9. Сбои загрузки модели

  10. Проверьте пути к файлам модели и разрешения
  11. Проверьте целостность файлов модели
  12. Убедитесь в достаточной памяти для загрузки модели

  13. Проблемы CORS

  14. Проверьте конфигурацию CORS источников
  15. Проверьте соответствие протокола (http vs https)
  16. Убедитесь в правильной конфигурации домена

Валидация конфигурации

# Валидация конфигурации при запуске
def validate_config():
    """Валидация конфигурации приложения"""
    errors = []

    # Проверка обязательных переменных окружения
    required_vars = ["CULICIDAELAB_DATABASE_PATH", "CULICIDAELAB_SECRET_KEY"]
    for var in required_vars:
        if not os.getenv(var):
            errors.append(f"Отсутствует обязательная переменная окружения: {var}")

    # Проверка путей к файлам
    if not os.path.exists(settings.DATABASE_PATH):
        errors.append(f"Путь к базе данных не существует: {settings.DATABASE_PATH}")

    # Проверка файлов модели
    try:
        model_path = settings.classifier_model_path
        if not os.path.exists(model_path):
            errors.append(f"Файл модели не найден: {model_path}")
    except Exception as e:
        errors.append(f"Ошибка конфигурации модели: {e}")

    if errors:
        raise ValueError(f"Валидация конфигурации не удалась: {'; '.join(errors)}")