# Модуль «Дзвінки» для CRM: https://crm-calls.volcanic.tes.gd (отдельное приложение Coolify). # Jitsi — docker-compose.yml (другое приложение, https://meet.volcanic.tes.gd). # Секреты JWT_APP_SECRET (тот же, что у Jitsi), GUEST_LINK_SECRET, JIBRI_RECORDER_PASSWORD (тот же, что у Jitsi), # OPENAI_API_KEY, CRM_USER_PASSWORD — только в env Coolify. # Запись: модуль следит за комнатами через prosody и управляет Jibri по сети crm-calls-bridge (создаёт приложение Jitsi), # файлы записей — в общем каталоге хоста RECORDINGS_HOST_DIR. services: calls: build: context: ./calls dockerfile: Dockerfile expose: - "8080" environment: ASPNETCORE_ENVIRONMENT: Production ASPNETCORE_URLS: "http://+:8080" Storage__DataDir: /data Calls__PublicUrl: '${CALLS_PUBLIC_URL:-https://crm-calls.volcanic.tes.gd}' Calls__LinkSecret: '${GUEST_LINK_SECRET}' Calls__SessionHours: '${CALLS_SESSION_HOURS:-12}' # origin CRM через пробел или запятую: из них принимается crm:auth, они же в frame-ancestors Crm__Origins: '${CRM_ORIGINS:-https://shotam.tvorymo.com,https://units.tvorymo.com}' Crm__AssetsOrigin: '${CRM_ASSETS_ORIGIN:-https://shotam.tvorymo.com}' Supabase__Url: '${SUPABASE_URL:-https://yjxbkcqsquwbsyoonfkn.supabase.co}' Supabase__PublishableKey: '${SUPABASE_PUBLISHABLE_KEY}' Jitsi__Domain: '${JITSI_DOMAIN:-meet.volcanic.tes.gd}' Jitsi__AppId: '${JWT_APP_ID:-tvorymo-crm}' Jitsi__Audience: '${JWT_AUDIENCE:-jitsi}' Jitsi__AppSecret: '${JWT_APP_SECRET}' Jitsi__TokenTtlMinutes: '${JITSI_TOKEN_TTL_MINUTES:-15}' # --- запись и транскрипция RECORDING_ENABLED: '${RECORDING_ENABLED:-true}' MAX_CONCURRENT_CALLS: '${MAX_CONCURRENT_CALLS:-1}' MIN_CALL_SECONDS: '${MIN_CALL_SECONDS:-60}' RECORD_MIN_PARTICIPANTS: '${RECORD_MIN_PARTICIPANTS:-2}' PROSODY_URL: 'http://jitsi-prosody:5280' JIBRI_URL: 'http://jitsi-jibri:2222' JIBRI_RECORDER_PASSWORD: '${JIBRI_RECORDER_PASSWORD}' RECORDINGS_DIR: /recordings OPENAI_API_KEY: '${OPENAI_API_KEY:-}' OPENAI_TRANSCRIBE_MODEL: '${OPENAI_TRANSCRIBE_MODEL:-whisper-1}' CRM_USER_EMAIL: '${CRM_USER_EMAIL:-}' CRM_USER_PASSWORD: '${CRM_USER_PASSWORD:-}' RECORDINGS_BUCKET: '${RECORDINGS_BUCKET:-files}' RECORDINGS_PREFIX: '${RECORDINGS_PREFIX:-calls/}' WIKI_URL: '${WIKI_URL:-https://wiki-crm.tes.gd}' WIKI_CALLS_FOLDER: '${WIKI_CALLS_FOLDER:-Дзвінки}' # Служебные /api/admin/* (тестовые комнаты test-*, состояние обработки). Пусто — выключены. ADMIN_TOKEN: '${ADMIN_TOKEN:-}' volumes: - calls-data:/data - '${RECORDINGS_HOST_DIR:-/data/crm-calls/recordings}:/recordings' networks: - calls-bridge labels: # Две сети (своя Coolify + crm-calls-bridge): Traefik должен ходить через сеть приложения, # иначе берёт адрес из crm-calls-bridge, где его нет, и отвечает 504. - traefik.docker.network=g2mi10g1rcuukibu6yy3tf5u healthcheck: test: ["CMD", "curl", "-fsS", "http://127.0.0.1:8080/health"] interval: 30s timeout: 5s retries: 3 start_period: 20s networks: calls-bridge: external: true name: crm-calls-bridge volumes: calls-data: