Compare commits
No commits in common. "main" and "3.0.0-dev1" have entirely different histories.
main
...
3.0.0-dev1
@ -1,16 +1,17 @@
|
|||||||
|
|
||||||
# Configure here the private IP of your machine.
|
# Configure here the private IP of your machine
|
||||||
# It is used by the Media Server to announce itself
|
# It is used by the Media Server to announce it self
|
||||||
# and to configure the LAN_MODE IP address.
|
# and to configure LAN_MODE ip address
|
||||||
LAN_PRIVATE_IP=
|
LAN_PRIVATE_IP=
|
||||||
|
|
||||||
# Expose OpenVidu with HTTPS.
|
# Expose OpenVidu with HTTPS.
|
||||||
USE_HTTPS=true
|
USE_HTTPS=true
|
||||||
|
|
||||||
# If true, you can access OpenVidu through your LAN.
|
# If true, you can access OpenVidu through your LAN
|
||||||
# If true, USE_HTTPS must also be true.
|
# If true, USE_HTTPS must be true
|
||||||
LAN_MODE=true
|
LAN_MODE=true
|
||||||
|
|
||||||
|
|
||||||
# LiveKit API Key and Secret.
|
# LiveKit API Key and Secret.
|
||||||
LIVEKIT_API_KEY=devkey
|
LIVEKIT_API_KEY=devkey
|
||||||
LIVEKIT_API_SECRET=secret
|
LIVEKIT_API_SECRET=secret
|
||||||
@ -30,5 +31,5 @@ MINIO_SECRET_KEY=minioadmin
|
|||||||
MONGO_ADMIN_USERNAME=mongoadmin
|
MONGO_ADMIN_USERNAME=mongoadmin
|
||||||
MONGO_ADMIN_PASSWORD=mongoadmin
|
MONGO_ADMIN_PASSWORD=mongoadmin
|
||||||
|
|
||||||
# OpenVidu Meet base path
|
# Openvidu v2 compatibility configuration
|
||||||
MEET_BASE_PATH=/meet
|
OPENVIDU_SHIM_SECRET=MY_SECRET
|
||||||
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1 +0,0 @@
|
|||||||
* text=auto eol=lf
|
|
||||||
9
.gitignore
vendored
9
.gitignore
vendored
@ -1,6 +1,3 @@
|
|||||||
community/egress/
|
egress/
|
||||||
community/minio/
|
minio/
|
||||||
community/mongo/
|
mongo/
|
||||||
pro/egress/
|
|
||||||
pro/minio/
|
|
||||||
pro/mongo/
|
|
||||||
|
|||||||
61
README.md
61
README.md
@ -1,5 +1,5 @@
|
|||||||
# OpenVidu Local Deployment
|
# OpenVidu Local Deployment
|
||||||
Docker Compose files to run OpenVidu locally for development purposes.
|
Docker compose to run OpenVidu locally for development purposes
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
On **Windows** and **MacOS**:
|
On **Windows** and **MacOS**:
|
||||||
@ -9,76 +9,33 @@ On **Linux**:
|
|||||||
- **Docker**
|
- **Docker**
|
||||||
- **Docker Compose**
|
- **Docker Compose**
|
||||||
|
|
||||||
---
|
## Install
|
||||||
|
|
||||||
## OpenVidu COMMUNITY
|
### Windows
|
||||||
|
|
||||||
### Install OpenVidu COMMUNITY
|
|
||||||
|
|
||||||
#### Windows
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone https://github.com/OpenVidu/openvidu-local-deployment
|
git clone https://github.com/OpenVidu/openvidu-local-deployment
|
||||||
cd openvidu-local-deployment/community
|
cd openvidu-local-deployment
|
||||||
.\configure_lan_private_ip_windows.bat
|
.\configure_lan_private_ip_windows.bat
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Mac
|
### Mac
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone https://github.com/OpenVidu/openvidu-local-deployment
|
git clone https://github.com/OpenVidu/openvidu-local-deployment
|
||||||
cd openvidu-local-deployment/community
|
cd openvidu-local-deployment
|
||||||
./configure_lan_private_ip_mac.sh
|
./configure_lan_private_ip_mac.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Linux
|
### Linux
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone https://github.com/OpenVidu/openvidu-local-deployment
|
git clone https://github.com/OpenVidu/openvidu-local-deployment
|
||||||
cd openvidu-local-deployment/community
|
cd openvidu-local-deployment
|
||||||
./configure_lan_private_ip_linux.sh
|
./configure_lan_private_ip_linux.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### Run OpenVidu COMMUNITY
|
## Run OpenVidu
|
||||||
|
|
||||||
```sh
|
|
||||||
docker compose up
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## OpenVidu PRO (Evaluation Mode)
|
|
||||||
|
|
||||||
> OpenVidu PRO can be executed locally in evaluation mode for free for development and testing purposes.
|
|
||||||
> Some limits apply: max 8 Participants across all Rooms and max 5 minutes duration per Room.
|
|
||||||
|
|
||||||
### Install OpenVidu PRO
|
|
||||||
|
|
||||||
#### Windows
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git clone https://github.com/OpenVidu/openvidu-local-deployment
|
|
||||||
cd openvidu-local-deployment/pro
|
|
||||||
.\configure_lan_private_ip_windows.bat
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Mac
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git clone https://github.com/OpenVidu/openvidu-local-deployment
|
|
||||||
cd openvidu-local-deployment/pro
|
|
||||||
./configure_lan_private_ip_mac.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Linux
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git clone https://github.com/OpenVidu/openvidu-local-deployment
|
|
||||||
cd openvidu-local-deployment/pro
|
|
||||||
./configure_lan_private_ip_linux.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run OpenVidu PRO
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker compose up
|
docker compose up
|
||||||
|
|||||||
23
caddy-proxy/Dockerfile
Normal file
23
caddy-proxy/Dockerfile
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
FROM golang:1.22.1 as builder
|
||||||
|
|
||||||
|
ARG TARGETOS
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
ARG TARGETARCH
|
||||||
|
|
||||||
|
WORKDIR /workspace
|
||||||
|
COPY . .
|
||||||
|
RUN GOOS=$TARGETOS GOARCH=$TARGETARCH CGO_ENABLED=0 go build
|
||||||
|
|
||||||
|
FROM caddy/caddy:2.7.6-alpine
|
||||||
|
|
||||||
|
ARG VERSION
|
||||||
|
RUN test -n "$VERSION" || (echo "VERSION arg is not set" && false)
|
||||||
|
ENV VERSION $VERSION
|
||||||
|
|
||||||
|
COPY --from=builder /workspace/local-caddy-generate /usr/bin/local-caddy-generate
|
||||||
|
COPY --from=builder /workspace/entrypoint.sh /entrypoint.sh
|
||||||
|
RUN chmod +x /usr/bin/local-caddy-generate /entrypoint.sh
|
||||||
|
|
||||||
|
# Run the binary.
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
CMD ["/usr/bin/caddy", "run", "--config", "/config/caddy/Caddyfile"]
|
||||||
7
caddy-proxy/README.md
Normal file
7
caddy-proxy/README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# OpenVidu Local Deployment - Cadddy Proxy
|
||||||
|
|
||||||
|
If you want to modify any of the rules at the caddy-proxy container, just build the image again and run the local deployment with the new image.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker build --build-arg VERSION=custom -t caddy-proxy .
|
||||||
|
```
|
||||||
30
caddy-proxy/entrypoint.sh
Normal file
30
caddy-proxy/entrypoint.sh
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Generate Caddyfile and index.html
|
||||||
|
CURRENT_DIR="$(pwd)"
|
||||||
|
TMP_DIR="/tmp/caddy-local"
|
||||||
|
mkdir -p "$TMP_DIR"
|
||||||
|
cd "$TMP_DIR"
|
||||||
|
/usr/bin/local-caddy-generate
|
||||||
|
if [ ! -f /var/www/index.html ]; then
|
||||||
|
mkdir -p /var/www
|
||||||
|
cp "$TMP_DIR/index.html" /var/www/index.html
|
||||||
|
fi
|
||||||
|
if [ ! -f /var/www/app502client.html ]; then
|
||||||
|
mkdir -p /var/www
|
||||||
|
cp "$TMP_DIR/app502client.html" /var/www/app502client.html
|
||||||
|
fi
|
||||||
|
if [ ! -f /var/www/app502server.html ]; then
|
||||||
|
mkdir -p /var/www
|
||||||
|
cp "$TMP_DIR/app502server.html" /var/www/app502server.html
|
||||||
|
fi
|
||||||
|
if [ ! -f /config/caddy/Caddyfile ]; then
|
||||||
|
mkdir -p /config/caddy
|
||||||
|
cp "$TMP_DIR/Caddyfile" /config/caddy/Caddyfile
|
||||||
|
fi
|
||||||
|
cd "$CURRENT_DIR"
|
||||||
|
rm -rf /tmp/caddy-local
|
||||||
|
|
||||||
|
# Start Caddy
|
||||||
|
exec "$@"
|
||||||
3
caddy-proxy/go.mod
Normal file
3
caddy-proxy/go.mod
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module local-caddy-generate
|
||||||
|
|
||||||
|
go 1.22.1
|
||||||
249
caddy-proxy/main.go
Normal file
249
caddy-proxy/main.go
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"local-caddy-generate/templates"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"text/template"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TemplateData any
|
||||||
|
|
||||||
|
var indexData = &templates.IndexData{}
|
||||||
|
var caddyData = &templates.CaddyData{}
|
||||||
|
var app502ClientData = &templates.App502Data{}
|
||||||
|
var app502ServerData = &templates.App502Data{}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
err := Initialize()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
rawIndex, err := GenerateTemplate(templates.IndexTemplate, indexData)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
err = WriteStringToFile("index.html", rawIndex)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
rawCaddyfile, err := GenerateTemplate(templates.CaddyfileTemplate, caddyData)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
err = WriteStringToFile("Caddyfile", rawCaddyfile)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
rawAppClient502, err := GenerateTemplate(templates.App502Template, app502ClientData)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
err = WriteStringToFile("app502client.html", rawAppClient502)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
rawAppServer502, err := GenerateTemplate(templates.App502Template, app502ServerData)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
err = WriteStringToFile("app502server.html", rawAppServer502)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func Initialize() error {
|
||||||
|
// OpenVidu && LiveKit API
|
||||||
|
httpPort := 7880
|
||||||
|
httpsPort := 7443
|
||||||
|
|
||||||
|
// Http ports
|
||||||
|
appClientPort := 5080
|
||||||
|
appClientServer := 6080
|
||||||
|
|
||||||
|
// Https ports
|
||||||
|
httpsAppClientPort := 5443
|
||||||
|
httpsAppServerPort := 6443
|
||||||
|
|
||||||
|
version := os.Getenv("VERSION")
|
||||||
|
if version == "" {
|
||||||
|
return fmt.Errorf("VERSION is not set")
|
||||||
|
}
|
||||||
|
|
||||||
|
rawUseHTTPS := os.Getenv("USE_HTTPS")
|
||||||
|
if rawUseHTTPS == "" {
|
||||||
|
rawUseHTTPS = "false"
|
||||||
|
}
|
||||||
|
useTLS, err := strconv.ParseBool(rawUseHTTPS)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("USE_HTTPS is not a boolean")
|
||||||
|
}
|
||||||
|
|
||||||
|
lanMode := os.Getenv("LAN_MODE")
|
||||||
|
if lanMode == "" {
|
||||||
|
lanMode = "false"
|
||||||
|
}
|
||||||
|
|
||||||
|
lanPrivateIP := os.Getenv("LAN_PRIVATE_IP")
|
||||||
|
if lanPrivateIP == "" {
|
||||||
|
return fmt.Errorf("LAN_PRIVATE_IP is not set")
|
||||||
|
}
|
||||||
|
|
||||||
|
lanDomain := os.Getenv("LAN_DOMAIN")
|
||||||
|
if lanDomain == "" {
|
||||||
|
lanDomain = "openvidu-local.dev"
|
||||||
|
}
|
||||||
|
|
||||||
|
if lanPrivateIP != "none" && lanDomain == "openvidu-local.dev" {
|
||||||
|
ipDashes := strings.ReplaceAll(lanPrivateIP, ".", "-")
|
||||||
|
lanDomain = fmt.Sprintf("%s.%s", ipDashes, lanDomain)
|
||||||
|
}
|
||||||
|
|
||||||
|
httpUrl := fmt.Sprintf("http://localhost:%d", httpPort)
|
||||||
|
httpsUrl := ""
|
||||||
|
wsUrl := fmt.Sprintf("ws://localhost:%d", httpPort)
|
||||||
|
wssUrl := ""
|
||||||
|
httpsAppClientUrl := ""
|
||||||
|
httpsAppServerUrl := ""
|
||||||
|
if useTLS {
|
||||||
|
httpsUrl = fmt.Sprintf("https://localhost:%d", httpsPort)
|
||||||
|
wssUrl = fmt.Sprintf("wss://localhost:%d", httpsPort)
|
||||||
|
httpsAppClientUrl = fmt.Sprintf("https://localhost:%d", httpsAppClientPort)
|
||||||
|
httpsAppServerUrl = fmt.Sprintf("https://localhost:%d", httpsAppServerPort)
|
||||||
|
if lanMode == "true" {
|
||||||
|
httpsUrl = fmt.Sprintf("https://%s:%d", lanDomain, httpsPort)
|
||||||
|
wssUrl = fmt.Sprintf("wss://%s:%d", lanDomain, httpsPort)
|
||||||
|
httpsAppClientUrl = fmt.Sprintf("https://%s:%d", lanDomain, httpsAppClientPort)
|
||||||
|
httpsAppServerUrl = fmt.Sprintf("https://%s:%d", lanDomain, httpsAppServerPort)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
livekitApiKey := os.Getenv("LIVEKIT_API_KEY")
|
||||||
|
if livekitApiKey == "" {
|
||||||
|
return fmt.Errorf("LIVEKIT_API_KEY is not set")
|
||||||
|
}
|
||||||
|
livekitApiSecret := os.Getenv("LIVEKIT_API_SECRET")
|
||||||
|
if livekitApiSecret == "" {
|
||||||
|
return fmt.Errorf("LIVEKIT_API_SECRET is not set")
|
||||||
|
}
|
||||||
|
openviduSecret := os.Getenv("OPENVIDU_SHIM_SECRET")
|
||||||
|
if openviduSecret == "" {
|
||||||
|
return fmt.Errorf("OPENVIDU_SHIM_SECRET is not set")
|
||||||
|
}
|
||||||
|
dashboadAdminUsername := os.Getenv("DASHBOARD_ADMIN_USERNAME")
|
||||||
|
if dashboadAdminUsername == "" {
|
||||||
|
return fmt.Errorf("DASHBOARD_ADMIN_USERNAME is not set")
|
||||||
|
}
|
||||||
|
dashboardAdminPassword := os.Getenv("DASHBOARD_ADMIN_PASSWORD")
|
||||||
|
if dashboardAdminPassword == "" {
|
||||||
|
return fmt.Errorf("DASHBOARD_ADMIN_PASSWORD is not set")
|
||||||
|
}
|
||||||
|
minioAccessKey := os.Getenv("MINIO_ACCESS_KEY")
|
||||||
|
if minioAccessKey == "" {
|
||||||
|
return fmt.Errorf("MINIO_ACCESS_KEY is not set")
|
||||||
|
}
|
||||||
|
minioSecretKey := os.Getenv("MINIO_SECRET_KEY")
|
||||||
|
if minioSecretKey == "" {
|
||||||
|
return fmt.Errorf("MINIO_SECRET_KEY is not set")
|
||||||
|
}
|
||||||
|
|
||||||
|
indexData = &templates.IndexData{
|
||||||
|
OpenViduVersion: version,
|
||||||
|
LanMode: lanMode == "true",
|
||||||
|
HttpUrl: httpUrl,
|
||||||
|
HttpsUrl: httpsUrl,
|
||||||
|
WsUrl: wsUrl,
|
||||||
|
WssUrl: wssUrl,
|
||||||
|
LiveKitApiKey: livekitApiKey,
|
||||||
|
LiveKitApiSecret: livekitApiSecret,
|
||||||
|
OpenViduSecret: openviduSecret,
|
||||||
|
DashboardAdminUsername: dashboadAdminUsername,
|
||||||
|
DashboardAdminPassword: dashboardAdminPassword,
|
||||||
|
MinioAdminKey: minioAccessKey,
|
||||||
|
MinioAdminSecret: minioSecretKey,
|
||||||
|
}
|
||||||
|
|
||||||
|
caddyData = &templates.CaddyData{
|
||||||
|
LanMode: lanMode == "true",
|
||||||
|
LanDomain: lanDomain,
|
||||||
|
// Main OpenVidu and LiveKit API ports
|
||||||
|
HttpPort: strconv.Itoa(httpPort),
|
||||||
|
HttpsPort: strconv.Itoa(httpsPort),
|
||||||
|
// Main OpenVidu and LiveKit API URLs
|
||||||
|
HttpUrl: httpUrl,
|
||||||
|
HttpsUrl: httpsUrl,
|
||||||
|
// Tutorial ports
|
||||||
|
AppClientPort: strconv.Itoa(appClientPort),
|
||||||
|
AppServerPort: strconv.Itoa(appClientServer),
|
||||||
|
HttpsAppClientPort: strconv.Itoa(httpsAppClientPort),
|
||||||
|
HttpsAppServerPort: strconv.Itoa(httpsAppServerPort),
|
||||||
|
// Tutorial URLs
|
||||||
|
HttpsAppClientUrl: httpsAppClientUrl,
|
||||||
|
HttpsAppServerUrl: httpsAppServerUrl,
|
||||||
|
}
|
||||||
|
|
||||||
|
app502ClientData = &templates.App502Data{
|
||||||
|
Title: "Application Client Not Found",
|
||||||
|
Message: fmt.Sprintf("Run your Application Client at port <b>%d</b> and you will see it here", appClientPort),
|
||||||
|
}
|
||||||
|
|
||||||
|
app502ServerData = &templates.App502Data{
|
||||||
|
Title: "Application Server Not Found",
|
||||||
|
Message: fmt.Sprintf("Run your Application Server at port <b>%d</b> and you will see it here", appClientServer),
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateTemplate(templateString string, data TemplateData) (string, error) {
|
||||||
|
funcs := map[string]any{
|
||||||
|
"contains": strings.Contains,
|
||||||
|
"hasPrefix": strings.HasPrefix,
|
||||||
|
"hasSuffix": strings.HasSuffix}
|
||||||
|
|
||||||
|
tmpl, err := template.New("template").Funcs(funcs).Parse(templateString)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
var buf bytes.Buffer
|
||||||
|
if err := tmpl.Execute(&buf, data); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func WriteStringToFile(filePath string, data string) error {
|
||||||
|
file, err := os.Create(filePath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
_, err = file.WriteString(data)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
49
caddy-proxy/templates/app502.go
Normal file
49
caddy-proxy/templates/app502.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package templates
|
||||||
|
|
||||||
|
type App502Data struct {
|
||||||
|
Title string
|
||||||
|
Message string
|
||||||
|
}
|
||||||
|
|
||||||
|
const App502Template = `<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>502 - Application Not Found</title>
|
||||||
|
<!-- Bootstrap CSS CDN -->
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||||
|
<!-- Custom styles -->
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
padding-top: 50px;
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
padding: 40px;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||||
|
max-width: 600px;
|
||||||
|
margin: auto;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.error-code {
|
||||||
|
font-size: 45px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div>
|
||||||
|
<div class="error-code">502 - Bad Gateway</div>
|
||||||
|
<h1 class="display-5">{{.Title}}</h1>
|
||||||
|
<hr class="my-4">
|
||||||
|
<p>{{ .Message }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`
|
||||||
152
caddy-proxy/templates/caddy.go
Normal file
152
caddy-proxy/templates/caddy.go
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
package templates
|
||||||
|
|
||||||
|
type CaddyData struct {
|
||||||
|
LanMode bool
|
||||||
|
LanDomain string
|
||||||
|
// Main OpenVidu and LiveKit API ports
|
||||||
|
HttpPort string
|
||||||
|
HttpsPort string
|
||||||
|
// Main URLs for OpenVidu and LiveKit
|
||||||
|
HttpUrl string
|
||||||
|
HttpsUrl string
|
||||||
|
// Tutorials ports
|
||||||
|
AppClientPort string
|
||||||
|
AppServerPort string
|
||||||
|
HttpsAppClientPort string
|
||||||
|
HttpsAppServerPort string
|
||||||
|
// Tutorial URLs
|
||||||
|
HttpsAppClientUrl string
|
||||||
|
HttpsAppServerUrl string
|
||||||
|
}
|
||||||
|
|
||||||
|
const CaddyfileTemplate = `
|
||||||
|
(index) {
|
||||||
|
# Default /
|
||||||
|
handle_path /* {
|
||||||
|
root * /var/www/
|
||||||
|
file_server
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(general_rules) {
|
||||||
|
# LiveKit API
|
||||||
|
@openvidu path /twirp/* /rtc/* /rtc
|
||||||
|
handle @openvidu {
|
||||||
|
reverse_proxy http://openvidu:7880
|
||||||
|
}
|
||||||
|
|
||||||
|
# OpenVidu v2 API
|
||||||
|
@openvidu_v2 path /openvidu/api/* /openvidu/ws/*
|
||||||
|
handle @openvidu_v2 {
|
||||||
|
reverse_proxy http://openvidu-v2compatibility:5080
|
||||||
|
}
|
||||||
|
|
||||||
|
# Minio console
|
||||||
|
redir /minio-console /minio-console/
|
||||||
|
handle_path /minio-console/* {
|
||||||
|
uri strip_prefix /minio-console
|
||||||
|
reverse_proxy http://minio:9001
|
||||||
|
}
|
||||||
|
|
||||||
|
# OpenVidu Dashboard
|
||||||
|
redir /dashboard /dashboard/
|
||||||
|
handle_path /dashboard/* {
|
||||||
|
rewrite * {path}
|
||||||
|
reverse_proxy http://dashboard:5000
|
||||||
|
}
|
||||||
|
|
||||||
|
# OpenVidu Call (Default App)
|
||||||
|
redir /openvidu-call /openvidu-call/
|
||||||
|
handle_path /openvidu-call/* {
|
||||||
|
rewrite * {path}
|
||||||
|
reverse_proxy http://default-app:5442
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
(application_client) {
|
||||||
|
handle_errors {
|
||||||
|
@502 expression {http.error.status_code} == 502
|
||||||
|
rewrite @502 /app502client.html
|
||||||
|
file_server {
|
||||||
|
root /var/www
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reverse_proxy http://host.docker.internal:{{ .AppClientPort }}
|
||||||
|
}
|
||||||
|
|
||||||
|
(application_server) {
|
||||||
|
handle_errors {
|
||||||
|
@502 expression {http.error.status_code} == 502
|
||||||
|
rewrite @502 /app502server.html
|
||||||
|
file_server {
|
||||||
|
root /var/www
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reverse_proxy http://host.docker.internal:{{ .AppServerPort }}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Servers
|
||||||
|
:{{.HttpPort}} {
|
||||||
|
import general_rules
|
||||||
|
import index
|
||||||
|
}
|
||||||
|
|
||||||
|
{{- if .HttpsUrl }}
|
||||||
|
|
||||||
|
{{- if .LanMode }}
|
||||||
|
|
||||||
|
{{ .HttpsUrl }} {
|
||||||
|
{{- if hasSuffix .LanDomain ".openvidu-local.dev" }}
|
||||||
|
tls internal {
|
||||||
|
get_certificate http https://certs.openvidu-local.dev/caddy.pem
|
||||||
|
}
|
||||||
|
{{- else }}
|
||||||
|
tls internal
|
||||||
|
{{- end }}
|
||||||
|
import general_rules
|
||||||
|
import index
|
||||||
|
}
|
||||||
|
|
||||||
|
{{ .HttpsAppClientUrl }} {
|
||||||
|
{{- if hasSuffix .LanDomain ".openvidu-local.dev" }}
|
||||||
|
tls internal {
|
||||||
|
get_certificate http https://certs.openvidu-local.dev/caddy.pem
|
||||||
|
}
|
||||||
|
{{- else }}
|
||||||
|
tls internal
|
||||||
|
{{- end }}
|
||||||
|
import application_client
|
||||||
|
}
|
||||||
|
|
||||||
|
{{ .HttpsAppServerUrl }} {
|
||||||
|
{{- if hasSuffix .LanDomain ".openvidu-local.dev" }}
|
||||||
|
tls internal {
|
||||||
|
get_certificate http https://certs.openvidu-local.dev/caddy.pem
|
||||||
|
}
|
||||||
|
{{- else }}
|
||||||
|
tls internal
|
||||||
|
{{- end }}
|
||||||
|
import application_server
|
||||||
|
}
|
||||||
|
|
||||||
|
{{- else }}
|
||||||
|
|
||||||
|
https://*:{{.HttpsPort}} {
|
||||||
|
tls internal
|
||||||
|
import general_rules
|
||||||
|
import index
|
||||||
|
}
|
||||||
|
|
||||||
|
https://*:{{.HttpsAppClientPort}} {
|
||||||
|
tls internal
|
||||||
|
import application_client
|
||||||
|
}
|
||||||
|
|
||||||
|
https://*:{{.HttpsAppServerPort}} {
|
||||||
|
tls internal
|
||||||
|
import application_server
|
||||||
|
}
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end}}
|
||||||
|
`
|
||||||
100
caddy-proxy/templates/index.go
Normal file
100
caddy-proxy/templates/index.go
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
package templates
|
||||||
|
|
||||||
|
type IndexData struct {
|
||||||
|
OpenViduVersion string
|
||||||
|
LanMode bool
|
||||||
|
HttpUrl string
|
||||||
|
HttpsUrl string
|
||||||
|
WsUrl string
|
||||||
|
WssUrl string
|
||||||
|
DashboardAdminUsername string
|
||||||
|
DashboardAdminPassword string
|
||||||
|
MinioAdminKey string
|
||||||
|
MinioAdminSecret string
|
||||||
|
LiveKitApiKey string
|
||||||
|
LiveKitApiSecret string
|
||||||
|
OpenViduSecret string
|
||||||
|
}
|
||||||
|
|
||||||
|
const IndexTemplate = `<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>OpenVidu Local Deployment</title>
|
||||||
|
<!-- Bootstrap CSS CDN -->
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" />
|
||||||
|
<!-- Custom styles -->
|
||||||
|
<style>
|
||||||
|
.container {
|
||||||
|
padding-top: 50px;
|
||||||
|
padding-left: 100px;
|
||||||
|
padding-right: 100px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h1 class="display-4">Welcome to OpenVidu Local Deployment</h1>
|
||||||
|
<p class="lead">OpenVidu Version: <strong>{{.OpenViduVersion}}</strong></p>
|
||||||
|
<div class="alert alert-warning" role="alert">
|
||||||
|
<span>This deployment is only for development purposes.</span>
|
||||||
|
</div>
|
||||||
|
<hr class="my-4">
|
||||||
|
<h2>OpenVidu Server and LiveKit Server API:</h2>
|
||||||
|
<ul>
|
||||||
|
<li>From this machine:
|
||||||
|
<ul>
|
||||||
|
<li><a href="{{.HttpUrl}}" target="_blank">{{.HttpUrl}}</a></li>
|
||||||
|
<li><a href="{{.WsUrl}}" target="_blank">{{.WsUrl}}</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{{- if .HttpsUrl }}
|
||||||
|
{{- if .LanMode }}
|
||||||
|
<li>From other devices in your LAN:
|
||||||
|
{{- else }}
|
||||||
|
<li>Using HTTPS:
|
||||||
|
{{- end }}
|
||||||
|
<ul>
|
||||||
|
<li><a href="{{.HttpsUrl}}" target="_blank">{{.HttpsUrl}}</a></li>
|
||||||
|
<li><a href="{{.WssUrl}}" target="_blank">{{.WssUrl}}</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{{- end }}
|
||||||
|
</ul>
|
||||||
|
<hr class="my-4">
|
||||||
|
<h2>Services and passwords:</h2>
|
||||||
|
<ul>
|
||||||
|
<li><b>OpenVidu API:</b>
|
||||||
|
<ul>
|
||||||
|
<li>Username: <code>OPENVIDUAPP</code></li>
|
||||||
|
<li>Password: <code>{{.OpenViduSecret}}</code></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>LiveKit API:
|
||||||
|
<ul>
|
||||||
|
<li>API Key: <code>{{.LiveKitApiKey}}</code></li>
|
||||||
|
<li>API Secret: <code>{{.LiveKitApiSecret}}</code></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="/minio-console" target="_blank">MinIO</a>
|
||||||
|
<ul>
|
||||||
|
<li>Username: <code>{{.MinioAdminKey}}</code></li>
|
||||||
|
<li>Password: <code>{{.MinioAdminSecret}}</code></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="/dashboard" target="_blank">OpenVidu Dashboard</a>
|
||||||
|
<ul>
|
||||||
|
<li>Username: <code>{{.DashboardAdminUsername}}</code></li>
|
||||||
|
<li>Password: <code>{{.DashboardAdminPassword}}</code></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="/openvidu-call" target="_blank">OpenVidu Call</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
`
|
||||||
@ -1,34 +0,0 @@
|
|||||||
|
|
||||||
# Configure here the private IP of your machine.
|
|
||||||
# It is used by the Media Server to announce itself
|
|
||||||
# and to configure the LAN_MODE IP address.
|
|
||||||
LAN_PRIVATE_IP=
|
|
||||||
|
|
||||||
# Expose OpenVidu with HTTPS.
|
|
||||||
USE_HTTPS=true
|
|
||||||
|
|
||||||
# If true, you can access OpenVidu through your LAN.
|
|
||||||
# If true, USE_HTTPS must also be true.
|
|
||||||
LAN_MODE=true
|
|
||||||
|
|
||||||
# LiveKit API Key and Secret.
|
|
||||||
LIVEKIT_API_KEY=devkey
|
|
||||||
LIVEKIT_API_SECRET=secret
|
|
||||||
|
|
||||||
# Dashboard admin user and password.
|
|
||||||
DASHBOARD_ADMIN_USERNAME=admin
|
|
||||||
DASHBOARD_ADMIN_PASSWORD=admin
|
|
||||||
|
|
||||||
# Redis password.
|
|
||||||
REDIS_PASSWORD=redispassword
|
|
||||||
|
|
||||||
# Minio configuration.
|
|
||||||
MINIO_ACCESS_KEY=minioadmin
|
|
||||||
MINIO_SECRET_KEY=minioadmin
|
|
||||||
|
|
||||||
# Mongo configuration.
|
|
||||||
MONGO_ADMIN_USERNAME=mongoadmin
|
|
||||||
MONGO_ADMIN_PASSWORD=mongoadmin
|
|
||||||
|
|
||||||
# OpenVidu Meet base path
|
|
||||||
MEET_BASE_PATH=/meet
|
|
||||||
@ -1,437 +0,0 @@
|
|||||||
# Docker image of the agent.
|
|
||||||
docker_image: docker.io/openvidu/agent-speech-processing-vosk:3.6.0
|
|
||||||
|
|
||||||
# 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, WARN, ERROR, CRITICAL]
|
|
||||||
log_level: INFO
|
|
||||||
|
|
||||||
live_captions:
|
|
||||||
# How this agent will connect to Rooms [manual, automatic]
|
|
||||||
# - manual: the agent will connect to new Rooms only when your application dictates it by using the Agent Dispatch API.
|
|
||||||
# - automatic: the agent will automatically connect to new Rooms.
|
|
||||||
processing: manual
|
|
||||||
|
|
||||||
# Which speech-to-text AI provider to use [aws, azure, google, openai, azure_openai, groq, deepgram, assemblyai, fal, clova, speechmatics, gladia, sarvam, mistralai, cartesia, soniox, nvidia, elevenlabs, simplismart, vosk, sherpa]
|
|
||||||
# The custom configuration for the selected provider must be set below
|
|
||||||
provider: vosk
|
|
||||||
|
|
||||||
aws:
|
|
||||||
# Credentials for AWS Transcribe. See https://docs.aws.amazon.com/transcribe/latest/dg/what-is.html
|
|
||||||
aws_access_key_id:
|
|
||||||
aws_secret_access_key:
|
|
||||||
aws_default_region:
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/supported-languages.html
|
|
||||||
language:
|
|
||||||
# The name of the custom vocabulary you want to use.
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/custom-vocabulary.html
|
|
||||||
vocabulary_name:
|
|
||||||
# The name of the custom language model you want to use.
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/custom-language-models-using.html
|
|
||||||
language_model_name:
|
|
||||||
# Whether or not to enable partial result stabilization. Partial result stabilization can reduce latency in your output, but may impact accuracy.
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/streaming-partial-results.html#streaming-partial-result-stabilization
|
|
||||||
enable_partial_results_stabilization:
|
|
||||||
# Specify the level of stability to use when you enable partial results stabilization (enable_partial_results_stabilization: true). Valid values: high | medium | low
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/streaming-partial-results.html#streaming-partial-result-stabilization
|
|
||||||
partial_results_stability:
|
|
||||||
# The name of the custom vocabulary filter you want to use to mask or remove words.
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/vocabulary-filtering.html
|
|
||||||
vocab_filter_name:
|
|
||||||
# The method used to filter the vocabulary. Valid values: mask | remove | tag
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/vocabulary-filtering.html
|
|
||||||
vocab_filter_method:
|
|
||||||
|
|
||||||
azure:
|
|
||||||
# Credentials for Azure Speech Service.
|
|
||||||
# One of these combinations must be set:
|
|
||||||
# - speech_host
|
|
||||||
# - speech_key + speech_region
|
|
||||||
# - speech_auth_token + speech_region
|
|
||||||
# See https://learn.microsoft.com/en-us/azure/ai-services/speech-service/get-started-speech-to-text?tabs=macos%2Cterminal&pivots=programming-language-python#prerequisites
|
|
||||||
speech_host:
|
|
||||||
speech_key:
|
|
||||||
speech_auth_token:
|
|
||||||
speech_region:
|
|
||||||
# Azure handles multiple languages and can auto-detect the language used. It requires the candidate set to be set. E.g. ["en-US", "es-ES"]
|
|
||||||
# See https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt#supported-languages
|
|
||||||
language:
|
|
||||||
# Removes profanity (swearing), or replaces letters of profane words with stars. Valid values: Masked | Removed | Raw
|
|
||||||
# See https://learn.microsoft.com/en-us/azure/ai-services/translator/profanity-filtering
|
|
||||||
profanity:
|
|
||||||
# List of words or phrases to boost recognition accuracy. Azure will give higher priority to these phrases during recognition.
|
|
||||||
phrase_list:
|
|
||||||
# Controls punctuation behavior. If True, enables explicit punctuation mode where punctuation marks are added explicitly. If False (default), uses Azure's default punctuation behavior.
|
|
||||||
explicit_punctuation:
|
|
||||||
|
|
||||||
azure_openai:
|
|
||||||
# Credentials for Azure OpenAI APIs. See https://learn.microsoft.com/en-us/azure/api-management/api-management-authenticate-authorize-azure-openai
|
|
||||||
# Azure OpenAI API key
|
|
||||||
azure_api_key:
|
|
||||||
# Azure Active Directory token
|
|
||||||
azure_ad_token:
|
|
||||||
# Azure OpenAI endpoint in the following format: https://{your-resource-name}.openai.azure.com. Mandatory value.
|
|
||||||
azure_endpoint:
|
|
||||||
# Name of your model deployment. If given with `azure_endpoint`, sets the base client URL to include `/deployments/{azure_deployment}`.
|
|
||||||
azure_deployment:
|
|
||||||
# OpenAI REST API version used for the request. Mandatory value.
|
|
||||||
api_version:
|
|
||||||
# OpenAI organization ID.
|
|
||||||
organization:
|
|
||||||
# OpenAI project ID.
|
|
||||||
project:
|
|
||||||
# The language code to use for transcription (e.g., "en" for English).
|
|
||||||
language:
|
|
||||||
# Whether to automatically detect the language.
|
|
||||||
detect_language:
|
|
||||||
# ID of the model to use for speech-to-text.
|
|
||||||
model:
|
|
||||||
# Initial prompt to guide the transcription.
|
|
||||||
prompt:
|
|
||||||
|
|
||||||
google:
|
|
||||||
# Credentials for Google Cloud. This is the content of a Google Cloud credential JSON file.
|
|
||||||
# Below is a dummy example for a credential type of "Service Account" (https://cloud.google.com/iam/docs/service-account-creds#key-types)
|
|
||||||
credentials_info: |
|
|
||||||
{
|
|
||||||
"type": "service_account",
|
|
||||||
"project_id": "my-project",
|
|
||||||
"private_key_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
||||||
"private_key": "-----BEGIN PRIVATE KEY-----\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n-----END PRIVATE KEY-----\n",
|
|
||||||
"client_email": "my-email@my-project.iam.gserviceaccount.com",
|
|
||||||
"client_id": "xxxxxxxxxxxxxxxxxxxxx",
|
|
||||||
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
|
||||||
"token_uri": "https://oauth2.googleapis.com/token",
|
|
||||||
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
|
||||||
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/my-email%40my-project.iam.gserviceaccount.com",
|
|
||||||
"universe_domain": "googleapis.com"
|
|
||||||
}
|
|
||||||
# Which model to use for recognition. If not set, uses the default model for the selected language.
|
|
||||||
# See https://cloud.google.com/speech-to-text/docs/transcription-model
|
|
||||||
model:
|
|
||||||
# The location to use for recognition. Default is "us-central1". Latency will be best if the location is close to your users.
|
|
||||||
# Check supported languages and locations at https://cloud.google.com/speech-to-text/v2/docs/speech-to-text-supported-languages
|
|
||||||
location:
|
|
||||||
# List of language codes to recognize. Default is ["en-US"].
|
|
||||||
# See https://cloud.google.com/speech-to-text/v2/docs/speech-to-text-supported-languages
|
|
||||||
languages:
|
|
||||||
# Whether to detect the language of the audio. Default is true.
|
|
||||||
detect_language:
|
|
||||||
# If 'true', adds punctuation to recognition result hypotheses. This feature is only available in select languages. Setting this
|
|
||||||
# for requests in other languages has no effect at all. The default 'false' value does not add punctuation to result hypotheses.
|
|
||||||
# See https://cloud.google.com/speech-to-text/docs/automatic-punctuation
|
|
||||||
punctuate:
|
|
||||||
# The spoken punctuation behavior for the call. If not set, uses default behavior based on model of choice.
|
|
||||||
# e.g. command_and_search will enable spoken punctuation by default. If 'true', replaces spoken punctuation
|
|
||||||
# with the corresponding symbols in the request. For example, "how are you question mark" becomes "how are you?".
|
|
||||||
# See https://cloud.google.com/speech-to-text/docs/spoken-punctuation for support. If 'false', spoken punctuation is not replaced.
|
|
||||||
spoken_punctuation:
|
|
||||||
# Whether to return interim (non-final) transcription results. Defaults to true.
|
|
||||||
interim_results:
|
|
||||||
|
|
||||||
openai:
|
|
||||||
# API key for OpenAI. See https://platform.openai.com/api-keys
|
|
||||||
api_key:
|
|
||||||
# The OpenAI model to use for transcription. See https://platform.openai.com/docs/guides/speech-to-text
|
|
||||||
model:
|
|
||||||
# The language of the input audio. Supplying the input language in ISO-639-1 format
|
|
||||||
# (https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) will improve accuracy and latency.
|
|
||||||
language:
|
|
||||||
# Whether to automatically detect the language.
|
|
||||||
detect_language:
|
|
||||||
# Optional text prompt to guide the transcription. Only supported for whisper-1.
|
|
||||||
prompt:
|
|
||||||
|
|
||||||
groq:
|
|
||||||
# API key for Groq. See https://console.groq.com/keys
|
|
||||||
api_key:
|
|
||||||
# See https://console.groq.com/docs/speech-to-text
|
|
||||||
model:
|
|
||||||
# The language of the input audio. Supplying the input language in ISO-639-1 format
|
|
||||||
# (https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) will improve accuracy and latency.
|
|
||||||
language:
|
|
||||||
# Whether to automatically detect the language.
|
|
||||||
detect_language:
|
|
||||||
# Prompt to guide the model's style or specify how to spell unfamiliar words. 224 tokens max.
|
|
||||||
prompt:
|
|
||||||
# Base URL for the Groq API. By default "https://api.groq.com/openai/v1"
|
|
||||||
base_url:
|
|
||||||
|
|
||||||
deepgram:
|
|
||||||
# See https://console.deepgram.com/
|
|
||||||
api_key:
|
|
||||||
# See https://developers.deepgram.com/reference/speech-to-text-api/listen-streaming#request.query.model
|
|
||||||
model:
|
|
||||||
# See https://developers.deepgram.com/reference/speech-to-text-api/listen-streaming#request.query.language
|
|
||||||
language:
|
|
||||||
# Whether to enable automatic language detection. See https://developers.deepgram.com/docs/language-detection
|
|
||||||
detect_language: false
|
|
||||||
# Whether to return interim (non-final) transcription results. See https://developers.deepgram.com/docs/interim-results
|
|
||||||
interim_results: true
|
|
||||||
# Whether to apply smart formatting to numbers, dates, etc. 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. See https://developers.deepgram.com/docs/smart-format#using-no-delay
|
|
||||||
no_delay: true
|
|
||||||
# Whether to add punctuations to the transcription. Turn detector will work better with punctuations. See https://developers.deepgram.com/docs/punctuation
|
|
||||||
punctuate: true
|
|
||||||
# Whether to include filler words (um, uh, etc.) in transcription. See https://developers.deepgram.com/docs/filler-words
|
|
||||||
filler_words: true
|
|
||||||
# Whether to filter profanity from the transcription. See https://developers.deepgram.com/docs/profanity-filter
|
|
||||||
profanity_filter: false
|
|
||||||
# Whether to transcribe numbers as numerals. See https://developers.deepgram.com/docs/numerals
|
|
||||||
numerals: false
|
|
||||||
# List of tuples containing keywords and their boost values for improved recognition. Each tuple should be (keyword: str, boost: float). keywords does not work with Nova-3 models. Use keyterms instead.
|
|
||||||
# keywords:
|
|
||||||
# - [OpenVidu, 1.5]
|
|
||||||
# - [WebRTC, 1]
|
|
||||||
# List of key terms to improve recognition accuracy. keyterms is supported by Nova-3 models.
|
|
||||||
# Commented below is an example
|
|
||||||
keyterms:
|
|
||||||
# - "OpenVidu"
|
|
||||||
# - "WebRTC"
|
|
||||||
|
|
||||||
assemblyai:
|
|
||||||
# API key for AssemblyAI. See https://www.assemblyai.com/dashboard/api-keys
|
|
||||||
api_key:
|
|
||||||
# The confidence threshold (0.0 to 1.0) to use when determining if the end of a turn has been reached.
|
|
||||||
end_of_turn_confidence_threshold:
|
|
||||||
# The minimum amount of silence in milliseconds required to detect end of turn when confident.
|
|
||||||
min_end_of_turn_silence_when_confident:
|
|
||||||
# The maximum amount of silence in milliseconds allowed in a turn before end of turn is triggered.
|
|
||||||
max_turn_silence:
|
|
||||||
# Whether to return formatted final transcripts (proper punctuation, letter casing...). If enabled, formatted final transcripts are emitted shortly following an end-of-turn detection.
|
|
||||||
format_turns: true
|
|
||||||
# List of keyterms to improve recognition accuracy for specific words and phrases.
|
|
||||||
keyterms_prompt:
|
|
||||||
# - "OpenVidu"
|
|
||||||
# - "WebRTC"
|
|
||||||
|
|
||||||
fal:
|
|
||||||
# API key for fal. See https://fal.ai/dashboard/keys
|
|
||||||
api_key:
|
|
||||||
# See https://fal.ai/models/fal-ai/wizper/api#schema
|
|
||||||
language:
|
|
||||||
|
|
||||||
clova:
|
|
||||||
# Secret key issued when registering the app
|
|
||||||
api_key:
|
|
||||||
# API Gateway's unique invoke URL created in CLOVA Speech Domain.
|
|
||||||
# See https://guide.ncloud-docs.com/docs/en/clovaspeech-domain#create-domain
|
|
||||||
invoke_url:
|
|
||||||
# See https://api.ncloud-docs.com/docs/en/ai-application-service-clovaspeech-longsentence
|
|
||||||
language:
|
|
||||||
# Value between 0 and 1 indicating the threshold for the confidence score of the transcribed text. Default is 0.5.
|
|
||||||
# If the confidence score is lower than the threshold, the transcription event is not sent to the client.
|
|
||||||
# For a definition of the confidence score see https://api.ncloud-docs.com/docs/en/ai-application-service-clovaspeech-grpc
|
|
||||||
threshold:
|
|
||||||
|
|
||||||
speechmatics:
|
|
||||||
# API key for Speechmatics. See https://portal.speechmatics.com/manage-access/
|
|
||||||
api_key:
|
|
||||||
# ISO 639-1 language code. All languages are global and can understand different dialects/accents. To see the list of all supported languages, see https://docs.speechmatics.com/speech-to-text/languages#transcription-languages
|
|
||||||
language:
|
|
||||||
# Operating point to use for the transcription per required accuracy & complexity. To learn more, see https://docs.speechmatics.com/speech-to-text/languages#operating-points
|
|
||||||
operating_point:
|
|
||||||
# Partial transcripts allow you to receive preliminary transcriptions and update as more context is available until the higher-accuracy final transcript is returned. Partials are returned faster but without any post-processing such as formatting. See https://docs.speechmatics.com/speech-to-text/realtime/output#partial-transcripts
|
|
||||||
enable_partials:
|
|
||||||
# Enable speaker diarization. When enabled, the STT engine will determine and attribute words to unique speakers. The speaker_sensitivity parameter can be used to adjust the sensitivity of diarization
|
|
||||||
enable_diarization:
|
|
||||||
# RFC-5646 language code to make spelling rules more consistent in the transcription output. See https://docs.speechmatics.com/features/word-tagging#output-locale
|
|
||||||
output_locale:
|
|
||||||
# The delay in seconds between the end of a spoken word and returning the final transcript results. See https://docs.speechmatics.com/features/realtime-latency#configuration-example
|
|
||||||
max_delay:
|
|
||||||
# See https://docs.speechmatics.com/features/realtime-latency#configuration-example
|
|
||||||
max_delay_mode:
|
|
||||||
# Configuration for speaker diarization. See https://docs.speechmatics.com/features/diarization
|
|
||||||
speaker_diarization_config:
|
|
||||||
# See https://docs.speechmatics.com/features/diarization#max-speakers
|
|
||||||
max_speakers:
|
|
||||||
# See https://docs.speechmatics.com/features/diarization#speaker-sensitivity
|
|
||||||
speaker_sensitivity:
|
|
||||||
# See https://docs.speechmatics.com/features/diarization#prefer-current-speaker
|
|
||||||
prefer_current_speaker:
|
|
||||||
# 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: [ ".", "," ]
|
|
||||||
# sensitivity: 0.4
|
|
||||||
# See https://docs.speechmatics.com/features/custom-dictionary
|
|
||||||
# Commented below is an example of a custom dictionary
|
|
||||||
additional_vocab:
|
|
||||||
# - content: financial crisis
|
|
||||||
# - content: gnocchi
|
|
||||||
# sounds_like:
|
|
||||||
# - nyohki
|
|
||||||
# - nokey
|
|
||||||
# - nochi
|
|
||||||
# - content: CEO
|
|
||||||
# sounds_like:
|
|
||||||
# - C.E.O.
|
|
||||||
|
|
||||||
gladia:
|
|
||||||
# API key for Gladia. See https://app.gladia.io/account
|
|
||||||
api_key:
|
|
||||||
# Whether to return interim (non-final) transcription results. Defaults to True
|
|
||||||
interim_results:
|
|
||||||
# List of language codes to use for recognition. Defaults to None (auto-detect). See https://docs.gladia.io/chapters/limits-and-specifications/languages
|
|
||||||
languages:
|
|
||||||
# Whether to allow switching between languages during recognition. Defaults to True
|
|
||||||
code_switching:
|
|
||||||
# https://docs.gladia.io/api-reference/v2/live/init#body-pre-processing-audio-enhancer
|
|
||||||
pre_processing_audio_enhancer:
|
|
||||||
# https://docs.gladia.io/api-reference/v2/live/init#body-pre-processing-speech-threshold
|
|
||||||
pre_processing_speech_threshold:
|
|
||||||
|
|
||||||
sarvam:
|
|
||||||
# API key for Sarvam. See https://dashboard.sarvam.ai/key-management
|
|
||||||
api_key:
|
|
||||||
# BCP-47 language code for supported Indian languages. See https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe#request.body.language_code.language_code
|
|
||||||
language:
|
|
||||||
# The Sarvam STT model to use. See https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe#request.body.model.model
|
|
||||||
model:
|
|
||||||
|
|
||||||
mistralai:
|
|
||||||
# API key for Mistral AI. See https://console.mistral.ai/api-keys
|
|
||||||
api_key:
|
|
||||||
# Name of the Voxtral STT model to use. Default to voxtral-mini-latest. See https://docs.mistral.ai/capabilities/audio/
|
|
||||||
model:
|
|
||||||
# The language code to use for transcription (e.g., "en" for English)
|
|
||||||
language:
|
|
||||||
|
|
||||||
cartesia:
|
|
||||||
# API key for Cartesia. See https://play.cartesia.ai/keys
|
|
||||||
api_key:
|
|
||||||
# The Cartesia STT model to use
|
|
||||||
model:
|
|
||||||
# The language code to use for transcription (e.g., "en" for English)
|
|
||||||
language:
|
|
||||||
|
|
||||||
soniox:
|
|
||||||
# API key for Soniox. See https://console.soniox.com/
|
|
||||||
api_key:
|
|
||||||
# Set language hints when possible to significantly improve accuracy. See: https://soniox.com/docs/stt/concepts/language-hints
|
|
||||||
language_hints:
|
|
||||||
# - "en"
|
|
||||||
# - "es"
|
|
||||||
# Set context to improve recognition of difficult and rare words. Context is a string and can include words, phrases, sentences, or summaries (limit: 10K chars). See https://soniox.com/docs/stt/concepts/context
|
|
||||||
context:
|
|
||||||
|
|
||||||
nvidia:
|
|
||||||
# API key for NVIDIA. See https://build.nvidia.com/explore/speech?integrate_nim=true&hosted_api=true&modal=integrate-nim
|
|
||||||
# Required when using NVIDIA's cloud services. To use a self-hosted NVIDIA Riva server setup "server" and "use_ssl" instead.
|
|
||||||
api_key:
|
|
||||||
# The NVIDIA Riva ASR model to use. Default is "parakeet-1.1b-en-US-asr-streaming-silero-vad-sortformer"
|
|
||||||
# See available models: https://build.nvidia.com/search/models?filters=usecase%3Ausecase_speech_to_text
|
|
||||||
model:
|
|
||||||
# The NVIDIA function ID for the model. Default is "1598d209-5e27-4d3c-8079-4751568b1081"
|
|
||||||
function_id:
|
|
||||||
# Whether to add punctuation to transcription results. Default is true.
|
|
||||||
punctuate:
|
|
||||||
# The language code for transcription. Default is "en-US"
|
|
||||||
language_code:
|
|
||||||
# Audio sample rate in Hz. Default is 16000.
|
|
||||||
sample_rate:
|
|
||||||
# The NVIDIA Riva server address. Default is "grpc.nvcf.nvidia.com:443"
|
|
||||||
# For self-hosted NIM, use your server address (e.g., "localhost:50051")
|
|
||||||
server:
|
|
||||||
# Whether to use SSL for the connection. Default is true.
|
|
||||||
# Set to false for locally hosted Riva NIM services without SSL.
|
|
||||||
use_ssl:
|
|
||||||
|
|
||||||
spitch:
|
|
||||||
# API key for Spitch. See https://docs.spitch.app/keys
|
|
||||||
api_key:
|
|
||||||
# Language short code for the generated speech. For supported values, see https://docs.spitch.app/concepts/languages
|
|
||||||
language:
|
|
||||||
|
|
||||||
elevenlabs:
|
|
||||||
# API key for ElevenLabs. See https://elevenlabs.io/app/settings/api-keys
|
|
||||||
api_key:
|
|
||||||
# The ElevenLabs STT model to use. Valid values are ["scribe_v1", "scribe_v2", "scribe_v2_realtime"]. See https://elevenlabs.io/docs/overview/models#models-overview
|
|
||||||
model_id:
|
|
||||||
# An ISO-639-1 or ISO-639-3 language_code corresponding to the language of the audio file. Can sometimes improve transcription performance if known beforehand. Defaults to null, in this case the language is predicted automatically
|
|
||||||
language_code:
|
|
||||||
# Custom base URL for the API. Optional.
|
|
||||||
base_url:
|
|
||||||
# Audio sample rate in Hz. Default is 16000.
|
|
||||||
sample_rate:
|
|
||||||
# Whether to tag audio events like (laughter), (footsteps), etc. in the transcription. Only supported for Scribe v1 model. Default is True
|
|
||||||
tag_audio_events:
|
|
||||||
# Whether to include word-level timestamps in the transcription. Default is false.
|
|
||||||
include_timestamps:
|
|
||||||
|
|
||||||
simplismart:
|
|
||||||
# API key for SimpliSmart. See https://docs.simplismart.ai/model-suite/settings/api-keys
|
|
||||||
api_key:
|
|
||||||
# Model identifier for the backend STT model. One of ["openai/whisper-large-v2", "openai/whisper-large-v3", "openai/whisper-large-v3-turbo"]
|
|
||||||
# Default is "openai/whisper-large-v3-turbo"
|
|
||||||
model:
|
|
||||||
# Language code for transcription (default: "en"). See https://docs.simplismart.ai/get-started/playground/transcription-models#supported-languages-with-their-codes
|
|
||||||
language:
|
|
||||||
# Operation to perform. "transcribe" converts speech to text in the original language, "translate" translates into English. Default is "transcribe".
|
|
||||||
task:
|
|
||||||
# If true, disables timestamp generation in transcripts. Default is true
|
|
||||||
without_timestamps:
|
|
||||||
# Minimum duration (ms) for a valid speech segment. Default is 0
|
|
||||||
min_speech_duration_ms:
|
|
||||||
# Decoding temperature (affects randomness). Default is 0.0
|
|
||||||
temperature:
|
|
||||||
# Whether to permit multilingual recognition. Default is false
|
|
||||||
multilingual:
|
|
||||||
|
|
||||||
vosk:
|
|
||||||
# Vosk language model. This provider requires docker_image "docker.io/openvidu/agent-speech-processing-vosk"
|
|
||||||
# Below is the list of pre-installed models in the container (available at https://alphacephei.com/vosk/models):
|
|
||||||
# - vosk-model-en-us-0.22-lgraph (English US)
|
|
||||||
# - vosk-model-small-cn-0.22 (Chinese)
|
|
||||||
# - vosk-model-small-de-0.15 (German)
|
|
||||||
# - vosk-model-small-en-in-0.4 (English India)
|
|
||||||
# - vosk-model-small-es-0.42 (Spanish)
|
|
||||||
# - vosk-model-small-fr-0.22 (French)
|
|
||||||
# - vosk-model-small-hi-0.22 (Hindi)
|
|
||||||
# - vosk-model-small-it-0.22 (Italian)
|
|
||||||
# - vosk-model-small-ja-0.22 (Japanese)
|
|
||||||
# - vosk-model-small-nl-0.22 (Dutch)
|
|
||||||
# - vosk-model-small-pt-0.3 (Portuguese)
|
|
||||||
# - vosk-model-small-ru-0.22 (Russian)
|
|
||||||
model: vosk-model-en-us-0.22-lgraph
|
|
||||||
# Language code for reference. It has no effect other than observability purposes.
|
|
||||||
# If a pre-installed "model" is declared, this will be set automatically if empty.
|
|
||||||
language:
|
|
||||||
# Audio sample rate in Hz. Default is 16000.
|
|
||||||
sample_rate:
|
|
||||||
# Whether to return interim/partial results during recognition. Default is true.
|
|
||||||
partial_results:
|
|
||||||
# Whether to override Vosk's built-in Voice Activity Detection (VAD) with Silero's VAD. Default is false.
|
|
||||||
use_silero_vad: false
|
|
||||||
|
|
||||||
sherpa:
|
|
||||||
# sherpa streaming model. This provider requires docker_image "docker.io/openvidu/agent-speech-processing-sherpa"
|
|
||||||
# Below is the list of pre-installed models in the container (available at https://github.com/k2-fsa/sherpa-onnx/releases/tag/asr-models):
|
|
||||||
# - sherpa-onnx-streaming-zipformer-en-kroko-2025-08-06 (English)
|
|
||||||
# - sherpa-onnx-streaming-zipformer-es-kroko-2025-08-06 (Spanish)
|
|
||||||
# - sherpa-onnx-streaming-zipformer-de-kroko-2025-08-06 (German)
|
|
||||||
# - sherpa-onnx-streaming-zipformer-fr-kroko-2025-08-06 (French)
|
|
||||||
# - sherpa-onnx-streaming-zipformer-ar_en_id_ja_ru_th_vi_zh-2025-02-10 (Multilingual: Arabic, English, Indonesian, Japanese, Russian, Thai, Vietnamese, Chinese)
|
|
||||||
model: sherpa-onnx-streaming-zipformer-en-kroko-2025-08-06
|
|
||||||
# Language code for reference. Auto-detected from model name if not set.
|
|
||||||
language:
|
|
||||||
# Runtime provider for sherpa-onnx. Supported values: "cpu" or "cuda". Default is "cpu".
|
|
||||||
# Learn about GPU acceleration at https://openvidu.io/docs/ai/live-captions/#gpu-acceleration-for-sherpa-provider
|
|
||||||
provider:
|
|
||||||
# Audio sample rate in Hz. Default is 16000.
|
|
||||||
sample_rate:
|
|
||||||
# Whether to return interim/partial results during recognition. Default is true.
|
|
||||||
partial_results:
|
|
||||||
# Number of threads for ONNX Runtime. Default is 2.
|
|
||||||
num_threads:
|
|
||||||
# Recognizer type ("transducer", "paraformer", "zipformer_ctc", "nemo_ctc", "t_one_ctc"). Auto-detected from model name if not set.
|
|
||||||
recognizer_type:
|
|
||||||
# Decoding method ("greedy_search", "modified_beam_search"). Default is "greedy_search".
|
|
||||||
decoding_method:
|
|
||||||
# Whether to override sherpa's built-in Voice Activity Detection (VAD) with Silero's VAD. Default is false.
|
|
||||||
use_silero_vad: false
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
getPrivateIp() {
|
|
||||||
interface=$(route -n get default | grep interface | awk '{print $2}')
|
|
||||||
ip=$(ipconfig getifaddr "$interface")
|
|
||||||
echo "$ip"
|
|
||||||
}
|
|
||||||
|
|
||||||
LAN_PRIVATE_IP=$(getPrivateIp)
|
|
||||||
if [ -z "$LAN_PRIVATE_IP" ]; then
|
|
||||||
echo "No LAN private IP found"
|
|
||||||
echo "Specify the LAN private IP in the .env file"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Replace the LAN_PRIVATE_IP in the .env file
|
|
||||||
sed -i'' -e "s/LAN_PRIVATE_IP=.*/LAN_PRIVATE_IP=$LAN_PRIVATE_IP/g" .env
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>Recording custom layout</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
Create here your custom layout.
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@ -1,61 +0,0 @@
|
|||||||
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
|
|
||||||
# gcp:
|
|
||||||
# credentials_json: |
|
|
||||||
# your_credentials_json
|
|
||||||
# bucket: 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
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
# OpenVidu Meet configuration
|
|
||||||
# Static environment variables loaded via MEET_CONFIG_DIR
|
|
||||||
|
|
||||||
SERVER_PORT=6080
|
|
||||||
MEET_NAME_ID=openviduMeet-LOCAL
|
|
||||||
MEET_LOG_LEVEL=info
|
|
||||||
MEET_COOKIE_SECURE=false
|
|
||||||
MEET_INITIAL_ADMIN_USER=admin
|
|
||||||
MEET_INITIAL_ADMIN_PASSWORD=admin
|
|
||||||
MEET_INITIAL_API_KEY=meet-api-key
|
|
||||||
MEET_INITIAL_WEBHOOK_ENABLED=true
|
|
||||||
MEET_INITIAL_WEBHOOK_URL=http://host.docker.internal:6080/webhook
|
|
||||||
|
|
||||||
LIVEKIT_URL_PRIVATE=ws://openvidu:7880/
|
|
||||||
|
|
||||||
# S3 configuration
|
|
||||||
MEET_S3_BUCKET=openvidu-appdata
|
|
||||||
MEET_S3_SUBBUCKET=openvidu-meet
|
|
||||||
MEET_S3_SERVICE_ENDPOINT=http://minio:9000
|
|
||||||
MEET_AWS_REGION=us-east-1
|
|
||||||
MEET_S3_WITH_PATH_STYLE_ACCESS=true
|
|
||||||
|
|
||||||
# Storage backend type
|
|
||||||
MEET_BLOB_STORAGE_MODE=s3
|
|
||||||
|
|
||||||
# Redis configuration
|
|
||||||
MEET_REDIS_HOST=redis
|
|
||||||
MEET_REDIS_PORT=6379
|
|
||||||
MEET_REDIS_DB=0
|
|
||||||
|
|
||||||
# MongoDB configuration
|
|
||||||
MEET_MONGO_ENABLED=true
|
|
||||||
MEET_MONGO_DB_NAME=openvidu-meet
|
|
||||||
|
|
||||||
# Enable live captions using OpenVidu Speech to Text agent
|
|
||||||
MEET_CAPTIONS_ENABLED=false
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ "$LAN_PRIVATE_IP" != "" ] && [ "$LAN_MODE" = 'true' ]; then
|
|
||||||
echo "Using as NODE_IP: $LAN_PRIVATE_IP"
|
|
||||||
export NODE_IP="$LAN_PRIVATE_IP"
|
|
||||||
fi
|
|
||||||
|
|
||||||
./livekit-server "$@"
|
|
||||||
@ -1,55 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
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.'
|
|
||||||
echo 'Depending on your OS, you can run the following command to set your LAN private IP:'
|
|
||||||
echo ''
|
|
||||||
echo ' - Linux: ./configure_lan_private_ip_linux.sh'
|
|
||||||
echo ' - MacOS: ./configure_lan_private_ip_macos.sh'
|
|
||||||
echo ' - Windows: .\configure_lan_private_ip_windows.bat'
|
|
||||||
echo ''
|
|
||||||
echo 'The script will automatically update the .env file with the LAN_PRIVATE_IP.'
|
|
||||||
echo 'If it can'\''t be found, you can manually set it in the .env file'
|
|
||||||
echo '------------------------'
|
|
||||||
exit 1
|
|
||||||
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"
|
|
||||||
echo " Maybe you changed your network or the IP is wrong"
|
|
||||||
echo " Please update the LAN_PRIVATE_IP in the .env file or"
|
|
||||||
echo " run the configure_lan_private_ip script again:"
|
|
||||||
echo ""
|
|
||||||
echo " - Linux: ./configure_lan_private_ip_linux.sh"
|
|
||||||
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
|
|
||||||
|
|
||||||
# Prepare volumes
|
|
||||||
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 1001:1001 /egress
|
|
||||||
chown 1001:1001 /egress/home
|
|
||||||
chown 1001:1001 /egress/home/egress
|
|
||||||
27
configure_lan_private_ip_macos.sh
Executable file
27
configure_lan_private_ip_macos.sh
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
getPrivateIp() {
|
||||||
|
interface=$(route -n get default | grep interface | awk '{print $2}')
|
||||||
|
ip=$(ipconfig getifaddr "$interface")
|
||||||
|
echo "$ip"
|
||||||
|
}
|
||||||
|
|
||||||
|
LAN_PRIVATE_IP=$(getPrivateIp)
|
||||||
|
if [ -z "$LAN_PRIVATE_IP" ]; then
|
||||||
|
echo "No LAN private IP found"
|
||||||
|
echo "Specify the LAN private IP in the .env file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Replace the LAN_PRIVATE_IP in the .env file
|
||||||
|
sed -i'' -e "s/LAN_PRIVATE_IP=.*/LAN_PRIVATE_IP=$LAN_PRIVATE_IP/g" .env
|
||||||
|
|
||||||
|
# If sillicon mac, enable EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU flag
|
||||||
|
if [ "$(uname -m)" = "arm64" ]; then
|
||||||
|
if ! grep -q "EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU" .env; then
|
||||||
|
echo "# Enable this flag to run Docker Desktop on Apple Silicon Macs" >> .env
|
||||||
|
echo "EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU=1" >> .env
|
||||||
|
else
|
||||||
|
sed -i'' -e "s/EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU=.*/EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU=1/g" .env
|
||||||
|
fi
|
||||||
|
fi
|
||||||
26
docker-compose.override.yml
Normal file
26
docker-compose.override.yml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
services:
|
||||||
|
default-app:
|
||||||
|
image: docker.io/wcm65pck/openvidu-call-demo:3.0.0-dev1
|
||||||
|
container_name: openvidu-call
|
||||||
|
restart: on-failure
|
||||||
|
environment:
|
||||||
|
- USE_HTTPS=${USE_HTTPS:-false}
|
||||||
|
- LAN_MODE=${LAN_MODE:-false}
|
||||||
|
- LAN_DOMAIN=${LAN_DOMAIN:-}
|
||||||
|
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
||||||
|
- SERVER_PORT=5442
|
||||||
|
- LIVEKIT_URL_PRIVATE=ws://openvidu:7880/
|
||||||
|
- LIVEKIT_API_KEY=${LIVEKIT_API_KEY}
|
||||||
|
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET}
|
||||||
|
- CALL_PRIVATE_ACCESS=DISABLED
|
||||||
|
- CALL_USER=${CALL_USER:-}
|
||||||
|
- CALL_SECRET=${CALL_SECRET:-}
|
||||||
|
- CALL_ADMIN_SECRET=${CALL_ADMIN_SECRET:-}
|
||||||
|
- CALL_RECORDING=${CALL_RECORDING:-}
|
||||||
|
volumes:
|
||||||
|
- ./scripts/entrypoint_default_app.sh:/scripts/entrypoint.sh
|
||||||
|
- ./scripts/utils.sh:/scripts/utils.sh
|
||||||
|
entrypoint: /bin/sh /scripts/entrypoint.sh
|
||||||
|
depends_on:
|
||||||
|
setup:
|
||||||
|
condition: service_completed_successfully
|
||||||
@ -1,6 +1,7 @@
|
|||||||
services:
|
services:
|
||||||
|
|
||||||
caddy-proxy:
|
caddy-proxy:
|
||||||
image: docker.io/openvidu/openvidu-caddy-local:3.6.0
|
image: docker.io/wcm65pck/openvidu-caddy-local:3.0.0-dev1
|
||||||
container_name: caddy-proxy
|
container_name: caddy-proxy
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
@ -16,123 +17,97 @@ services:
|
|||||||
- DASHBOARD_ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-}
|
- DASHBOARD_ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-}
|
||||||
- MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-}
|
- MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-}
|
||||||
- MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-}
|
- MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-}
|
||||||
- MEET_BASE_PATH=${MEET_BASE_PATH:-/meet}
|
- OPENVIDU_SHIM_SECRET=${OPENVIDU_SHIM_SECRET:-}
|
||||||
env_file:
|
|
||||||
- ./meet.env
|
|
||||||
volumes:
|
|
||||||
- ./custom-layout:/var/www/custom-layout
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
ports:
|
ports:
|
||||||
- 5443:5443
|
- 5443:5443
|
||||||
- 6443:6443
|
- 6443:6443
|
||||||
- 7443:7443
|
- 7443:7443
|
||||||
- 7880:7880
|
- 7880:7880
|
||||||
- 9443:9443
|
|
||||||
- 9080:9080
|
|
||||||
depends_on:
|
depends_on:
|
||||||
setup:
|
setup:
|
||||||
condition: service_completed_successfully
|
condition: service_completed_successfully
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: docker.io/redis:8.6.1-alpine
|
image: redis:7.2.4-alpine
|
||||||
container_name: redis
|
container_name: redis
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
|
||||||
- 6379:6379
|
|
||||||
volumes:
|
volumes:
|
||||||
- redis:/data
|
- redis:/data
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
command: >
|
command: >
|
||||||
redis-server --bind 0.0.0.0 --requirepass ${REDIS_PASSWORD:-}
|
redis-server
|
||||||
|
--bind 0.0.0.0
|
||||||
|
--requirepass ${REDIS_PASSWORD:-}
|
||||||
depends_on:
|
depends_on:
|
||||||
setup:
|
setup:
|
||||||
condition: service_completed_successfully
|
condition: service_completed_successfully
|
||||||
|
|
||||||
minio:
|
minio:
|
||||||
image: docker.io/openvidu/minio:2025.10.15-debian-12-r9
|
image: bitnami/minio:2024.3.15-debian-12-r0
|
||||||
container_name: minio
|
container_name: minio
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
|
||||||
- 9000:9000
|
|
||||||
environment:
|
environment:
|
||||||
- MINIO_ROOT_USER=${MINIO_ACCESS_KEY:-}
|
- MINIO_ROOT_USER=${MINIO_ACCESS_KEY:-}
|
||||||
- MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY:-}
|
- MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY:-}
|
||||||
- MINIO_DEFAULT_BUCKETS=openvidu-appdata
|
- MINIO_DEFAULT_BUCKETS=openvidu
|
||||||
- MINIO_CONSOLE_SUBPATH=/minio-console
|
- MINIO_CONSOLE_SUBPATH=/minio-console
|
||||||
- MINIO_BROWSER=on
|
|
||||||
- MINIO_BROWSER_REDIRECT_URL=http://localhost:7880/minio-console
|
- MINIO_BROWSER_REDIRECT_URL=http://localhost:7880/minio-console
|
||||||
volumes:
|
volumes:
|
||||||
- minio-data:/bitnami/minio/data
|
- minio-data:/bitnami/minio/data
|
||||||
- minio-certs:/certs
|
- minio-certs:/certs
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
depends_on:
|
depends_on:
|
||||||
setup:
|
setup:
|
||||||
condition: service_completed_successfully
|
condition: service_completed_successfully
|
||||||
|
|
||||||
mongo:
|
mongo:
|
||||||
image: docker.io/openvidu/mongodb:8.0.19-r1
|
image: bitnami/mongodb:7.0.6-debian-12-r0
|
||||||
container_name: mongo
|
container_name: mongo
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
|
||||||
- 27017:27017
|
|
||||||
volumes:
|
volumes:
|
||||||
- mongo-data:/bitnami/mongodb
|
- mongo-data:/bitnami/mongodb
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
environment:
|
environment:
|
||||||
- MONGODB_ROOT_USER=${MONGO_ADMIN_USERNAME:-}
|
- MONGODB_ROOT_USER=${MONGO_ADMIN_USERNAME:-}
|
||||||
- MONGODB_ROOT_PASSWORD=${MONGO_ADMIN_PASSWORD:-}
|
- MONGODB_ROOT_PASSWORD=${MONGO_ADMIN_PASSWORD:-}
|
||||||
- MONGODB_ADVERTISED_HOSTNAME=mongo
|
- EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU=${EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU:-0}
|
||||||
- MONGODB_REPLICA_SET_MODE=primary
|
|
||||||
- MONGODB_REPLICA_SET_NAME=rs0
|
|
||||||
- MONGODB_REPLICA_SET_KEY=devreplicasetkey
|
|
||||||
depends_on:
|
depends_on:
|
||||||
setup:
|
setup:
|
||||||
condition: service_completed_successfully
|
condition: service_completed_successfully
|
||||||
|
|
||||||
dashboard:
|
dashboard:
|
||||||
image: docker.io/openvidu/openvidu-dashboard:3.6.0
|
image: docker.io/wcm65pck/openvidu-dashboard:3.0.0-dev1
|
||||||
container_name: dashboard
|
container_name: dashboard
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
- SERVER_PORT=5000
|
- SERVER_PORT=5000
|
||||||
- ADMIN_USERNAME=${DASHBOARD_ADMIN_USERNAME:-}
|
- ADMIN_USERNAME=${DASHBOARD_ADMIN_USERNAME:-}
|
||||||
- ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-}
|
- ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-}
|
||||||
- DATABASE_URL=mongodb://${MONGO_ADMIN_USERNAME}:${MONGO_ADMIN_PASSWORD}@mongo:27017/?replicaSet=rs0&readPreference=primaryPreferred
|
- DATABASE_URL=mongodb://mongoadmin:mongoadmin@mongo:27017
|
||||||
volumes:
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
depends_on:
|
depends_on:
|
||||||
setup:
|
setup:
|
||||||
condition: service_completed_successfully
|
condition: service_completed_successfully
|
||||||
|
|
||||||
openvidu:
|
openvidu:
|
||||||
image: docker.io/openvidu/openvidu-server:3.6.0
|
image: docker.io/wcm65pck/openvidu-livekit:3.0.0-dev1
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
container_name: openvidu
|
container_name: openvidu
|
||||||
extra_hosts:
|
|
||||||
- host.docker.internal:host-gateway
|
|
||||||
environment:
|
environment:
|
||||||
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
||||||
- LAN_MODE=${LAN_MODE:-false}
|
|
||||||
ports:
|
ports:
|
||||||
- 3478:3478/udp
|
- 3478:3478/udp
|
||||||
- 7881:7881/tcp
|
- 7881:7881/tcp
|
||||||
- 7900-7999:7900-7999/udp
|
- 7882-7892:7882-7892/udp
|
||||||
entrypoint: /bin/sh /scripts/entrypoint.sh
|
entrypoint: /bin/sh /scripts/entrypoint.sh
|
||||||
command: --config /etc/livekit.yaml
|
command: --config /etc/livekit.yaml
|
||||||
volumes:
|
volumes:
|
||||||
- ./livekit.yaml:/etc/livekit.yaml
|
- ./livekit.yaml:/tmp/livekit.yaml
|
||||||
- ./scripts/entrypoint_openvidu.sh:/scripts/entrypoint.sh
|
- ./scripts/entrypoint_openvidu.sh:/scripts/entrypoint.sh
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
depends_on:
|
depends_on:
|
||||||
setup:
|
setup:
|
||||||
condition: service_completed_successfully
|
condition: service_completed_successfully
|
||||||
|
|
||||||
ingress:
|
ingress:
|
||||||
image: docker.io/openvidu/ingress:3.6.0
|
image: livekit/ingress:v1.2.0
|
||||||
container_name: ingress
|
container_name: ingress
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
extra_hosts:
|
|
||||||
- host.docker.internal:host-gateway
|
|
||||||
ports:
|
ports:
|
||||||
- 1935:1935
|
- 1935:1935
|
||||||
- 8085:8085
|
- 8085:8085
|
||||||
@ -141,101 +116,70 @@ services:
|
|||||||
- INGRESS_CONFIG_FILE=/etc/ingress.yaml
|
- INGRESS_CONFIG_FILE=/etc/ingress.yaml
|
||||||
volumes:
|
volumes:
|
||||||
- ./ingress.yaml:/etc/ingress.yaml
|
- ./ingress.yaml:/etc/ingress.yaml
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
depends_on:
|
depends_on:
|
||||||
setup:
|
setup:
|
||||||
condition: service_completed_successfully
|
condition: service_completed_successfully
|
||||||
|
|
||||||
egress:
|
egress:
|
||||||
image: docker.io/openvidu/egress:3.6.0
|
image: livekit/egress:v1.8.2
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
container_name: egress
|
container_name: egress
|
||||||
extra_hosts:
|
|
||||||
- host.docker.internal:host-gateway
|
|
||||||
environment:
|
environment:
|
||||||
- EGRESS_CONFIG_FILE=/etc/egress.yaml
|
- EGRESS_CONFIG_FILE=/etc/egress.yaml
|
||||||
volumes:
|
volumes:
|
||||||
- ./egress.yaml:/etc/egress.yaml
|
- ./egress.yaml:/etc/egress.yaml
|
||||||
- egress-data:/home/egress/tmp
|
- egress-data:/home/egress
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
depends_on:
|
depends_on:
|
||||||
setup:
|
setup:
|
||||||
condition: service_completed_successfully
|
condition: service_completed_successfully
|
||||||
|
|
||||||
openvidu-meet:
|
openvidu-v2compatibility:
|
||||||
image: docker.io/openvidu/openvidu-meet:3.6.0
|
image: docker.io/wcm65pck/openvidu-v2compatibility:3.0.0-dev1
|
||||||
container_name: openvidu-meet
|
restart: unless-stopped
|
||||||
restart: on-failure
|
container_name: openvidu-v2compatibility
|
||||||
extra_hosts:
|
entrypoint: /bin/sh /scripts/entrypoint.sh
|
||||||
- host.docker.internal:host-gateway
|
|
||||||
environment:
|
environment:
|
||||||
- USE_HTTPS=${USE_HTTPS:-false}
|
- USE_HTTPS=${USE_HTTPS:-false}
|
||||||
- LAN_MODE=${LAN_MODE:-false}
|
|
||||||
- LAN_DOMAIN=${LAN_DOMAIN:-}
|
- LAN_DOMAIN=${LAN_DOMAIN:-}
|
||||||
|
- LAN_MODE=${LAN_MODE:-false}
|
||||||
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
||||||
- LIVEKIT_API_KEY=${LIVEKIT_API_KEY}
|
- SERVER_PORT=5080
|
||||||
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET}
|
- OPENVIDU_SHIM_SECRET=${OPENVIDU_SHIM_SECRET:-}
|
||||||
- MEET_S3_ACCESS_KEY=${MINIO_ACCESS_KEY}
|
- LIVEKIT_URL_PRIVATE=ws://openvidu:7880
|
||||||
- MEET_S3_SECRET_KEY=${MINIO_SECRET_KEY}
|
|
||||||
- MEET_REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
|
||||||
- MEET_MONGO_URI=mongodb://${MONGO_ADMIN_USERNAME}:${MONGO_ADMIN_PASSWORD}@mongo:27017/?replicaSet=rs0&readPreference=primaryPreferred
|
|
||||||
- MEET_BASE_PATH=${MEET_BASE_PATH:-/meet}
|
|
||||||
- MEET_CONFIG_DIR=/config/meet.env
|
|
||||||
volumes:
|
|
||||||
- ./meet.env:/config/meet.env
|
|
||||||
- ./scripts/entrypoint_openvidu_meet.sh:/scripts/entrypoint.sh
|
|
||||||
- ./scripts/utils.sh:/scripts/utils.sh
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
entrypoint: /bin/sh /scripts/entrypoint.sh
|
|
||||||
depends_on:
|
|
||||||
setup:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
|
|
||||||
operator:
|
|
||||||
image: docker.io/openvidu/openvidu-operator:3.6.0
|
|
||||||
container_name: operator
|
|
||||||
restart: unless-stopped
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
- agents-config:/agents-config
|
|
||||||
- ./:/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:-}
|
- LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-}
|
||||||
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-}
|
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-}
|
||||||
- REDIS_ADDRESS=redis:6379
|
- 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_PASSWORD=${REDIS_PASSWORD:-}
|
||||||
|
- REDIS_DB=0
|
||||||
|
- OPENVIDU_WEBHOOK=false
|
||||||
|
volumes:
|
||||||
|
- ./scripts/entrypoint_v2comp.sh:/scripts/entrypoint.sh
|
||||||
|
- ./scripts/utils.sh:/scripts/utils.sh
|
||||||
depends_on:
|
depends_on:
|
||||||
setup:
|
setup:
|
||||||
condition: service_completed_successfully
|
condition: service_completed_successfully
|
||||||
|
|
||||||
ready-check:
|
ready-check:
|
||||||
image: docker.io/openvidu/openvidu-operator:3.6.0
|
image: curlimages/curl:8.6.0
|
||||||
container_name: ready-check
|
container_name: ready-check
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
volumes:
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
environment:
|
environment:
|
||||||
- MODE=local-ready-check
|
|
||||||
- OPENVIDU_ENVIRONMENT=local-platform
|
|
||||||
- USE_HTTPS=${USE_HTTPS:-false}
|
- USE_HTTPS=${USE_HTTPS:-false}
|
||||||
- LAN_DOMAIN=${LAN_DOMAIN:-}
|
- LAN_DOMAIN=${LAN_DOMAIN:-}
|
||||||
- LAN_MODE=${LAN_MODE:-false}
|
- LAN_MODE=${LAN_MODE:-false}
|
||||||
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
||||||
|
- OPENVIDU_SHIM_SECRET=${OPENVIDU_SHIM_SECRET:-}
|
||||||
|
- LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-}
|
||||||
|
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-}
|
||||||
- DASHBOARD_ADMIN_USERNAME=${DASHBOARD_ADMIN_USERNAME:-}
|
- DASHBOARD_ADMIN_USERNAME=${DASHBOARD_ADMIN_USERNAME:-}
|
||||||
- DASHBOARD_ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-}
|
- DASHBOARD_ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-}
|
||||||
- MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-}
|
- MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-}
|
||||||
- MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-}
|
- MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-}
|
||||||
- LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-}
|
|
||||||
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-}
|
|
||||||
env_file:
|
|
||||||
- ./meet.env
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- openvidu
|
- openvidu
|
||||||
- ingress
|
- ingress
|
||||||
@ -243,41 +187,32 @@ services:
|
|||||||
- dashboard
|
- dashboard
|
||||||
- minio
|
- minio
|
||||||
- mongo
|
- mongo
|
||||||
|
volumes:
|
||||||
|
- ./scripts/ready-check.sh:/scripts/ready-check.sh
|
||||||
|
- ./scripts/utils.sh:/scripts/utils.sh
|
||||||
|
command: /bin/sh /scripts/ready-check.sh
|
||||||
|
|
||||||
setup:
|
setup:
|
||||||
image: docker.io/busybox:1.37.0
|
image: busybox
|
||||||
container_name: setup
|
container_name: setup
|
||||||
restart: "no"
|
restart: no
|
||||||
volumes:
|
volumes:
|
||||||
- minio-data:/minio
|
- minio-data:/minio
|
||||||
- mongo-data:/mongo
|
- mongo-data:/mongo
|
||||||
- egress-data:/egress
|
- egress-data:/egress
|
||||||
- ./scripts/setup.sh:/scripts/setup.sh
|
- ./scripts/setup.sh:/scripts/setup.sh
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
environment:
|
environment:
|
||||||
- USE_HTTPS=${USE_HTTPS:-false}
|
- USE_HTTPS=${USE_HTTPS:-false}
|
||||||
- LAN_MODE=${LAN_MODE:-false}
|
- LAN_MODE=${LAN_MODE:-false}
|
||||||
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
||||||
- RUN_WITH_SCRIPT=${RUN_WITH_SCRIPT:-false}
|
- RUN_WITH_SCRIPT=${RUN_WITH_SCRIPT:-false}
|
||||||
user: root
|
user: root
|
||||||
command: /bin/sh /scripts/setup.sh
|
command: /bin/sh scripts/setup.sh
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
agents-config:
|
|
||||||
name: openvidu-agents-config
|
|
||||||
minio-certs:
|
minio-certs:
|
||||||
name: openvidu-minio-certs
|
|
||||||
mongodb-config:
|
mongodb-config:
|
||||||
name: openvidu-mongodb-config
|
|
||||||
redis:
|
redis:
|
||||||
name: openvidu-redis
|
|
||||||
minio-data:
|
minio-data:
|
||||||
name: openvidu-minio-data
|
|
||||||
mongo-data:
|
mongo-data:
|
||||||
name: openvidu-mongo-data
|
|
||||||
egress-data:
|
egress-data:
|
||||||
name: openvidu-egress-data
|
|
||||||
|
|
||||||
networks:
|
|
||||||
default:
|
|
||||||
name: openvidu-community
|
|
||||||
23
egress.yaml
Normal file
23
egress.yaml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
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_storage: /home/egress/backup_storage
|
||||||
|
|
||||||
|
# Storage for recordings
|
||||||
|
s3:
|
||||||
|
access_key: minioadmin
|
||||||
|
secret: minioadmin
|
||||||
|
# Default region for minio
|
||||||
|
region: us-east-1
|
||||||
|
endpoint: http://minio:9000
|
||||||
|
bucket: openvidu
|
||||||
|
force_path_style: true
|
||||||
@ -4,7 +4,7 @@ openvidu:
|
|||||||
enabled: true
|
enabled: true
|
||||||
interval: 10s
|
interval: 10s
|
||||||
expiration: 768h # 32 days
|
expiration: 768h # 32 days
|
||||||
mongo_url: mongodb://mongoadmin:mongoadmin@mongo:27017/?replicaSet=rs0&readPreference=primaryPreferred
|
mongo_url: mongodb://mongoadmin:mongoadmin@mongo:27017
|
||||||
|
|
||||||
# LiveKit configuration
|
# LiveKit configuration
|
||||||
port: 7880
|
port: 7880
|
||||||
@ -12,8 +12,7 @@ bind_addresses:
|
|||||||
- ""
|
- ""
|
||||||
rtc:
|
rtc:
|
||||||
tcp_port: 7881
|
tcp_port: 7881
|
||||||
port_range_start: 7900
|
udp_port: 7882-7892
|
||||||
port_range_end: 7999
|
|
||||||
redis:
|
redis:
|
||||||
address: redis:6379
|
address: redis:6379
|
||||||
username: ""
|
username: ""
|
||||||
@ -30,18 +29,15 @@ keys:
|
|||||||
webhook:
|
webhook:
|
||||||
api_key: devkey
|
api_key: devkey
|
||||||
urls:
|
urls:
|
||||||
- http://host.docker.internal:6080/livekit/webhook
|
- http://openvidu-v2compatibility:5080/livekit
|
||||||
- http://openvidu-meet:6080/livekit/webhook
|
|
||||||
ingress:
|
ingress:
|
||||||
rtmp_base_url: rtmp://localhost:1935/rtmp
|
rtmp_base_url: rtmp://localhost:1935/rtmp
|
||||||
whip_base_url: http://localhost:8085/whip
|
whip_base_url: http://localhost:8085/whip
|
||||||
logging:
|
logging:
|
||||||
# Logging level for the LiveKit server.
|
# Logging level for the LiveKit server.
|
||||||
# Values: debug, info, warn, error.
|
# Values: "debug", "info" (default), "warn", "error".
|
||||||
# Default: info.
|
|
||||||
level: info
|
level: info
|
||||||
|
|
||||||
# Logging level for the Pion WebRTC engine.
|
# Logging level for the Pion WebRTC engine.
|
||||||
# Values: trace, debug, info, warn, error.
|
# Values: "trace", "debug", "info", "warn", "error" (default).
|
||||||
# Default: error.
|
pion_level: error
|
||||||
pion_level: warn
|
|
||||||
@ -1,437 +0,0 @@
|
|||||||
# Docker image of the agent.
|
|
||||||
docker_image: docker.io/openvidu/agent-speech-processing-vosk:3.6.0
|
|
||||||
|
|
||||||
# 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, WARN, ERROR, CRITICAL]
|
|
||||||
log_level: INFO
|
|
||||||
|
|
||||||
live_captions:
|
|
||||||
# How this agent will connect to Rooms [manual, automatic]
|
|
||||||
# - manual: the agent will connect to new Rooms only when your application dictates it by using the Agent Dispatch API.
|
|
||||||
# - automatic: the agent will automatically connect to new Rooms.
|
|
||||||
processing: manual
|
|
||||||
|
|
||||||
# Which speech-to-text AI provider to use [aws, azure, google, openai, azure_openai, groq, deepgram, assemblyai, fal, clova, speechmatics, gladia, sarvam, mistralai, cartesia, soniox, nvidia, elevenlabs, simplismart, vosk, sherpa]
|
|
||||||
# The custom configuration for the selected provider must be set below
|
|
||||||
provider: vosk
|
|
||||||
|
|
||||||
aws:
|
|
||||||
# Credentials for AWS Transcribe. See https://docs.aws.amazon.com/transcribe/latest/dg/what-is.html
|
|
||||||
aws_access_key_id:
|
|
||||||
aws_secret_access_key:
|
|
||||||
aws_default_region:
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/supported-languages.html
|
|
||||||
language:
|
|
||||||
# The name of the custom vocabulary you want to use.
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/custom-vocabulary.html
|
|
||||||
vocabulary_name:
|
|
||||||
# The name of the custom language model you want to use.
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/custom-language-models-using.html
|
|
||||||
language_model_name:
|
|
||||||
# Whether or not to enable partial result stabilization. Partial result stabilization can reduce latency in your output, but may impact accuracy.
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/streaming-partial-results.html#streaming-partial-result-stabilization
|
|
||||||
enable_partial_results_stabilization:
|
|
||||||
# Specify the level of stability to use when you enable partial results stabilization (enable_partial_results_stabilization: true). Valid values: high | medium | low
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/streaming-partial-results.html#streaming-partial-result-stabilization
|
|
||||||
partial_results_stability:
|
|
||||||
# The name of the custom vocabulary filter you want to use to mask or remove words.
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/vocabulary-filtering.html
|
|
||||||
vocab_filter_name:
|
|
||||||
# The method used to filter the vocabulary. Valid values: mask | remove | tag
|
|
||||||
# See https://docs.aws.amazon.com/transcribe/latest/dg/vocabulary-filtering.html
|
|
||||||
vocab_filter_method:
|
|
||||||
|
|
||||||
azure:
|
|
||||||
# Credentials for Azure Speech Service.
|
|
||||||
# One of these combinations must be set:
|
|
||||||
# - speech_host
|
|
||||||
# - speech_key + speech_region
|
|
||||||
# - speech_auth_token + speech_region
|
|
||||||
# See https://learn.microsoft.com/en-us/azure/ai-services/speech-service/get-started-speech-to-text?tabs=macos%2Cterminal&pivots=programming-language-python#prerequisites
|
|
||||||
speech_host:
|
|
||||||
speech_key:
|
|
||||||
speech_auth_token:
|
|
||||||
speech_region:
|
|
||||||
# Azure handles multiple languages and can auto-detect the language used. It requires the candidate set to be set. E.g. ["en-US", "es-ES"]
|
|
||||||
# See https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt#supported-languages
|
|
||||||
language:
|
|
||||||
# Removes profanity (swearing), or replaces letters of profane words with stars. Valid values: Masked | Removed | Raw
|
|
||||||
# See https://learn.microsoft.com/en-us/azure/ai-services/translator/profanity-filtering
|
|
||||||
profanity:
|
|
||||||
# List of words or phrases to boost recognition accuracy. Azure will give higher priority to these phrases during recognition.
|
|
||||||
phrase_list:
|
|
||||||
# Controls punctuation behavior. If True, enables explicit punctuation mode where punctuation marks are added explicitly. If False (default), uses Azure's default punctuation behavior.
|
|
||||||
explicit_punctuation:
|
|
||||||
|
|
||||||
azure_openai:
|
|
||||||
# Credentials for Azure OpenAI APIs. See https://learn.microsoft.com/en-us/azure/api-management/api-management-authenticate-authorize-azure-openai
|
|
||||||
# Azure OpenAI API key
|
|
||||||
azure_api_key:
|
|
||||||
# Azure Active Directory token
|
|
||||||
azure_ad_token:
|
|
||||||
# Azure OpenAI endpoint in the following format: https://{your-resource-name}.openai.azure.com. Mandatory value.
|
|
||||||
azure_endpoint:
|
|
||||||
# Name of your model deployment. If given with `azure_endpoint`, sets the base client URL to include `/deployments/{azure_deployment}`.
|
|
||||||
azure_deployment:
|
|
||||||
# OpenAI REST API version used for the request. Mandatory value.
|
|
||||||
api_version:
|
|
||||||
# OpenAI organization ID.
|
|
||||||
organization:
|
|
||||||
# OpenAI project ID.
|
|
||||||
project:
|
|
||||||
# The language code to use for transcription (e.g., "en" for English).
|
|
||||||
language:
|
|
||||||
# Whether to automatically detect the language.
|
|
||||||
detect_language:
|
|
||||||
# ID of the model to use for speech-to-text.
|
|
||||||
model:
|
|
||||||
# Initial prompt to guide the transcription.
|
|
||||||
prompt:
|
|
||||||
|
|
||||||
google:
|
|
||||||
# Credentials for Google Cloud. This is the content of a Google Cloud credential JSON file.
|
|
||||||
# Below is a dummy example for a credential type of "Service Account" (https://cloud.google.com/iam/docs/service-account-creds#key-types)
|
|
||||||
credentials_info: |
|
|
||||||
{
|
|
||||||
"type": "service_account",
|
|
||||||
"project_id": "my-project",
|
|
||||||
"private_key_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
||||||
"private_key": "-----BEGIN PRIVATE KEY-----\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n-----END PRIVATE KEY-----\n",
|
|
||||||
"client_email": "my-email@my-project.iam.gserviceaccount.com",
|
|
||||||
"client_id": "xxxxxxxxxxxxxxxxxxxxx",
|
|
||||||
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
|
||||||
"token_uri": "https://oauth2.googleapis.com/token",
|
|
||||||
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
|
||||||
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/my-email%40my-project.iam.gserviceaccount.com",
|
|
||||||
"universe_domain": "googleapis.com"
|
|
||||||
}
|
|
||||||
# Which model to use for recognition. If not set, uses the default model for the selected language.
|
|
||||||
# See https://cloud.google.com/speech-to-text/docs/transcription-model
|
|
||||||
model:
|
|
||||||
# The location to use for recognition. Default is "us-central1". Latency will be best if the location is close to your users.
|
|
||||||
# Check supported languages and locations at https://cloud.google.com/speech-to-text/v2/docs/speech-to-text-supported-languages
|
|
||||||
location:
|
|
||||||
# List of language codes to recognize. Default is ["en-US"].
|
|
||||||
# See https://cloud.google.com/speech-to-text/v2/docs/speech-to-text-supported-languages
|
|
||||||
languages:
|
|
||||||
# Whether to detect the language of the audio. Default is true.
|
|
||||||
detect_language:
|
|
||||||
# If 'true', adds punctuation to recognition result hypotheses. This feature is only available in select languages. Setting this
|
|
||||||
# for requests in other languages has no effect at all. The default 'false' value does not add punctuation to result hypotheses.
|
|
||||||
# See https://cloud.google.com/speech-to-text/docs/automatic-punctuation
|
|
||||||
punctuate:
|
|
||||||
# The spoken punctuation behavior for the call. If not set, uses default behavior based on model of choice.
|
|
||||||
# e.g. command_and_search will enable spoken punctuation by default. If 'true', replaces spoken punctuation
|
|
||||||
# with the corresponding symbols in the request. For example, "how are you question mark" becomes "how are you?".
|
|
||||||
# See https://cloud.google.com/speech-to-text/docs/spoken-punctuation for support. If 'false', spoken punctuation is not replaced.
|
|
||||||
spoken_punctuation:
|
|
||||||
# Whether to return interim (non-final) transcription results. Defaults to true.
|
|
||||||
interim_results:
|
|
||||||
|
|
||||||
openai:
|
|
||||||
# API key for OpenAI. See https://platform.openai.com/api-keys
|
|
||||||
api_key:
|
|
||||||
# The OpenAI model to use for transcription. See https://platform.openai.com/docs/guides/speech-to-text
|
|
||||||
model:
|
|
||||||
# The language of the input audio. Supplying the input language in ISO-639-1 format
|
|
||||||
# (https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) will improve accuracy and latency.
|
|
||||||
language:
|
|
||||||
# Whether to automatically detect the language.
|
|
||||||
detect_language:
|
|
||||||
# Optional text prompt to guide the transcription. Only supported for whisper-1.
|
|
||||||
prompt:
|
|
||||||
|
|
||||||
groq:
|
|
||||||
# API key for Groq. See https://console.groq.com/keys
|
|
||||||
api_key:
|
|
||||||
# See https://console.groq.com/docs/speech-to-text
|
|
||||||
model:
|
|
||||||
# The language of the input audio. Supplying the input language in ISO-639-1 format
|
|
||||||
# (https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) will improve accuracy and latency.
|
|
||||||
language:
|
|
||||||
# Whether to automatically detect the language.
|
|
||||||
detect_language:
|
|
||||||
# Prompt to guide the model's style or specify how to spell unfamiliar words. 224 tokens max.
|
|
||||||
prompt:
|
|
||||||
# Base URL for the Groq API. By default "https://api.groq.com/openai/v1"
|
|
||||||
base_url:
|
|
||||||
|
|
||||||
deepgram:
|
|
||||||
# See https://console.deepgram.com/
|
|
||||||
api_key:
|
|
||||||
# See https://developers.deepgram.com/reference/speech-to-text-api/listen-streaming#request.query.model
|
|
||||||
model:
|
|
||||||
# See https://developers.deepgram.com/reference/speech-to-text-api/listen-streaming#request.query.language
|
|
||||||
language:
|
|
||||||
# Whether to enable automatic language detection. See https://developers.deepgram.com/docs/language-detection
|
|
||||||
detect_language: false
|
|
||||||
# Whether to return interim (non-final) transcription results. See https://developers.deepgram.com/docs/interim-results
|
|
||||||
interim_results: true
|
|
||||||
# Whether to apply smart formatting to numbers, dates, etc. 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. See https://developers.deepgram.com/docs/smart-format#using-no-delay
|
|
||||||
no_delay: true
|
|
||||||
# Whether to add punctuations to the transcription. Turn detector will work better with punctuations. See https://developers.deepgram.com/docs/punctuation
|
|
||||||
punctuate: true
|
|
||||||
# Whether to include filler words (um, uh, etc.) in transcription. See https://developers.deepgram.com/docs/filler-words
|
|
||||||
filler_words: true
|
|
||||||
# Whether to filter profanity from the transcription. See https://developers.deepgram.com/docs/profanity-filter
|
|
||||||
profanity_filter: false
|
|
||||||
# Whether to transcribe numbers as numerals. See https://developers.deepgram.com/docs/numerals
|
|
||||||
numerals: false
|
|
||||||
# List of tuples containing keywords and their boost values for improved recognition. Each tuple should be (keyword: str, boost: float). keywords does not work with Nova-3 models. Use keyterms instead.
|
|
||||||
# keywords:
|
|
||||||
# - [OpenVidu, 1.5]
|
|
||||||
# - [WebRTC, 1]
|
|
||||||
# List of key terms to improve recognition accuracy. keyterms is supported by Nova-3 models.
|
|
||||||
# Commented below is an example
|
|
||||||
keyterms:
|
|
||||||
# - "OpenVidu"
|
|
||||||
# - "WebRTC"
|
|
||||||
|
|
||||||
assemblyai:
|
|
||||||
# API key for AssemblyAI. See https://www.assemblyai.com/dashboard/api-keys
|
|
||||||
api_key:
|
|
||||||
# The confidence threshold (0.0 to 1.0) to use when determining if the end of a turn has been reached.
|
|
||||||
end_of_turn_confidence_threshold:
|
|
||||||
# The minimum amount of silence in milliseconds required to detect end of turn when confident.
|
|
||||||
min_end_of_turn_silence_when_confident:
|
|
||||||
# The maximum amount of silence in milliseconds allowed in a turn before end of turn is triggered.
|
|
||||||
max_turn_silence:
|
|
||||||
# Whether to return formatted final transcripts (proper punctuation, letter casing...). If enabled, formatted final transcripts are emitted shortly following an end-of-turn detection.
|
|
||||||
format_turns: true
|
|
||||||
# List of keyterms to improve recognition accuracy for specific words and phrases.
|
|
||||||
keyterms_prompt:
|
|
||||||
# - "OpenVidu"
|
|
||||||
# - "WebRTC"
|
|
||||||
|
|
||||||
fal:
|
|
||||||
# API key for fal. See https://fal.ai/dashboard/keys
|
|
||||||
api_key:
|
|
||||||
# See https://fal.ai/models/fal-ai/wizper/api#schema
|
|
||||||
language:
|
|
||||||
|
|
||||||
clova:
|
|
||||||
# Secret key issued when registering the app
|
|
||||||
api_key:
|
|
||||||
# API Gateway's unique invoke URL created in CLOVA Speech Domain.
|
|
||||||
# See https://guide.ncloud-docs.com/docs/en/clovaspeech-domain#create-domain
|
|
||||||
invoke_url:
|
|
||||||
# See https://api.ncloud-docs.com/docs/en/ai-application-service-clovaspeech-longsentence
|
|
||||||
language:
|
|
||||||
# Value between 0 and 1 indicating the threshold for the confidence score of the transcribed text. Default is 0.5.
|
|
||||||
# If the confidence score is lower than the threshold, the transcription event is not sent to the client.
|
|
||||||
# For a definition of the confidence score see https://api.ncloud-docs.com/docs/en/ai-application-service-clovaspeech-grpc
|
|
||||||
threshold:
|
|
||||||
|
|
||||||
speechmatics:
|
|
||||||
# API key for Speechmatics. See https://portal.speechmatics.com/manage-access/
|
|
||||||
api_key:
|
|
||||||
# ISO 639-1 language code. All languages are global and can understand different dialects/accents. To see the list of all supported languages, see https://docs.speechmatics.com/speech-to-text/languages#transcription-languages
|
|
||||||
language:
|
|
||||||
# Operating point to use for the transcription per required accuracy & complexity. To learn more, see https://docs.speechmatics.com/speech-to-text/languages#operating-points
|
|
||||||
operating_point:
|
|
||||||
# Partial transcripts allow you to receive preliminary transcriptions and update as more context is available until the higher-accuracy final transcript is returned. Partials are returned faster but without any post-processing such as formatting. See https://docs.speechmatics.com/speech-to-text/realtime/output#partial-transcripts
|
|
||||||
enable_partials:
|
|
||||||
# Enable speaker diarization. When enabled, the STT engine will determine and attribute words to unique speakers. The speaker_sensitivity parameter can be used to adjust the sensitivity of diarization
|
|
||||||
enable_diarization:
|
|
||||||
# RFC-5646 language code to make spelling rules more consistent in the transcription output. See https://docs.speechmatics.com/features/word-tagging#output-locale
|
|
||||||
output_locale:
|
|
||||||
# The delay in seconds between the end of a spoken word and returning the final transcript results. See https://docs.speechmatics.com/features/realtime-latency#configuration-example
|
|
||||||
max_delay:
|
|
||||||
# See https://docs.speechmatics.com/features/realtime-latency#configuration-example
|
|
||||||
max_delay_mode:
|
|
||||||
# Configuration for speaker diarization. See https://docs.speechmatics.com/features/diarization
|
|
||||||
speaker_diarization_config:
|
|
||||||
# See https://docs.speechmatics.com/features/diarization#max-speakers
|
|
||||||
max_speakers:
|
|
||||||
# See https://docs.speechmatics.com/features/diarization#speaker-sensitivity
|
|
||||||
speaker_sensitivity:
|
|
||||||
# See https://docs.speechmatics.com/features/diarization#prefer-current-speaker
|
|
||||||
prefer_current_speaker:
|
|
||||||
# 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: [ ".", "," ]
|
|
||||||
# sensitivity: 0.4
|
|
||||||
# See https://docs.speechmatics.com/features/custom-dictionary
|
|
||||||
# Commented below is an example of a custom dictionary
|
|
||||||
additional_vocab:
|
|
||||||
# - content: financial crisis
|
|
||||||
# - content: gnocchi
|
|
||||||
# sounds_like:
|
|
||||||
# - nyohki
|
|
||||||
# - nokey
|
|
||||||
# - nochi
|
|
||||||
# - content: CEO
|
|
||||||
# sounds_like:
|
|
||||||
# - C.E.O.
|
|
||||||
|
|
||||||
gladia:
|
|
||||||
# API key for Gladia. See https://app.gladia.io/account
|
|
||||||
api_key:
|
|
||||||
# Whether to return interim (non-final) transcription results. Defaults to True
|
|
||||||
interim_results:
|
|
||||||
# List of language codes to use for recognition. Defaults to None (auto-detect). See https://docs.gladia.io/chapters/limits-and-specifications/languages
|
|
||||||
languages:
|
|
||||||
# Whether to allow switching between languages during recognition. Defaults to True
|
|
||||||
code_switching:
|
|
||||||
# https://docs.gladia.io/api-reference/v2/live/init#body-pre-processing-audio-enhancer
|
|
||||||
pre_processing_audio_enhancer:
|
|
||||||
# https://docs.gladia.io/api-reference/v2/live/init#body-pre-processing-speech-threshold
|
|
||||||
pre_processing_speech_threshold:
|
|
||||||
|
|
||||||
sarvam:
|
|
||||||
# API key for Sarvam. See https://dashboard.sarvam.ai/key-management
|
|
||||||
api_key:
|
|
||||||
# BCP-47 language code for supported Indian languages. See https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe#request.body.language_code.language_code
|
|
||||||
language:
|
|
||||||
# The Sarvam STT model to use. See https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe#request.body.model.model
|
|
||||||
model:
|
|
||||||
|
|
||||||
mistralai:
|
|
||||||
# API key for Mistral AI. See https://console.mistral.ai/api-keys
|
|
||||||
api_key:
|
|
||||||
# Name of the Voxtral STT model to use. Default to voxtral-mini-latest. See https://docs.mistral.ai/capabilities/audio/
|
|
||||||
model:
|
|
||||||
# The language code to use for transcription (e.g., "en" for English)
|
|
||||||
language:
|
|
||||||
|
|
||||||
cartesia:
|
|
||||||
# API key for Cartesia. See https://play.cartesia.ai/keys
|
|
||||||
api_key:
|
|
||||||
# The Cartesia STT model to use
|
|
||||||
model:
|
|
||||||
# The language code to use for transcription (e.g., "en" for English)
|
|
||||||
language:
|
|
||||||
|
|
||||||
soniox:
|
|
||||||
# API key for Soniox. See https://console.soniox.com/
|
|
||||||
api_key:
|
|
||||||
# Set language hints when possible to significantly improve accuracy. See: https://soniox.com/docs/stt/concepts/language-hints
|
|
||||||
language_hints:
|
|
||||||
# - "en"
|
|
||||||
# - "es"
|
|
||||||
# Set context to improve recognition of difficult and rare words. Context is a string and can include words, phrases, sentences, or summaries (limit: 10K chars). See https://soniox.com/docs/stt/concepts/context
|
|
||||||
context:
|
|
||||||
|
|
||||||
nvidia:
|
|
||||||
# API key for NVIDIA. See https://build.nvidia.com/explore/speech?integrate_nim=true&hosted_api=true&modal=integrate-nim
|
|
||||||
# Required when using NVIDIA's cloud services. To use a self-hosted NVIDIA Riva server setup "server" and "use_ssl" instead.
|
|
||||||
api_key:
|
|
||||||
# The NVIDIA Riva ASR model to use. Default is "parakeet-1.1b-en-US-asr-streaming-silero-vad-sortformer"
|
|
||||||
# See available models: https://build.nvidia.com/search/models?filters=usecase%3Ausecase_speech_to_text
|
|
||||||
model:
|
|
||||||
# The NVIDIA function ID for the model. Default is "1598d209-5e27-4d3c-8079-4751568b1081"
|
|
||||||
function_id:
|
|
||||||
# Whether to add punctuation to transcription results. Default is true.
|
|
||||||
punctuate:
|
|
||||||
# The language code for transcription. Default is "en-US"
|
|
||||||
language_code:
|
|
||||||
# Audio sample rate in Hz. Default is 16000.
|
|
||||||
sample_rate:
|
|
||||||
# The NVIDIA Riva server address. Default is "grpc.nvcf.nvidia.com:443"
|
|
||||||
# For self-hosted NIM, use your server address (e.g., "localhost:50051")
|
|
||||||
server:
|
|
||||||
# Whether to use SSL for the connection. Default is true.
|
|
||||||
# Set to false for locally hosted Riva NIM services without SSL.
|
|
||||||
use_ssl:
|
|
||||||
|
|
||||||
spitch:
|
|
||||||
# API key for Spitch. See https://docs.spitch.app/keys
|
|
||||||
api_key:
|
|
||||||
# Language short code for the generated speech. For supported values, see https://docs.spitch.app/concepts/languages
|
|
||||||
language:
|
|
||||||
|
|
||||||
elevenlabs:
|
|
||||||
# API key for ElevenLabs. See https://elevenlabs.io/app/settings/api-keys
|
|
||||||
api_key:
|
|
||||||
# The ElevenLabs STT model to use. Valid values are ["scribe_v1", "scribe_v2", "scribe_v2_realtime"]. See https://elevenlabs.io/docs/overview/models#models-overview
|
|
||||||
model_id:
|
|
||||||
# An ISO-639-1 or ISO-639-3 language_code corresponding to the language of the audio file. Can sometimes improve transcription performance if known beforehand. Defaults to null, in this case the language is predicted automatically
|
|
||||||
language_code:
|
|
||||||
# Custom base URL for the API. Optional.
|
|
||||||
base_url:
|
|
||||||
# Audio sample rate in Hz. Default is 16000.
|
|
||||||
sample_rate:
|
|
||||||
# Whether to tag audio events like (laughter), (footsteps), etc. in the transcription. Only supported for Scribe v1 model. Default is True
|
|
||||||
tag_audio_events:
|
|
||||||
# Whether to include word-level timestamps in the transcription. Default is false.
|
|
||||||
include_timestamps:
|
|
||||||
|
|
||||||
simplismart:
|
|
||||||
# API key for SimpliSmart. See https://docs.simplismart.ai/model-suite/settings/api-keys
|
|
||||||
api_key:
|
|
||||||
# Model identifier for the backend STT model. One of ["openai/whisper-large-v2", "openai/whisper-large-v3", "openai/whisper-large-v3-turbo"]
|
|
||||||
# Default is "openai/whisper-large-v3-turbo"
|
|
||||||
model:
|
|
||||||
# Language code for transcription (default: "en"). See https://docs.simplismart.ai/get-started/playground/transcription-models#supported-languages-with-their-codes
|
|
||||||
language:
|
|
||||||
# Operation to perform. "transcribe" converts speech to text in the original language, "translate" translates into English. Default is "transcribe".
|
|
||||||
task:
|
|
||||||
# If true, disables timestamp generation in transcripts. Default is true
|
|
||||||
without_timestamps:
|
|
||||||
# Minimum duration (ms) for a valid speech segment. Default is 0
|
|
||||||
min_speech_duration_ms:
|
|
||||||
# Decoding temperature (affects randomness). Default is 0.0
|
|
||||||
temperature:
|
|
||||||
# Whether to permit multilingual recognition. Default is false
|
|
||||||
multilingual:
|
|
||||||
|
|
||||||
vosk:
|
|
||||||
# Vosk language model. This provider requires docker_image "docker.io/openvidu/agent-speech-processing-vosk"
|
|
||||||
# Below is the list of pre-installed models in the container (available at https://alphacephei.com/vosk/models):
|
|
||||||
# - vosk-model-en-us-0.22-lgraph (English US)
|
|
||||||
# - vosk-model-small-cn-0.22 (Chinese)
|
|
||||||
# - vosk-model-small-de-0.15 (German)
|
|
||||||
# - vosk-model-small-en-in-0.4 (English India)
|
|
||||||
# - vosk-model-small-es-0.42 (Spanish)
|
|
||||||
# - vosk-model-small-fr-0.22 (French)
|
|
||||||
# - vosk-model-small-hi-0.22 (Hindi)
|
|
||||||
# - vosk-model-small-it-0.22 (Italian)
|
|
||||||
# - vosk-model-small-ja-0.22 (Japanese)
|
|
||||||
# - vosk-model-small-nl-0.22 (Dutch)
|
|
||||||
# - vosk-model-small-pt-0.3 (Portuguese)
|
|
||||||
# - vosk-model-small-ru-0.22 (Russian)
|
|
||||||
model: vosk-model-en-us-0.22-lgraph
|
|
||||||
# Language code for reference. It has no effect other than observability purposes.
|
|
||||||
# If a pre-installed "model" is declared, this will be set automatically if empty.
|
|
||||||
language:
|
|
||||||
# Audio sample rate in Hz. Default is 16000.
|
|
||||||
sample_rate:
|
|
||||||
# Whether to return interim/partial results during recognition. Default is true.
|
|
||||||
partial_results:
|
|
||||||
# Whether to override Vosk's built-in Voice Activity Detection (VAD) with Silero's VAD. Default is false.
|
|
||||||
use_silero_vad: false
|
|
||||||
|
|
||||||
sherpa:
|
|
||||||
# sherpa streaming model. This provider requires docker_image "docker.io/openvidu/agent-speech-processing-sherpa"
|
|
||||||
# Below is the list of pre-installed models in the container (available at https://github.com/k2-fsa/sherpa-onnx/releases/tag/asr-models):
|
|
||||||
# - sherpa-onnx-streaming-zipformer-en-kroko-2025-08-06 (English)
|
|
||||||
# - sherpa-onnx-streaming-zipformer-es-kroko-2025-08-06 (Spanish)
|
|
||||||
# - sherpa-onnx-streaming-zipformer-de-kroko-2025-08-06 (German)
|
|
||||||
# - sherpa-onnx-streaming-zipformer-fr-kroko-2025-08-06 (French)
|
|
||||||
# - sherpa-onnx-streaming-zipformer-ar_en_id_ja_ru_th_vi_zh-2025-02-10 (Multilingual: Arabic, English, Indonesian, Japanese, Russian, Thai, Vietnamese, Chinese)
|
|
||||||
model: sherpa-onnx-streaming-zipformer-en-kroko-2025-08-06
|
|
||||||
# Language code for reference. Auto-detected from model name if not set.
|
|
||||||
language:
|
|
||||||
# Runtime provider for sherpa-onnx. Supported values: "cpu" or "cuda". Default is "cpu".
|
|
||||||
# Learn about GPU acceleration at https://openvidu.io/docs/ai/live-captions/#gpu-acceleration-for-sherpa-provider
|
|
||||||
provider:
|
|
||||||
# Audio sample rate in Hz. Default is 16000.
|
|
||||||
sample_rate:
|
|
||||||
# Whether to return interim/partial results during recognition. Default is true.
|
|
||||||
partial_results:
|
|
||||||
# Number of threads for ONNX Runtime. Default is 2.
|
|
||||||
num_threads:
|
|
||||||
# Recognizer type ("transducer", "paraformer", "zipformer_ctc", "nemo_ctc", "t_one_ctc"). Auto-detected from model name if not set.
|
|
||||||
recognizer_type:
|
|
||||||
# Decoding method ("greedy_search", "modified_beam_search"). Default is "greedy_search".
|
|
||||||
decoding_method:
|
|
||||||
# Whether to override sherpa's built-in Voice Activity Detection (VAD) with Silero's VAD. Default is false.
|
|
||||||
use_silero_vad: false
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
getPrivateIp() {
|
|
||||||
ip="$(ip route get 8.8.8.8 | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}')"
|
|
||||||
echo "$ip"
|
|
||||||
}
|
|
||||||
|
|
||||||
LAN_PRIVATE_IP=$(getPrivateIp)
|
|
||||||
if [ -z "$LAN_PRIVATE_IP" ]; then
|
|
||||||
echo "No LAN private IP found"
|
|
||||||
echo "Specify the LAN private IP in the .env file"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Replace the LAN_PRIVATE_IP in the .env file
|
|
||||||
sed -i "s/LAN_PRIVATE_IP=.*/LAN_PRIVATE_IP=$LAN_PRIVATE_IP/g" .env
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
getPrivateIp() {
|
|
||||||
interface=$(route -n get default | grep interface | awk '{print $2}')
|
|
||||||
ip=$(ipconfig getifaddr "$interface")
|
|
||||||
echo "$ip"
|
|
||||||
}
|
|
||||||
|
|
||||||
LAN_PRIVATE_IP=$(getPrivateIp)
|
|
||||||
if [ -z "$LAN_PRIVATE_IP" ]; then
|
|
||||||
echo "No LAN private IP found"
|
|
||||||
echo "Specify the LAN private IP in the .env file"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Replace the LAN_PRIVATE_IP in the .env file
|
|
||||||
sed -i'' -e "s/LAN_PRIVATE_IP=.*/LAN_PRIVATE_IP=$LAN_PRIVATE_IP/g" .env
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
@echo off
|
|
||||||
call :getPrivateIp
|
|
||||||
if "%ip%"=="" (
|
|
||||||
echo No LAN private IP found
|
|
||||||
echo Specify the LAN private IP in the .env file
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Replace the LAN_PRIVATE_IP in the .env file
|
|
||||||
setlocal enabledelayedexpansion
|
|
||||||
set "tempFile=%temp%\temp_env_%random%.txt"
|
|
||||||
if exist "%tempFile%" del "%tempFile%"
|
|
||||||
(
|
|
||||||
for /f "delims=" %%i in ('findstr /n "^" ".env"') do (
|
|
||||||
set "line=%%i"
|
|
||||||
set "line=!line:*:=!"
|
|
||||||
if "!line:~0,15!"=="LAN_PRIVATE_IP=" (
|
|
||||||
echo LAN_PRIVATE_IP=%ip%
|
|
||||||
) else (
|
|
||||||
echo(!line!
|
|
||||||
)
|
|
||||||
)
|
|
||||||
) > "%tempFile%"
|
|
||||||
|
|
||||||
move /y "%tempFile%" ".env" >nul
|
|
||||||
endlocal
|
|
||||||
exit /b 0
|
|
||||||
|
|
||||||
:getPrivateIp
|
|
||||||
for /f "tokens=4" %%i in ('route print ^| findstr "\<0.0.0.0\>"') do (
|
|
||||||
set ip=%%i
|
|
||||||
goto :eof
|
|
||||||
)
|
|
||||||
goto :eof
|
|
||||||
@ -1,71 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>OpenVidu Layout</title>
|
|
||||||
|
|
||||||
<script src="openvidu-browser-v2compatibility-3.0.0.min.js"></script>
|
|
||||||
<script src="opentok-layout.min.js"></script>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
background-color: black;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
#layout {
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div id="layout"></div>
|
|
||||||
</body>
|
|
||||||
|
|
||||||
<script defer>
|
|
||||||
var layoutContainer = document.getElementById('layout');
|
|
||||||
// Initialize the layout container and get a reference to the layout method
|
|
||||||
var layout = initLayoutContainer(layoutContainer);
|
|
||||||
layout.layout();
|
|
||||||
|
|
||||||
var resizeTimeout;
|
|
||||||
window.onresize = function () {
|
|
||||||
clearTimeout(resizeTimeout);
|
|
||||||
resizeTimeout = setTimeout(() => layout.layout(), 20);
|
|
||||||
};
|
|
||||||
|
|
||||||
var url = new URL(window.location.href);
|
|
||||||
var SESSION_ID = url.searchParams.get('sessionId');
|
|
||||||
var SECRET = url.searchParams.get('secret');
|
|
||||||
// WARNING! Use "ws://" as protocol instead of "wss://" if you are using
|
|
||||||
// the OpenVidu dev container (openvidu/openvidu-dev) through localhost
|
|
||||||
var TOKEN =
|
|
||||||
'wss://localhost:4443' +
|
|
||||||
'?sessionId=' +
|
|
||||||
SESSION_ID +
|
|
||||||
'&secret=' +
|
|
||||||
SECRET +
|
|
||||||
'&recorder=true';
|
|
||||||
|
|
||||||
var OV = new OpenVidu();
|
|
||||||
var session = OV.initSession();
|
|
||||||
|
|
||||||
session.on('streamCreated', (event) => {
|
|
||||||
session.subscribe(event.stream, 'layout');
|
|
||||||
layout.layout();
|
|
||||||
});
|
|
||||||
session.on('streamDestroyed', (event) => {
|
|
||||||
setTimeout(() => layout.layout(), 20);
|
|
||||||
});
|
|
||||||
session
|
|
||||||
.connect(TOKEN)
|
|
||||||
.then(() => {
|
|
||||||
console.log('Recorder participant connected');
|
|
||||||
layout.layout();
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error(error);
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</html>
|
|
||||||
12
pro/custom-layout/v2compat/opentok-layout.min.js
vendored
12
pro/custom-layout/v2compat/opentok-layout.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,13 +0,0 @@
|
|||||||
/*!
|
|
||||||
* EventEmitter v5.2.9 - git.io/ee
|
|
||||||
* Unlicense - http://unlicense.org/
|
|
||||||
* Oliver Caldwell - https://oli.me.uk/
|
|
||||||
* @preserve
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* Platform.js v1.3.6
|
|
||||||
* Copyright 2014-2020 Benjamin Tan
|
|
||||||
* Copyright 2011-2013 John-David Dalton
|
|
||||||
* Available under MIT license
|
|
||||||
*/
|
|
||||||
@ -1,327 +0,0 @@
|
|||||||
services:
|
|
||||||
caddy-proxy:
|
|
||||||
image: docker.io/openvidu/openvidu-caddy-local:3.6.0
|
|
||||||
container_name: caddy-proxy
|
|
||||||
restart: unless-stopped
|
|
||||||
extra_hosts:
|
|
||||||
- host.docker.internal:host-gateway
|
|
||||||
environment:
|
|
||||||
- LAN_DOMAIN=${LAN_DOMAIN:-}
|
|
||||||
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
|
||||||
- LAN_MODE=${LAN_MODE:-false}
|
|
||||||
- USE_HTTPS=${USE_HTTPS:-false}
|
|
||||||
- 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:-}
|
|
||||||
- V2COMPAT_OPENVIDU_SECRET=${LIVEKIT_API_SECRET:-}
|
|
||||||
- MEET_BASE_PATH=${MEET_BASE_PATH:-/meet}
|
|
||||||
env_file:
|
|
||||||
- ./meet.env
|
|
||||||
volumes:
|
|
||||||
- ./custom-layout:/var/www/custom-layout
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
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.1-alpine
|
|
||||||
container_name: redis
|
|
||||||
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:-}
|
|
||||||
depends_on:
|
|
||||||
setup:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
|
|
||||||
minio:
|
|
||||||
image: docker.io/openvidu/minio:2025.10.15-debian-12-r9
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
- 9000:9000
|
|
||||||
environment:
|
|
||||||
- MINIO_ROOT_USER=${MINIO_ACCESS_KEY:-}
|
|
||||||
- MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY:-}
|
|
||||||
- MINIO_DEFAULT_BUCKETS=openvidu-appdata
|
|
||||||
- MINIO_CONSOLE_SUBPATH=/minio-console
|
|
||||||
- MINIO_BROWSER=on
|
|
||||||
- MINIO_BROWSER_REDIRECT_URL=http://localhost:7880/minio-console
|
|
||||||
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.19-r1
|
|
||||||
container_name: mongo
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
- 27017:27017
|
|
||||||
volumes:
|
|
||||||
- mongo-data:/bitnami/mongodb
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
environment:
|
|
||||||
- MONGODB_ROOT_USER=${MONGO_ADMIN_USERNAME:-}
|
|
||||||
- MONGODB_ROOT_PASSWORD=${MONGO_ADMIN_PASSWORD:-}
|
|
||||||
- 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.6.0
|
|
||||||
container_name: dashboard
|
|
||||||
restart: unless-stopped
|
|
||||||
environment:
|
|
||||||
- SERVER_PORT=5000
|
|
||||||
- ADMIN_USERNAME=${DASHBOARD_ADMIN_USERNAME:-}
|
|
||||||
- ADMIN_PASSWORD=${DASHBOARD_ADMIN_PASSWORD:-}
|
|
||||||
- DATABASE_URL=mongodb://${MONGO_ADMIN_USERNAME}:${MONGO_ADMIN_PASSWORD}@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-pro:3.6.0
|
|
||||||
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
|
|
||||||
ports:
|
|
||||||
- 3478:3478/udp
|
|
||||||
- 7881:7881/tcp
|
|
||||||
- 7900-7999:7900-7999/udp
|
|
||||||
entrypoint: /bin/sh /scripts/entrypoint.sh
|
|
||||||
command: --config /etc/livekit.yaml
|
|
||||||
volumes:
|
|
||||||
- ./livekit.yaml:/etc/livekit.yaml
|
|
||||||
- ./scripts/entrypoint_openvidu.sh:/scripts/entrypoint.sh
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
depends_on:
|
|
||||||
setup:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
|
|
||||||
ingress:
|
|
||||||
image: docker.io/openvidu/ingress:3.6.0
|
|
||||||
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=/etc/ingress.yaml
|
|
||||||
volumes:
|
|
||||||
- ./ingress.yaml:/etc/ingress.yaml
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
depends_on:
|
|
||||||
setup:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
|
|
||||||
egress:
|
|
||||||
image: docker.io/openvidu/egress:3.6.0
|
|
||||||
restart: unless-stopped
|
|
||||||
container_name: egress
|
|
||||||
extra_hosts:
|
|
||||||
- host.docker.internal:host-gateway
|
|
||||||
environment:
|
|
||||||
- EGRESS_CONFIG_FILE=/etc/egress.yaml
|
|
||||||
volumes:
|
|
||||||
- ./egress.yaml:/etc/egress.yaml
|
|
||||||
- egress-data:/home/egress
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
depends_on:
|
|
||||||
setup:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
|
|
||||||
openvidu-meet:
|
|
||||||
image: docker.io/openvidu/openvidu-meet:3.6.0
|
|
||||||
container_name: openvidu-meet
|
|
||||||
restart: on-failure
|
|
||||||
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:-}
|
|
||||||
- LIVEKIT_API_KEY=${LIVEKIT_API_KEY}
|
|
||||||
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET}
|
|
||||||
- MEET_S3_ACCESS_KEY=${MINIO_ACCESS_KEY}
|
|
||||||
- MEET_S3_SECRET_KEY=${MINIO_SECRET_KEY}
|
|
||||||
- MEET_REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
|
||||||
- MEET_MONGO_URI=mongodb://${MONGO_ADMIN_USERNAME}:${MONGO_ADMIN_PASSWORD}@mongo:27017/?replicaSet=rs0&readPreference=primaryPreferred
|
|
||||||
- MEET_BASE_PATH=${MEET_BASE_PATH:-/meet}
|
|
||||||
- MEET_CONFIG_DIR=/config/meet.env
|
|
||||||
volumes:
|
|
||||||
- ./meet.env:/config/meet.env
|
|
||||||
- ./scripts/entrypoint_openvidu_meet.sh:/scripts/entrypoint.sh
|
|
||||||
- ./scripts/utils.sh:/scripts/utils.sh
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
entrypoint: /bin/sh /scripts/entrypoint.sh
|
|
||||||
depends_on:
|
|
||||||
setup:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
|
|
||||||
openvidu-v2compatibility:
|
|
||||||
image: docker.io/openvidu/openvidu-v2compatibility:3.6.0
|
|
||||||
restart: unless-stopped
|
|
||||||
container_name: openvidu-v2compatibility
|
|
||||||
entrypoint: /bin/sh /scripts/entrypoint.sh
|
|
||||||
extra_hosts:
|
|
||||||
- host.docker.internal:host-gateway
|
|
||||||
ports:
|
|
||||||
- 4443:4443
|
|
||||||
environment:
|
|
||||||
- USE_HTTPS=${USE_HTTPS:-false}
|
|
||||||
- LAN_DOMAIN=${LAN_DOMAIN:-}
|
|
||||||
- LAN_MODE=${LAN_MODE:-false}
|
|
||||||
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
|
||||||
- V2COMPAT_OPENVIDU_SHIM_PORT=4443
|
|
||||||
- V2COMPAT_OPENVIDU_SECRET=${LIVEKIT_API_SECRET:-}
|
|
||||||
- V2COMPAT_LIVEKIT_URL_PRIVATE=ws://openvidu:7880
|
|
||||||
- V2COMPAT_LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-}
|
|
||||||
- V2COMPAT_LIVEKIT_API_SECRET=${LIVEKIT_API_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=${MINIO_ACCESS_KEY:-}
|
|
||||||
- V2COMPAT_OPENVIDU_PRO_AWS_SECRET_KEY=${MINIO_SECRET_KEY:-}
|
|
||||||
- V2COMPAT_REDIS_HOST=redis
|
|
||||||
- V2COMPAT_REDIS_PORT=6379
|
|
||||||
- V2COMPAT_REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
|
||||||
- V2COMPAT_REDIS_DB=0
|
|
||||||
- V2COMPAT_OPENVIDU_WEBHOOK=false
|
|
||||||
- V2COMPAT_OPENVIDU_WEBHOOK_ENDPOINT=http://host.docker.internal:7777/webhook
|
|
||||||
- OPENVIDU_DEPLOYMENT_TYPE=local
|
|
||||||
volumes:
|
|
||||||
- ./recordings:/opt/openvidu/recordings
|
|
||||||
- ./scripts/entrypoint_v2comp.sh:/scripts/entrypoint.sh
|
|
||||||
- ./scripts/utils.sh:/scripts/utils.sh
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
depends_on:
|
|
||||||
setup:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
|
|
||||||
ready-check:
|
|
||||||
image: docker.io/openvidu/openvidu-operator:3.6.0
|
|
||||||
container_name: ready-check
|
|
||||||
restart: on-failure
|
|
||||||
volumes:
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
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:-}
|
|
||||||
- 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:-}
|
|
||||||
env_file:
|
|
||||||
- ./meet.env
|
|
||||||
depends_on:
|
|
||||||
- openvidu
|
|
||||||
- ingress
|
|
||||||
- egress
|
|
||||||
- dashboard
|
|
||||||
- minio
|
|
||||||
- mongo
|
|
||||||
|
|
||||||
operator:
|
|
||||||
image: docker.io/openvidu/openvidu-operator:3.6.0
|
|
||||||
container_name: operator
|
|
||||||
restart: unless-stopped
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
- agents-config:/agents-config
|
|
||||||
- ./:/deployment
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
environment:
|
|
||||||
- MODE=agent-manager-local
|
|
||||||
- DEPLOYMENT_FILES_DIR=/deployment
|
|
||||||
- AGENTS_CONFIG_DIR=/agents-config
|
|
||||||
- NETWORK_NAME=openvidu-pro
|
|
||||||
- AGENTS_CONFIG_VOLUME=openvidu-pro-agents-config
|
|
||||||
- LIVEKIT_URL=ws://openvidu:7880/
|
|
||||||
- LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-}
|
|
||||||
- LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-}
|
|
||||||
- REDIS_ADDRESS=redis:6379
|
|
||||||
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
|
||||||
depends_on:
|
|
||||||
setup:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
setup:
|
|
||||||
image: docker.io/busybox:1.37.0
|
|
||||||
container_name: setup
|
|
||||||
restart: "no"
|
|
||||||
volumes:
|
|
||||||
- minio-data:/minio
|
|
||||||
- mongo-data:/mongo
|
|
||||||
- egress-data:/egress
|
|
||||||
- ./scripts/setup.sh:/scripts/setup.sh
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
environment:
|
|
||||||
- USE_HTTPS=${USE_HTTPS:-false}
|
|
||||||
- LAN_MODE=${LAN_MODE:-false}
|
|
||||||
- LAN_PRIVATE_IP=${LAN_PRIVATE_IP:-}
|
|
||||||
- RUN_WITH_SCRIPT=${RUN_WITH_SCRIPT:-false}
|
|
||||||
user: root
|
|
||||||
command: /bin/sh /scripts/setup.sh
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
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
|
|
||||||
|
|
||||||
networks:
|
|
||||||
default:
|
|
||||||
name: openvidu-pro
|
|
||||||
@ -1,61 +0,0 @@
|
|||||||
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
|
|
||||||
# gcp:
|
|
||||||
# credentials_json: |
|
|
||||||
# your_credentials_json
|
|
||||||
# bucket: 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
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
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
|
|
||||||
@ -1,72 +0,0 @@
|
|||||||
# 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
|
|
||||||
36
pro/meet.env
36
pro/meet.env
@ -1,36 +0,0 @@
|
|||||||
# OpenVidu Meet configuration
|
|
||||||
# Static environment variables loaded via MEET_CONFIG_DIR
|
|
||||||
|
|
||||||
SERVER_PORT=6080
|
|
||||||
MEET_NAME_ID=openviduMeet-LOCAL
|
|
||||||
MEET_LOG_LEVEL=info
|
|
||||||
MEET_COOKIE_SECURE=false
|
|
||||||
MEET_INITIAL_ADMIN_USER=admin
|
|
||||||
MEET_INITIAL_ADMIN_PASSWORD=admin
|
|
||||||
MEET_INITIAL_API_KEY=meet-api-key
|
|
||||||
MEET_INITIAL_WEBHOOK_ENABLED=true
|
|
||||||
MEET_INITIAL_WEBHOOK_URL=http://host.docker.internal:6080/webhook
|
|
||||||
|
|
||||||
LIVEKIT_URL_PRIVATE=ws://openvidu:7880/
|
|
||||||
|
|
||||||
# S3 configuration
|
|
||||||
MEET_S3_BUCKET=openvidu-appdata
|
|
||||||
MEET_S3_SUBBUCKET=openvidu-meet
|
|
||||||
MEET_S3_SERVICE_ENDPOINT=http://minio:9000
|
|
||||||
MEET_AWS_REGION=us-east-1
|
|
||||||
MEET_S3_WITH_PATH_STYLE_ACCESS=true
|
|
||||||
|
|
||||||
# Storage backend type
|
|
||||||
MEET_BLOB_STORAGE_MODE=s3
|
|
||||||
|
|
||||||
# Redis configuration
|
|
||||||
MEET_REDIS_HOST=redis
|
|
||||||
MEET_REDIS_PORT=6379
|
|
||||||
MEET_REDIS_DB=0
|
|
||||||
|
|
||||||
# MongoDB configuration
|
|
||||||
MEET_MONGO_ENABLED=true
|
|
||||||
MEET_MONGO_DB_NAME=openvidu-meet
|
|
||||||
|
|
||||||
# Enable live captions using OpenVidu Speech to Text agent
|
|
||||||
MEET_CAPTIONS_ENABLED=false
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ "$LAN_PRIVATE_IP" != "" ] && [ "$LAN_MODE" = 'true' ]; 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 "$@"
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
. /scripts/utils.sh
|
|
||||||
|
|
||||||
URL=$(getDeploymentUrl ws)
|
|
||||||
export LIVEKIT_URL="${URL}"
|
|
||||||
|
|
||||||
/usr/local/bin/entrypoint.sh
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
. /scripts/utils.sh
|
|
||||||
|
|
||||||
URL=$(getDeploymentUrl)
|
|
||||||
export V2COMPAT_OPENVIDU_SHIM_URL="${URL}"
|
|
||||||
export V2COMPAT_LIVEKIT_URL="${URL}"
|
|
||||||
/bin/server
|
|
||||||
@ -1,55 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
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.'
|
|
||||||
echo 'Depending on your OS, you can run the following command to set your LAN private IP:'
|
|
||||||
echo ''
|
|
||||||
echo ' - Linux: ./configure_lan_private_ip_linux.sh'
|
|
||||||
echo ' - MacOS: ./configure_lan_private_ip_macos.sh'
|
|
||||||
echo ' - Windows: .\configure_lan_private_ip_windows.bat'
|
|
||||||
echo ''
|
|
||||||
echo 'The script will automatically update the .env file with the LAN_PRIVATE_IP.'
|
|
||||||
echo 'If it can'\''t be found, you can manually set it in the .env file'
|
|
||||||
echo '------------------------'
|
|
||||||
exit 1
|
|
||||||
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"
|
|
||||||
echo " Maybe you changed your network or the IP is wrong"
|
|
||||||
echo " Please update the LAN_PRIVATE_IP in the .env file or"
|
|
||||||
echo " run the configure_lan_private_ip script again:"
|
|
||||||
echo ""
|
|
||||||
echo " - Linux: ./configure_lan_private_ip_linux.sh"
|
|
||||||
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
|
|
||||||
|
|
||||||
# Prepare volumes
|
|
||||||
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 1001:1001 /egress
|
|
||||||
chown 1001:1001 /egress/home
|
|
||||||
chown 1001:1001 /egress/home/egress
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
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"
|
|
||||||
}
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
. /scripts/utils.sh
|
. /scripts/utils.sh
|
||||||
|
|
||||||
URL=$(getDeploymentUrl ws)
|
URL=$(getDeploymentUrl)
|
||||||
export LIVEKIT_URL="${URL}"
|
export LIVEKIT_URL="${URL}"
|
||||||
|
|
||||||
/usr/local/bin/entrypoint.sh
|
/usr/local/bin/entrypoint.sh
|
||||||
20
scripts/entrypoint_openvidu.sh
Normal file
20
scripts/entrypoint_openvidu.sh
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
CONFIG_FILE_TMP="/tmp/livekit.yaml"
|
||||||
|
CONFIG_FILE="/etc/livekit.yaml"
|
||||||
|
LAN_PRIVATE_IP="${LAN_PRIVATE_IP:-}"
|
||||||
|
|
||||||
|
cp ${CONFIG_FILE_TMP} ${CONFIG_FILE}
|
||||||
|
|
||||||
|
if [ "$LAN_PRIVATE_IP" != "none" ]; then
|
||||||
|
if ! grep -q "^[[:space:]]*node_ip:.*" "$CONFIG_FILE"; then
|
||||||
|
if grep -q "^rtc:" "$CONFIG_FILE"; then
|
||||||
|
sed -i "/^rtc:/a \ node_ip: $LAN_PRIVATE_IP" "$CONFIG_FILE"
|
||||||
|
else
|
||||||
|
echo "rtc:" >> "$CONFIG_FILE"
|
||||||
|
echo " node_ip: $LAN_PRIVATE_IP" >> "$CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
./livekit-server "$@"
|
||||||
8
scripts/entrypoint_v2comp.sh
Normal file
8
scripts/entrypoint_v2comp.sh
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
. /scripts/utils.sh
|
||||||
|
|
||||||
|
URL=$(getDeploymentUrl)
|
||||||
|
export OPENVIDU_SHIM_URL="${URL}"
|
||||||
|
export LIVEKIT_URL="${URL}"
|
||||||
|
node dist/server.js
|
||||||
70
scripts/ready-check.sh
Normal file
70
scripts/ready-check.sh
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#!/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 '========================================='
|
||||||
33
scripts/setup.sh
Normal file
33
scripts/setup.sh
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ -z "$LAN_PRIVATE_IP" ]; then
|
||||||
|
echo '------------------------'
|
||||||
|
echo ''
|
||||||
|
echo 'LAN_PRIVATE_IP is required in .env file'
|
||||||
|
echo 'Depending on your OS, you can run the following command to get your LAN private IP:'
|
||||||
|
echo ''
|
||||||
|
echo ' - Linux: ./configure_lan_private_ip_linux.sh'
|
||||||
|
echo ' - MacOS: ./configure_lan_private_ip_macos.sh'
|
||||||
|
echo ' - Windows: .\configure_lan_private_ip_windows.bat'
|
||||||
|
echo ''
|
||||||
|
echo 'The script will automatically update the .env file with the LAN_PRIVATE_IP'
|
||||||
|
echo 'If it can'\''t be found, you can manually set it in the .env file'
|
||||||
|
echo '------------------------'
|
||||||
|
exit 1
|
||||||
|
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 &&
|
||||||
|
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
|
||||||
Loading…
x
Reference in New Issue
Block a user