Environment Variables
Full reference from .env.example.
Security and JWT
| Variable |
Default |
Description |
SECRET_KEY |
— |
JWT secret (≥32 characters). Required |
ALGORITHM |
HS256 |
JWT algorithm |
ACCESS_TOKEN_EXPIRE_DAYS |
7 |
Token lifetime |
Database and storage
| Variable |
Default |
Description |
DATABASE_URL |
sqlite:///./medinsight.db |
SQLite or PostgreSQL URL |
STORAGE_PATH |
./storage |
Encrypted documents directory |
Application
| Variable |
Default |
Description |
APP_PORT |
8000 |
uvicorn port |
APP_VERSION |
1.0.0 |
Version in /health |
CORS_ORIGINS |
localhost |
Origins comma-separated |
SPACY_MODEL |
ru_core_news_lg |
spaCy NLP model |
LOG_LEVEL |
INFO |
Log level |
LOG_JSON_FORMAT |
true |
JSON logs |
GRACEFUL_SHUTDOWN_TIMEOUT |
30 |
Drain on shutdown (sec) |
Traefik / HTTPS (prod)
| Variable |
Description |
DOMAIN |
Domain for Let's Encrypt |
ACME_EMAIL |
Email for ACME |
Redis and Celery
| Variable |
Default |
Description |
REDIS_URL |
redis://redis:6379/0 |
Celery broker |
CELERY_RESULT_BACKEND |
redis://redis:6379/1 |
Result backend |
GPT (ProxyAPI)
| Variable |
Description |
OPENAI_API_KEY |
ProxyAPI key |
OPENAI_BASE_URL |
https://api.proxyapi.ru/openai/v1 |
OPENAI_MODEL |
gpt-4o-mini |
Multi-tenancy and encryption
| Variable |
Default |
Description |
TENANT_MODE |
true |
Enable multi-tenant |
ENCRYPTION_ENABLED |
true |
File encryption |
ENCRYPTION_KEY |
— |
age key (or via file) |
ENCRYPTION_KEY_PATH |
secrets/encryption_key.txt |
Key file path |
SUPER_ADMIN_EMAIL |
— |
Superadmin email |
SUPER_ADMIN_PASSWORD |
— |
Password (first run) |
DEFAULT_TENANT_NAME |
Default Clinic |
Default tenant name |
DEFAULT_TENANT_SUBDOMAIN |
default |
Default subdomain |
Self-healing RAG
| Variable |
Default |
Description |
SELF_HEALING_ENABLED |
true |
Auto-recovery |
CHROMA_PERSIST_DIR |
./chroma_data |
ChromaDB |
EMBEDDING_MODEL |
all-MiniLM-L6-v2 |
Embeddings |
SIMILARITY_THRESHOLD |
0.75 |
Similarity threshold |
MAX_RETRY_ATTEMPTS |
2 |
GPT retry |
Webhooks
| Variable |
Default |
Description |
WEBHOOK_ENABLED |
true |
Outbound webhooks |
WEBHOOK_TIMEOUT_SECONDS |
10 |
HTTP timeout |
WEBHOOK_RETRY_COUNT |
3 |
Retries |
WEBHOOK_PUBLIC_BASE_URL |
— |
Base URL for callbacks |
Billing
| Variable |
Description |
BILLING_ENABLED |
false = no limits (test) |
STRIPE_* |
Stripe keys and price IDs |
YOOKASSA_* |
YooKassa |
FREEMIUM_ANALYSIS_LIMIT |
5 |
PRO_ANALYSIS_LIMIT |
100 |
ENTERPRISE_ANALYSIS_LIMIT |
999999 |
PRO_PRICE_RUB/USD |
Prices in kopecks/cents |
Export
| Variable |
Default |
Description |
EXPORT_MAX_ROWS |
10000 |
Excel row limit |
EXPORT_MAX_COLUMNS |
50 |
Column limit |
EXPORT_TEMP_DIR |
./storage/exports |
Temp files |
Backup
| Variable |
Default |
Description |
BACKUP_ENABLED |
true |
Auto backup |
BACKUP_DIR |
/backups |
Archive directory |
BACKUP_RETENTION_DAYS |
7 |
Days |
BACKUP_RETENTION_WEEKS |
4 |
Weeks |
BACKUP_RETENTION_MONTHS |
12 |
Months |
BACKUP_SCHEDULE_FULL |
0 2 * * * |
Full backup (cron) |
BACKUP_SCHEDULE_DB |
0 * * * * |
DB hourly |
BACKUP_ENCRYPTION_ENABLED |
false |
Archive encryption |
BACKUP_ALERT_MAX_AGE_HOURS |
48 |
Alert if no backup |
Telegram
| Variable |
Description |
TELEGRAM_BOT_TOKEN |
Bot token |
TELEGRAM_CHAT_ID |
Chat for alerts |
TELEGRAM_BOT_ENABLED |
false |
TELEGRAM_BOT_WEBHOOK_URL |
Webhook URL |
TELEGRAM_LINK_CODE_TTL |
600 sec |
UI
| Variable |
Default |
Description |
DEFAULT_THEME |
light |
light / dark / system |
DICOM
| Variable |
Default |
Description |
DICOM_ENABLED |
true |
DICOM module |
DICOM_MAX_FILE_SIZE_MB |
500 |
Upload limit |
DICOM_STORAGE_PATH |
./storage/dicom |
Storage |
DICOM_THUMBNAIL_SIZE |
256x256 |
Thumbnail size |
OpenTelemetry
| Variable |
Description |
OTEL_ENABLED |
Tracing |
OTEL_SERVICE_NAME |
medinsight |
OTEL_EXPORTER_OTLP_ENDPOINT |
Collector URL |
WebSocket
| Variable |
Default |
Description |
WEBSOCKET_ENABLED |
true |
Real-time |
WEBSOCKET_HEARTBEAT_INTERVAL |
30 |
Heartbeat (sec) |
WEBSOCKET_MAX_CONNECTIONS |
1000 |
Connection limit |
Rate limiting
| Variable |
Default |
Description |
RATE_LIMIT_ENABLED |
true |
Limits |
RATE_LIMIT_LOGIN_PER_MINUTE |
10 |
Login |
RATE_LIMIT_REGISTER_PER_HOUR |
5 |
Registration |
Email
| Variable |
Description |
SMTP_HOST, SMTP_PORT |
SMTP server |
SMTP_USER, SMTP_PASSWORD |
Auth |
SMTP_FROM |
From address |
EMAIL_ENABLED |
Enable email |
FRONTEND_URL |
Frontend base URL |
Example .env.production
SECRET_KEY=$(openssl rand -hex 32)
DATABASE_URL=sqlite:////app/data/medinsight.db
REDIS_URL=redis://redis:6379/0
APP_ENV=production
CORS_ORIGINS=https://medinsight.fileguardian.info
ENCRYPTION_ENABLED=true
OPENAI_API_KEY=sk-...
FRONTEND_URL=https://medinsight.fileguardian.info