Saltar al contenido principal

Control de licencias (License Server)

¿Para qué sirve?

Este capítulo es distinto a todos los anteriores: no es para quien usa el sistema, sino para quien lo entrega a sus clientes. El plugin se instala únicamente en el hosting del proveedor —nunca en el de un cliente— y desde ahí controla todas las instalaciones del framework repartidas por ahí:

  • Dar de alta un cliente nuevo.
  • Suspender o dar de baja su acceso al panel de forma remota.
  • Elegir qué plugins puede usar cada uno.
  • Publicar actualizaciones que solo descargan los clientes con licencia activa.

¿Cuándo lo necesitas?

Solo si eres el proveedor que distribuye instalaciones a múltiples clientes. Si eres un cliente final, este módulo no debería aparecer en tu CMS.

:::info Suspender no apaga el sitio del cliente Si suspendes una instalación, lo único que se bloquea es el panel de administración (el /cms). El sitio web público del cliente sigue funcionando con normalidad, así que sus visitantes nunca ven nada raro. :::

Los tres tipos de instalación

Toda instalación del framework sabe qué papel cumple. Ese papel se escribe una sola vez en cms/config.php (línea license.role) y decide qué puede hacer cada una:

TipoDónde viveQué puede hacer
server (tu servidor)Tu hosting, el del proveedor. Es una sola.Es la única que tiene el panel de licencias: da de alta clientes, los suspende y publica actualizaciones. También puede armar paquetes de cliente.
workstation (tu taller)Tu computador de trabajo, o los de tu equipo. Pueden ser varios.Ahí armas los sistemas de tus clientes y creas sus paquetes. No tiene panel de licencias ni guarda datos de tus clientes.
client (tu cliente)El hosting de cada cliente que atiendes.Solo usar el sistema. No ve el panel de licencias ni puede crear paquetes de cliente.

Cómo activarlo

El plugin solo se registra si su carpeta existe en la instalación. Los paquetes de cliente excluyen esa carpeta, así que un cliente ni siquiera lo ve en el selector. Además exige license.role = server para activarse.

Configuración inicial

En License Server → Configuración:

  1. Generar claves: se hace una sola vez, la primera vez que usas el plugin. Son las claves de firma con las que el servidor "sella" cada licencia.

Dar de alta un cliente, paso a paso

  1. Presiona Registrar instalación y escribe el nombre del cliente y el dominio autorizado (cafeteria-aroma.cl). El sistema genera la clave de licencia.
  2. Marca con las casillas qué plugins tendrá ese cliente. Puedes cambiarlo cuando quieras: en su próxima validación el cliente recibe la lista actualizada.
  3. Copia los tres valores que te muestra la pantalla al archivo cms/config.php del cliente:
    • Dirección del servidor de licencias (server_url).
    • Clave de licencia (key).
    • Clave pública de la flota (public_key).
  4. Listo. La instalación del cliente se valida sola una vez al día; no hay que hacer nada más.

Si empaquetas el sistema para ese cliente en modo cliente (ver Empaquetar y desplegar), esos tres valores los escribes una sola vez al crear el paquete y el sistema del cliente ya llega configurado.

:::warning Sin licencia válida, el panel del cliente no abre Una instalación entregada como client necesita su licencia para funcionar. Si la licencia falta, venció o la suspendiste, su panel muestra el aviso y no deja entrar. El sitio público del cliente sigue online y sus visitantes no notan nada.

Cuidado con el atajo que a alguien se le puede ocurrir: borrar los datos de licencia no libera el panel, lo deja bloqueado igual. La única llave es una licencia válida emitida por ti. :::

El panel de la flota

La tabla de instalaciones muestra de un vistazo cómo está cada cliente:

ClienteDominioEstadoVersiónÚltima validación
Cafetería Aromacafeteria-aroma.clActiva1.10.0hace 6 horas
Servicios de Aseo Brilloaseobrillo.clActiva1.10.0hace 1 día
Ferretería El Tornilloeltornillo.clActiva1.7.0hace 4 días
Vivero Las Rosasviverolasrosas.clSuspendida1.6.2hace 12 días

