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.

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.

Donde la carpeta está, la sección aparece sola en el menú y vuelve sola si alguna vez falta —incluso después de un restablecimiento de fábrica—. No hay que agregarla a mano: a diferencia de los demás módulos, éste no es algo que se encienda por sitio, es tu panel de proveedor.

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.
La clave privada es el activo más sensible que tienes

Con ella se puede firmar cualquier licencia de cualquier cliente. Por eso:

  • Se genera fuera de la carpeta del proyecto, donde el servidor web no puede entregarla aunque alguien adivine la dirección. Si tu hosting no permite escribir ahí, el sistema la deja dentro del proyecto y te lo advierte en pantalla: en ese caso conviene moverla y apuntar private_key_path en el config.php del plugin.
  • Nunca viaja en un paquete. Ni en los de cliente ni en los de actualización: el empaquetado excluye todo archivo de clave.
  • Generarla queda registrado en el historial de actividad.

Si ya tenías claves generadas antes, se siguen usando donde están — cambiarlas invalidaría las licencias de todos tus clientes.

Quién entra al panel de la flota

Solo cuentas superadministrador y administrador. No se puede delegar por roles: quien entra puede emitir, suspender y terminar licencias de cualquier cliente.

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 cada hora; 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.

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.

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.

El taller de clientes​

En la misma pantalla, bajo la lista de instalaciones, está el Taller de clientes: sirve para traer la instalación completa de un cliente a este equipo —su base, sus imágenes y las páginas de su sitio—, trabajarla y devolverle el trabajo como una versión nueva.

Es sólo para superadmin, admite un cliente a la vez, y exige que el cliente esté en la misma versión que este equipo: una actualización sólo viaja hacia adelante, así que trabajar sobre una copia atrasada produce un paquete que su instalación no puede aplicar bien.

Al cerrar el taller sube la versión, arma el paquete de actualización y —si lo pides— lo publica aquí mismo, en Actualizaciones publicadas.

El recorrido completo, con lo que se trae y lo que nunca vuelve, está en Traer un cliente a tu equipo.

Reemplaza este equipo, no lo mezcla

Traer un cliente cambia la base de datos de esta máquina por la suya. Por eso el taller respalda primero, y por eso el respaldo es la única forma de volver a tu propio sitio.

Dos candados que el sistema pone por ti​

Si intentas…El sistema lo impide, porque…
Restaurar un paquete de cliente sobre tu servidor de licenciasTu servidor quedaría con los datos de ese cliente —sus usuarios, su configuración y su sitio— en lugar de los propios. El registro de la flota se conserva siempre: ninguna restauración se lo lleva, venga el paquete de donde venga. Si lo que quieres es trabajar su instalación, usa el Taller de clientes.
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.
Restablecer de fábrica tu propia instalaciónEl restablecimiento deja el sitio como recién instalado, pero no toca el registro de la flota ni saca esta sección del menú: no son datos de este sitio, y ningún cliente sabría reconstruirlos. Todo lo demás sí se borra, así que igual haz tu respaldo.
Vaciar los datos del módulo desde Configuración → MódulosEste módulo ni siquiera aparece en esa lista, por lo mismo.

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.

Cuando una instalación valida desde otro dominio​

Si el cliente mueve su sistema a otra dirección, la validación deja de calzar y la instalación queda marcada con «dominio distinto» en la lista.

Abre su Detalle: bajo el dominio autorizado verás desde cuál validó de verdad. Si el cambio es legítimo, corrige el dominio autorizado y pulsa Ya lo revisé para quitar la marca.

Quitar la marca no autoriza nada

No cambia el dominio ni le da permiso a nadie: sólo deja de avisar por ese cambio. Si la instalación vuelve a validar desde una dirección que no calza, la marca aparece de nuevo. Eso es lo que se gana: antes la marca se encendía sola y no se apagaba nunca, así que un cambio ya revisado y uno nuevo se veían igual.

¿Qué sigue?​