# Video-Service Docker Stack # Für Kurs-Booking Plugin - Video-Streaming mit HLS # # Versionen (Stand Dezember 2025): # - Python 3.13 (Support bis Oktober 2029) - https://endoflife.date/python # - Redis 7.4.x (BSD-Lizenz, Support bis Nov 2026) - https://endoflife.date/redis # - FFmpeg 6.1.x (Debian Bookworm default, stabil) services: # FastAPI Video-API video-api: build: context: . dockerfile: Dockerfile container_name: kurs_video_api restart: unless-stopped ports: - "8501:8000" environment: - ENVIRONMENT=development - DEBUG=true - API_KEY=${VIDEO_API_KEY:-change-me-in-production} - JWT_SECRET=${VIDEO_JWT_SECRET:-change-me-in-production} - JWT_ALGORITHM=HS256 - JWT_EXPIRY_HOURS=1 - REDIS_URL=redis://redis:6379/0 - STORAGE_PATH=/app/storage - WORDPRESS_WEBHOOK_URL=${WORDPRESS_WEBHOOK_URL:-http://host.docker.internal:8300/wp-json/kurs-booking/v1/video-webhook} - WORDPRESS_API_KEY=${WORDPRESS_API_KEY:-} - ALLOWED_ORIGINS=${ALLOWED_ORIGINS:-http://localhost:8300,http://192.168.100.93:8300} - MAX_UPLOAD_SIZE_MB=2048 - VIDEO_PUBLIC_URL=${VIDEO_PUBLIC_URL:-http://localhost:8500} - VIDEO_DOMAIN=${VIDEO_DOMAIN:-videos.islandpferde-melanieworbs.de} volumes: - ./storage:/app/storage - ./app:/app/app:ro depends_on: redis: condition: service_healthy networks: - video-network - mec-network - staging-network - refactoring-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 start_period: 10s # Celery Worker für Video-Konvertierung video-worker: build: context: . dockerfile: Dockerfile container_name: kurs_video_worker restart: unless-stopped command: celery -A app.celery_app worker --loglevel=info --concurrency=2 environment: - ENVIRONMENT=development - REDIS_URL=redis://redis:6379/0 - STORAGE_PATH=/app/storage - WORDPRESS_WEBHOOK_URL=${WORDPRESS_WEBHOOK_URL:-http://host.docker.internal:8300/wp-json/kurs-booking/v1/video-webhook} - WORDPRESS_API_KEY=${WORDPRESS_API_KEY:-} # FFmpeg Einstellungen - FFMPEG_THREADS=2 - HLS_SEGMENT_DURATION=6 - VIDEO_QUALITIES=360p,720p,1080p volumes: - ./storage:/app/storage - ./app:/app/app:ro depends_on: redis: condition: service_healthy networks: - video-network - staging-network - refactoring-network # Worker braucht mehr Ressourcen für FFmpeg deploy: resources: limits: memory: 2G reservations: memory: 512M # Redis 7.4 - Letzte BSD-lizenzierte Version # https://endoflife.date/redis - Support bis November 2026 redis: image: redis:7.4-alpine container_name: kurs_video_redis restart: unless-stopped command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru volumes: - redis-data:/data networks: - video-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 start_period: 5s networks: video-network: driver: bridge # Verbindung zum bestehenden MEC-Netzwerk für WordPress-Kommunikation mec-network: external: true name: proj_wordpress_webnus_mec-network # Verbindung zum Staging-Netzwerk staging-network: external: true name: mec_staging_network # Verbindung zum Refactoring-Netzwerk (Port 8200) refactoring-network: external: true name: mec_refactoring_network volumes: redis-data: