# =============================================================================
# Lucidata — настройки установки. Заполните ПЕРЕД первым запуском ./deploy.sh.
#
# Это единственный файл, который обязательно правит заказчик. Домен здесь НЕ
# указывается — он передаётся аргументом: ./deploy.sh bi.example.ru
#
# Все значения CHANGEME_* нужно заменить. deploy.sh откажется запускаться, пока
# хотя бы одно из них осталось на месте, и назовёт строку.
#
# Команды генерации секретов — ТЕ ЖЕ, что в instalation_manual.txt, раздел 5:
#   случайная строка   python3 -c "import secrets; print(secrets.token_urlsafe(48))"
#   ключ шифрования    openssl rand -base64 32 | tr '+/' '-_'
# (Если привычнее python: ключ шифрования даёт и
#  python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
#  — формат тот же, urlsafe-base64 от 32 байт.)
# =============================================================================


# =============================================================================
# 1. ОБЯЗАТЕЛЬНО ЗАПОЛНИТЬ
# =============================================================================

# --- Секреты приложения ------------------------------------------------------
# Подписывает cookie сессий и тикеты комнат real-time. ОДНО значение на всю
# установку: если его не задать, каждый процесс сгенерирует свой, и выданная
# приложением cookie не будет признана контейнером rt — а он вообще откажется
# стартовать без этого значения.
#   python3 -c "import secrets; print(secrets.token_urlsafe(48))"
LUCIDATA_SESSION_SECRET=CHANGEME_SESSION_SECRET

# HMAC-ключ токенов metrics-API (коннектор Excel/Sheets). Без него выданные
# токены не переживают перезапуск приложения.
#   python3 -c "import secrets; print(secrets.token_urlsafe(48))"
LUCIDATA_SHEETS_SECRET=CHANGEME_SHEETS_SECRET

# HMAC-ключ токенов встраивания (дашборд в вашем портале). Без него встраивание
# ломается при каждом перезапуске приложения.
#   python3 -c "import secrets; print(secrets.token_urlsafe(48))"
LUCIDATA_EMBED_SECRET=CHANGEME_EMBED_SECRET

# Ключ шифрования секретов «на диске»: пароли подключений к вашим СУБД,
# client secret SSO, пароль SMTP, токены ботов. Формат — urlsafe-base64,
# не меньше 32 байт.
#   openssl rand -base64 32 | tr '+/' '-_' 
#
# ВАЖНО: если оставить пустым, ключ будет ВЫВЕДЕН из LUCIDATA_SESSION_SECRET —
# и тогда любая будущая смена сессионного секрета молча сделает все сохранённые
# пароли подключений нерасшифровываемыми. Задайте его явно и храните отдельно.
# Неверное значение останавливает старт сразу, а не при первом сохранении.
LUCIDATA_ENCRYPTION_KEY=CHANGEME_ENCRYPTION_KEY

# --- База метаданных ---------------------------------------------------------
# Пароль встроенного Postgres (сервис store-postgres): пользователи, права,
# дашборды, аудит, лизы планировщика. Если не задать, подставится общеизвестный
# дефолт — установка поднимется и будет выглядеть рабочей с известным всем
# паролем базы метаданных.
#   python3 -c "import secrets; print(secrets.token_urlsafe(24))"
STORE_POSTGRES_PASSWORD=CHANGEME_STORE_PG_PASSWORD

# --- Первый администратор ----------------------------------------------------
# Установка стартует БЕЗ единого пользователя (демо-данных и демо-входа нет).
# Эта переменная создаёт первого администратора при первом старте. Без неё
# войти не сможет никто и починить это можно будет только пересозданием
# контейнеров.
# Не путайте с LUCIDATA_ADMIN_EMAIL ниже — тот только адрес для уведомлений.
LUCIDATA_BOOTSTRAP_ADMIN_EMAIL=CHANGEME_ADMIN_EMAIL

# Пароль первого администратора. ЗАДАЙТЕ ЕГО ЗДЕСЬ — это самый надёжный путь.
#
# Если оставить пусто, система сгенерирует одноразовый пароль и напечатает его
# в журнал РОВНО ОДИН РАЗ. Установщик подхватит его оттуда и сохранит в
# generated/first-admin.txt, но журнал исчезает при любом пересоздании
# контейнеров — а оно происходит при каждой правке этого файла. Учётная запись
# при этом создаётся ОДИН раз за установку: повторный запуск не выдаёт нового
# пароля и не сбрасывает старый.
#
# Требования к паролю: не короче 10 символов, не из одного повторяющегося
# символа. Пароль, который политике не удовлетворяет, ОСТАНАВЛИВАЕТ старт — об
# этом будет сказано в журнале, молча он не игнорируется.
# Первый вход в любом случае обязан сменить пароль.
#   python3 -c "import secrets; print(secrets.token_urlsafe(16))"
LUCIDATA_BOOTSTRAP_ADMIN_PASSWORD=