El semáforo de última validación

ColorQué significa
🟢 VerdeLa instalación validó hace menos de 2 días. Todo normal.
🟡 AmarilloSu última validación fue hace 2 a 7 días. Vale la pena vigilarla.
🔴 RojoLleva más de 7 días sin validar, o no ha validado nunca. Revisa la instalación del cliente.

La tabla también muestra la versión instalada de cada cliente —así sabes quién quedó atrasado— y te avisa si una licencia se está usando desde un dominio distinto al autorizado.

Publicar una actualización

  1. Antes de venir aquí, crea el archivo en Configuración → Empaquetado eligiendo Paquete de actualización. Es el único tipo que se puede publicar.
  2. Presiona Publicar versión e indica el número (1.10.1).
  3. Escribe la lista de cambios en palabras que tus clientes entiendan.
  4. Sube el .zip de la actualización. Si es muy grande, indica una ruta en el servidor donde ya lo dejaste.
  5. Guarda. El checksum de seguridad se calcula solo: sirve para que cada cliente compruebe que el paquete llegó íntegro.

Desde ese momento, los clientes con licencia activa ven la nueva versión en Configuración → Actualizaciones y pueden descargarla. Los suspendidos, no.

:::warning Solo se acepta el "Paquete de actualización" Al guardar, el sistema abre el .zip y comprueba de qué tipo es. Si le pasas un paquete propio o un paquete de cliente, lo rechaza — esos llevan base de datos y archivos, y publicarlos entregaría datos de otra instalación a cada cliente. Vuelve a empaquetar eligiendo Paquete de actualización. :::

Dos candados que el sistema pone por ti

Si intentas…El sistema lo impide, porque…
Restaurar un paquete de cliente sobre tu servidor de licenciasReemplazaría la base de datos entera, y un paquete de cliente no trae el panel de licencias: perderías el registro de todos tus clientes y sus claves.
Publicar como actualización un paquete que no es de actualizaciónUna actualización copia los archivos encima de cada cliente. Si llevara base de datos, cada cliente terminaría con datos de otra instalación.

Si el servidor de licencias se cae

Nada grave: cada instalación sigue funcionando 7 días por su cuenta (el período de gracia), mostrando un aviso discreto pero sin bloquearse. Te da tiempo de sobra para levantar el servidor sin que ningún cliente se entere.

Seguridad técnica

  • Estados firmados (RS256): cada validación devuelve un JWT firmado con RSA-2048. El cliente verifica con la clave pública de la flota. No se puede fabricar un estado "activo" sin la llave privada.
  • Estado atado a la clave local: el JWT queda vinculado a la clave local del cliente, así que copiar el JWT entre instalaciones no sirve.
  • Gracia offline de 7 días anclada al iat del servidor (mover el reloj local no revive un estado vencido).
  • Sin enumeración de claves: clave desconocida y dominio no autorizado devuelven la misma forma firmada (sta: invalid).

Se conecta con

  • core/license_client.php y core/license_engine.php — contrapartes en la instalación cliente (viajan con el framework, no son plugin).
  • cms/views/template.php, cms/ajax/session-init.php y plugins/plugins-loader.php — 3 puntos de enforcement independientes.

Preguntas frecuentes

¿Los clientes pueden eludir la validación? No. Sin la llave privada del proveedor no se puede fabricar un estado "activo". Y el estado queda atado a la clave local, así que no se puede copiar entre instalaciones.

¿Puedo revocar una licencia y volver a activarla? Sí, desde el panel. El cliente lo recibe en su próximo check-in.

¿Es necesario para vender el framework? No — pero es la forma profesional de mantener control comercial. Sin este plugin, no tienes forma de saber cuántos clientes lo usan ni de aplicar control post-venta.

¿Los clientes ven este plugin? No. Se excluye del paquete cliente. En su instalación no aparece en el menú ni en el selector de plugins.

¿Qué sigue?