Files
chatballs/compose.dev.yaml
T
AndreyandClaude Fable 5.1 0ca9eb865f ✨ feat(setup)!: мастер первого запуска и демо-набор «Ателье Норд» с точным удалением
Open source: «развернуть за минуту». Никаких параметров в .env и CLI —
при пустом инстансе браузер показывает мастер (/api/v1/setup/): название
организации, имя, e-mail, пароль владельца и флаг «Установить демо-данные».
Запись идёт на соединении platform (роль app не создаёт организации) через
tenancy/routing.use_database; после первого владельца мастер закрыт (409).
bootstrap_owner и захардкоженные Edevs/Котова из установки удалены
(bootstrap_edevs_owner остаётся тестовым helper'ом).

Демо ставится в организацию установщика; реестр DemoRecord (post_save во
время сида) даёт точное удаление в обратном порядке с разрывом PROTECT-циклов
только между демо-объектами. Установка/удаление — outbox → worker; статус и
витринные учётки (админ + сотрудники разных групп, пароль Chatbolls-Demo-2026)
— карточка «Демо-данные» в «Настройках» (/company/demo/).

Сид переписан под дизайн-базлайн v2 («Ателье Норд»): 6 сотрудников (группы,
блокировка, TOTP, приглашения), 4 агента (активные/черновик/выключенный),
подключения TG/MAX/почта/два веб-виджета (анонимный и авторизованный) с
ошибкой у одного, знания с иерархией категорий и вложениями (md/txt/pdf),
30 дней истории LLM, 13 диалогов во всех состояниях с метками, приоритетами,
заметками, ответственными, историей контакта, спамом и архивом, веб-гость
через настоящую сессию виджета, шаблоны «/», портал поддержки со статьями
(опубликованные/черновик/архив, вторая ревизия, оценки), звонки с метриками и
приглашением, уведомления всех типов, привязки уведомителя. Аватары
контактов — портреты владельца, публичный /api/v1/demo-media/. Голосовые —
слоты под клипы владельца (media/voice/README.md).

Тест покрытия: каждая модель hub_platform получает демо-запись; удаление
возвращает счётчики к исходным. compose-профиль demo-seed и seed-demo.ps1
удалены; seed_demo --organization --apply/--remove для разработки; start.sh
для Linux/macOS; README — раздел «Быстрый старт».

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-05 16:55:31 +03:00

141 lines
4.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Override для локальной разработки (ADR-HUB-0028 §compose.dev).
# Применяется поверх canonical compose.yaml:
# docker compose -f compose.yaml -f compose.dev.yaml --env-file .env.example --env-file .env up
# Переопределяет image на build, dev-команды, bind mounts и host-порты.
# Не определяет отдельную production-топологию.
services:
postgres:
ports:
- "${POSTGRES_HOST_PORT:-5432}:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
ports:
- "${REDIS_HOST_PORT:-6379}:6379"
# Dev: migrate через init, без collectstatic (испечён только в prod-образе).
init:
build:
context: .
dockerfile: apps/backend/Dockerfile
environment:
CUS_DELIVERY_MODE: ${CUS_DELIVERY_MODE:-CLOUD}
CUS_HELP_BASE_DOMAIN: localhost
CUS_HELP_PUBLIC_SCHEME: http
CUS_HELP_PUBLIC_PORT: ""
backend-app:
build:
context: .
dockerfile: apps/backend/Dockerfile
# Миграции выполняет one-shot init (CUS_DB_ROLE=migration); runtime-роль app
# не имеет прав на django_migrations, поэтому migrate здесь запускать нельзя.
command: uvicorn hub_backend.asgi_app:application --host 0.0.0.0 --port 8000 --reload
ports:
- "${BACKEND_APP_PORT:-8010}:8000"
environment:
CUS_DELIVERY_MODE: ${CUS_DELIVERY_MODE:-CLOUD}
CUS_ALLOWED_HOSTS: "localhost,127.0.0.1,.localhost"
CUS_HELP_BASE_DOMAIN: localhost
CUS_HELP_PUBLIC_SCHEME: http
CUS_HELP_PUBLIC_PORT: ""
volumes:
- ./apps/backend:/app/apps/backend
depends_on:
init:
condition: service_completed_successfully
postgres:
condition: service_healthy
redis:
condition: service_healthy
backend-platform:
build:
context: .
dockerfile: apps/backend/Dockerfile
command: uvicorn hub_backend.asgi_platform:application --host 0.0.0.0 --port 8000 --reload
ports:
- "${BACKEND_PLATFORM_PORT:-8011}:8000"
environment:
CUS_DELIVERY_MODE: ${CUS_DELIVERY_MODE:-CLOUD}
CUS_ALLOWED_HOSTS: "localhost,127.0.0.1,.localhost"
CUS_HELP_BASE_DOMAIN: localhost
CUS_HELP_PUBLIC_SCHEME: http
CUS_HELP_PUBLIC_PORT: ""
volumes:
- ./apps/backend:/app/apps/backend
backend-admin:
build:
context: .
dockerfile: apps/backend/Dockerfile
command: uvicorn hub_backend.asgi_admin:application --host 0.0.0.0 --port 8000 --reload
environment:
CUS_DELIVERY_MODE: ${CUS_DELIVERY_MODE:-CLOUD}
volumes:
- ./apps/backend:/app/apps/backend
worker:
build:
context: .
dockerfile: apps/backend/Dockerfile
environment:
CUS_DELIVERY_MODE: ${CUS_DELIVERY_MODE:-CLOUD}
volumes:
- ./apps/backend:/app/apps/backend
# Dev: frontend-сервис превращается в Vite dev-сервер internal-ui (HMR).
frontend:
build:
context: .
dockerfile: apps/internal-ui/Dockerfile
command: npm run dev -- --host 0.0.0.0 --port 5173
environment:
# Direct Vite remains same-origin for cookies/CSRF and proxies only to the
# real local Django service. This variable exists only in dev compose.
VITE_DEV_API_TARGET: http://backend-app:8000
ports:
- "${INTERNAL_UI_PORT:-5173}:5173"
volumes:
- ./apps/internal-ui:/app/apps/internal-ui
- ./packages:/app/packages
- /app/node_modules
- /app/apps/internal-ui/node_modules
# Dev-only: web-chat как отдельный Vite-сервер (в prod встроен в frontend-образ).
web-chat:
build:
context: .
dockerfile: apps/web-chat/Dockerfile
command: npm run dev -- --host 0.0.0.0 --port 5175
ports:
- "${WEB_CHAT_PORT:-5175}:5175"
volumes:
- ./apps/web-chat:/app/apps/web-chat
- ./packages:/app/packages
- /app/node_modules
- /app/apps/web-chat/node_modules
# Dev: gateway — nginx с local.conf вместо Caddy (та же маршрутизация, HMR-friendly).
gateway:
image: nginx:1.27-alpine
command: ["nginx", "-g", "daemon off;"]
ports:
- "80:80"
volumes:
- ./deploy/nginx/local.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
backend-app:
condition: service_healthy
backend-platform:
condition: service_healthy
frontend:
condition: service_started
web-chat:
condition: service_started
volumes:
postgres_data: