DB_SCHEMA (по умолчанию dkb, валидация идентификатора) читают models/base.py (SCHEMA), db/db.py (search_path),
alembic/env.py и миграции 0001-0005 (SCHEMA и строковые FK f"{SCHEMA}.x.id" вместо литералов). В контуре -
OPENBAO__APP__DB_SCHEMA. Офлайн-SQL `alembic upgrade head --sql` при значении по умолчанию совпадает побайтно.
Тесты: валидация настройки, миграции и сессия приложения в схеме dkb_alt; .env.example/.env.test/README/CLAUDE.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
81 lines
4.8 KiB
Plaintext
81 lines
4.8 KiB
Plaintext
# Пример локального окружения. Скопируйте в api/.env: cp .env.example .env
|
||
# Порты — стандартные для docs/dev/docker-compose.yml.
|
||
|
||
# Контур платформы: обычные переменные окружения там задать нельзя, передаются только секреты OpenBao (OPENBAO__*).
|
||
# Любая настройка верхнего уровня ниже (не вложенные OPENBAO__<ГРУППА>__*) может прийти как OPENBAO__APP__<ИМЯ>, например:
|
||
# OPENBAO__APP__NATS_ENABLED=true
|
||
# OPENBAO__APP__DB_SCHEMA=dkb
|
||
# OPENBAO__APP__DEBUG=true
|
||
|
||
# Схема PostgreSQL модели данных (по умолчанию dkb). Одно значение для приложения и Alembic; идентификатор
|
||
# [a-z_][a-z0-9_]{0,62}, не pg_*. В контуре платформы: OPENBAO__APP__DB_SCHEMA
|
||
DB_SCHEMA=dkb
|
||
# OPENBAO__APP__AUTH_DEV_ISSUER=true
|
||
# OPENBAO__APP__FORWARDED_ALLOW_IPS=10.0.0.1,10.0.0.2
|
||
# Приоритет: обычный env -> OPENBAO__APP__* -> .env -> значение по умолчанию. Неизвестное имя — ошибка при старте.
|
||
# В .env-файле OPENBAO__APP__* не читается (только процесс окружения).
|
||
|
||
DEBUG=true
|
||
|
||
# Dev-запуск слушает только loopback: при DEBUG и AUTH_DEV_ISSUER эндпоинт dev-токенов выдаёт токен любому, кто знает
|
||
# email пользователя. По умолчанию приложения (без этой строки) — 0.0.0.0, как в контейнере платформы.
|
||
SERVER__HOST=127.0.0.1
|
||
SERVER__PORT=8000
|
||
|
||
# PostgreSQL (драйвер asyncpg)
|
||
OPENBAO__DATABASE__DATABASE_URL=postgresql+asyncpg://armka:armka@localhost:5432/armka
|
||
|
||
# MinIO (адрес без схемы — так ждёт miniopy-async)
|
||
OPENBAO__MINIO__MINIO_URL=localhost:9000
|
||
OPENBAO__MINIO__MINIO_ADMIN_LOGIN=minioadmin
|
||
OPENBAO__MINIO__MINIO_ADMIN_PASSWORD=minioadmin
|
||
OPENBAO__MINIO__MINIO_BUCKET=arm-ka
|
||
# false — MinIO по http (docker compose); по умолчанию true (https, как на платформе)
|
||
OPENBAO__MINIO__MINIO_SECURE=false
|
||
|
||
# NATS без JetStream; пустые NATS_SEED/NATS_JWT — подключение без nkeys
|
||
OPENBAO__NATS__NATS_URL=nats://localhost:4222
|
||
OPENBAO__NATS__NATS_SEED=
|
||
OPENBAO__NATS__NATS_JWT=
|
||
|
||
# SMB необязателен (ядру в Срезе 0 не нужен): пустой SMB_HOST — сессия SMB не регистрируется
|
||
OPENBAO__SMB__SMB_HOST=
|
||
OPENBAO__SMB__SMB_PATH=
|
||
OPENBAO__SMB__SMB_LOGIN=
|
||
OPENBAO__SMB__SMB_PASSWORD=
|
||
|
||
# CORS при DEBUG=false: источники через запятую или JSON-список; пусто — кросс-доменные запросы запрещены.
|
||
# При DEBUG=true не используется (CORS `*`); документация API (/docs, /redoc, /openapi.json) — тоже только при DEBUG=true
|
||
CORS_ORIGINS=
|
||
|
||
# Доверенные прокси (X-Forwarded-For): адреса через запятую или `*`; адрес клиента в audit_event берётся из заголовка
|
||
# только от них. По умолчанию — 127.0.0.1
|
||
FORWARDED_ALLOW_IPS=127.0.0.1
|
||
|
||
# Аутентификация. Dev-эмитент работает только при AUTH_DEV_ISSUER=true И DEBUG=true.
|
||
AUTH_DEV_ISSUER=true
|
||
# ТОЛЬКО ДЛЯ РАЗРАБОТКИ: секрет HS256 dev-эмитента, в проде не использовать
|
||
AUTH_DEV_SECRET=dev-only-secret-do-not-use-in-production-0123456789
|
||
# Проверка токенов РАИСА (прод): JWKS по URL либо публичный ключ PEM
|
||
AUTH_JWKS_URL=
|
||
AUTH_PUBLIC_KEY=
|
||
AUTH_ISSUER=
|
||
AUTH_AUDIENCE=
|
||
AUTH_EMAIL_CLAIM=email
|
||
|
||
# Обмен с сервисами распознавания
|
||
NATS_ENABLED=true
|
||
OUTBOX_POLL_SECONDS=5
|
||
ACK_TIMEOUT_SECONDS=30
|
||
OUTBOX_MAX_REPUBLISH=3
|
||
|
||
# Импорт справочников из выгрузки ЕЦП CRM: предельный размер файла в байтах (20 МБ), больше — ответ 413
|
||
IMPORT_MAX_BYTES=20971520
|
||
|
||
# Загрузка первичных файлов (ББ/ОФР/ОСВ): предельный размер файла в байтах (50 МБ); больший файл отклоняется в
|
||
# rejected[] с кодом FILE_TOO_LARGE — ответ 201, если принят хотя бы один файл запроса, иначе 422
|
||
UPLOAD_MAX_BYTES=52428800
|
||
# Маппинг результата распознавания: период опроса готовых заданий (секунды) и число попыток до отметки ошибки
|
||
MAPPING_POLL_SECONDS=5
|
||
MAPPING_MAX_ATTEMPTS=3
|