-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
151 lines (130 loc) · 9.55 KB
/
.env.example
File metadata and controls
151 lines (130 loc) · 9.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# Кодировка (помогает избежать «кракозябр» в логах/консоли на некоторых хостах)
# PYTHONUTF8=1 - форсирует UTF-8 режим в Python (ввод/вывод по умолчанию)
# PYTHONIOENCODING - кодировка stdout/stderr
PYTHONUTF8=1
PYTHONIOENCODING=utf-8
# Источники пакетов/образов (по умолчанию — публичные репозитории).
# DOCKER_REGISTRY_PREFIX используется для образов и должен оканчиваться на `/`.
DOCKER_REGISTRY_PREFIX=
PIP_INDEX_URL=https://pypi.org/simple
PIP_TRUSTED_HOST=pypi.org
NPM_REGISTRY_URL=https://registry.npmjs.org/
NPM_STRICT_SSL=true
# Alpine APK репозитории для frontend-сборки (опционально).
# Нужны для закрытой сети, где нет доступа к dl-cdn.alpinelinux.org.
# APK_TLS_NO_VERIFY=true - временно отключить TLS-проверку только для `apk add` (если корпоративный CA не установлен)
APK_REPOSITORY_MAIN_URL=
APK_REPOSITORY_COMMUNITY_URL=
APK_TLS_NO_VERIFY=false
# AI / провайдеры
# OPENAI_BASE_URL - базовый URL OpenAI-compatible API (поддерживаются `https://host` и `https://host/v1`)
# OPENAI_MODELS - список моделей через запятую (попадает в UI и используется для валидации выбора модели)
# OPENAI_PROVIDER_LABEL - отображаемое имя провайдера в UI
# OPENAI_API_KEY - опциональный дефолтный ключ (если не передан из UI; в UI ключ хранится зашифрованно)
# OPENAI_EXTRA_HEADERS_JSON - доп. HTTP-заголовки в JSON-объекте (для vendor-фич, например prompt caching)
# OPENAI_EXTRA_BODY_JSON - доп. поля в body /chat/completions в JSON-объекте
# TLS_VERIFY - проверка TLS сертификата для OpenAI-compatible запросов: 1 = включить (безопасно), 0 = отключить (небезопасно)
OPENAI_BASE_URL=https://api.openai.com
OPENAI_MODELS=gpt-4o-mini,gpt-4.1-mini
OPENAI_PROVIDER_LABEL=OpenAI
OPENAI_API_KEY=
OPENAI_EXTRA_HEADERS_JSON=
OPENAI_EXTRA_BODY_JSON=
TLS_VERIFY=0
# OLLAMA_BASE_URL/OLLAMA_MODELS - внешний Ollama (опционально; если не заданы, провайдер скрыт из UI)
OLLAMA_BASE_URL=
OLLAMA_MODELS=
# AI_PROVIDERS_CONFIG_PATH - путь к конфигу провайдеров внутри контейнера
AI_PROVIDERS_CONFIG_PATH=/app/config/ai_providers.json
# APP_SECRET - обязателен: используется для шифрования пользовательских API-токенов (должен быть длинным и стабильным)
# Не храните реальный APP_SECRET в git; задавайте только в локальном `.env` или через CI/CD переменные окружения.
APP_SECRET=
# CORS_ALLOW_ORIGINS - разрешенные origins для UI (через запятую)
CORS_ALLOW_ORIGINS=http://localhost:8080,http://127.0.0.1:8080
# SESSION_COOKIE_* - настройки HttpOnly cookie-сессии
SESSION_COOKIE_NAME=session_token
SESSION_COOKIE_SECURE=0
# SESSION_USER_CACHE_* - in-memory кэш сессия->пользователь в backend (снижает нагрузку при частом polling)
SESSION_USER_CACHE_TTL_SEC=15
SESSION_USER_CACHE_MAX=5000
# Bootstrap admin (опционально):
# если заданы логин/пароль, backend при старте создаст admin-пользователя (если его нет)
# Не храните реальный BOOTSTRAP_ADMIN_PASSWORD в git; задавайте только локально/в CI/CD.
# BOOTSTRAP_ADMIN_FORCE_PASSWORD=1 дополнительно принудительно обновляет пароль на каждом старте
BOOTSTRAP_ADMIN_USERNAME=
BOOTSTRAP_ADMIN_PASSWORD=
BOOTSTRAP_ADMIN_FORCE_PASSWORD=0
# LOG_LEVEL - уровень логов backend/worker
LOG_LEVEL=INFO
# NOISY_ACCESS_LOG_SLOW_MS - логировать "шумные" polling endpoint только если они медленные/ошибочные
NOISY_ACCESS_LOG_SLOW_MS=250
# DOCKER_LOG_MAX_* - лимиты docker json-file логов (см. docker-compose.yml)
DOCKER_LOG_MAX_SIZE=10m
DOCKER_LOG_MAX_FILE=10
# Queue/Redis
# REDIS_URL - используется для очереди worker и для LLM-кэша
# REDIS_QUEUE_KEY - ключ очереди задач анализа (list)
# REDIS_INSPECT_QUEUE_KEY - ключ очереди задач inspect (list)
# JOB_QUEUE_DEDUP_TTL_SEC - TTL маркера в очереди для защиты от дублей по job_id
REDIS_URL=redis://redis:6379/0
REDIS_QUEUE_KEY=review_analyzer:jobs
REDIS_INSPECT_QUEUE_KEY=review_analyzer:file_inspect_jobs
JOB_QUEUE_DEDUP_TTL_SEC=3600
# PostgreSQL
# DATABASE_URL - строка подключения PostgreSQL (обязательна)
# DB_POOL_MIN_SIZE / DB_POOL_MAX_SIZE - размеры пула подключений PostgreSQL внутри backend/worker
# Если не заданы, используются безопасные дефолты приложения: 1 и 12
# Режим работы: только распределенный (API -> Redis queue -> worker/inspect-worker)
POSTGRES_DB=review_analyzer
POSTGRES_USER=review_analyzer
POSTGRES_PASSWORD=review_analyzer
DATABASE_URL=postgresql://review_analyzer:review_analyzer@postgres:5432/review_analyzer
DB_POOL_MIN_SIZE=
DB_POOL_MAX_SIZE=
# Runtime tuning
# REQUEST_TIMEOUT_SEC - таймаут запросов к LLM/эмбеддингам
# LLM_RETRIES - число повторов при невалидном JSON/ошибках провайдера
# Ограничения длины промпта не задаются — их определяет сама LLM.
# При превышении контекста провайдер вернёт ошибку, она отобразится в колонке "error" строки
# с рекомендацией уменьшить group_max_rows или выбрать модель с большим контекстом.
# HASH_PARTITIONS - число hash-партиций для таблиц reports/report_rows (для новой БД; при существующих партициях используется текущий modulus)
# GROUP_MAX_ROWS - backend-лимит строк в одной группе для группового анализа (UI не задает)
# MAX_UPLOAD_SIZE_MB - максимальный размер загружаемого .xlsx файла
# WORKER_RUNNING_LEASE_TTL_SEC - TTL lease активной задачи в Redis (защита recovery от живых job)
# WORKER_QUEUED_STALE_SEC - через сколько секунд queued-задача без queue-marker считается осиротевшей
# JOB_EVENTS_FALLBACK_POLL_SEC - fallback-интервал опроса job-событий backend при недоступности Redis pubsub
# REPORT_CLEANUP_ENABLED - включить фоновую очистку старых отчетов/осиротевших загрузок
# REPORT_KEEP_LAST - сколько последних отчетов хранить на пользователя
# REPORT_CLEANUP_INTERVAL_SEC - период фоновой очистки в worker (сек)
# UPLOAD_ORPHAN_TTL_HOURS - через сколько часов удалять загруженные xlsx без привязки к отчетам
REQUEST_TIMEOUT_SEC=60
LLM_RETRIES=2
# JOB_CLEANUP_DELAY_SEC - через сколько секунд после завершения Job удаляется из in-memory map JobManager (см. BUG-01)
JOB_CLEANUP_DELAY_SEC=300
HASH_PARTITIONS=100
GROUP_MAX_ROWS=100
MAX_UPLOAD_SIZE_MB=200
WORKER_RUNNING_LEASE_TTL_SEC=30
WORKER_QUEUED_STALE_SEC=90
JOB_EVENTS_FALLBACK_POLL_SEC=5
REPORT_CLEANUP_ENABLED=1
REPORT_KEEP_LAST=20
REPORT_CLEANUP_INTERVAL_SEC=600
UPLOAD_ORPHAN_TTL_HOURS=24
# MAX_LLM_CACHE_ROWS - лимит строк таблицы `llm_cache` (точный кэш по hash); старые записи удаляются при обслуживании
MAX_LLM_CACHE_ROWS=20000000
# MAX_SEMANTIC_CACHE_ROWS - лимит строк таблицы `llm_semantic_cache` (семантический кэш по embedding)
MAX_SEMANTIC_CACHE_ROWS=500000
# CACHE_MAINTENANCE_INTERVAL_SEC - минимальный интервал между чистками/вакуумом (запускается "по событиям", не по cron)
CACHE_MAINTENANCE_INTERVAL_SEC=300
# SEMANTIC_CACHE_ENABLED - 1 включает семантический кэш (embedding->similarity), 0 отключает (останется только точный кэш)
SEMANTIC_CACHE_ENABLED=1
# EMBEDDING_PROVIDER/EMBEDDING_MODEL - провайдер и модель эмбеддингов (для семантического кэша)
EMBEDDING_PROVIDER=ollama
EMBEDDING_MODEL=nomic-embed-text
# SEMANTIC_CACHE_THRESHOLD - порог cosine similarity для cache-hit (0..1)
SEMANTIC_CACHE_THRESHOLD=0.94
# SEMANTIC_CACHE_CANDIDATES - сколько последних кандидатов из БД сравнивать по similarity
SEMANTIC_CACHE_CANDIDATES=200
# GLOBAL_LLM_PARALLELISM - глобальный лимит параллельных LLM-вызовов на процесс (API или worker)
GLOBAL_LLM_PARALLELISM=12