sha256:b17a116762bf396599255fa3587b2cc5cca2ef9352fb114ca608e95c7dcdbdce
Last pushed
2 months by openvidu
Type
Compose
Manifest digest
sha256:b17a116762bf396599255fa3587b2cc5cca2ef9352fb114ca608e95c7dcdbdce
services:
generate-scripts:
image: alpine:3.24.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://${MONGO_ADMIN_USERNAME:-mongoadmin}:${MONGO_ADMIN_PASSWORD:-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: ${REDIS_PASSWORD:-redispassword}
db: 0
use_tls: false
turn:
enabled: true
udp_port: 3478
relay_range_start: 40000
relay_range_end: 50000
keys:
${LIVEKIT_API_KEY:-devkey}: ${LIVEKIT_API_SECRET:-secret}
webhook:
api_key: ${LIVEKIT_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: ${REDIS_PASSWORD:-redispassword}
db: 0
use_tls: false
api_key: ${LIVEKIT_API_KEY:-devkey}
api_secret: ${LIVEKIT_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: ${REDIS_PASSWORD:-redispassword}
db: 0
use_tls: false
api_key: ${LIVEKIT_API_KEY:-devkey}
api_secret: ${LIVEKIT_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: ${MINIO_ACCESS_KEY:-minioadmin}
secret: ${MINIO_SECRET_KEY:-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
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
# Whether to use system-wide CPU monitoring or egress process CPU monitoring. This affects the allocation of new egress requests.
# It is preferable to set this value to:
# - true: when the egress service is running in a shared server also hosting other CPU-intensive services.
# - false: when the egress service is running in a dedicated server.
use_global_cpu_monitoring: true
# 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
# Minimum available disk space in MB required to accept new egress requests.
# Default: 512 MB. Set to a negative value (e.g., -1) to disable disk space checking.
min_disk_space_mb: 512
setup:
image: docker.io/busybox:1.38.0
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
services:
caddy-proxy:
image: docker.io/openvidu/openvidu-caddy-local:3.8.0
restart: unless-stopped
extra_hosts:
- host.docker.internal:host-gateway
environment:
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
- LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-devkey}
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-secret}
- DASHBOARD_ADMIN_USERNAME=${DASHBOARD_ADMIN_USERNAME:-admin}
- DASHBOARD_ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-admin}
- MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-minioadmin}
- MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-minioadmin}
- MEET_INITIAL_ADMIN_USER=${MEET_INITIAL_ADMIN_USER:-admin}
- MEET_INITIAL_ADMIN_PASSWORD=${MEET_INITIAL_ADMIN_PASSWORD:-admin}
- MEET_INITIAL_API_KEY=${MEET_INITIAL_API_KEY:-meet-api-key}
- MEET_BASE_PATH=${MEET_BASE_PATH:-/meet}
volumes:
- scripts:/scripts
- /etc/localtime:/etc/localtime:ro
entrypoint: /bin/sh /scripts/entrypoint_caddy.sh
ports:
- 5443:5443
- 6443:6443
- 7443:7443
- 7880:7880
- 9443:9443
- 9080:9080
depends_on:
setup:
condition: service_completed_successfully
redis:
image: docker.io/redis:8.6.4-alpine
restart: unless-stopped
ports:
- 6379:6379
volumes:
- redis:/data
- /etc/localtime:/etc/localtime:ro
command: >
redis-server
--bind 0.0.0.0
--requirepass ${REDIS_PASSWORD:-redispassword}
depends_on:
setup:
condition: service_completed_successfully
minio:
image: docker.io/openvidu/minio:RELEASE.2026-06-04T00-54-11Z-r0
restart: unless-stopped
ports:
- 9000:9000
environment:
- MINIO_ROOT_USER=${MINIO_ACCESS_KEY:-minioadmin}
- MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY:-minioadmin}
- MINIO_DEFAULT_BUCKETS=openvidu-appdata
- MINIO_CONSOLE_SUBPATH=/minio-console
- MINIO_BROWSER_REDIRECT_URL=http://localhost:7880/minio-console
- MINIO_BROWSER=on
volumes:
- minio-data:/bitnami/minio/data
- minio-certs:/certs
- /etc/localtime:/etc/localtime:ro
depends_on:
setup:
condition: service_completed_successfully
mongo:
image: docker.io/openvidu/mongodb:8.0.26-r0
restart: unless-stopped
ports:
- 27017:27017
volumes:
- mongo-data:/bitnami/mongodb
- /etc/localtime:/etc/localtime:ro
environment:
- MONGODB_ROOT_USER=${MONGO_ADMIN_USERNAME:-mongoadmin}
- MONGODB_ROOT_PASSWORD=${MONGO_ADMIN_PASSWORD:-mongoadmin}
- MONGODB_ADVERTISED_HOSTNAME=mongo
- MONGODB_REPLICA_SET_MODE=primary
- MONGODB_REPLICA_SET_NAME=rs0
- MONGODB_REPLICA_SET_KEY=devreplicasetkey
depends_on:
setup:
condition: service_completed_successfully
dashboard:
image: docker.io/openvidu/openvidu-dashboard:3.8.0
restart: unless-stopped
environment:
- SERVER_PORT=5000
- ADMIN_USERNAME=${DASHBOARD_ADMIN_USERNAME:-admin}
- ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-admin}
- DATABASE_URL=mongodb://${MONGO_ADMIN_USERNAME:-mongoadmin}:${MONGO_ADMIN_PASSWORD:-mongoadmin}@mongo:27017/?replicaSet=rs0&readPreference=primaryPreferred
volumes:
- /etc/localtime:/etc/localtime:ro
depends_on:
setup:
condition: service_completed_successfully
openvidu:
image: docker.io/openvidu/openvidu-server:3.8.0
restart: unless-stopped
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
- /etc/localtime:/etc/localtime:ro
depends_on:
setup:
condition: service_completed_successfully
ingress:
image: docker.io/openvidu/ingress:3.8.0
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
- /etc/localtime:/etc/localtime:ro
depends_on:
setup:
condition: service_completed_successfully
egress:
image: docker.io/openvidu/egress:3.8.0
restart: unless-stopped
extra_hosts:
- host.docker.internal:host-gateway
environment:
- EGRESS_CONFIG_FILE=/config/egress.yaml
volumes:
- config:/config
- egress-data:/home/egress/tmp
- /etc/localtime:/etc/localtime:ro
depends_on:
setup:
condition: service_completed_successfully
operator:
image: docker.io/openvidu/openvidu-operator:3.8.0
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- agents-config:/agents-config
- operator-deployment:/deployment
- /etc/localtime:/etc/localtime:ro
environment:
- 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=${LIVEKIT_API_KEY:-devkey}
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-secret}
- REDIS_ADDRESS=redis:6379
- REDIS_PASSWORD=${REDIS_PASSWORD:-redispassword}
depends_on:
setup:
condition: service_completed_successfully
openvidu-meet:
image: docker.io/openvidu/openvidu-meet:3.8.0
restart: on-failure
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_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=http://host.docker.internal:6080/webhook
- LIVEKIT_URL_PRIVATE=ws://openvidu:7880/
- LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-devkey}
- LIVEKIT_API_SECRET=${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=${MINIO_ACCESS_KEY:-minioadmin}
- MEET_S3_SECRET_KEY=${MINIO_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=${REDIS_PASSWORD:-redispassword}
- MEET_REDIS_DB=0
- MEET_MONGO_URI=mongodb://${MONGO_ADMIN_USERNAME:-mongoadmin}:${MONGO_ADMIN_PASSWORD:-mongoadmin}@mongo:27017/?replicaSet=rs0&readPreference=primaryPreferred
- MEET_BASE_PATH=${MEET_BASE_PATH:-/meet}
volumes:
- scripts:/scripts
- /etc/localtime:/etc/localtime:ro
entrypoint: /bin/sh /scripts/entrypoint_openvidu_meet.sh
depends_on:
setup:
condition: service_completed_successfully
openvidu-meet-init:
image: docker.io/openvidu/openvidu-operator:3.8.0
restart: on-failure
environment:
- MODE=local-ready-check
- OPENVIDU_ENVIRONMENT=local-meet
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
- DASHBOARD_ADMIN_USERNAME=${DASHBOARD_ADMIN_USERNAME:-admin}
- DASHBOARD_ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-admin}
- MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-minioadmin}
- MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-minioadmin}
- LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-devkey}
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-secret}
- MEET_INITIAL_ADMIN_USER=${MEET_INITIAL_ADMIN_USER:-admin}
- MEET_INITIAL_ADMIN_PASSWORD=${MEET_INITIAL_ADMIN_PASSWORD:-admin}
- MEET_INITIAL_API_KEY=${MEET_INITIAL_API_KEY:-meet-api-key}
volumes:
- scripts:/scripts
- /etc/localtime:/etc/localtime:ro
entrypoint: /bin/sh /scripts/entrypoint_ready_check.sh
depends_on:
- caddy-proxy
- redis
- minio
- mongo
- dashboard
- openvidu
- ingress
- egress
- operator
- openvidu-meet
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: openvidu-operator-deployment
docker compose -f oci://openvidu/local-meet:latest upUse the above command to pull and run the Compose file. Learn more.
A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!
Pulls
1B+
Stars
11551
Last Updated
about 1 month
This image is part of a complete deployment of OpenVidu. Check README.
Pulls
500K+
Stars
11
Last Updated
about 8 hours
This image is part of a complete deployment of OpenVidu. Check README.
Pulls
100K+
Stars
0
Last Updated
about 12 hours
This image is part of a complete deployment of OpenVidu. Check README.
Pulls
100K+
Stars
0
Last Updated
about 12 hours
This image is part of a complete deployment of OpenVidu. Check README.
Pulls
50K+
Stars
1
Last Updated
9 minutes
OpenVidu Meet image is part of a complete deployment of OpenVidu. Check README.
Pulls
10K+
Stars
0
Last Updated
about 5 hours
This image is part of a complete deployment of OpenVidu. Check README.
Pulls
10K+
Stars
1
Last Updated
19 minutes