# --- Объектное хранилище -----------------------------------------------------
# Здесь лежат материализованные выборки (экстракты), артефакты маркетплейса,
# зона загрузки файлов и PNG для алертов.
#
# ПОЧЕМУ ИМЕННО ТАК. Узел приложения в этой поставке ОДИН, поэтому режим `fs`
# (файлы в томе контейнера) тоже работоспособен. По умолчанию бандл всё же
# поднимает собственный MinIO (профиль minio) и режим s3: артефакты получают
# версии, переживают пересоздание контейнера и переносятся в ваш собственный
# S3 простой сменой адреса, без переноса файлов. Переключение на `fs` —
# осознанный выбор, deploy.sh о нём предупредит, но установку не остановит.
LUCIDATA_OBJECT_STORAGE=s3
LUCIDATA_S3_ENDPOINT=http://minio:9000
LUCIDATA_S3_BUCKET=lucidata
LUCIDATA_S3_REGION=us-east-1
# Логин/пароль встроенного MinIO. Пароль должен СОВПАДАТЬ с
# LUCIDATA_S3_SECRET_KEY ниже — deploy.sh это проверяет и откажется
# запускаться, если значения разошлись.
#   python3 -c "import secrets; print(secrets.token_urlsafe(24))"
MINIO_ROOT_USER=lucidata
MINIO_ROOT_PASSWORD=CHANGEME_MINIO_PASSWORD
LUCIDATA_S3_ACCESS_KEY=lucidata
LUCIDATA_S3_SECRET_KEY=CHANGEME_MINIO_PASSWORD


# =============================================================================
# 2. TLS И ДОСТУП К САЙТУ
# =============================================================================

# Режим TLS на крае. Значение читает ТОЛЬКО ./deploy.sh (он пишет из него файл
# generated/tls.conf, который импортирует Caddyfile).
#
#   cert     (по умолчанию) — ВАШ сертификат. Положите в каталог ssl/ два файла
#            с точно такими именами: ssl.pem (цепочка) и ssl.key (приватная
#            часть). deploy.sh проверит, что они на месте, и выставит на них
#            владельца 10001 — край работает под непривилегированным uid и
#            иначе не сможет прочитать собственный ключ.
#   acme     — автоматический выпуск Let's Encrypt. Нужен исходящий доступ к
#            центру сертификации и входящие 80/443 из интернета. В закрытом
#            контуре не работает. Требует ACME_EMAIL ниже.
#   internal — самоподписанный сертификат локального CA Caddy. ТОЛЬКО для
#            внутренней проверки: браузеры будут показывать предупреждение,
#            пока корневой сертификат Caddy не роздан на рабочие места.
LUCIDATA_TLS_MODE=cert

# Адрес для уведомлений центра сертификации. Нужен только при LUCIDATA_TLS_MODE=acme.
ACME_EMAIL=

# Общий HTTP Basic Auth поверх всего сайта. По умолчанию ВЫКЛЮЧЕН, и это
# осознанно: в рабочей установке работают настоящий вход, роли, аудит и 2FA, а
# общий пароль неатрибутируем (аудит не скажет, кто вошёл) и ЛОМАЕТ встраивание
# дашбордов и внешние API-клиенты — из-под BasicAuth выведена только
# поверхность /api/v1/mcp*.
# Включайте только как временный забор вокруг ещё не настроенного стенда.
# Инструкция по генерации хэша — в instalation_manual.txt, п. «BasicAuth».
LUCIDATA_BASIC_AUTH=0

# Порты, которые край занимает на хосте. Менять только если они уже заняты.
EDGE_HTTP_PORT=80
EDGE_HTTPS_PORT=443


# =============================================================================
# 3. РЕКОМЕНДУЕТСЯ НАСТРОИТЬ
# =============================================================================

# Адрес, на который приходят уведомления: заявки на доступ, модерация реестра.
# Учётную запись НЕ создаёт (за это отвечает LUCIDATA_BOOTSTRAP_ADMIN_EMAIL).
LUCIDATA_ADMIN_EMAIL=

