Openvidu es una plataforma de comunicación en tiempo real que funciona con WebRTC y combina una serie de tecnologías (Docker, WebRTC, Java, Spring, Kurento Media Server, codificadores de Audio y Video, Nginx, Coturn, Redis, etc.) en un solo paquete listo para su despliegue en producción en una maquina Linux.
¿Qué es WebRTC?
Comunicación Web en Tiempo Real (Web Real-Time Communication) es tanto una especificación como un proyecto de código abierto (código que permite que los programadores lo puedan inspeccionar, modificar, mejorar y distribuir de la forma que consideren conveniente) para permitir la transmisión de datos, voz y video entre navegadores y dispositivos que manejen tecnologías web sin requerir hardware o software extra para complementar.
Casos de uso para aplicaciones WebRTC
Las tecnologías de comunicación web en tiempo real pueden aplicarse a todo tipo de casos por su gran potencial de no requerir instalar nada por parte del cliente y por la naturaleza multiplataforma del software web.
Los principales usos para WebRTC en aplicaciones son los que se basan en:
- Videollamadas, ya sea uno a uno o grupales
- Aulas virtuales para dar clases en línea o transmitir seminarios web
- Consultas en línea
- Visualización de cámaras de vigilancia, webcams o cámaras de vehículos
Antes de desplegar Openvidu
Es necesario contar con al menos una maquina Linux libre para hacer el despliegue, y se recomienda que esta cuente con con los siguientes requerimientos mínimos:
- 2 núcleos
- 8 GB de memoria RAM
- Buen ancho de banda
- Docker y Docker-Compose instalados
- 2 nombres de dominio (ó subdominios) apuntando a la Ip publica de la maquina
- Firewall configurado correctamente para permitir el funcionamiento de Openvidu en ciertos puertos y bloquear el resto de puertos por seguridad
Se requiere un nombre de dominio para apuntar a nuestro servidor principal Openvidu y otro para su configuración como servidor Coturn, el cual funciona con una tecnología llamada Turn, la cual es necesaria para permitir la comunicación en ciertas redes restrictivas.
Ambos dominios deben apuntar a la misma IP y si no contamos con el segundo nombre de dominio Openvidu no funcionara.
Configuración del Firewall
Se deben abrir los siguientes puertos en el Firewall de nuestra maquina Linux y bloquear el resto para evitar intentos de Hackeo:
- 22 TCP: Conexión SSH para administrar OpenVidu
- 80 TCP: Para generar certificados SSL con Let's Encrypt
- 443 TCP: Acceso web seguro
- 3478 TCP+UDP: es usado por el servidor STUN/TURN para resolver IPs de clientes
- 40000 - 57000 TCP+UDP: Para que Kurento Media Server establezca la conexión multimedia
- 57001 - 65535 TCP+UDP: Son usados por el servidor TURN
Openvidu podría no funcionar si los puertos 80, 443, 3478, 5442, 5443, 6379 y 8888 están siendo usados por algún otro proceso en el computador, un error común suele ser tener instalado Nginx antes de instalar Openvidu, por lo que se recomienda desinstalar este o cualquier otro servicio que pueda interferir con Openvidu.
Instalación de Docker en Debian
Necesitamos Docker y Docker Compose corriendo en nuestra maquina Linux, para instalar Docker en Debian solo debemos ejecutar los siguientes comandos:
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# Install the latest version
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Despliegue de Openvidu
El directorio recomendado para instalar Openvidu es: /opt. Todos los comandos necesarios se deben ejecutar en esta ubicación.
cd /opt
Para descargar y ejecutar el instalador de Openvidu es necesario ejecutar el siguiente comando con el que instalaremos la versión 2.27.0:
curl https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_2.27.0.sh | bash
En lugar de esta version se puede instalar cualquier otra cambiando el 2.27.0 por la versión deseada o en caso de querer instalar la ultima habría que escribir latest, por ejemplo:
curl https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_latest.sh | bash
Con esto ahora tenemos un directorio llamado /openvidu y en el tenemos toda la arquitectura de archivos de Openvidu.
Ahora es necesario editar el archivo de variables de entorno ".env" para configurar el dominio e IP de nuestro servidor Openvidu, la contraseña para acceder al dashboard y probar la configuración y configurar el tipo de certificado SSL de nuestra preferencia.
nano /opt/openvidu/.env
A continuación veremos las variables a localizar y lo que habría que poner en ellas:
DOMAIN_OR_PUBLIC_IP=openvidudomain.example
PROXY_PUBLIC_IP=1.22.33.444
COTURN_IP=1.22.33.444
OPENVIDU_SECRET=Contraseña
CERTIFICATE_TYPE=letsencrypt
LETSENCRYPT_EMAIL=myaddress@domainexample
Debemos establecer correctamente nuestro nombre de o tendremos problemas al añadirle certificado y debemos colocar la IP publica de nuestro servidor.
Para este caso estamos configurando que queremos usar Let's Encrypt para configurar y renovar los certificados en automático, por lo que debemos proporcionar una dirección de correo valida para que nos registre los certificados.
Ejecución de Openvidu
Debemos correr el siguiente comando para inicializar Openvidu, el comando descargara las imágenes de todos los servicios Docker necesarios solo la primera vez, y luego las ejecutara.
./openvidu start
Mediante los comandos de Docker Compose podemos revisar los servicios de Openvidu que se están ejecutando:
sudo docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
openvidu-app-1 "docker-entrypoint.s…" app running
openvidu-coturn-1 "docker-entrypoint.s…" coturn running 0.0.0.0:3478->3478/tcp, 0.0.0.0:3478->3478/udp, :::3478->3478/tcp, :::3478->3478/udp
openvidu-kms-1 "/entrypoint.sh" kms running (healthy)
openvidu-nginx-1 "/docker-entrypoint.…" nginx running
openvidu-openvidu-server-1 "/usr/local/bin/entr…" openvidu-server running
Probar Openvidu y empezar a usarlo
Para verificar que openvidu esta funcionando correctamente podemos dirigirnos al dashboard que será accesible mediante el dominio principal que configuramos en el archivo .env;
https://<<DOMAIN_OR_PUBLIC_IP>>/dashboard
Para poder continuar en esta sección es necesario proporcionar como nombre de usuario OPENVIDUAPP y como contraseña la clave configurada en las variables de entorno OPENVIDU_SECRET
- USERNAME: OPENVIDUAPP
- Password: <<OPENVIDU_SECRET>>
Una vez dentro del dashboard debemos hacer click en el botón Test y Openvidu nos volverá a preguntar por nuestra contraseña y luego el navegador nos preguntara sobre permitir el acceso a nuestra cámara y micrófono para poder probar y verificar que Openvidu ya esta finalmente funcionando en nuestro sistema.
Una vez que ya este funcionando podemos empezar a hacer nuestras implementaciones, y para ello tenemos la API REST de Openvidu y en su página esta completamente documentada.
Mediante la API podemos gestionar las conexiones entre los usuarios de nuestra aplicación, pero para controlar de forma avanzada quien puede conectarse, por cuanto tiempo, suscripciones, pagos, etcetera, todo eso será necesario hacerlo desde otros servicios diferentes que tendremos que programar o conectar por separado.