diff --git a/openvidu-deployment/community/local-meet/docker-compose.base.yaml b/openvidu-deployment/community/local-meet/docker-compose.base.yaml new file mode 100644 index 00000000..0d5368c4 --- /dev/null +++ b/openvidu-deployment/community/local-meet/docker-compose.base.yaml @@ -0,0 +1,251 @@ +services: + + generate-scripts: + image: alpine:3.22.1 + entrypoint: ["/bin/sh", "-c"] + restart: "no" + user: root + volumes: + - scripts:/scripts + - config:/config + command: + - | + set -e + # Check if /scripts and /config are empty, if not, skip script generation + if [ "$(ls -A /scripts)" ] && [ "$(ls -A /config)" ]; then + echo "/config and /scripts are not empty, skipping script generation." + exit 0 + fi + echo "Generating scripts..." + echo "$${SETUP_SCRIPT}" > /scripts/setup.sh + echo "$${UTILS_SCRIPT}" > /scripts/utils.sh + echo "$${READY_CHECK_ENTRYPOINT}" > /scripts/entrypoint_ready_check.sh + echo "$${CADDY_ENTRYPOINT}" > /scripts/entrypoint_caddy.sh + echo "$${OPENVIDU_ENTRYPOINT}" > /scripts/entrypoint_openvidu.sh + echo "$${OPENVIDU_MEET_ENTRYPOINT}" > /scripts/entrypoint_openvidu_meet.sh + echo "$${OPENVIDU_CONFIG}" > /config/livekit.yaml + echo "$${INGRESS_CONFIG}" > /config/ingress.yaml + echo "$${EGRESS_CONFIG}" > /config/egress.yaml + echo "Generating configuration files..." + echo "Setting permissions..." + chmod +x /scripts/setup.sh + chmod +x /scripts/utils.sh + chmod +x /scripts/entrypoint_ready_check.sh + chmod +x /scripts/entrypoint_caddy.sh + chmod +x /scripts/entrypoint_openvidu.sh + chmod +x /scripts/entrypoint_openvidu_meet.sh + environment: + SETUP_SCRIPT: | + #!/bin/sh + echo "Setting up directories and permissions..." + mkdir -p /minio/data/ + mkdir -p /mongo/data/ + mkdir -p /egress/home/egress + chown 1001:1001 /minio /minio/data + chown 1001:1001 /mongo /mongo/data + chown 1001:1001 /egress + chown 1001:1001 /egress/home + chown 1001:1001 /egress/home/egress + echo "Setup complete." + UTILS_SCRIPT: | + #!/bin/sh + LAN_DOMAIN=openvidu-local.dev + if [ "$$LAN_PRIVATE_IP" != "" ]; then + export USE_HTTPS=true + export LAN_MODE=true + else + export USE_HTTPS=false + export LAN_MODE=false + fi + echo "Using LAN_PRIVATE_IP: $${LAN_PRIVATE_IP:-none}" + echo "Using USE_HTTPS: $${USE_HTTPS}" + echo "Using LAN_MODE: $${LAN_MODE}" + getDeploymentUrl() { + schema="$${1:-http}" + URL="$$schema://localhost:7880" + if [ "$${USE_HTTPS}" = 'true' ]; then + URL="$${schema}s://localhost:7443" + fi + if [ "$${LAN_MODE}" = 'true' ]; then + LAN_DOMAIN=$${LAN_DOMAIN:-"openvidu-local.dev"} + if [ "$$LAN_PRIVATE_IP" != 'none' ] && [ "$${LAN_DOMAIN}" = 'openvidu-local.dev' ]; then + # Replace dots with dashes + LAN_DOMAIN="$$(echo "$$LAN_PRIVATE_IP" | sed 's/\./-/g').openvidu-local.dev" + fi + URL="$${schema}s://$${LAN_DOMAIN}:7443" + fi + echo "$$URL" + } + READY_CHECK_ENTRYPOINT: | + #!/bin/sh + set -e + export LAN_DOMAIN=openvidu-local.dev + if [ "$$LAN_PRIVATE_IP" != "" ]; then + export USE_HTTPS=true + export LAN_MODE=true + else + export USE_HTTPS=false + export LAN_MODE=false + fi + echo "Using LAN_PRIVATE_IP: $${LAN_PRIVATE_IP:-none}" + echo "Using LAN_DOMAIN: $${LAN_DOMAIN}" + echo "Using USE_HTTPS: $${USE_HTTPS}" + echo "Using LAN_MODE: $${LAN_MODE}" + /bin/operator + CADDY_ENTRYPOINT: | + #!/bin/sh + set -e + export LAN_DOMAIN=openvidu-local.dev + if [ "$$LAN_PRIVATE_IP" != "" ]; then + export USE_HTTPS=true + export LAN_MODE=true + else + export USE_HTTPS=false + export LAN_MODE=false + fi + echo "Using LAN_PRIVATE_IP: $${LAN_PRIVATE_IP:-none}" + echo "Using LAN_DOMAIN: $${LAN_DOMAIN}" + echo "Using USE_HTTPS: $${USE_HTTPS}" + echo "Using LAN_MODE: $${LAN_MODE}" + /entrypoint.sh /usr/bin/caddy run --config /config/caddy/Caddyfile + OPENVIDU_ENTRYPOINT: | + #!/bin/sh + set -e + if [ "$$LAN_PRIVATE_IP" != "" ]; then + echo "Using as NODE_IP: $$LAN_PRIVATE_IP" + export NODE_IP="$$LAN_PRIVATE_IP" + fi + ./livekit-server "$@" + OPENVIDU_MEET_ENTRYPOINT: | + #!/bin/bash + . /scripts/utils.sh + + URL=$(getDeploymentUrl ws) + export LIVEKIT_URL="$${URL}" + + /usr/local/bin/entrypoint.sh + OPENVIDU_CONFIG: | + # OpenVidu configuration + openvidu: + analytics: + enabled: true + interval: 10s + expiration: 768h # 32 days + mongo_url: mongodb://mongoadmin:mongoadmin@mongo:27017/?replicaSet=rs0&readPreference=primaryPreferred + + # LiveKit configuration + port: 7880 + bind_addresses: + - "" + rtc: + tcp_port: 7881 + port_range_start: 7900 + port_range_end: 7999 + redis: + address: redis:6379 + username: "" + password: redispassword + db: 0 + use_tls: false + turn: + enabled: true + udp_port: 3478 + relay_range_start: 40000 + relay_range_end: 50000 + keys: + devkey: secret + webhook: + api_key: devkey + urls: + - http://host.docker.internal:6080/livekit/webhook + - http://openvidu-meet:6080/livekit/webhook + ingress: + rtmp_base_url: rtmp://localhost:1935/rtmp + whip_base_url: http://localhost:8085/whip + logging: + # Logging level for the LiveKit server. + # Values: debug, info, warn, error. + # Default: info. + level: info + + # Logging level for the Pion WebRTC engine. + # Values: trace, debug, info, warn, error. + # Default: error. + pion_level: warn + INGRESS_CONFIG: | + redis: + address: redis:6379 + username: "" + password: redispassword + db: 0 + use_tls: false + api_key: devkey + api_secret: secret + ws_url: ws://openvidu:7880 + rtmp_port: 1935 + whip_port: 8085 + http_relay_port: 9090 + health_port: 9091 + logging: + json: false + level: "" + development: false + rtc_config: + udp_port: 7895 + EGRESS_CONFIG: | + redis: + address: redis:6379 + username: "" + password: redispassword + db: 0 + use_tls: false + api_key: devkey + api_secret: secret + ws_url: ws://openvidu:7880 + health_port: 9091 + + # Files will be moved here when uploads fail. + backup: + prefix: /home/egress/backup_storage + + # Storage for recordings. + storage: + s3: + access_key: minioadmin + secret: minioadmin + # Default region for minio + region: us-east-1 + endpoint: http://minio:9000 + bucket: openvidu-appdata + force_path_style: true + #azure: + # account_name: your_account_name + # account_key: your_account_key + # container_name: openvidu-appdata + + # CPU cost for each type of Egress operation. + cpu_cost: + max_cpu_utilization: 0.80 + room_composite_cpu_cost: 0.01 + audio_room_composite_cpu_cost: 0.01 + web_cpu_cost: 0.01 + audio_web_cpu_cost: 0.01 + participant_cpu_cost: 0.01 + track_composite_cpu_cost: 0.01 + track_cpu_cost: 0.01 + + setup: + image: docker.io/busybox:1.37.0 + platform: linux/amd64 + container_name: setup + restart: "no" + volumes: + - minio-data:/minio + - mongo-data:/mongo + - egress-data:/egress + - scripts:/scripts/ + user: root + depends_on: + generate-scripts: + condition: service_completed_successfully + command: /bin/sh /scripts/setup.sh diff --git a/openvidu-deployment/community/local-meet/docker-compose.yaml b/openvidu-deployment/community/local-meet/docker-compose.yaml new file mode 100644 index 00000000..2586dfb7 --- /dev/null +++ b/openvidu-deployment/community/local-meet/docker-compose.yaml @@ -0,0 +1,277 @@ +services: + + caddy-proxy: + image: docker.io/openvidu/openvidu-caddy-local:main + platform: linux/amd64 + container_name: caddy-proxy + restart: unless-stopped + extra_hosts: + - host.docker.internal:host-gateway + environment: + - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} + - LIVEKIT_API_KEY=devkey + - LIVEKIT_API_SECRET=secret + - DASHBOARD_ADMIN_USERNAME=admin + - DASHBOARD_ADMIN_PASSWORD=admin + - MINIO_ACCESS_KEY=minioadmin + - MINIO_SECRET_KEY=minioadmin + - MEET_INITIAL_ADMIN_USER=admin + - MEET_INITIAL_ADMIN_PASSWORD=admin + - MEET_INITIAL_ADMIN_PASSWORD=meet-api-key + volumes: + - scripts:/scripts + entrypoint: /bin/sh /scripts/entrypoint_caddy.sh + ports: + - 5443:5443 + - 6443:6443 + - 7443:7443 + - 7880:7880 + - 9443:9443 + depends_on: + setup: + condition: service_completed_successfully + + redis: + image: docker.io/redis:7.4.4-alpine + platform: linux/amd64 + container_name: redis + restart: unless-stopped + ports: + - 6379:6379 + volumes: + - redis:/data + command: > + redis-server + --bind 0.0.0.0 + --requirepass redispassword + depends_on: + setup: + condition: service_completed_successfully + + minio: + image: docker.io/bitnami/minio:2025.5.24-debian-12-r1 + platform: linux/amd64 + container_name: minio + restart: unless-stopped + ports: + - 9000:9000 + environment: + - MINIO_ROOT_USER=minioadmin + - MINIO_ROOT_PASSWORD=minioadmin + - MINIO_DEFAULT_BUCKETS=openvidu-appdata + - MINIO_CONSOLE_SUBPATH=/minio-console + - MINIO_BROWSER_REDIRECT_URL=http://localhost:7880/minio-console + volumes: + - minio-data:/bitnami/minio/data + - minio-certs:/certs + depends_on: + setup: + condition: service_completed_successfully + + mongo: + image: docker.io/bitnami/mongodb:8.0.9 + platform: linux/amd64 + container_name: mongo + restart: unless-stopped + ports: + - 27017:27017 + volumes: + - mongo-data:/bitnami/mongodb + environment: + - MONGODB_ROOT_USER=mongoadmin + - MONGODB_ROOT_PASSWORD=mongoadmin + - MONGODB_ADVERTISED_HOSTNAME=mongo + - MONGODB_REPLICA_SET_MODE=primary + - MONGODB_REPLICA_SET_NAME=rs0 + - MONGODB_REPLICA_SET_KEY=devreplicasetkey + - EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU=1 + depends_on: + setup: + condition: service_completed_successfully + + dashboard: + image: docker.io/openvidu/openvidu-dashboard:main + platform: linux/amd64 + container_name: dashboard + restart: unless-stopped + environment: + - SERVER_PORT=5000 + - ADMIN_USERNAME=admin + - ADMIN_PASSWORD=admin + - DATABASE_URL=mongodb://mongoadmin:mongoadmin@mongo:27017/?replicaSet=rs0&readPreference=primaryPreferred + depends_on: + setup: + condition: service_completed_successfully + + openvidu: + image: docker.io/openvidu/openvidu-server:main + platform: linux/amd64 + restart: unless-stopped + container_name: openvidu + extra_hosts: + - host.docker.internal:host-gateway + environment: + - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} + ports: + - 3478:3478/udp + - 7881:7881/tcp + - 7900-7999:7900-7999/udp + entrypoint: /bin/sh /scripts/entrypoint_openvidu.sh + command: --config /config/livekit.yaml + volumes: + - scripts:/scripts + - config:/config + depends_on: + setup: + condition: service_completed_successfully + + ingress: + image: docker.io/openvidu/ingress:main + platform: linux/amd64 + container_name: ingress + restart: unless-stopped + extra_hosts: + - host.docker.internal:host-gateway + ports: + - 1935:1935 + - 8085:8085 + - 7895:7895/udp + environment: + - INGRESS_CONFIG_FILE=/config/ingress.yaml + volumes: + - config:/config + depends_on: + setup: + condition: service_completed_successfully + + egress: + image: docker.io/livekit/egress:v1.9.1 + platform: linux/amd64 + restart: unless-stopped + container_name: egress + extra_hosts: + - host.docker.internal:host-gateway + environment: + - EGRESS_CONFIG_FILE=/config/egress.yaml + volumes: + - config:/config + - egress-data:/home/egress/tmp + depends_on: + setup: + condition: service_completed_successfully + + operator: + image: docker.io/openvidu/openvidu-operator:main + platform: linux/amd64 + container_name: operator + restart: unless-stopped + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - agents-config:/agents-config + - operator-deployment:/deployment + environment: + - PLATFORM=linux/amd64 + - MODE=agent-manager-local + - DEPLOYMENT_FILES_DIR=/deployment + - AGENTS_CONFIG_DIR=/agents-config + - NETWORK_NAME=openvidu-community + - AGENTS_CONFIG_VOLUME=openvidu-agents-config + - LIVEKIT_URL=ws://openvidu:7880/ + - LIVEKIT_API_KEY=devkey + - LIVEKIT_API_SECRET=secret + - REDIS_ADDRESS=redis:6379 + - REDIS_PASSWORD=redispassword + depends_on: + setup: + condition: service_completed_successfully + + openvidu-meet: + image: docker.io/openvidu/openvidu-meet:main + platform: linux/amd64 + container_name: openvidu-meet + restart: on-failure + ports: + - 9080:6080 + extra_hosts: + - host.docker.internal:host-gateway + environment: + - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} + - SERVER_PORT=6080 + - MEET_LOG_LEVEL=info + - MEET_NAME_ID=openviduMeet-LOCAL + - MEET_INITIAL_ADMIN_PASSWORD=meet-api-key + - MEET_INITIAL_ADMIN_USER=admin + - MEET_INITIAL_ADMIN_PASSWORD=admin + - MEET_COOKIE_SECURE=false + - MEET_INITIAL_WEBHOOK_ENABLED=true + - MEET_INITIAL_WEBHOOK_URL=http://host.docker.internal:5080/webhook + - LIVEKIT_URL_PRIVATE=ws://openvidu:7880/ + - LIVEKIT_API_KEY=devkey + - LIVEKIT_API_SECRET=secret + - MEET_S3_BUCKET=openvidu-appdata + - MEET_S3_SUBBUCKET=openvidu-meet + - MEET_S3_SERVICE_ENDPOINT=http://minio:9000 + - MEET_S3_ACCESS_KEY=minioadmin + - MEET_S3_SECRET_KEY=minioadmin + - MEET_AWS_REGION=us-east-1 + - MEET_S3_WITH_PATH_STYLE_ACCESS=true + - MEET_REDIS_HOST=redis + - MEET_REDIS_PORT=6379 + - MEET_REDIS_PASSWORD=redispassword + - MEET_REDIS_DB=0 + volumes: + - scripts:/scripts + entrypoint: /bin/sh /scripts/entrypoint_openvidu_meet.sh + depends_on: + setup: + condition: service_completed_successfully + + ready-check: + image: docker.io/openvidu/openvidu-operator:main + platform: linux/amd64 + container_name: ready-check + restart: on-failure + environment: + - MODE=local-ready-check + - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} + - DASHBOARD_ADMIN_USERNAME=admin + - DASHBOARD_ADMIN_PASSWORD=admin + - MINIO_ACCESS_KEY=minioadmin + - MINIO_SECRET_KEY=minioadmin + - LIVEKIT_API_KEY=devkey + - LIVEKIT_API_SECRET=secret + - MEET_INITIAL_ADMIN_USER=admin + - MEET_INITIAL_ADMIN_PASSWORD=admin + - MEET_INITIAL_ADMIN_PASSWORD=meet-api-key + volumes: + - scripts:/scripts + entrypoint: /bin/sh /scripts/entrypoint_ready_check.sh + depends_on: + - openvidu + - ingress + - egress + - dashboard + - minio + - mongo + +volumes: + scripts: + name: openvidu-scripts + config: + name: openvidu-config + agents-config: + name: openvidu-agents-config + minio-certs: + name: openvidu-minio-certs + mongodb-config: + name: openvidu-mongodb-config + redis: + name: openvidu-redis + minio-data: + name: openvidu-minio-data + mongo-data: + name: openvidu-mongo-data + egress-data: + name: openvidu-egress-data + operator-deployment: + name: operator-deployment-data diff --git a/openvidu-deployment/pro/local-meet/docker-compose.base.yaml b/openvidu-deployment/pro/local-meet/docker-compose.base.yaml new file mode 100644 index 00000000..cdb3f754 --- /dev/null +++ b/openvidu-deployment/pro/local-meet/docker-compose.base.yaml @@ -0,0 +1,294 @@ +services: + + generate-scripts: + image: alpine:3.22.1 + entrypoint: ["/bin/sh", "-c"] + restart: "no" + user: root + volumes: + - scripts:/scripts + - config:/config + command: + - | + set -e + # Check if /scripts and /config are empty, if not, skip script generation + if [ "$(ls -A /scripts)" ] && [ "$(ls -A /config)" ]; then + echo "/config and /scripts are not empty, skipping script generation." + exit 0 + fi + echo "Generating scripts..." + echo "$${SETUP_SCRIPT}" > /scripts/setup.sh + echo "$${UTILS_SCRIPT}" > /scripts/utils.sh + echo "$${READY_CHECK_ENTRYPOINT}" > /scripts/entrypoint_ready_check.sh + echo "$${CADDY_ENTRYPOINT}" > /scripts/entrypoint_caddy.sh + echo "$${OPENVIDU_ENTRYPOINT}" > /scripts/entrypoint_openvidu.sh + echo "$${OPENVIDU_V2_COMPAT_ENTRYPOINT}" > /scripts/entrypoint_openvidu_v2_compat.sh + echo "$${OPENVIDU_MEET_ENTRYPOINT}" > /scripts/entrypoint_openvidu_meet.sh + echo "$${OPENVIDU_CONFIG}" > /config/livekit.yaml + echo "$${INGRESS_CONFIG}" > /config/ingress.yaml + echo "$${EGRESS_CONFIG}" > /config/egress.yaml + echo "Generating configuration files..." + echo "Setting permissions..." + chmod +x /scripts/setup.sh + chmod +x /scripts/utils.sh + chmod +x /scripts/entrypoint_ready_check.sh + chmod +x /scripts/entrypoint_caddy.sh + chmod +x /scripts/entrypoint_openvidu.sh + chmod +x /scripts/entrypoint_openvidu_meet.sh + chmod +x /scripts/entrypoint_openvidu_v2_compat.sh + environment: + SETUP_SCRIPT: | + #!/bin/sh + echo "Setting up directories and permissions..." + mkdir -p /minio/data/ + mkdir -p /mongo/data/ + mkdir -p /egress/home/egress + chown 1001:1001 /minio /minio/data + chown 1001:1001 /mongo /mongo/data + chown 1001:1001 /egress + chown 1001:1001 /egress/home + chown 1001:1001 /egress/home/egress + echo "Setup complete." + UTILS_SCRIPT: | + #!/bin/sh + LAN_DOMAIN=openvidu-local.dev + if [ "$$LAN_PRIVATE_IP" != "" ]; then + export USE_HTTPS=true + export LAN_MODE=true + else + export USE_HTTPS=false + export LAN_MODE=false + fi + echo "Using LAN_PRIVATE_IP: $${LAN_PRIVATE_IP:-none}" + echo "Using USE_HTTPS: $${USE_HTTPS}" + echo "Using LAN_MODE: $${LAN_MODE}" + getDeploymentUrl() { + schema="$${1:-http}" + URL="$$schema://localhost:7880" + if [ "$${USE_HTTPS}" = 'true' ]; then + URL="$${schema}s://localhost:7443" + fi + if [ "$${LAN_MODE}" = 'true' ]; then + LAN_DOMAIN=$${LAN_DOMAIN:-"openvidu-local.dev"} + if [ "$$LAN_PRIVATE_IP" != 'none' ] && [ "$${LAN_DOMAIN}" = 'openvidu-local.dev' ]; then + # Replace dots with dashes + LAN_DOMAIN="$$(echo "$$LAN_PRIVATE_IP" | sed 's/\./-/g').openvidu-local.dev" + fi + URL="$${schema}s://$${LAN_DOMAIN}:7443" + fi + echo "$$URL" + } + READY_CHECK_ENTRYPOINT: | + #!/bin/sh + set -e + export LAN_DOMAIN=openvidu-local.dev + if [ "$$LAN_PRIVATE_IP" != "" ]; then + export USE_HTTPS=true + export LAN_MODE=true + else + export USE_HTTPS=false + export LAN_MODE=false + fi + echo "Using LAN_PRIVATE_IP: $${LAN_PRIVATE_IP:-none}" + echo "Using LAN_DOMAIN: $${LAN_DOMAIN}" + echo "Using USE_HTTPS: $${USE_HTTPS}" + echo "Using LAN_MODE: $${LAN_MODE}" + /bin/operator + CADDY_ENTRYPOINT: | + #!/bin/sh + set -e + export LAN_DOMAIN=openvidu-local.dev + if [ "$$LAN_PRIVATE_IP" != "" ]; then + export USE_HTTPS=true + export LAN_MODE=true + else + export USE_HTTPS=false + export LAN_MODE=false + fi + echo "Using LAN_PRIVATE_IP: $${LAN_PRIVATE_IP:-none}" + echo "Using LAN_DOMAIN: $${LAN_DOMAIN}" + echo "Using USE_HTTPS: $${USE_HTTPS}" + echo "Using LAN_MODE: $${LAN_MODE}" + /entrypoint.sh /usr/bin/caddy run --config /config/caddy/Caddyfile + OPENVIDU_ENTRYPOINT: | + #!/bin/sh + set -e + if [ "$$LAN_PRIVATE_IP" != "" ]; then + echo "Using as NODE_IP: $$LAN_PRIVATE_IP" + export NODE_IP="$$LAN_PRIVATE_IP" + fi + + # Configure container private IP as node private IP + LIVEKIT_OPENVIDU_NODE_PRIVATE_IP="$$(hostname -i)" + export LIVEKIT_OPENVIDU_NODE_PRIVATE_IP + + ./livekit-server "$@" + OPENVIDU_V2_COMPAT_ENTRYPOINT: | + #!/bin/sh + set -e + . /scripts/utils.sh + + URL=$(getDeploymentUrl) + export V2COMPAT_OPENVIDU_SHIM_URL="$${URL}" + export V2COMPAT_LIVEKIT_URL="$${URL}" + + /bin/server + OPENVIDU_MEET_ENTRYPOINT: | + #!/bin/bash + . /scripts/utils.sh + + URL=$(getDeploymentUrl ws) + export LIVEKIT_URL="$${URL}" + + /usr/local/bin/entrypoint.sh + OPENVIDU_CONFIG: | + # OpenVidu configuration + openvidu: + analytics: + enabled: true + interval: 10s + expiration: 768h # 32 days + mongo_url: mongodb://mongoadmin:mongoadmin@mongo:27017/?replicaSet=rs0&readPreference=primaryPreferred + rtc: + # WebRTC engine selection + # Values: pion, mediasoup + engine: pion + mediasoup: + # Global toggle to enable debugging logs from mediasoup. + # In most debugging cases, using just an asterisk ("*") here is enough, + # but this can be fine-tuned for specific log levels. + # More info: https://mediasoup.org/documentation/v3/mediasoup/debugging/ + # Default: "" (empty). + # Overridden by the `DEBUG` env var, if it is set. + debug: "" + + # Logging level for logs generated by mediasoup. + # More info: https://mediasoup.org/documentation/v3/mediasoup/debugging/ + # Values: debug, warn, error, none. + # Default: error. + log_level: error + + # Comma-separated list of log tag names, for debugging. + # More info: https://mediasoup.org/documentation/v3/mediasoup/debugging/ + # Values: info, ice, dtls, rtp, srtp, rtcp, rtx, bwe, score, simulcast, svc, sctp, message. + # Default: [info, ice, rtp, rtcp, message]. + log_tags: [info, ice, rtp, rtcp, message] + + # LiveKit configuration + port: 7880 + bind_addresses: + - "" + rtc: + tcp_port: 7881 + port_range_start: 7900 + port_range_end: 7999 + redis: + address: redis:6379 + username: "" + password: redispassword + db: 0 + use_tls: false + turn: + enabled: true + udp_port: 3478 + relay_range_start: 40000 + relay_range_end: 50000 + keys: + devkey: secret + webhook: + api_key: devkey + urls: + - http://host.docker.internal:4443/livekit/webhook # For OpenVidu 2 compatibility + - http://host.docker.internal:6080/livekit/webhook + - http://openvidu-meet:6080/livekit/webhook + ingress: + rtmp_base_url: rtmp://localhost:1935/rtmp + whip_base_url: http://localhost:8085/whip + logging: + # Logging level for the LiveKit server. + # Values: debug, info, warn, error. + # Default: info. + level: info + + # Logging level for the Pion WebRTC engine. + # Values: trace, debug, info, warn, error. + # Default: error. + pion_level: warn + + INGRESS_CONFIG: | + redis: + address: redis:6379 + username: "" + password: redispassword + db: 0 + use_tls: false + api_key: devkey + api_secret: secret + ws_url: ws://openvidu:7880 + rtmp_port: 1935 + whip_port: 8085 + http_relay_port: 9090 + health_port: 9091 + logging: + json: false + level: "" + development: false + rtc_config: + udp_port: 7895 + EGRESS_CONFIG: | + redis: + address: redis:6379 + username: "" + password: redispassword + db: 0 + use_tls: false + api_key: devkey + api_secret: secret + ws_url: ws://openvidu:7880 + health_port: 9091 + + # Files will be moved here when uploads fail. + backup: + prefix: /home/egress/backup_storage + + # Storage for recordings. + storage: + s3: + access_key: minioadmin + secret: minioadmin + # Default region for minio + region: us-east-1 + endpoint: http://minio:9000 + bucket: openvidu-appdata + force_path_style: true + #azure: + # account_name: your_account_name + # account_key: your_account_key + # container_name: openvidu-appdata + + # CPU cost for each type of Egress operation. + cpu_cost: + max_cpu_utilization: 0.80 + room_composite_cpu_cost: 0.01 + audio_room_composite_cpu_cost: 0.01 + web_cpu_cost: 0.01 + audio_web_cpu_cost: 0.01 + participant_cpu_cost: 0.01 + track_composite_cpu_cost: 0.01 + track_cpu_cost: 0.01 + + setup: + image: docker.io/busybox:1.37.0 + platform: linux/amd64 + container_name: setup + restart: "no" + volumes: + - minio-data:/minio + - mongo-data:/mongo + - egress-data:/egress + - scripts:/scripts/ + user: root + depends_on: + generate-scripts: + condition: service_completed_successfully + command: /bin/sh /scripts/setup.sh \ No newline at end of file diff --git a/openvidu-deployment/pro/local-meet/docker-compose.yaml b/openvidu-deployment/pro/local-meet/docker-compose.yaml new file mode 100644 index 00000000..fc3d9a9a --- /dev/null +++ b/openvidu-deployment/pro/local-meet/docker-compose.yaml @@ -0,0 +1,297 @@ +services: + caddy-proxy: + image: docker.io/openvidu/openvidu-caddy-local:main + platform: linux/amd64 + container_name: caddy-proxy + restart: unless-stopped + extra_hosts: + - host.docker.internal:host-gateway + environment: + - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} + - LIVEKIT_API_KEY=devkey + - LIVEKIT_API_SECRET=secret + - DASHBOARD_ADMIN_USERNAME=admin + - DASHBOARD_ADMIN_PASSWORD=admin + - MINIO_ACCESS_KEY=minioadmin + - MINIO_SECRET_KEY=minioadmin + - V2COMPAT_OPENVIDU_SECRET=secret + - MEET_INITIAL_ADMIN_USER=admin + - MEET_INITIAL_ADMIN_PASSWORD=admin + - MEET_INITIAL_ADMIN_PASSWORD=meet-api-key + volumes: + - scripts:/scripts + entrypoint: /bin/sh /scripts/entrypoint_caddy.sh + ports: + - 5443:5443 + - 6443:6443 + - 7443:7443 + - 7880:7880 + - 9443:9443 + depends_on: + setup: + condition: service_completed_successfully + + redis: + image: docker.io/redis:7.4.4-alpine + platform: linux/amd64 + container_name: redis + restart: unless-stopped + ports: + - 6379:6379 + volumes: + - redis:/data + command: > + redis-server + --bind 0.0.0.0 + --requirepass redispassword + depends_on: + setup: + condition: service_completed_successfully + + minio: + image: docker.io/bitnami/minio:2025.5.24-debian-12-r1 + platform: linux/amd64 + container_name: minio + restart: unless-stopped + ports: + - 9000:9000 + environment: + - MINIO_ROOT_USER=minioadmin + - MINIO_ROOT_PASSWORD=minioadmin + - MINIO_DEFAULT_BUCKETS=openvidu-appdata + - MINIO_CONSOLE_SUBPATH=/minio-console + - MINIO_BROWSER_REDIRECT_URL=http://localhost:7880/minio-console + volumes: + - minio-data:/bitnami/minio/data + - minio-certs:/certs + depends_on: + setup: + condition: service_completed_successfully + + mongo: + image: docker.io/bitnami/mongodb:8.0.9 + platform: linux/amd64 + container_name: mongo + restart: unless-stopped + ports: + - 27017:27017 + volumes: + - mongo-data:/bitnami/mongodb + environment: + - MONGODB_ROOT_USER=mongoadmin + - MONGODB_ROOT_PASSWORD=mongoadmin + - MONGODB_ADVERTISED_HOSTNAME=mongo + - MONGODB_REPLICA_SET_MODE=primary + - MONGODB_REPLICA_SET_NAME=rs0 + - MONGODB_REPLICA_SET_KEY=devreplicasetkey + - EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU=1 + depends_on: + setup: + condition: service_completed_successfully + + dashboard: + image: docker.io/openvidu/openvidu-dashboard:main + platform: linux/amd64 + container_name: dashboard + restart: unless-stopped + environment: + - SERVER_PORT=5000 + - ADMIN_USERNAME=admin + - ADMIN_PASSWORD=admin + - DATABASE_URL=mongodb://mongoadmin:mongoadmin@mongo:27017/?replicaSet=rs0&readPreference=primaryPreferred + depends_on: + setup: + condition: service_completed_successfully + + openvidu: + 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_PRIVATE_IP=${LAN_PRIVATE_IP:-} + - OPENVIDU_DEPLOYMENT_TYPE=local + - OPENVIDU_ENVIRONMENT=on_premise + ports: + - 3478:3478/udp + - 7881:7881/tcp + - 7900-7999:7900-7999/udp + entrypoint: /bin/sh /scripts/entrypoint_openvidu.sh + command: --config /config/livekit.yaml + volumes: + - scripts:/scripts + - config:/config + depends_on: + setup: + condition: service_completed_successfully + + ingress: + image: docker.io/openvidu/ingress:main + platform: linux/amd64 + container_name: ingress + restart: unless-stopped + extra_hosts: + - host.docker.internal:host-gateway + ports: + - 1935:1935 + - 8085:8085 + - 7895:7895/udp + environment: + - INGRESS_CONFIG_FILE=/config/ingress.yaml + volumes: + - config:/config + depends_on: + setup: + condition: service_completed_successfully + + egress: + image: docker.io/livekit/egress:v1.9.1 + platform: linux/amd64 + restart: unless-stopped + container_name: egress + extra_hosts: + - host.docker.internal:host-gateway + environment: + - EGRESS_CONFIG_FILE=/config/egress.yaml + volumes: + - config:/config + - egress-data:/home/egress/tmp + depends_on: + setup: + condition: service_completed_successfully + + openvidu-meet: + image: docker.io/openvidu/openvidu-meet:main + platform: linux/amd64 + container_name: openvidu-meet + restart: on-failure + ports: + - 9080:6080 + extra_hosts: + - host.docker.internal:host-gateway + environment: + - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} + - SERVER_PORT=6080 + - MEET_LOG_LEVEL=info + - MEET_NAME_ID=openviduMeet-LOCAL + - MEET_INITIAL_ADMIN_PASSWORD=meet-api-key + - MEET_INITIAL_ADMIN_USER=admin + - MEET_INITIAL_ADMIN_PASSWORD=admin + - MEET_COOKIE_SECURE=false + - MEET_INITIAL_WEBHOOK_ENABLED=true + - MEET_INITIAL_WEBHOOK_URL=http://host.docker.internal:5080/webhook + - LIVEKIT_URL_PRIVATE=ws://openvidu:7880/ + - LIVEKIT_API_KEY=devkey + - LIVEKIT_API_SECRET=secret + - MEET_S3_BUCKET=openvidu-appdata + - MEET_S3_SUBBUCKET=openvidu-meet + - MEET_S3_SERVICE_ENDPOINT=http://minio:9000 + - MEET_S3_ACCESS_KEY=minioadmin + - MEET_S3_SECRET_KEY=minioadmin + - MEET_AWS_REGION=us-east-1 + - MEET_S3_WITH_PATH_STYLE_ACCESS=true + - MEET_REDIS_HOST=redis + - MEET_REDIS_PORT=6379 + - MEET_REDIS_PASSWORD=redispassword + - MEET_REDIS_DB=0 + volumes: + - scripts:/scripts + entrypoint: /bin/sh /scripts/entrypoint_openvidu_meet.sh + depends_on: + setup: + condition: service_completed_successfully + + openvidu-v2compatibility: + image: docker.io/openvidu/openvidu-v2compatibility:main + platform: linux/amd64 + restart: unless-stopped + container_name: openvidu-v2compatibility + entrypoint: /bin/sh /scripts/entrypoint_openvidu_v2_compat.sh + extra_hosts: + - host.docker.internal:host-gateway + ports: + - 4443:4443 + environment: + - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} + - V2COMPAT_OPENVIDU_SHIM_PORT=4443 + - V2COMPAT_OPENVIDU_SECRET=secret + - V2COMPAT_LIVEKIT_URL_PRIVATE=ws://openvidu:7880 + - V2COMPAT_LIVEKIT_API_KEY=devkey + - V2COMPAT_LIVEKIT_API_SECRET=secret + - V2COMPAT_OPENVIDU_RECORDING_PATH=/opt/openvidu/recordings + - V2COMPAT_OPENVIDU_PRO_RECORDING_STORAGE=local + - V2COMPAT_OPENVIDU_PRO_AWS_S3_BUCKET=openvidu-appdata + - V2COMPAT_OPENVIDU_PRO_AWS_S3_SERVICE_ENDPOINT=http://minio:9000 + - V2COMPAT_OPENVIDU_PRO_AWS_REGION=us-east-1 + - V2COMPAT_OPENVIDU_PRO_AWS_ACCESS_KEY=minioadmin + - V2COMPAT_OPENVIDU_PRO_AWS_SECRET_KEY=minioadmin + - V2COMPAT_REDIS_HOST=redis + - V2COMPAT_REDIS_PORT=6379 + - V2COMPAT_REDIS_PASSWORD=redispassword + - V2COMPAT_REDIS_DB=0 + - V2COMPAT_OPENVIDU_WEBHOOK=false + - V2COMPAT_OPENVIDU_WEBHOOK_ENDPOINT=http://host.docker.internal:7777/webhook + - OPENVIDU_DEPLOYMENT_TYPE=local + volumes: + - v2compat-recordings:/opt/openvidu/recordings + - scripts:/scripts + depends_on: + setup: + condition: service_completed_successfully + + ready-check: + image: docker.io/openvidu/openvidu-operator:main + platform: linux/amd64 + container_name: ready-check + restart: on-failure + environment: + - MODE=local-ready-check + - LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-} + - DASHBOARD_ADMIN_USERNAME=admin + - DASHBOARD_ADMIN_PASSWORD=admin + - MINIO_ACCESS_KEY=minioadmin + - MINIO_SECRET_KEY=minioadmin + - LIVEKIT_API_KEY=devkey + - LIVEKIT_API_SECRET=secret + - V2COMPAT_OPENVIDU_SECRET=secret + - MEET_INITIAL_ADMIN_USER=admin + - MEET_INITIAL_ADMIN_PASSWORD=admin + - MEET_INITIAL_ADMIN_PASSWORD=meet-api-key + volumes: + - scripts:/scripts + entrypoint: /bin/sh /scripts/entrypoint_ready_check.sh + depends_on: + - openvidu + - ingress + - egress + - dashboard + - minio + - mongo + +volumes: + scripts: + name: openvidu-pro-scripts + config: + name: openvidu-pro-config + agents-config: + name: openvidu-pro-agents-config + minio-certs: + name: openvidu-pro-minio-certs + mongodb-config: + name: openvidu-pro-mongodb-config + redis: + name: openvidu-pro-redis + minio-data: + name: openvidu-pro-minio-data + mongo-data: + name: openvidu-pro-mongo-data + egress-data: + name: openvidu-pro-egress-data + v2compat-recordings: + name: openvidu-pro-v2compat-recordings + +networks: + default: + name: openvidu-pro