# --- Почта -------------------------------------------------------------------
# Без SMTP не работают: сброс пароля и доставка отчётов/дайджестов/алертов
# почтой. Всё остальное работает. Канал включается самим фактом заполнения
# LUCIDATA_SMTP_HOST.
# LUCIDATA_SMTP_HOST=smtp.example.ru
# LUCIDATA_SMTP_PORT=587
# LUCIDATA_SMTP_FROM=lucidata@example.ru
# LUCIDATA_SMTP_USER=
# LUCIDATA_SMTP_PASSWORD=
# LUCIDATA_SMTP_USE_TLS=1


# =============================================================================
# 4. ПО ЖЕЛАНИЮ
# =============================================================================

# --- Свой Postgres вместо встроенного ----------------------------------------
# Если у вас есть собственный кластер Postgres, задайте строку подключения —
# сервис store-postgres из docker-compose.yml тогда можно не запускать.
# LUCIDATA_STORE_URL=postgresql://user:pass@pg-host:5432/lucidata_store?sslmode=require

# --- Свой S3 вместо встроенного MinIO ----------------------------------------
# Поставьте 0, чтобы НЕ поднимать встроенный MinIO, и укажите адрес и ключи
# своего хранилища в блоке LUCIDATA_S3_* выше. Переменную читает только deploy.sh.
LUCIDATA_BUNDLED_MINIO=1
# Один бакет может обслуживать несколько установок — каждая под своим префиксом.
# LUCIDATA_S3_PREFIX=prod
# Шифрование на стороне сервера: AES256 | aws:kms (+ LUCIDATA_S3_SSE_KMS_KEY_ID).
# Для MinIO без KMS оставьте пустым — он отвергнет заголовок.
# LUCIDATA_S3_SSE=

# --- Свой Redis вместо встроенного -------------------------------------------
# Redis нужен для присутствия и совместного редактирования; состояние в нём
# эфемерно, бэкапить нечего.
# LUCIDATA_REDIS_URL=redis://redis-host:6379/0

# --- Локальная LLM (BYO-LLM) -------------------------------------------------
# Мастера с ИИ по умолчанию отвечают честной ошибкой «провайдер не настроен» и
# ничего не выдумывают. Для закрытого контура штатный путь — своя модель:
# укажите адрес совместимого с OpenAI API сервиса. Приватные адреса для LLM
# разрешаются отдельным флагом.
# LUCIDATA_LLM_BASE_URL=http://llm-host:8000/v1
# LUCIDATA_LLM_MODEL=
# LUCIDATA_SSRF_ALLOW_PRIVATE_LLM=1

# --- Закрытый контур без интернета -------------------------------------------
# Расширения DuckDB для федерации уже лежат внутри образа, автозагрузка из сети
# выключена. Эта строка делает отказ ГРОМКИМ, если расширения вдруг не окажется
# на месте, вместо тихой попытки сходить в интернет.
# LUCIDATA_DUCKDB_OFFLINE=1

# --- Протокол Postgres wire (psql / DBeaver / Tableau) -----------------------
# Выключен по умолчанию, поднимается на узле приложения и слушает петлю
# внутри контейнера. Пара PEM для него кладётся в каталог keys/ — он
# смонтирован в контейнеры как /etc/lucidata/keys (только чтение).
# LUCIDATA_PG_WIRE=1
# LUCIDATA_PG_TLS_CERT=/etc/lucidata/keys/pg-wire.pem
# LUCIDATA_PG_TLS_KEY=/etc/lucidata/keys/pg-wire.key

# --- Внешняя поверхность MCP (доступ ИИ-агентов) -----------------------------
# По умолчанию ВЫКЛЮЧЕНА: эндпоинт отвечает 404. Включение открывает
# управляемый набор инструментов для внешних MCP-клиентов; аутентификация —
# только по токенам Lucidata (Bearer ld_…), которые выпускаются в интерфейсе.
# LUCIDATA_MCP_HTTP=1

# --- Ограничение памяти Redis ------------------------------------------------
# REDIS_MAXMEMORY=256mb

# --- Имя проекта docker compose ----------------------------------------------
# Меняйте, только если на этом хосте уже есть установка Lucidata: имя проекта
# определяет префикс имён томов, то есть какие данные увидит установка.
# COMPOSE_PROJECT_NAME=lucidata
