mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-05 17:14:59 +03:00
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>
141 lines
4.5 KiB
YAML
141 lines
4.5 KiB
YAML
# 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:
|