Jitsi Docker

Jitsi Docker

Despliegue y configuración de Jitsi Meet con Docker Compose, Jibri y grabación automática.


ADVERTENCIA

Por flujo de redirecciones, no podemos acceder correctamente al servicio de audio y video en la oficina, ya que usamos el mismo rango de IPs públicas y causa loopback y retroalimentación en el servicio.

Instalación de Docker

Por defecto, CentOS usa Podman, preinstalado, en lugar de Docker como gestor de contenedores. Dadas incompatibilidades, debemos desinstalarlo por completo previamente:

yum remove podman containers runc dnf -y module disable container-tools

Debemos activar el repositorio docker-ce:

yum install -y yum-utils yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

E instalar Compose (cambiando la version por la deseada):

yum install docker-ce wget https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-linux-x86_64 mv docker-compose-linux-x86_64 /usr/libexec/docker/cli-plugins/docker-compose chmod +x /usr/libexec/docker/cli-plugins/docker-compose curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker -o /usr/share/bash-completion/completions/docker systemctl enable –now docker

Desplegar el contenedor

Seguir estos pasos: https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker Adicionalmente, debemos editar el archivo .env con los siguientes parametros:

HTTP_PORT=80 HTTPS_PORT=443 TZ=Europe/Madrid PUBLIC_URL=https://dominio.com DOCKER_HOST_ADDRESS=212.81.166.68 ENABLE_LOBBY=1 ENABLE_AV_MODERATION=1 ENABLE_PREJOIN_PAGE=1 ENABLE_WELCOME_PAGE=0 ENABLE_CLOSE_PAGE=1 ENABLE_LETSENCRYPT=1 LETSENCRYPT_DOMAIN=dominio.com LETSENCRYPT_EMAIL=[email protected] ENABLE_AUTH=1 ENABLE_GUESTS=1 AUTH_TYPE=internal XMPP_MODULES=info,alert XMPP_MUC_MODULES=info,alert XMPP_INTERNAL_MUC_MODULES=info,alert ENABLE_RECORDING=1 JIBRI_FINALIZE_RECORDING_SCRIPT_PATH=/config/finalize.sh DISABLE_HTTPS=0 ENABLE_HTTP_REDIRECT=1

Adicionalmente en dicho archivo, se deben modificar todos los subdominios XMPP para que lo sean de nuestro dominio/subdominio principal de la aplicación (p.e. muc.teleconsulta.ejemplo.com).

Iniciamos Docker (correr desde dentro de la carpeta):

docker compose up -d

Detener Docker:

docker compose down

Habilitar las grabaciones con Jibri

Debemos crear un script vacío; se ejecuta al finalizar la llamada:

touch .jitsi-config/jibri/finalize.sh

Crear loopback de sonido:

yum install alsa-utils echo “options snd-aloop enable=1,1,1,1,1 index=0,1,2,3,4” > /etc/modprobe.d/alsa-loopback.conf echo “snd_aloop” > /etc/modules-load.d/snd_aloop.conf modprobe snd-aloop

Añadimos los dispositivos a .jitsi-meet-cfg/jibri/.asoundrc

… slave.pcm “hw:Loopback,0,0” … slave.pcm “hw:Loopback,0,1” … slave.pcm “hw:Loopback,1,1” … slave.pcm “hw:Loopback,1,0” … slave.pcm “hw:Loopback_1,0,0” … slave.pcm “hw:Loopback_1,0,1” … slave.pcm “hw:Loopback_1,1,1” … slave.pcm “hw:Loopback_1,1,0” … slave.pcm “hw:Loopback_2,0,0” … slave.pcm “hw:Loopback_2,0,1” … slave.pcm “hw:Loopback_2,1,1” … slave.pcm “hw:Loopback_2,1,0” … slave.pcm “hw:Loopback_3,0,0” … slave.pcm “hw:Loopback_3,0,1” … slave.pcm “hw:Loopback_3,1,1” … slave.pcm “hw:Loopback_3,1,0” … slave.pcm “hw:Loopback_4,0,0” … slave.pcm “hw:Loopback_4,0,1” … slave.pcm “hw:Loopback_4,1,1” … slave.pcm “hw:Loopback_4,1,0” …

Editamos .env y cambiamos todas las entradas referentes el dominio interno (subdomino.jitsi.meet) a nuestro dominio web. Y levantamos jitsi y jibri:

docker compose -f docker-compose.yml -f jibri.yml up -d

O editamos el archivo docker-compose.yml y copiamos el contenido bajo “service:” en jibir.yml tras el resto. En ambos casos debemos añadir en “volumes” la siguiente línea para cambiar dónde guardamos las grabaciones:

  • /temp/recordings:/config/recordings

  • /mnt/recordings:/mnt/recordings

  • /mnt/UPS:/config/UPS …

Escalamos varias instancias de Jibri y asignamos cada loopack:

