Files
video-service/docker-compose.yml

124 lines
3.8 KiB
YAML
Executable File

# 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: