diff --git a/community/.env b/community/.env index 7b355e8..1a2b06d 100644 --- a/community/.env +++ b/community/.env @@ -30,9 +30,7 @@ MINIO_SECRET_KEY=minioadmin MONGO_ADMIN_USERNAME=mongoadmin MONGO_ADMIN_PASSWORD=mongoadmin -# Default App (OpenVidu Call) -CALL_PRIVATE_ACCESS=false -CALL_USER= -CALL_SECRET= -CALL_ADMIN_USER=admin -CALL_ADMIN_SECRET=admin +# OpenVidu Meet configuration. +MEET_INITIAL_ADMIN_USER=admin +MEET_INITIAL_ADMIN_PASSWORD=admin +MEET_INITIAL_API_KEY=meet-api-key diff --git a/community/agent-speech-processing.yaml b/community/agent-speech-processing.yaml index dc51bd8..b3b0d32 100644 --- a/community/agent-speech-processing.yaml +++ b/community/agent-speech-processing.yaml @@ -1,16 +1,22 @@ # Docker image of the agent. -docker_image: docker.io/openvidu/agent-speech-processing:3.3.0 +docker_image: docker.io/openvidu/agent-speech-processing:main # Whether to run the agent or not. enabled: false +# Maximum CPU load threshold for the agent to accept new jobs. Value between 0 and 1. +load_threshold: 1.0 + +# Log level for the agent [DEBUG, INFO, WARNING, ERROR, CRITICAL] +log_level: INFO + live_captions: # How this agent will connect to Rooms [automatic, manual] # - automatic: the agent will automatically connect to new Rooms. # - manual: the agent will connect to new Rooms only when your application dictates it by using the Agent Dispatch API. processing: automatic - # Which speech-to-text AI provider to use [aws, azure, google, opeanai, groq, deepgram, assemblyai, fal, clova, speechmatics, gladia, sarvam] + # Which speech-to-text AI provider to use [aws, azure, google, openai, groq, deepgram, assemblyai, fal, clova, speechmatics, gladia, sarvam, spitch] # The custom configuration for the selected provider must be set below provider: @@ -154,8 +160,8 @@ live_captions: detect_language: false # Whether to return interim (non-final) transcription results. Defaults to true. See https://developers.deepgram.com/docs/interim-results interim_results: true - # Whether to apply smart formatting to numbers, dates, etc. Defaults to true. See https://developers.deepgram.com/docs/smart-format - smart_format: true + # Whether to apply smart formatting to numbers, dates, etc. Defaults to false. See https://developers.deepgram.com/docs/smart-format + smart_format: false # When smart_format is used, ensures it does not wait for sequence to be complete before returning results. Defaults to true. See https://developers.deepgram.com/docs/smart-format#using-no-delay no_delay: true # Whether to add punctuations to the transcription. Defaults to true. Turn detector will work better with punctuations. See https://developers.deepgram.com/docs/punctuation @@ -222,7 +228,7 @@ live_captions: speaker_sensitivity: # See https://docs.speechmatics.com/features/diarization#prefer-current-speaker prefer_current_speaker: - # Permitted puctuation marks for advanced punctuation. See https://docs.speechmatics.com/features/punctuation-settings + # Permitted punctuation marks for advanced punctuation. See https://docs.speechmatics.com/features/punctuation-settings # Commented is an example of punctuation settings punctuation_overrides: # permitted_marks: [ ".", "," ] diff --git a/community/docker-compose.yaml b/community/docker-compose.yaml index c694534..c2abcfa 100644 --- a/community/docker-compose.yaml +++ b/community/docker-compose.yaml @@ -1,6 +1,6 @@ services: caddy-proxy: - image: docker.io/openvidu/openvidu-caddy-local:3.3.0 + image: docker.io/openvidu/openvidu-caddy-local:main platform: linux/amd64 container_name: caddy-proxy restart: unless-stopped @@ -17,6 +17,9 @@ services: - DASHBOARD_ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-} - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-} - MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-} + - MEET_INITIAL_ADMIN_USER=${MEET_INITIAL_ADMIN_USER:-} + - MEET_INITIAL_ADMIN_PASSWORD=${MEET_INITIAL_ADMIN_PASSWORD:-} + - MEET_INITIAL_API_KEY=${MEET_INITIAL_API_KEY:-} volumes: - ./custom-layout:/var/www/custom-layout ports: @@ -24,6 +27,7 @@ services: - 6443:6443 - 7443:7443 - 7880:7880 + - 9443:9443 depends_on: setup: condition: service_completed_successfully @@ -66,7 +70,7 @@ services: condition: service_completed_successfully mongo: - image: docker.io/openvidu/mongodb:8.0.9 + image: docker.io/openvidu/mongodb:8.0.12-r0 platform: linux/amd64 container_name: mongo restart: unless-stopped @@ -87,7 +91,7 @@ services: condition: service_completed_successfully dashboard: - image: docker.io/openvidu/openvidu-dashboard:3.3.0 + image: docker.io/openvidu/openvidu-dashboard:main platform: linux/amd64 container_name: dashboard restart: unless-stopped @@ -101,7 +105,7 @@ services: condition: service_completed_successfully openvidu: - image: docker.io/openvidu/openvidu-server:3.3.0 + image: docker.io/openvidu/openvidu-server:main platform: linux/amd64 restart: unless-stopped container_name: openvidu @@ -109,6 +113,7 @@ services: - host.docker.internal:host-gateway environment: - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} + - LAN_MODE=${LAN_MODE:-false} ports: - 3478:3478/udp - 7881:7881/tcp @@ -123,7 +128,7 @@ services: condition: service_completed_successfully ingress: - image: docker.io/openvidu/ingress:3.3.0 + image: docker.io/openvidu/ingress:main platform: linux/amd64 container_name: ingress restart: unless-stopped @@ -142,7 +147,7 @@ services: condition: service_completed_successfully egress: - image: docker.io/livekit/egress:v1.9.1 + image: docker.io/livekit/egress:v1.10.0 platform: linux/amd64 restart: unless-stopped container_name: egress @@ -157,36 +162,45 @@ services: setup: condition: service_completed_successfully - default-app: - image: docker.io/openvidu/openvidu-call:3.3.0-demo + openvidu-meet: + image: docker.io/openvidu/openvidu-meet:main platform: linux/amd64 - container_name: openvidu-call + container_name: openvidu-meet restart: on-failure + ports: + - 9080:6080 + extra_hosts: + - host.docker.internal:host-gateway environment: - USE_HTTPS=${USE_HTTPS:-false} - LAN_MODE=${LAN_MODE:-false} - LAN_DOMAIN=${LAN_DOMAIN:-} - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} - SERVER_PORT=6080 - - CALL_NAME_ID=OpenViduCall-LOCAL + - MEET_LOG_LEVEL=${MEET_LOG_LEVEL:-info} + - MEET_NAME_ID=openviduMeet-LOCAL + - MEET_INITIAL_API_KEY=${MEET_INITIAL_API_KEY:-meet-api-key} + - MEET_INITIAL_ADMIN_USER=${MEET_INITIAL_ADMIN_USER:-admin} + - MEET_INITIAL_ADMIN_PASSWORD=${MEET_INITIAL_ADMIN_PASSWORD:-admin} + - MEET_COOKIE_SECURE=false + - MEET_INITIAL_WEBHOOK_ENABLED=true + - MEET_INITIAL_WEBHOOK_URL=${MEET_INITIAL_WEBHOOK_URL:-http://host.docker.internal:6080/webhook} - LIVEKIT_URL_PRIVATE=ws://openvidu:7880/ - LIVEKIT_API_KEY=${LIVEKIT_API_KEY} - LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET} - - CALL_PRIVATE_ACCESS=${CALL_PRIVATE_ACCESS:-false} - - CALL_USER=${CALL_USER:-} - - CALL_SECRET=${CALL_SECRET:-} - - CALL_RECORDING=${CALL_RECORDING:-} - - CALL_ADMIN_USER=${CALL_ADMIN_USER:-admin} - - CALL_ADMIN_SECRET=${CALL_ADMIN_SECRET:-admin} - - CALL_LOG_LEVEL=${CALL_LOG_LEVEL:-info} - - CALL_S3_BUCKET=${CALL_S3_BUCKET:-openvidu-appdata} - - CALL_S3_SERVICE_ENDPOINT=${CALL_S3_SERVICE_ENDPOINT:-http://minio:9000} - - CALL_S3_ACCESS_KEY=${MINIO_ACCESS_KEY} - - CALL_S3_SECRET_KEY=${MINIO_SECRET_KEY} - - CALL_AWS_REGION=${CALL_AWS_REGION:-us-east-1} - - CALL_S3_WITH_PATH_STYLE_ACCESS=${CALL_S3_WITH_PATH_STYLE_ACCESS:-true} + - MEET_S3_BUCKET=${MEET_S3_BUCKET:-openvidu-appdata} + - MEET_S3_SUBBUCKET=${MEET_S3_SUBBUCKET:-openvidu-meet} + - MEET_S3_SERVICE_ENDPOINT=${MEET_S3_SERVICE_ENDPOINT:-http://minio:9000} + - MEET_S3_ACCESS_KEY=${MINIO_ACCESS_KEY} + - MEET_S3_SECRET_KEY=${MINIO_SECRET_KEY} + - MEET_AWS_REGION=${MEET_AWS_REGION:-us-east-1} + - MEET_S3_WITH_PATH_STYLE_ACCESS=${MEET_S3_WITH_PATH_STYLE_ACCESS:-true} + - MEET_REDIS_HOST=redis + - MEET_REDIS_PORT=6379 + - MEET_REDIS_PASSWORD=${REDIS_PASSWORD:-} + - MEET_REDIS_DB=0 volumes: - - ./scripts/entrypoint_default_app.sh:/scripts/entrypoint.sh + - ./scripts/entrypoint_openvidu_meet.sh:/scripts/entrypoint.sh - ./scripts/utils.sh:/scripts/utils.sh entrypoint: /bin/sh /scripts/entrypoint.sh depends_on: @@ -194,7 +208,7 @@ services: condition: service_completed_successfully operator: - image: docker.io/openvidu/openvidu-operator:3.3.0 + image: docker.io/openvidu/openvidu-operator:main platform: linux/amd64 container_name: operator restart: unless-stopped @@ -219,21 +233,26 @@ services: condition: service_completed_successfully ready-check: - image: docker.io/curlimages/curl:8.13.0 + image: docker.io/openvidu/openvidu-operator:main platform: linux/amd64 container_name: ready-check restart: on-failure environment: + - MODE=local-ready-check + - OPENVIDU_ENVIRONMENT=local-platform - USE_HTTPS=${USE_HTTPS:-false} - LAN_DOMAIN=${LAN_DOMAIN:-} - LAN_MODE=${LAN_MODE:-false} - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} - - LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-} - - LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-} - DASHBOARD_ADMIN_USERNAME=${DASHBOARD_ADMIN_USERNAME:-} - DASHBOARD_ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-} - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-} - MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-} + - LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-} + - LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-} + - MEET_INITIAL_ADMIN_USER=${MEET_INITIAL_ADMIN_USER:-} + - MEET_INITIAL_ADMIN_PASSWORD=${MEET_INITIAL_ADMIN_PASSWORD:-} + - MEET_INITIAL_API_KEY=${MEET_INITIAL_API_KEY:-} depends_on: - openvidu - ingress @@ -241,10 +260,6 @@ services: - dashboard - minio - mongo - volumes: - - ./scripts/ready-check.sh:/scripts/ready-check.sh - - ./scripts/utils.sh:/scripts/utils.sh - command: /bin/sh /scripts/ready-check.sh setup: image: docker.io/busybox:1.37.0 diff --git a/community/egress.yaml b/community/egress.yaml index c42574f..2e72583 100644 --- a/community/egress.yaml +++ b/community/egress.yaml @@ -27,6 +27,10 @@ storage: # account_name: your_account_name # account_key: your_account_key # container_name: openvidu-appdata + # gcp: + # credentials_json: | + # your_credentials_json + # bucket: openvidu-appdata # CPU cost for each type of Egress operation. cpu_cost: @@ -38,3 +42,12 @@ cpu_cost: participant_cpu_cost: 0.01 track_composite_cpu_cost: 0.01 track_cpu_cost: 0.01 + +openvidu: + # Allocation strategy for new egress requests + # - cpuload: the node with the lowest CPU load will be selected. Distributes the CPU load evenly across all nodes. + # - binpack: some node already hosting at least one Egress will be selected. Fills up nodes before assigning work to new ones. + allocation_strategy: cpuload + # Disables the automatic killing of the most expensive egress when CPU is overloaded. + # The default "false" value helps keeping the node stable, but may cause unexpected egress terminations under high load. + disable_cpu_overload_killer: false \ No newline at end of file diff --git a/community/livekit.yaml b/community/livekit.yaml index 87eff22..92d5cda 100644 --- a/community/livekit.yaml +++ b/community/livekit.yaml @@ -31,7 +31,7 @@ webhook: api_key: devkey urls: - http://host.docker.internal:6080/livekit/webhook - - http://default-app:6080/livekit/webhook + - http://openvidu-meet:6080/livekit/webhook ingress: rtmp_base_url: rtmp://localhost:1935/rtmp whip_base_url: http://localhost:8085/whip diff --git a/community/scripts/entrypoint_openvidu.sh b/community/scripts/entrypoint_openvidu.sh index 54d3c2f..73c4cf8 100644 --- a/community/scripts/entrypoint_openvidu.sh +++ b/community/scripts/entrypoint_openvidu.sh @@ -1,7 +1,8 @@ #!/bin/sh set -e -if [ "$LAN_PRIVATE_IP" != "none" ]; then +if [ "$LAN_PRIVATE_IP" != "" ] && [ "$LAN_MODE" = 'true' ]; then + echo "Using as NODE_IP: $LAN_PRIVATE_IP" export NODE_IP="$LAN_PRIVATE_IP" fi diff --git a/community/scripts/entrypoint_default_app.sh b/community/scripts/entrypoint_openvidu_meet.sh similarity index 77% rename from community/scripts/entrypoint_default_app.sh rename to community/scripts/entrypoint_openvidu_meet.sh index dcfbbcc..46bf316 100644 --- a/community/scripts/entrypoint_default_app.sh +++ b/community/scripts/entrypoint_openvidu_meet.sh @@ -2,7 +2,7 @@ . /scripts/utils.sh -URL=$(getDeploymentUrl) +URL=$(getDeploymentUrl ws) export LIVEKIT_URL="${URL}" /usr/local/bin/entrypoint.sh diff --git a/community/scripts/ready-check.sh b/community/scripts/ready-check.sh deleted file mode 100644 index ff57f0a..0000000 --- a/community/scripts/ready-check.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh - -. /scripts/utils.sh - -trap 'handle_sigint' SIGINT - -handle_sigint() { - echo "SIGINT signal received, exiting..." - exit 1 -} - -wait_for_service() { - SERVICE_NAME=$1 - SERVICE_URL=$2 - shift 2 - EXTRA=$@ - if [ -n "$EXTRA" ]; then - until curl $EXTRA $SERVICE_URL > /dev/null; do - echo "Waiting for $SERVICE_NAME to start..."; - sleep 1; - done; - else - until curl --silent --head --fail $SERVICE_URL > /dev/null; do - echo "Waiting for $SERVICE_NAME to start..."; - sleep 1; - done; - fi; -} - -wait_for_service 'OpenVidu' 'http://openvidu:7880' -wait_for_service 'Ingress' 'http://ingress:9091' -wait_for_service 'Egress' 'http://egress:9091' -wait_for_service 'Dashboard' 'http://dashboard:5000' -wait_for_service 'Minio' 'http://minio:9000/minio/health/live' -wait_for_service 'Minio Console' 'http://minio:9001/minio-console' -wait_for_service 'Mongo' 'http://mongo:27017' --connect-timeout 10 --silent - -LAN_HTTP_URL=$(getDeploymentUrl http) -LAN_WS_URL=$(getDeploymentUrl ws) - -for i in $(seq 1 10); do - echo 'Starting OpenVidu... Please be patient...' - sleep 1 -done; -echo '' -echo '' -echo '=========================================' -echo '🎉 OpenVidu is ready! 🎉' -echo '=========================================' -echo '' -echo 'OpenVidu Server & LiveKit Server URLs:' -echo '' -echo ' - From this machine:' -echo '' -echo ' - http://localhost:7880' -echo ' - ws://localhost:7880' -echo '' -echo ' - From other devices in your LAN:' -echo '' -echo " - $LAN_HTTP_URL" -echo " - $LAN_WS_URL" -echo '' -echo '=========================================' -echo '' -echo 'OpenVidu Developer UI (services and passwords):' -echo '' -echo ' - http://localhost:7880' -echo " - $LAN_HTTP_URL" -echo '' -echo '=========================================' diff --git a/community/scripts/setup.sh b/community/scripts/setup.sh index 2704a16..fe044df 100644 --- a/community/scripts/setup.sh +++ b/community/scripts/setup.sh @@ -1,6 +1,11 @@ #!/bin/sh -if [ -z "$LAN_PRIVATE_IP" ]; then +if [ "$LAN_MODE" = 'true' ] && [ "$USE_HTTPS" = 'false' ]; then + echo 'LAN_MODE cannot be "true" if USE_HTTPS is "false"' + exit 1 +fi + +if [ "$LAN_MODE" = 'true' ] && [ -z "$LAN_PRIVATE_IP" ]; then echo '------------------------' echo '' echo 'LAN_PRIVATE_IP is required in the .env file.' @@ -14,7 +19,9 @@ if [ -z "$LAN_PRIVATE_IP" ]; then echo 'If it can'\''t be found, you can manually set it in the .env file' echo '------------------------' exit 1 -else +fi + +if [ "$LAN_MODE" = 'true' ] && [ -n "$LAN_PRIVATE_IP" ]; then # Check if the LAN_PRIVATE_IP is reachable if ! ping -c 1 -W 1 "$LAN_PRIVATE_IP" > /dev/null; then echo "ERROR: LAN_PRIVATE_IP $LAN_PRIVATE_IP is not reachable" @@ -26,15 +33,16 @@ else echo " - MacOS: ./configure_lan_private_ip_macos.sh" echo " - Windows: .\configure_lan_private_ip_windows.bat" echo "" + echo " If you don't want to access OpenVidu through your LAN," + echo " you can run without LAN_MODE enabled, simply set" + echo " the following variables in the .env file:" + echo " USE_HTTPS=false" + echo " LAN_MODE=false" + echo "" exit 1 fi fi -if [ "$LAN_MODE" = 'true' ] && [ "$USE_HTTPS" = 'false' ]; then - echo 'LAN_MODE cannot be "true" if USE_HTTPS is "false"' - exit 1 -fi - # Prepare volumes mkdir -p /minio/data mkdir -p /mongo/data diff --git a/pro/.env b/pro/.env index 7b355e8..1a2b06d 100644 --- a/pro/.env +++ b/pro/.env @@ -30,9 +30,7 @@ MINIO_SECRET_KEY=minioadmin MONGO_ADMIN_USERNAME=mongoadmin MONGO_ADMIN_PASSWORD=mongoadmin -# Default App (OpenVidu Call) -CALL_PRIVATE_ACCESS=false -CALL_USER= -CALL_SECRET= -CALL_ADMIN_USER=admin -CALL_ADMIN_SECRET=admin +# OpenVidu Meet configuration. +MEET_INITIAL_ADMIN_USER=admin +MEET_INITIAL_ADMIN_PASSWORD=admin +MEET_INITIAL_API_KEY=meet-api-key diff --git a/pro/agent-speech-processing.yaml b/pro/agent-speech-processing.yaml index dc51bd8..b3b0d32 100644 --- a/pro/agent-speech-processing.yaml +++ b/pro/agent-speech-processing.yaml @@ -1,16 +1,22 @@ # Docker image of the agent. -docker_image: docker.io/openvidu/agent-speech-processing:3.3.0 +docker_image: docker.io/openvidu/agent-speech-processing:main # Whether to run the agent or not. enabled: false +# Maximum CPU load threshold for the agent to accept new jobs. Value between 0 and 1. +load_threshold: 1.0 + +# Log level for the agent [DEBUG, INFO, WARNING, ERROR, CRITICAL] +log_level: INFO + live_captions: # How this agent will connect to Rooms [automatic, manual] # - automatic: the agent will automatically connect to new Rooms. # - manual: the agent will connect to new Rooms only when your application dictates it by using the Agent Dispatch API. processing: automatic - # Which speech-to-text AI provider to use [aws, azure, google, opeanai, groq, deepgram, assemblyai, fal, clova, speechmatics, gladia, sarvam] + # Which speech-to-text AI provider to use [aws, azure, google, openai, groq, deepgram, assemblyai, fal, clova, speechmatics, gladia, sarvam, spitch] # The custom configuration for the selected provider must be set below provider: @@ -154,8 +160,8 @@ live_captions: detect_language: false # Whether to return interim (non-final) transcription results. Defaults to true. See https://developers.deepgram.com/docs/interim-results interim_results: true - # Whether to apply smart formatting to numbers, dates, etc. Defaults to true. See https://developers.deepgram.com/docs/smart-format - smart_format: true + # Whether to apply smart formatting to numbers, dates, etc. Defaults to false. See https://developers.deepgram.com/docs/smart-format + smart_format: false # When smart_format is used, ensures it does not wait for sequence to be complete before returning results. Defaults to true. See https://developers.deepgram.com/docs/smart-format#using-no-delay no_delay: true # Whether to add punctuations to the transcription. Defaults to true. Turn detector will work better with punctuations. See https://developers.deepgram.com/docs/punctuation @@ -222,7 +228,7 @@ live_captions: speaker_sensitivity: # See https://docs.speechmatics.com/features/diarization#prefer-current-speaker prefer_current_speaker: - # Permitted puctuation marks for advanced punctuation. See https://docs.speechmatics.com/features/punctuation-settings + # Permitted punctuation marks for advanced punctuation. See https://docs.speechmatics.com/features/punctuation-settings # Commented is an example of punctuation settings punctuation_overrides: # permitted_marks: [ ".", "," ] diff --git a/pro/docker-compose.yaml b/pro/docker-compose.yaml index 2f21d8d..b1bc625 100644 --- a/pro/docker-compose.yaml +++ b/pro/docker-compose.yaml @@ -1,6 +1,6 @@ services: caddy-proxy: - image: docker.io/openvidu/openvidu-caddy-local:3.3.0 + image: docker.io/openvidu/openvidu-caddy-local:main platform: linux/amd64 container_name: caddy-proxy restart: unless-stopped @@ -18,6 +18,9 @@ services: - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-} - MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-} - V2COMPAT_OPENVIDU_SECRET=${LIVEKIT_API_SECRET:-} + - MEET_INITIAL_ADMIN_USER=${MEET_INITIAL_ADMIN_USER:-} + - MEET_INITIAL_ADMIN_PASSWORD=${MEET_INITIAL_ADMIN_PASSWORD:-} + - MEET_INITIAL_API_KEY=${MEET_INITIAL_API_KEY:-} volumes: - ./custom-layout:/var/www/custom-layout ports: @@ -25,6 +28,7 @@ services: - 6443:6443 - 7443:7443 - 7880:7880 + - 9443:9443 depends_on: setup: condition: service_completed_successfully @@ -66,7 +70,7 @@ services: condition: service_completed_successfully mongo: - image: docker.io/openvidu/mongodb:8.0.9 + image: docker.io/openvidu/mongodb:8.0.12-r0 platform: linux/amd64 container_name: mongo restart: unless-stopped @@ -87,7 +91,7 @@ services: condition: service_completed_successfully dashboard: - image: docker.io/openvidu/openvidu-dashboard:3.3.0 + image: docker.io/openvidu/openvidu-dashboard:main platform: linux/amd64 container_name: dashboard restart: unless-stopped @@ -101,13 +105,14 @@ services: condition: service_completed_successfully openvidu: - image: docker.io/openvidu/openvidu-server-pro:3.3.0 + image: docker.io/openvidu/openvidu-server-pro:main platform: linux/amd64 restart: unless-stopped container_name: openvidu extra_hosts: - host.docker.internal:host-gateway environment: + - LAN_MODE=${LAN_MODE:-false} - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} - OPENVIDU_DEPLOYMENT_TYPE=local - OPENVIDU_ENVIRONMENT=on_premise @@ -125,7 +130,7 @@ services: condition: service_completed_successfully ingress: - image: docker.io/openvidu/ingress:3.3.0 + image: docker.io/openvidu/ingress:main platform: linux/amd64 container_name: ingress restart: unless-stopped @@ -144,7 +149,7 @@ services: condition: service_completed_successfully egress: - image: docker.io/livekit/egress:v1.9.1 + image: docker.io/livekit/egress:v1.10.0 platform: linux/amd64 restart: unless-stopped container_name: egress @@ -159,36 +164,45 @@ services: setup: condition: service_completed_successfully - default-app: - image: docker.io/openvidu/openvidu-call:3.3.0-demo + openvidu-meet: + image: docker.io/openvidu/openvidu-meet:main platform: linux/amd64 - container_name: openvidu-call + container_name: openvidu-meet restart: on-failure + ports: + - 9080:6080 + extra_hosts: + - host.docker.internal:host-gateway environment: - USE_HTTPS=${USE_HTTPS:-false} - LAN_MODE=${LAN_MODE:-false} - LAN_DOMAIN=${LAN_DOMAIN:-} - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} - SERVER_PORT=6080 - - CALL_NAME_ID=OpenViduCall-LOCAL + - MEET_LOG_LEVEL=${MEET_LOG_LEVEL:-info} + - MEET_NAME_ID=openviduMeet-LOCAL + - MEET_INITIAL_API_KEY=${MEET_INITIAL_API_KEY:-meet-api-key} + - MEET_INITIAL_ADMIN_USER=${MEET_INITIAL_ADMIN_USER:-admin} + - MEET_INITIAL_ADMIN_PASSWORD=${MEET_INITIAL_ADMIN_PASSWORD:-admin} + - MEET_COOKIE_SECURE=false + - MEET_INITIAL_WEBHOOK_ENABLED=true + - MEET_INITIAL_WEBHOOK_URL=${MEET_INITIAL_WEBHOOK_URL:-http://host.docker.internal:6080/webhook} - LIVEKIT_URL_PRIVATE=ws://openvidu:7880/ - LIVEKIT_API_KEY=${LIVEKIT_API_KEY} - LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET} - - CALL_PRIVATE_ACCESS=${CALL_PRIVATE_ACCESS:-false} - - CALL_USER=${CALL_USER:-} - - CALL_SECRET=${CALL_SECRET:-} - - CALL_RECORDING=${CALL_RECORDING:-} - - CALL_ADMIN_USER=${CALL_ADMIN_USER:-admin} - - CALL_ADMIN_SECRET=${CALL_ADMIN_SECRET:-admin} - - CALL_LOG_LEVEL=${CALL_LOG_LEVEL:-info} - - CALL_S3_BUCKET=${CALL_S3_BUCKET:-openvidu-appdata} - - CALL_S3_SERVICE_ENDPOINT=${CALL_S3_SERVICE_ENDPOINT:-http://minio:9000} - - CALL_S3_ACCESS_KEY=${MINIO_ACCESS_KEY} - - CALL_S3_SECRET_KEY=${MINIO_SECRET_KEY} - - CALL_AWS_REGION=${CALL_AWS_REGION:-us-east-1} - - CALL_S3_WITH_PATH_STYLE_ACCESS=${CALL_S3_WITH_PATH_STYLE_ACCESS:-true} + - MEET_S3_BUCKET=${MEET_S3_BUCKET:-openvidu-appdata} + - MEET_S3_SUBBUCKET=${MEET_S3_SUBBUCKET:-openvidu-meet} + - MEET_S3_SERVICE_ENDPOINT=${MEET_S3_SERVICE_ENDPOINT:-http://minio:9000} + - MEET_S3_ACCESS_KEY=${MINIO_ACCESS_KEY} + - MEET_S3_SECRET_KEY=${MINIO_SECRET_KEY} + - MEET_AWS_REGION=${MEET_AWS_REGION:-us-east-1} + - MEET_S3_WITH_PATH_STYLE_ACCESS=${MEET_S3_WITH_PATH_STYLE_ACCESS:-true} + - MEET_REDIS_HOST=redis + - MEET_REDIS_PORT=6379 + - MEET_REDIS_PASSWORD=${REDIS_PASSWORD:-} + - MEET_REDIS_DB=0 volumes: - - ./scripts/entrypoint_default_app.sh:/scripts/entrypoint.sh + - ./scripts/entrypoint_openvidu_meet.sh:/scripts/entrypoint.sh - ./scripts/utils.sh:/scripts/utils.sh entrypoint: /bin/sh /scripts/entrypoint.sh depends_on: @@ -196,7 +210,7 @@ services: condition: service_completed_successfully openvidu-v2compatibility: - image: docker.io/openvidu/openvidu-v2compatibility:3.3.0 + image: docker.io/openvidu/openvidu-v2compatibility:main platform: linux/amd64 restart: unless-stopped container_name: openvidu-v2compatibility @@ -238,22 +252,27 @@ services: condition: service_completed_successfully ready-check: - image: docker.io/curlimages/curl:8.13.0 + image: docker.io/openvidu/openvidu-operator:main platform: linux/amd64 container_name: ready-check restart: on-failure environment: + - MODE=local-ready-check + - OPENVIDU_ENVIRONMENT=local-platform - USE_HTTPS=${USE_HTTPS:-false} - LAN_DOMAIN=${LAN_DOMAIN:-} - LAN_MODE=${LAN_MODE:-false} - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} - - V2COMPAT_OPENVIDU_SECRET=${LIVEKIT_API_SECRET:-} - - LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-} - - LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-} - DASHBOARD_ADMIN_USERNAME=${DASHBOARD_ADMIN_USERNAME:-} - DASHBOARD_ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-} - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-} - MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-} + - LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-} + - LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-} + - V2COMPAT_OPENVIDU_SECRET=${LIVEKIT_API_SECRET:-} + - MEET_INITIAL_ADMIN_USER=${MEET_INITIAL_ADMIN_USER:-} + - MEET_INITIAL_ADMIN_PASSWORD=${MEET_INITIAL_ADMIN_PASSWORD:-} + - MEET_INITIAL_API_KEY=${MEET_INITIAL_API_KEY:-} depends_on: - openvidu - ingress @@ -261,13 +280,9 @@ services: - dashboard - minio - mongo - volumes: - - ./scripts/ready-check.sh:/scripts/ready-check.sh - - ./scripts/utils.sh:/scripts/utils.sh - command: /bin/sh /scripts/ready-check.sh operator: - image: docker.io/openvidu/openvidu-operator:3.3.0 + image: docker.io/openvidu/openvidu-operator:main platform: linux/amd64 container_name: operator restart: unless-stopped diff --git a/pro/egress.yaml b/pro/egress.yaml index c42574f..b81790b 100644 --- a/pro/egress.yaml +++ b/pro/egress.yaml @@ -27,6 +27,10 @@ storage: # account_name: your_account_name # account_key: your_account_key # container_name: openvidu-appdata + # gcp: + # credentials_json: | + # your_credentials_json + # bucket: openvidu-appdata # CPU cost for each type of Egress operation. cpu_cost: @@ -38,3 +42,12 @@ cpu_cost: participant_cpu_cost: 0.01 track_composite_cpu_cost: 0.01 track_cpu_cost: 0.01 + +openvidu: + # Allocation strategy for new egress requests + # - cpuload: the node with the lowest CPU load will be selected. Distributes the CPU load evenly across all nodes. + # - binpack: some node already hosting at least one Egress will be selected. Fills up nodes before assigning work to new ones. + allocation_strategy: cpuload + # Disables the automatic killing of the most expensive egress when CPU is overloaded. + # The default "false" value helps keeping the node stable, but may cause unexpected egress terminations under high load. + disable_cpu_overload_killer: false diff --git a/pro/livekit.yaml b/pro/livekit.yaml index fb77efb..cf6b34d 100644 --- a/pro/livekit.yaml +++ b/pro/livekit.yaml @@ -56,7 +56,7 @@ webhook: urls: - http://host.docker.internal:4443/livekit/webhook # For OpenVidu 2 compatibility - http://host.docker.internal:6080/livekit/webhook - - http://default-app:6080/livekit/webhook + - http://openvidu-meet:6080/livekit/webhook ingress: rtmp_base_url: rtmp://localhost:1935/rtmp whip_base_url: http://localhost:8085/whip diff --git a/pro/scripts/entrypoint_openvidu.sh b/pro/scripts/entrypoint_openvidu.sh index 66a2d71..2c9e034 100644 --- a/pro/scripts/entrypoint_openvidu.sh +++ b/pro/scripts/entrypoint_openvidu.sh @@ -1,7 +1,8 @@ #!/bin/sh set -e -if [ "$LAN_PRIVATE_IP" != "none" ]; then +if [ "$LAN_PRIVATE_IP" != "" ] && [ "$LAN_MODE" = 'true' ]; then + echo "Using as NODE_IP: $LAN_PRIVATE_IP" export NODE_IP="$LAN_PRIVATE_IP" fi diff --git a/pro/scripts/entrypoint_default_app.sh b/pro/scripts/entrypoint_openvidu_meet.sh similarity index 77% rename from pro/scripts/entrypoint_default_app.sh rename to pro/scripts/entrypoint_openvidu_meet.sh index dcfbbcc..46bf316 100644 --- a/pro/scripts/entrypoint_default_app.sh +++ b/pro/scripts/entrypoint_openvidu_meet.sh @@ -2,7 +2,7 @@ . /scripts/utils.sh -URL=$(getDeploymentUrl) +URL=$(getDeploymentUrl ws) export LIVEKIT_URL="${URL}" /usr/local/bin/entrypoint.sh diff --git a/pro/scripts/ready-check.sh b/pro/scripts/ready-check.sh deleted file mode 100644 index ff57f0a..0000000 --- a/pro/scripts/ready-check.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh - -. /scripts/utils.sh - -trap 'handle_sigint' SIGINT - -handle_sigint() { - echo "SIGINT signal received, exiting..." - exit 1 -} - -wait_for_service() { - SERVICE_NAME=$1 - SERVICE_URL=$2 - shift 2 - EXTRA=$@ - if [ -n "$EXTRA" ]; then - until curl $EXTRA $SERVICE_URL > /dev/null; do - echo "Waiting for $SERVICE_NAME to start..."; - sleep 1; - done; - else - until curl --silent --head --fail $SERVICE_URL > /dev/null; do - echo "Waiting for $SERVICE_NAME to start..."; - sleep 1; - done; - fi; -} - -wait_for_service 'OpenVidu' 'http://openvidu:7880' -wait_for_service 'Ingress' 'http://ingress:9091' -wait_for_service 'Egress' 'http://egress:9091' -wait_for_service 'Dashboard' 'http://dashboard:5000' -wait_for_service 'Minio' 'http://minio:9000/minio/health/live' -wait_for_service 'Minio Console' 'http://minio:9001/minio-console' -wait_for_service 'Mongo' 'http://mongo:27017' --connect-timeout 10 --silent - -LAN_HTTP_URL=$(getDeploymentUrl http) -LAN_WS_URL=$(getDeploymentUrl ws) - -for i in $(seq 1 10); do - echo 'Starting OpenVidu... Please be patient...' - sleep 1 -done; -echo '' -echo '' -echo '=========================================' -echo '🎉 OpenVidu is ready! 🎉' -echo '=========================================' -echo '' -echo 'OpenVidu Server & LiveKit Server URLs:' -echo '' -echo ' - From this machine:' -echo '' -echo ' - http://localhost:7880' -echo ' - ws://localhost:7880' -echo '' -echo ' - From other devices in your LAN:' -echo '' -echo " - $LAN_HTTP_URL" -echo " - $LAN_WS_URL" -echo '' -echo '=========================================' -echo '' -echo 'OpenVidu Developer UI (services and passwords):' -echo '' -echo ' - http://localhost:7880' -echo " - $LAN_HTTP_URL" -echo '' -echo '=========================================' diff --git a/pro/scripts/setup.sh b/pro/scripts/setup.sh index 2704a16..fe044df 100644 --- a/pro/scripts/setup.sh +++ b/pro/scripts/setup.sh @@ -1,6 +1,11 @@ #!/bin/sh -if [ -z "$LAN_PRIVATE_IP" ]; then +if [ "$LAN_MODE" = 'true' ] && [ "$USE_HTTPS" = 'false' ]; then + echo 'LAN_MODE cannot be "true" if USE_HTTPS is "false"' + exit 1 +fi + +if [ "$LAN_MODE" = 'true' ] && [ -z "$LAN_PRIVATE_IP" ]; then echo '------------------------' echo '' echo 'LAN_PRIVATE_IP is required in the .env file.' @@ -14,7 +19,9 @@ if [ -z "$LAN_PRIVATE_IP" ]; then echo 'If it can'\''t be found, you can manually set it in the .env file' echo '------------------------' exit 1 -else +fi + +if [ "$LAN_MODE" = 'true' ] && [ -n "$LAN_PRIVATE_IP" ]; then # Check if the LAN_PRIVATE_IP is reachable if ! ping -c 1 -W 1 "$LAN_PRIVATE_IP" > /dev/null; then echo "ERROR: LAN_PRIVATE_IP $LAN_PRIVATE_IP is not reachable" @@ -26,15 +33,16 @@ else echo " - MacOS: ./configure_lan_private_ip_macos.sh" echo " - Windows: .\configure_lan_private_ip_windows.bat" echo "" + echo " If you don't want to access OpenVidu through your LAN," + echo " you can run without LAN_MODE enabled, simply set" + echo " the following variables in the .env file:" + echo " USE_HTTPS=false" + echo " LAN_MODE=false" + echo "" exit 1 fi fi -if [ "$LAN_MODE" = 'true' ] && [ "$USE_HTTPS" = 'false' ]; then - echo 'LAN_MODE cannot be "true" if USE_HTTPS is "false"' - exit 1 -fi - # Prepare volumes mkdir -p /minio/data mkdir -p /mongo/data