version: '3.8' services: # OpenVidu Meet Backend openvidu-meet: build: . container_name: openvidu-meet restart: unless-stopped environment: NODE_ENV: production MEET_LOG_LEVEL: info MEET_BLOB_STORAGE_MODE: memory PORT: 6080 # Admin user MEET_INITIAL_ADMIN_USER: admin MEET_INITIAL_ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin123} # CORS y proxy SERVER_CORS_ORIGIN: "*" TRUST_PROXY: "true" # LiveKit LOCAL con UDP LIVEKIT_URL: ${LIVEKIT_URL:-ws://192.168.1.19:7880} LIVEKIT_API_KEY: ${LIVEKIT_API_KEY:-devkey} LIVEKIT_API_SECRET: ${LIVEKIT_API_SECRET:-secretsecretsecretsecretsecretsecret} ports: - "6080:6080" volumes: - ./logs:/app/logs healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:6080/"] interval: 30s timeout: 10s retries: 3 start_period: 60s networks: - openvidu-network # LiveKit Server LOCAL con puertos UDP livekit: image: livekit/livekit-server:latest container_name: openvidu-livekit restart: unless-stopped ports: # Puerto API/WebSocket - "7880:7880" # Rango UDP para WebRTC (IMPORTANTE!) - "50000-60000:50000-60000/udp" volumes: - ./livekit.yaml:/livekit.yaml:ro command: --config /livekit.yaml networks: - openvidu-network depends_on: - redis # Redis para LiveKit redis: image: redis:7-alpine container_name: openvidu-redis restart: unless-stopped ports: - "6379:6379" command: redis-server --requirepass ${REDIS_PASSWORD:-redispassword} volumes: - redis_data:/data networks: - openvidu-network # Nginx Proxy nginx-proxy: image: nginx:alpine container_name: openvidu-nginx restart: unless-stopped ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - nginx-cache:/var/cache/nginx depends_on: - openvidu-meet - livekit networks: - openvidu-network volumes: nginx-cache: redis_data: networks: openvidu-network: driver: bridge