
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=correo@dominio.com 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’
¿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.