Neuralpin Logo

Openvidu + Linux + Docker - Videollamadas Web

Openvidu es una plataforma de comunicación en tiempo real que funciona con WebRTC para permitirte crear aplicaciones de transmisión de video en vivo

Plataforma de comunicación Web

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

Openvidu Dashboard Picture

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>>

Openvidu Dashboard Picture

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.

Openvidu Dashboard Picture

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.

Visitar fuentes para más información:

Ulises Rendón

Desarrollador de Software

Es un programador apasionado por la ciencia y la tecnología, vive en la ciudad de México y fundó Neuralpin con el objetivo de divulgar conocimiento sobre tecnología y desarrollo.