Instalar C21 Live Control y C21 Live Encoder en un único host
Cuándo usar este despliegue
Un único host ejecuta C21 Live Control (un stack Docker compose) y C21 Live Encoder (el motor de codificación y su Apache, instalados en el host). Live Control gobierna el Encoder de su propio host desde la sección Devices, y puede gobernar además otros Encoders en otros hosts.
Este despliegue encaja cuando hay pocos hosts disponibles; por ejemplo, una VM cloud que tiene que aportar a la vez el plano de control y la primera capacidad de codificación. Si dispones de más de un host, el despliegue estándar — el Control y cada Encoder en su propio host — es más sencillo de operar: sigue Instalar C21 Live Control e Instalar C21 Live Encoder.
Cómo conviven los dos productos
Los dos productos sirven HTTPS en el puerto 443 por defecto, así que uno de ellos tiene que moverse. Todo lo demás convive sin cambios.
| Puerto | Live Control | Live Encoder | En un host compartido |
|---|---|---|---|
443/tcp | HTTPS — UI operador y API REST | HTTPS — API del Encoder y salidas | Conflicto. Live Control pasa a 9443. |
80/tcp | — | HTTP | Sin cambios. |
9080/tcp | HTTP (redirige a HTTPS) | — | Sin cambios. |
3100/tcp | Servidor MCP | — | Sin cambios. |
8484/tcp | — | Entrega de salidas | Sin cambios. |
Se mueve Live Control y no el Encoder porque:
- Live Control llega a cada Encoder registrado en
https://<ip-del-encoder>/— el formulario del Device pide una IP, no un puerto. - Los players, CDNs y orígenes que recogen la salida local del Encoder la piden al puerto
443.
Los dos productos comparten además el fingerprint del host: la licencia de ambos queda ligada al mismo valor.
Antes de empezar
- Un host que cumpla los prerrequisitos de los dos productos — consulta Preparar el host, Instalar C21 Live Control e Instalar C21 Live Encoder. Dimensiona CPU y RAM para la carga del Encoder más el stack del Control, que está limitado a 4 cores y 3 GiB de RAM.
- Ubuntu 24.04 LTS (lo exige el Encoder) con IP fija.
- El certificado de plataforma y su clave privada para el host, emitidos por Cires21 para la IP del host (cadena completa: leaf e intermedia). El certificado autofirmado que generan los instaladores no basta: Live Control tiene que poder validar el certificado del Encoder para registrarlo.
- La misma versión de destino para los dos productos, y 6.12.0 o posterior en todos los Encoders que gobierne este Control — locales y remotos.
Desde 6.12.0, Live Control entrega los logos y los ficheros de blackout al Encoder antes de cada orden. Los Encoders anteriores los descargan de
Live Control en el puerto
443, que en este host responde como el Encoder, así que en ellos fallan los logos y los blackouts. - Una ventana de mantenimiento — el instalador del Encoder actualiza el servidor SSH y corta las sesiones SSH entre uno y dos minutos.
nohup) para que el reinicio de SSH no aborte la instalación,
y sigue el progreso en el log.Pasos
1. Prepara el host
Aplica Preparar el host — DNS, NTP, swap y política de actualizaciones del SO. Para el firewall, sigue el paso 8 de esta
página en lugar de la sección ufw de aquella: en un host compartido los puertos del Control los publica Docker y necesitan otro juego de reglas.
2. Instala primero Live Control
Live Control va primero porque su instalador exige que el puerto 443 esté libre. Cuando pase a 9443 en el paso siguiente, el 443 queda libre para el Encoder.
sudo nohup bash -c "curl -fsSL https://get.cires21.com/livecontrol \
| bash -s -- --version <X.Y.Z> --yes; echo INSTALL_EXIT=\$?" > /tmp/lc-install.log 2>&1 &
tail -f /tmp/lc-install.log # Espera a INSTALL_EXIT=0
Guarda los datos de acceso y las credenciales iniciales que el instalador imprime al final del log.
admin conserva su contraseña inicial.
En un host expuesto a Internet, aplica la parte del Control del firewall (paso 8) justo después del paso 3, antes de seguir.3. Pasa el HTTPS de Live Control al puerto 9443
Crea un override de compose en el directorio de instalación de Live Control (/opt/livecontrol por defecto). El instalador solo regenera
docker-compose.yml, así que este fichero sobrevive a las actualizaciones.
sudo tee /opt/livecontrol/docker-compose.override.yml >/dev/null <<'EOF'
# Host compartido Control + Encoder: el Encoder sirve HTTPS en 443.
services:
livecontrol:
ports: !override
- "9080:80"
- "9443:443"
EOF
sudo systemctl restart livecontrol # Recrea los contenedores con los puertos nuevos
livecontrol restart no basta aquí: reinicia los contenedores sin aplicar el nuevo mapeo de puertos.
La etiqueta !override requiere Docker Compose 2.24.4 o posterior — compruébalo con docker compose version.
Verifica que Live Control responde en 9443 y que el 443 está libre:
curl -sk -o /dev/null -w "%{http_code}\n" https://127.0.0.1:9443/ # 200
sudo ss -ltnp | grep ':443 ' # Sin salida
A partir de aquí la UI operador está en https://<host>:9443/.
4. Instala Live Encoder
sudo nohup bash -c "curl -fsSL https://get.cires21.com/liveencoder \
| bash -s -- --version <X.Y.Z> --yes; echo INSTALL_EXIT=\$?" > /tmp/le-install.log 2>&1 &
tail -f /tmp/le-install.log # Espera a INSTALL_EXIT=0; SSH se corta 1–2 minutos durante la ejecución
En una VM cloud sin tarjetas de captura ni GPU, añade --skip-drivers a los flags del instalador. Live Control sigue en marcha durante la instalación del Encoder.
5. Instala las licencias
Los dos productos muestran el mismo fingerprint:
sudo livecontrol license info
sudo liveencoder license info
Envía ese único valor a tu representante de Cires21 junto con los slots de producto que cubre tu contrato. Cires21 devuelve un fichero de licencia por producto; instala cada uno con su propia CLI:
sudo livecontrol license install /ruta/a/licencia-control.txt
sudo livecontrol restart
sudo livecontrol license verify
sudo liveencoder license install /ruta/a/licencia-encoder.txt
sudo liveencoder restart
sudo liveencoder license verify
Consulta Licencias para ver los slots de cada producto.
6. Instala el certificado en los dos productos
Los dos productos presentan el mismo certificado: el Encoder a través de su Apache en 443, Live Control en 9443.
# Live Encoder
sudo install -m 644 <host>.crt /etc/ssl/certs/cert.pem
sudo install -m 600 <host>.key /etc/ssl/private/private-key.pem
sudo apache2ctl configtest && sudo systemctl reload apache2
# Live Control
sudo livecontrol ssl import <host>.crt <host>.key
Comprueba que Live Control valida el certificado del Encoder. Live Control llega al Encoder por la IP del host, igual que llegaría a un Encoder remoto:
sudo docker exec livecontrol curl -s -o /dev/null -w "%{ssl_verify_result}\n" https://<ip-del-host>/ # 0
Cualquier valor distinto de 0 indica que la cadena del certificado o la IP del certificado no coinciden, y el registro del Encoder del paso 9 fallará.
7. Primer acceso y rotación de la contraseña de admin
Abre https://<host>:9443/ y entra como admin con la contraseña inicial que imprimió el instalador. La UI te pide rotar la contraseña antes de
cualquier otra operación. Mientras no se rote, la API REST y el servidor MCP rechazan todas las peticiones hechas con la cuenta admin.
livecontrol security password reset no sustituye este paso: fija una contraseña nueva, pero deja la cuenta pendiente de rotación.
admin, usando la contraseña guardada en el
directorio de instalación (/opt/livecontrol por defecto). Tras la rotación, sustituye la contraseña de admin por la nueva en los ficheros .env y
.credentials de ese directorio, y recrea el servicio MCP con cd /opt/livecontrol && sudo docker compose up -d livecontrol-mcp.8. Configura el firewall
Los dos productos necesitan dos juegos de reglas distintos, porque sus puertos llegan al host por caminos distintos:
| Producto | Cómo se exponen sus puertos | Dónde filtrar |
|---|---|---|
| Live Encoder | Directamente en el host: 80, 443, 8484 y los puertos de ingesta de tus Channels (SRT, RTMP, UDP…). | El firewall del host (ufw o la cadena INPUT), como siempre. |
| Live Control | Publicados por Docker: 9443, 9080, 3100. | La cadena DOCKER-USER. Los puertos que publica Docker no pasan por la cadena INPUT, así que las reglas de ufw no se les aplican. |
Sin reglas en DOCKER-USER, los puertos del Control — servidor MCP incluido — quedan abiertos a cualquier dirección que llegue al host.
Encoder. Mantén la política de tu despliegue: permite los puertos de ingesta que usan tus fuentes y restringe 80 / 443 / 8484 a los clientes
que recogen la salida del Encoder y a cualquier otro Live Control que gobierne este Encoder. Si restringes el 443, repite después la comprobación del
certificado del paso 6 para confirmar que el Live Control local sigue llegando al Encoder.
Con una política que deniega por defecto, permite también el tráfico multicast propio del Encoder. El Encoder se lo envía a sí mismo y llega por la interfaz WAN con la IP del host como origen; si el firewall lo descarta, los Live streams en marcha se paran:
sudo ufw allow in on <interfaz-wan> from <ip-del-host> to 224.0.0.0/4 proto udp comment 'Encoder internal multicast'
El Live Control local se ejecuta en un contenedor, así que sus peticiones llegan al Encoder desde la red Docker de Live Control, no desde la IP del host.
Permite esa subred en el 443 — Live Control no usa el 80 ni el 8484 del Encoder:
sudo docker network inspect livecontrol_network -f '{{(index .IPAM.Config 0).Subnet}}' # Por ejemplo 172.18.0.0/16
sudo ufw allow from <subred-docker-control> to any port 443 proto tcp comment 'Encoder HTTPS desde el Control local'
Control. El script siguiente permite los orígenes indicados y descarta todo lo demás que entra por la interfaz WAN. Las respuestas a conexiones iniciadas desde el host y el tráfico entre contenedores no se ven afectados.
#!/usr/bin/env bash
# /usr/local/sbin/c21-docker-user-fw.sh
set -euo pipefail
WAN_IF="<interfaz-wan>" # Por ejemplo eth0
ALLOW_SRC="<ip-oficina>/32 <subred-vpn>" # Orígenes con acceso a 9443, 9080 y 3100
for ipt in iptables ip6tables; do # Docker también publica en IPv6
$ipt -N DOCKER-USER 2>/dev/null || true
$ipt -F DOCKER-USER
$ipt -A DOCKER-USER -i "$WAN_IF" -m conntrack --ctstate RELATED,ESTABLISHED -j RETURN
done
for src in $ALLOW_SRC; do
case "$src" in *:*) ipt=ip6tables ;; *) ipt=iptables ;; esac
$ipt -A DOCKER-USER -i "$WAN_IF" -s "$src" -j RETURN
done
for ipt in iptables ip6tables; do
$ipt -A DOCKER-USER -i "$WAN_IF" -j DROP
$ipt -A DOCKER-USER -j RETURN
done
Las reglas de iptables solo viven en memoria y se pierden al reiniciar el host, así que aplica el script desde una unit de systemd ligada a Docker:
se ejecuta cada vez que arranca Docker, también tras un reinicio y tras una actualización de Live Control.
# /etc/systemd/system/c21-docker-user-fw.service
[Unit]
Description=DOCKER-USER rules for C21 Live Control
After=docker.service
PartOf=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/c21-docker-user-fw.sh
[Install]
WantedBy=docker.service
sudo chmod 755 /usr/local/sbin/c21-docker-user-fw.sh
sudo systemctl daemon-reload
sudo systemctl enable --now c21-docker-user-fw.service
sudo iptables -S DOCKER-USER
Desde una dirección fuera de la lista permitida, los puertos 9443, 9080 y 3100 deben aparecer cerrados.
9. Registra el Encoder en Live Control
En la UI de Live Control abre Devices → Add device y registra el Encoder de este host como registrarías cualquier otro — consulta Instalar C21 Live Encoder, paso 4:
- Server IP — la IP del host, la misma para la que se emitió el certificado. Sin puerto: Live Control llega al Encoder en el
443. - Register username / Register password — las credenciales
admindel Encoder (sudo liveencoder credentials show/credentials reset).
La fila del Device debe mostrar registration_status: registered. Los demás Encoders, en otros hosts, se registran de la misma forma.
10. Verifica
curl -sk -o /dev/null -w "%{http_code}\n" https://127.0.0.1:9443/ # UI de Live Control: 200
sudo livecontrol status # Servicios de Live Control sanos
sudo liveencoder status # Servicio del Encoder en marcha
sudo iptables -S DOCKER-USER # Firewall del Control aplicado
Después lanza un Live stream de prueba en el Encoder local y comprueba que su salida se sirve desde https://<host>/.
Actualizaciones en un host compartido
Actualiza los dos productos en la misma ventana de mantenimiento, con la operación parada:
| Actualización | Efecto en el host compartido |
|---|---|
| Live Control | La actualización reconfigura y reinicia el servicio Docker. El servicio del Encoder depende de Docker, así que se para y arranca con él: los Live streams locales se cortan entre uno y dos minutos y se recuperan solos. El override de puertos y las reglas de DOCKER-USER se mantienen. |
| Live Encoder | Live Control no se ve afectado. Las sesiones SSH pueden cortarse mientras se actualiza el servidor SSH. |
Sigue el orden recomendado en Actualizaciones — primero el Encoder, después Live Control — y tras actualizar Live Control comprueba:
curl -sk -o /dev/null -w "%{http_code}\n" https://127.0.0.1:9443/ # Live Control sigue en 9443
sudo liveencoder status # Encoder de vuelta
sudo iptables -S DOCKER-USER # Reglas de firewall en su sitio
Enlaces relacionados
- Preparar el host — DNS, NTP, swap y política de actualizaciones del SO.
- Instalar C21 Live Control — flags del instalador, CLI, backups, SSL.
- Instalar C21 Live Encoder — flags del instalador, drivers de hardware, CLI.
- Actualizaciones — flujo de actualización, rollback y compatibilidad de versiones.
- Licencias — catálogo de licencias y formato del fichero.
- Devices — la sección donde aparecen los Encoders registrados.