241 lines
7.0 KiB
YAML
241 lines
7.0 KiB
YAML
services:
|
|
|
|
caddy-proxy:
|
|
image: docker.io/wcm65pck/openvidu-caddy-local:main
|
|
container_name: caddy-proxy
|
|
restart: unless-stopped
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
environment:
|
|
- LOCAL_DOMAIN=${LOCAL_DOMAIN:-?}
|
|
- USE_TLS=${USE_TLS:-?}
|
|
- 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:-?}
|
|
- OPENVIDU_SHIM_SECRET=${OPENVIDU_SHIM_SECRET:-?}
|
|
ports:
|
|
- 4443:4443
|
|
- 9000:9000
|
|
- 8000:8000
|
|
|
|
redis:
|
|
image: redis:7.2.4-alpine
|
|
container_name: redis
|
|
restart: unless-stopped
|
|
volumes:
|
|
- redis:/data
|
|
command: >
|
|
redis-server
|
|
--bind 0.0.0.0
|
|
--requirepass ${REDIS_PASSWORD:-?}
|
|
|
|
minio:
|
|
image: bitnami/minio:2024.3.15-debian-12-r0
|
|
container_name: minio
|
|
restart: unless-stopped
|
|
environment:
|
|
- LOCAL_DOMAIN=${LOCAL_DOMAIN:-?}
|
|
- MINIO_ROOT_USER=${MINIO_ACCESS_KEY:-?}
|
|
- MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY:-?}
|
|
- MINIO_DEFAULT_BUCKETS=openvidu
|
|
- MINIO_CONSOLE_SUBPATH=/minio-console
|
|
command: >
|
|
/bin/sh -c "
|
|
URL=https://$$LOCAL_DOMAIN:4443/minio-console/;
|
|
if [ \"$USE_TLS\" = 'false' ]; then
|
|
URL=$(echo $$URL | sed 's/https/http/');
|
|
fi &&
|
|
export MINIO_BROWSER_REDIRECT_URL=$$URL &&
|
|
/opt/bitnami/scripts/minio/run.sh"
|
|
volumes:
|
|
- ./minio/data:/bitnami/minio/data
|
|
- minio-certs:/certs
|
|
depends_on:
|
|
setup-volumes:
|
|
condition: service_completed_successfully
|
|
|
|
mongo:
|
|
image: bitnami/mongodb:7.0.6-debian-12-r0
|
|
container_name: mongo
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./mongo/data:/bitnami/mongodb/
|
|
environment:
|
|
- MONGODB_ROOT_USER=${MONGO_ADMIN_USERNAME:-?}
|
|
- MONGODB_ROOT_PASSWORD=${MONGO_ADMIN_PASSWORD:-?}
|
|
|
|
dashboard:
|
|
image: docker.io/wcm65pck/openvidu-dashboard:main
|
|
container_name: dashboard
|
|
restart: unless-stopped
|
|
environment:
|
|
- SERVER_PORT=5000
|
|
- ADMIN_USERNAME=${DASHBOARD_ADMIN_USERNAME:-?}
|
|
- ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-?}
|
|
- DATABASE_URL=mongodb://mongoadmin:mongoadmin@mongo:27017
|
|
|
|
openvidu:
|
|
image: docker.io/wcm65pck/openvidu-livekit:main
|
|
restart: unless-stopped
|
|
container_name: openvidu
|
|
environment:
|
|
- LIVEKIT_INGRESS_RTMP_BASE_URL=rtmp://${LOCAL_DOMAIN:-?}:1935/rtmp
|
|
- LIVEKIT_INGRESS_WHIP_BASE_URL=http://${LOCAL_DOMAIN:-?}:8080/whip
|
|
ports:
|
|
- "7880:7880"
|
|
- "3478:3478/udp"
|
|
command: --config /etc/livekit.yaml
|
|
volumes:
|
|
- ./livekit.yaml:/etc/livekit.yaml
|
|
|
|
ingress:
|
|
image: livekit/ingress:v1.2.0
|
|
container_name: ingress
|
|
restart: unless-stopped
|
|
ports:
|
|
- "1935:1935"
|
|
- "8080:8080"
|
|
- "7885:7885/udp"
|
|
environment:
|
|
- INGRESS_CONFIG_FILE=/etc/ingress.yaml
|
|
volumes:
|
|
- ./ingress.yaml:/etc/ingress.yaml
|
|
|
|
egress:
|
|
image: livekit/egress:v1.8.0
|
|
restart: unless-stopped
|
|
container_name: egress
|
|
environment:
|
|
- EGRESS_CONFIG_FILE=/etc/egress.yaml
|
|
volumes:
|
|
- ./egress.yaml:/etc/egress.yaml
|
|
- ./egress/home/egress:/home/egress/
|
|
depends_on:
|
|
setup-volumes:
|
|
condition: service_completed_successfully
|
|
|
|
openvidu-v2compatibility:
|
|
image: docker.io/wcm65pck/openvidu-v2compatibility:main
|
|
restart: unless-stopped
|
|
container_name: openvidu-v2compatibility
|
|
command: >
|
|
/bin/sh -c "
|
|
OV_URL=https://$$LOCAL_DOMAIN:4443/;
|
|
LK_URL=wss://$$LOCAL_DOMAIN:4443/;
|
|
if [ \"$USE_TLS\" = 'false' ]; then
|
|
OV_URL=$(echo $$OV_URL | sed 's/https/http/');
|
|
LK_URL=$(echo $$LK_URL | sed 's/wss/ws/');
|
|
fi &&
|
|
export OPENVIDU_SHIM_URL=$$OV_URL &&
|
|
export LIVEKIT_URL=$$LK_URL &&
|
|
node dist/server.js"
|
|
environment:
|
|
- USE_TLS=${USE_TLS:-?}
|
|
- LOCAL_DOMAIN=${LOCAL_DOMAIN:-?}
|
|
- SERVER_PORT=4443
|
|
- OPENVIDU_SHIM_SECRET=${OPENVIDU_SHIM_SECRET:-?}
|
|
- LIVEKIT_URL_PRIVATE=ws://openvidu:7880
|
|
- LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-?}
|
|
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-?}
|
|
- OPENVIDU_PRO_AWS_S3_BUCKET=openvidu
|
|
- OPENVIDU_PRO_AWS_S3_SERVICE_ENDPOINT=http://minio:9000
|
|
- OPENVIDU_PRO_AWS_S3_ACCESS_KEY=${MINIO_ACCESS_KEY:-?}
|
|
- OPENVIDU_PRO_AWS_S3_SECRET_KEY=${MINIO_SECRET_KEY:-?}
|
|
- REDIS_HOST=redis
|
|
- REDIS_PORT=6379
|
|
- REDIS_PASSWORD=${REDIS_PASSWORD:-?}
|
|
- REDIS_DB=0
|
|
- OPENVIDU_WEBHOOK=false
|
|
|
|
ready-check:
|
|
image: curlimages/curl:8.6.0
|
|
container_name: readycheck
|
|
restart: on-failure
|
|
environment:
|
|
- LOCAL_DOMAIN=${LOCAL_DOMAIN:-?}
|
|
- USE_TLS=${USE_TLS:-?}
|
|
depends_on:
|
|
- openvidu
|
|
- ingress
|
|
- egress
|
|
- dashboard
|
|
- minio
|
|
- mongo
|
|
command: >
|
|
/bin/sh -c "
|
|
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
|
|
|
|
URL=https://\$$LOCAL_DOMAIN:4443/
|
|
if [ \"\$$USE_TLS\" = 'false' ]; then
|
|
URL=\$(echo \$$URL | sed 's/https/http/')
|
|
fi
|
|
|
|
for i in $(seq 1 10); do
|
|
echo 'Starting OpenVidu... Please be patient...'
|
|
sleep 1
|
|
done;
|
|
echo ''
|
|
echo ''
|
|
echo '------------------------'
|
|
echo 'OpenVidu is ready!'
|
|
echo \"Open \$$URL in your browser\"
|
|
echo '------------------------'
|
|
echo ''
|
|
echo ''
|
|
"
|
|
|
|
setup-volumes:
|
|
image: busybox
|
|
container_name: setup-volumes
|
|
restart: on-failure
|
|
volumes:
|
|
- ./minio:/minio
|
|
- ./mongo:/mongo
|
|
- ./egress:/egress
|
|
user: root
|
|
command: >
|
|
/bin/sh -c "
|
|
mkdir -p /minio/data &&
|
|
mkdir -p /mongo/data &&
|
|
mkdir -p /mongo/data/ &&
|
|
mkdir -p /egress/home/egress &&
|
|
chown 1001:1001 /minio /minio/data
|
|
chown 1001:1001 /mongo /mongo/data
|
|
chown 1000:1000 /egress
|
|
chown 1000:1000 /egress/home
|
|
chown 1000:1000 /egress/home/egress
|
|
"
|
|
|
|
|
|
volumes:
|
|
minio-certs:
|
|
mongodb-config:
|
|
redis:
|