mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-05 09:14:58 +03:00
- tenancy.StorageSettings (одна строка на инстанс): тип хранилища, бакет, endpoint, регион, адресация, ключи (шифруются Fernet); статус проверки и переноса - динамические бэкенды DynamicTenantStorage/DynamicUserStorage: пишут в активное хранилище, читают/удаляют из обоих (файлы до переключения доступны без переноса); конфигурация из БД с кэшем 10 с — без .env и перезапуска - API: GET/PATCH company/administration/storage/ (переключение на S3 только после успешной пробной записи), POST …/check/ (быстрая проверка, без ретраев boto), POST …/migrate/ — перенос локальных файлов в бакет фоновой задачей worker'а - UI: секция «Хранилище файлов» в «Настройках» — переключатель, реквизиты, «Проверить доступ», «Сохранить», «Перенести файлы с диска в S3» с прогрессом - из .env убраны CHATBALLS_STORAGE_BACKEND/CHATBALLS_S3_*; production больше не требует S3 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
122 lines
5.6 KiB
Plaintext
122 lines
5.6 KiB
Plaintext
# Instance configuration Chatballs (ADR-HUB-0028 / SPEC-HUB-0019 §7.2).
|
|
# Поставляется в release bundle. Копируется в instance/.env и редактируется
|
|
# под конкретный экземпляр. Image references НЕ здесь — они в release.env (CI).
|
|
# Здесь нет initial OWNER password и нет demo-флага (см. SPEC §7.2 запреты).
|
|
|
|
COMPOSE_PROJECT_NAME=chatballs
|
|
|
|
# --- Instance identity / gateway ---
|
|
CHATBALLS_APP_DOMAIN=app.example.com
|
|
CHATBALLS_PLATFORM_DOMAIN=platform.example.com
|
|
CHATBALLS_HELP_BASE_DOMAIN=help.example.com
|
|
CHATBALLS_HELP_PUBLIC_SCHEME=https
|
|
CHATBALLS_HELP_PUBLIC_PORT=
|
|
# Необязательный отдельный IPv4 для A-записей собственных доменов.
|
|
# По умолчанию используется CHATBALLS_WEB_LISTENING_IP.
|
|
CHATBALLS_HELP_PUBLIC_IPV4=203.0.113.10
|
|
CHATBALLS_ACME_EMAIL=admin@example.com
|
|
CHATBALLS_ADMIN_PORT=18001
|
|
# IP web-gateway. Оставьте 0.0.0.0 без profile calls. Для calls укажите
|
|
# отдельный публичный IP, отличный от CHATBALLS_TURN_LISTENING_IP.
|
|
CHATBALLS_WEB_LISTENING_IP=0.0.0.0
|
|
# Опциональные profiles: calls (coturn), и в будущем voice.
|
|
# COMPOSE_PROFILES=calls
|
|
|
|
# --- Django core ---
|
|
CHATBALLS_ENV=production
|
|
CHATBALLS_DEBUG=false
|
|
# Коробочная поставка. Облачный контур использует CLOUD.
|
|
CHATBALLS_DELIVERY_MODE=SELF_HOSTED
|
|
CHATBALLS_SECRET_KEY=change-me-long-random-secret
|
|
# Шифрование секретов в БД (Fernet-ключ): Fernet.generate_key().
|
|
CHATBALLS_FIELD_ENCRYPTION_KEY=
|
|
|
|
CHATBALLS_APP_ALLOWED_HOSTS=app.example.com
|
|
CHATBALLS_APP_CSRF_TRUSTED_ORIGINS=https://app.example.com
|
|
CHATBALLS_PLATFORM_ALLOWED_HOSTS=platform.example.com
|
|
CHATBALLS_PLATFORM_CSRF_TRUSTED_ORIGINS=https://platform.example.com
|
|
CHATBALLS_CORS_ALLOWED_ORIGINS=https://app.example.com
|
|
INTERNAL_UI_BASE_URL=https://app.example.com
|
|
# Host headers для Docker healthchecks должны входить в surface ALLOWED_HOSTS.
|
|
CHATBALLS_APP_HEALTHCHECK_HOST=app.example.com
|
|
CHATBALLS_PLATFORM_HEALTHCHECK_HOST=platform.example.com
|
|
|
|
# Транспортная безопасность (вне CHATBALLS_DEBUG включается автоматически).
|
|
CHATBALLS_COOKIE_SECURE=true
|
|
CHATBALLS_SSL_REDIRECT=true
|
|
CHATBALLS_HSTS_SECONDS=31536000
|
|
CHATBALLS_COOKIE_SAMESITE=Lax
|
|
|
|
# --- PostgreSQL / Redis ---
|
|
# C04 RLS: три раздельные DB-roles (app/platform/migration). Runtime-роли app и
|
|
# platform — NOBYPASSRLS, не владельцы tenant-tables; миграции выполняются под
|
|
# migration-role (через CHATBALLS_DB_ROLE=migration в compose). Пароли СГЕНЕРИРОВАТЬ,
|
|
# не использовать значения по умолчанию. См. deploy/postgres/init-runtime-roles.sh.
|
|
POSTGRES_DB=chatballs
|
|
POSTGRES_USER=chatballs
|
|
POSTGRES_PASSWORD=change-me-db-password
|
|
POSTGRES_APP_USER=chatballs_app
|
|
POSTGRES_APP_PASSWORD=change-me-app-db-password
|
|
POSTGRES_PLATFORM_USER=chatballs_platform
|
|
POSTGRES_PLATFORM_PASSWORD=change-me-platform-db-password
|
|
POSTGRES_MIGRATION_USER=chatballs_migration
|
|
POSTGRES_MIGRATION_PASSWORD=change-me-migration-db-password
|
|
POSTGRES_HOST=postgres
|
|
POSTGRES_PORT=5432
|
|
# psycopg connection pool per процесс (backend работает под ASGI, где
|
|
# CONN_MAX_AGE-соединения осиротевают в thread-pool). Значения по умолчанию
|
|
# заданы в settings_database.py; переопределять обычно не нужно.
|
|
# CHATBALLS_DB_POOL_MAX=0 отключает пул целиком.
|
|
#CHATBALLS_DB_POOL_MIN=1
|
|
#CHATBALLS_DB_POOL_MAX=4
|
|
#CHATBALLS_DB_POOL_TIMEOUT=10
|
|
REDIS_URL=redis://redis:6379/0
|
|
|
|
# --- Хранилище файлов ---
|
|
# По умолчанию локальный диск (${INSTANCE_DIR}/data/media). Внешнее S3 включает
|
|
# администратор в «Настройки → Хранилище файлов» — в .env ничего не задаётся.
|
|
|
|
# --- P2P calls (profile calls) ---
|
|
# Включается только при COMPOSE_PROFILES=calls. Параметры coturn обязательны,
|
|
# если profile активен.
|
|
CHATBALLS_CALL_INVITE_TTL_SECONDS=300
|
|
CHATBALLS_CALL_ACCESS_TTL_SECONDS=3600
|
|
CHATBALLS_CALL_CONNECT_GRACE_SECONDS=120
|
|
CHATBALLS_CALL_RECONNECT_GRACE_SECONDS=60
|
|
CHATBALLS_CALL_STUN_URLS=
|
|
# Публичные TURN endpoints (через запятую). Пусто -> только STUN/direct.
|
|
CHATBALLS_CALL_TURN_URLS=
|
|
# Общий static-auth-secret между backend и coturn.
|
|
CHATBALLS_CALL_TURN_SECRET=
|
|
CHATBALLS_CALL_TURN_TTL_SECONDS=3600
|
|
CHATBALLS_CALL_TURN_REALM=app.example.com
|
|
# Публичный IP coturn listener/relay. ОТДЕЛЬНЫЙ от web IP, чтобы TURN занял 443.
|
|
CHATBALLS_TURN_EXTERNAL_IP=
|
|
CHATBALLS_TURN_LISTENING_IP=
|
|
CHATBALLS_TURN_LISTENING_PORT=3478
|
|
CHATBALLS_TURN_TLS_PORT=443
|
|
CHATBALLS_TURN_MIN_PORT=49160
|
|
CHATBALLS_TURN_MAX_PORT=49200
|
|
|
|
# --- AI provider ---
|
|
CHATBALLS_OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
|
|
CHATBALLS_CUSTOAI_API_KEY=
|
|
CHATBALLS_CUSTOAI_BASE_URL=https://ai.api.cloud.yandex.net/v1
|
|
CHATBALLS_CUSTOAI_MODEL=gpt://b1g89tr9t8iedhnl8pgg/yandexgpt-5.1/latest
|
|
CHATBALLS_AI_REQUEST_TIMEOUT=30
|
|
CHATBALLS_AI_MAX_RETRIES=2
|
|
CHATBALLS_AI_GLOBAL_DAILY_COST_LIMIT_MICROS=0
|
|
|
|
# --- Email ---
|
|
EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
|
|
EMAIL_HOST=
|
|
EMAIL_PORT=587
|
|
EMAIL_HOST_USER=
|
|
EMAIL_HOST_PASSWORD=
|
|
EMAIL_USE_TLS=true
|
|
DEFAULT_FROM_EMAIL=Chatballs <no-reply@example.com>
|
|
|
|
# --- Gunicorn ---
|
|
CHATBALLS_GUNICORN_WORKERS=3
|
|
CHATBALLS_GUNICORN_TIMEOUT=60
|