# LiveKit + Redis + Egress (kendi sunucunuzda kayıt, Cloud kotası yok).
# Linux’ta UDP/WebRTC için host ağı kullanılır.
#
# Aynı VPS’te ikinci livekit-server veya ikinci egress çalıştırmayın — STACK_TEK_SUNUCU.txt
# Teşhis: bash egress_stack_audit.sh
#
# Başlat: docker compose up -d
#
# Sadece egress’i yeniden oluşturmak (shm_size / egress.yaml değişince) — redis/livekit’e dokunmaz:
#   docker compose up -d --force-recreate --no-deps egress
#
# "Conflict. The container name livekit-redis is already in use" alıyorsanız tam compose çalıştırmayın;
# yukarıdaki --no-deps egress kullanın. İkiz/zombi konteyner temizliği (dikkatli):
#   docker ps -a --filter name=livekit-redis
#
# "overlay2 ... unlinkat ... merged: device or resource busy" + konteyner dead/removal:
#   docker ps -a | grep egress
#   docker rm -f livekit-selfhost-egress-1    # veya gördüğünüz CONTAINER ID
#   Hâlâ silinmiyorsa: systemctl restart docker   (kısa kesinti; ardından tekrar rm -f)
# Sonra: docker compose up -d --no-deps egress
#
# Recreate takılı kaldıysa (busy overlay):
#   1) Güncel docker-compose.yml (container_name: novazeka-livekit-egress) sunucuya alınsın.
#   2) Veya başka proje adı: docker compose -p egressrecovery up -d --no-deps egress
#   3) Veya Compose’u atla: bash egress_run_standalone.sh
#   4) Son çare: reboot, sonra docker rm -f ile zombiler
#
# Log:   docker compose logs -f livekit
#        docker compose logs -f egress
#
# Önkoşul: egress.yaml (egress.yaml.example → kopyala, livekit.yaml keys ile doldur)
# Kayıtlar: konteyner /out → host’ta EGRESS_HOST_RECORDINGS_DIR (varsayılan: ./recordings).
# Üretim: .env içinde public_html altı mutlak yol — PHP LIVEKIT_RECORDINGS_HOST_PATH* ile AYNI ağaç olmalı.
# Asla /root/... ile public_html yolunu karıştırmayın; PHP dosyayı bulamaz (404).
#
# Sunucu: cp .env.example .env && düzenle → docker compose up -d egress
#
# Egress için sabit container_name: overlay2 "busy" ile eski konteyner silinemezse Compose sürekli
# aynı isimde recreate dener. Yeni isim (aşağıdaki novazeka-livekit-egress) yeni konteyner yaratır;
# zombi eski kayıt reboot veya docker temizliği ile gider. Gerekirse ismi -v2 yapıp tekrar up.

services:
  redis:
    image: redis:7-alpine
    container_name: livekit-redis
    restart: unless-stopped
    network_mode: host
    command: redis-server --bind 127.0.0.1 --port 6379 --maxmemory 256mb --maxmemory-policy allkeys-lru

  livekit:
    image: livekit/livekit-server:latest
    container_name: livekit-server
    restart: unless-stopped
    network_mode: host
    depends_on:
      - redis
    volumes:
      - ./livekit.yaml:/etc/livekit.yaml:ro
    command: --config /etc/livekit.yaml

  egress:
    image: livekit/egress:latest
    container_name: novazeka-livekit-egress
    restart: unless-stopped
    network_mode: host
    # Chromium (room composite) varsayılan 64MB shm ile çöküp "Source closed" / 412 verebilir.
    shm_size: "2gb"
    depends_on:
      - redis
      - livekit
    cap_add:
      - SYS_ADMIN
    environment:
      EGRESS_CONFIG_FILE: /etc/egress/egress.yaml
    volumes:
      - ${EGRESS_HOST_RECORDINGS_DIR:-./recordings}:/out
      - ./egress.yaml:/etc/egress/egress.yaml:ro
