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

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

Все настройки — через переменные окружения (.env или .env.production).

Обязательные

Переменная Описание Пример
SECRET_KEY JWT и криптография (≥32 символа) openssl rand -hex 32
DATABASE_URL SQLite или PostgreSQL sqlite:///./medinsight.db
REDIS_URL Брокер Celery и кэш redis://redis:6379/0

Приложение

Переменная По умолчанию Описание
ENVIRONMENT development development / production
APP_PORT 8001 Порт uvicorn
REDIS_HOST_PORT 6380 Порт Redis на хосте (compose)
APP_VERSION 1.0.0 Версия в /health
CORS_ORIGINS * Разрешённые origins (через запятую)
LOG_LEVEL INFO Уровень логов
DEFAULT_LANGUAGE en Язык UI/контента по умолчанию

AI Medical Assistant / RAG

Переменная По умолчанию Описание
MEDICAL_ASSISTANT_ENABLED true Включить модули обучения
RAG_ENABLED true Включить RAG для репетитора
RAG_COLLECTION_NAME medical_knowledge Коллекция Chroma
RAG_MODE local local / external / hybrid
RAG_EXTERNAL_URL Base URL внешнего search API
RAG_EXTERNAL_API_KEY Bearer для внешнего RAG
RAG_EXTERNAL_TIMEOUT_SECONDS 8.0 Таймаут внешнего поиска
RAG_HYBRID_LOCAL_WEIGHT 0.5 Вес локального поиска в hybrid
CHROMA_PERSIST_DIR ./chroma_data Каталог Chroma
MOCK_RAG_API_KEY Ключ для scripts/mock_rag_server.py

Compose-профиль демо-RAG: docker compose --profile mock-rag up -d mock_rag (контейнер aima-mock-rag).

Безопасность и шифрование

Переменная Описание
ENVIRONMENT development или production (fail-fast на дефолтных секретах в prod)
AGE_PUBLIC_KEY Публичный ключ age для шифрования файлов
AGE_SECRET_KEY Приватный ключ (только на сервере!)
ENCRYPTION_ENABLED true / false
MFA_ENFORCED true — требовать 2FA; false — временно отключить (см. ниже)
MFA_REQUIRED_ROLES Роли, для которых обязателен TOTP (admin,doctor по умолчанию)
PASSWORD_MIN_LENGTH Мин. длина пароля (12)
LOGIN_LOCKOUT_MAX_ATTEMPTS Попыток до блокировки аккаунта (5)

2FA (TOTP)

Пользователь включает TOTP в настройках аккаунта (/api/totp/*). При входе API может вернуть totp_required: true — тогда повторите POST /api/auth/login с полем totp_code.

Временное отключение 2FA на сервере:

# в .env на VPS
MFA_ENFORCED=false
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --force-recreate app celery_worker

Note

docker restart не подхватывает новые переменные из .env — нужен --force-recreate или полный ./deploy.sh production.

Генерация ключей:

age-keygen -o age-key.txt
# AGE_PUBLIC_KEY = age1...
# AGE_SECRET_KEY = AGE-SECRET-KEY-1...

GPT / ProxyAPI

Переменная Описание
OPENAI_API_KEY / PROXYAPI_KEY Ключ ProxyAPI (OpenAI-совместимый)
OPENAI_BASE_URL / PROXYAPI_BASE_URL Базовый URL API
OPENAI_MODEL / GPT_MODEL Модель, напр. gpt-4o-mini

Без ключа работает rule-based fallback.

Email (SMTP)

Переменная Описание
SMTP_HOST, SMTP_PORT Сервер SMTP
SMTP_USER, SMTP_PASSWORD Учётные данные
SMTP_FROM Адрес отправителя
FRONTEND_URL Базовый URL для ссылок в письмах

Telegram

Переменная Описание
TELEGRAM_BOT_TOKEN Токен @BotFather
TELEGRAM_WEBHOOK_SECRET Секрет вебхука

DICOM

Переменная По умолчанию Описание
DICOM_MAX_FILE_SIZE_MB 500 Лимит загрузки
DICOM_STORAGE_PATH storage/dicom Каталог хранения

Резервное копирование

Переменная Описание
BACKUP_ENABLED true / false
BACKUP_SCHEDULE_CRON Расписание (Celery Beat)
BACKUP_RETENTION_DAYS Срок хранения архивов

Мультитенантность

Переменная Описание
DEFAULT_TENANT_SUBDOMAIN Subdomain по умолчанию
TENANT_HEADER Заголовок для API (опционально)

Celery

Переменная Описание
CELERY_BROKER_URL Обычно = REDIS_URL
CELERY_RESULT_BACKEND Backend результатов

Docker Compose (имена)

Контейнеры и volumes префиксуются aima-* (aima-app, aima-redis, aima-postgres, aima-chroma, …).

Применение изменений

Переменные из .env передаются в контейнер через env_file при создании контейнера.

# Недостаточно — старые env останутся в контейнере:
docker compose restart app

# Правильно — пересоздать app и worker:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --force-recreate app celery_worker

# Или полный деплой (рекомендуется):
./deploy.sh production

Добавить недостающие ключи из .env.example без потери секретов:

python scripts/sync_env_from_example.py

Полный список: environment-variables.md.