docker compose -f docker-compose.yml -f jibri.yml up -d –scale jibri=5 docker exec -t docker-jitsi-meet-jibri-1 sed -i ‘s/Loopback/0/g’ /home/jibri/.asoundrc docker exec -t docker-jitsi-meet-jibri-2 sed -i ‘s/Loopback/1/g’ /home/jibri/.asoundrc docker exec -t docker-jitsi-meet-jibri-3 sed -i ‘s/Loopback/2/g’ /home/jibri/.asoundrc docker exec -t docker-jitsi-meet-jibri-4 sed -i ‘s/Loopback/3/g’ /home/jibri/.asoundrc docker exec -t docker-jitsi-meet-jibri-5 sed -i ‘s/Loopback/4/g’ /home/jibri/.asoundrc docker restart docker-jitsi-meet-jibri-1 docker restart docker-jitsi-meet-jibri-2 docker restart docker-jitsi-meet-jibri-3 docker restart docker-jitsi-meet-jibri-4 docker restart docker-jitsi-meet-jibri-5

NOTA: He añadido un script en .jitsi-meet/jibri/jibris.sh que automatiza este proceso. Puede correrse en cualquier ubicación.

Grabar automáticamente el audio

Convertir grabaciones en audio

Mediante la librería ffmepg en linux, añadiremos este script en finalize.sh:

#!/bin/bash

set -ec

LOG=“/config/logs/finalize-$(date +%Y-%m-%d).txt”

FOLDER=$1

ROOT=‘/config/recordings/’

KEY=${FOLDER##*/}

VIDEO_PATH=$(find $FOLDER -name ‘*.mp4’ | head -1)

VIDEO_NAME=$(basename $VIDEO_PATH)

AUDIO_NAME=${VIDEO_NAME%.*}

RUTA=‘/RutaNula’

find /config/logs -name finalize-*.txt -type f -mtime +7 -delete

[[ ! -f “$VIDEO_PATH” ]] && echo “$(date +%Y-%m-%d-%H.%M.%S) ERROR: No existe la grabación $VIDEO_PATH” >> $LOG && exit 1

mv $VIDEO_PATH $ROOT$VIDEO_NAME

ffmpeg -i $ROOT$VIDEO_NAME $ROOT$AUDIO_NAME.mp3

echo “$(date +%Y-%m-%d-%H.%M.%S) $VIDEO_NAME convertido a mp3” >> $LOG

if [[ “$AUDIO_NAME” == “_”“_”* ]]; then

EXP=$(cut -d - -f 1 <<< ${AUDIO_NAME})

EXP=$(cut -d _ -f 1 <<< ${EXP^^})

if [[ “$AUDIO_NAME” == “_”“_p”* ]]; then

RUTA=/mnt/periciales/INFORMES\ PERICIALES/ 

else

RUTA=/mnt/UPS/VDC/VDC\ ONLINE/VDC\  

fi

RUTA+=$(cut -d _ -f 2 <<< ${AUDIO_NAME^^})

RUTA+=/

RUTA+=${EXP}

echo “$(date +%Y-%m-%d-%H.%M.%S) Consulta PERICIALES” >> $LOG

fi

echo “$(date +%Y-%m-%d-%H.%M.%S) Comprobando si existe $RUTA” >> $LOG

if [ -d “${RUTA}” ]; then

mkdir -p “$RUTA”/GRABACIONES

RUTA+=/GRABACIONES/

echo “$(date +%Y-%m-%d-%H.%M.%S) Creada ruta $RUTA/GRABACIONES” >> $LOG

else

RUTA=“/mnt/recordings/”

echo “$(date +%Y-%m-%d-%H.%M.%S) No coincide con ninguna ruta. Se copia a $RUTA” >> $LOG

fi

mv $ROOT$AUDIO_NAME.mp3 “$RUTA” &>> $LOG

rm $FOLDER -rf

rm $ROOT$VIDEO_NAME -f

echo “$(date +%Y-%m-%d-%H.%M.%S) Orígenes eliminados” >> $LOG

exit 0

Añadir y eliminar usuarios

Añadir usuarios creadores de sala

Para conectarse al servidor de Jitsi acceder a la red corporativa o VPN.

Accedemos a la carpeta docker_jitisi_meet y al contenedor de Prosody y creamos usuario y contraseña mediante su comando:

docker compose exec prosody /bin/bash -c ‘prosodyctl –config /config/prosody.cfg.lua register myuser $XMPP_DOMAIN mypassword’

ADVERTENCIA: LAS CONTRASEÑAS NO PUEDEN INCLUIR EL CARÁCTER DE SALIDA &

NOTA: Se puede copiar el comando resultante para cada usuario escrito en la pestaña del generador en el excel JITIS.xls (cambiando previamente de directorio a docker_jitisi_meet, como se ha descrito anteriormente).

Eliminar un usuario

Los mismos pasos anteriores, pero el comando resultante es:

docker compose exec prosody /bin/bash -c ‘prosodyctl –config /config/prosody.cfg.lua unregister myuser’

Soporte e Implantación

¿Necesitas ayuda implementando esta solución?

El equipo de ingenieros de Kuretes puede encargarse de la configuración, migración y mantenimiento seguro de estos entornos en tu infraestructura empresarial.