Saltar al contenido Saltar a la navegación

Casiopea:Configuración del servidor

Stella Nova ▸ Migración ▸ Configuraciones

Hola Felipe: esta página reúne las acciones de servidor que la wiki de producción necesita para comportarse como el entorno de desarrollo del skin Stella Nova. El CSS y el JS del skin viajan dentro del repositorio y se despliegan solos (pull diario desde GitHub); aquí va solo lo que no puede ir en el repo: variables de LocalSettings.php u otros archivos del servidor, a los que el equipo del skin no tiene acceso.

Se organiza en tres partes: los ajustes de configuración (qué tocar para que una extensión se integre o se comporte igual que en desarrollo), las desinstalaciones seguras (extensiones que conviene retirar) y lo que funciona en desarrollo, no en producción (paridad por verificar).

Ajustes de configuración

Dos tipos de ajuste:

  • Integración con el skin — la extensión renderiza algo que Stella Nova reestiliza; sin el ajuste, el resultado choca con el sistema visual (p. ej. Mermaid).
  • Paridad de configuración — la extensión es agnóstica al skin, pero su comportamiento en desarrollo depende de una config que producción debe igualar (p. ej. WikiSEO).
Extensión Configuración Descripción
Mermaid
versión 6.0.2
Archivo: LocalSettings.php
$wgmermaidgDefaultTheme = 'neutral';
Integración con el skin. Mermaid renderiza cada diagrama como SVG en el cliente, una sola vez, con un tema fijo. Stella Nova lo integra en tres capas, de las cuales solo esta es de servidor:
  1. Servidor (este ajuste): el tema neutral entrega un lienzo gris, sin color horneado en el SVG — el mejor punto de partida para que el skin lo recoloree. El valor por defecto de la extensión es forest (verdes), que choca con la paleta.
  2. Skin (automático) — color: la hoja skinStyles/mermaid.css recolorea el SVG con una paleta intermedia --mm-* derivada de la escala de papel/tinta del skin y envuelta en light-dark(); el diagrama acompaña el tema claro/oscuro sin re-renderizar.
  3. Skin (automático) — tipografía: un trap en <head> envuelve mermaid.initialize y fuerza fontFamily (IBM Plex Sans) + fontSize (14px) en el render, para que Mermaid dimensione las cajas midiendo con nuestra fuente (si no, el texto no calza). La CSS solo refuerza la familia y aplica font-stretch: 85% (condensa dentro de la caja ya medida, nunca desborda).

Las capas 2 y 3 viajan con el skin; basta con que el servidor fije el tema neutro. Prioridad: recomendado, no bloqueante — el CSS gana de todos modos, pero sin este ajuste los pocos elementos que el CSS no recolorea quedan verdosos. Verificación: en una página con diagrama, el atributo data-mermaid del HTML debe contener "theme":"neutral".

WikiSEO
versión 2.7.0
Archivo: LocalSettings.php
wfLoadExtension( 'WikiSEO' );
$wgMetadataGenerators = [
	'OpenGraph',
	'SchemaOrg',
	'Citation',
	'DublinCore',
];
Paridad de configuración (agnóstica al skin). WikiSEO inyecta metadatos en el <head> (Open Graph, Schema.org, Citation y Dublin Core) para compartir enlaces y para SEO; no toca el render ni depende de Stella Nova. Se documenta aquí solo para que producción iguale el comportamiento de desarrollo.

La clave está en $wgMetadataGenerators. Por defecto la extensión emite OpenGraph + Twitter + SchemaOrg; nosotros quitamos Twitter y añadimos Citation y DublinCore. Por qué quitar Twitter: el generador solo emitía <meta name="twitter:card"> (sin twitter:title/description/image ni un twitter:site handle), y X/Twitter cae a las etiquetas Open Graph para componer la tarjeta — así que no aportaba nada que OpenGraph no cubra ya, y la e[ad] no opera una cuenta de X que lo justifique. Citation y DublinCore son metadatos bibliográficos/académicos, pertinentes para una wiki de investigación. Nota: la descripción del propio extension.json 2.7.0 está desactualizada y no lista DublinCore, pero el generador sí existe (includes/Generator/Plugins/DublinCore.php) y es un valor válido. Verificación: el <head> de cualquier artículo debe traer etiquetas <meta property="og:…"> (de ahí se arman las tarjetas en redes y el SEO).

3DAlloy
versión 1.0
Archivo: LocalSettings.php, después de wfLoadExtension( '3DAlloy' );. Verificado en local (MW 1.43.6, PHP 8.4).

1. Formatos de subida (si aún no están):

$wgFileExtensions = array_values( array_unique( array_merge(
	$wgFileExtensions ?? [],
	[ '3dj', '3djson', 'three', 'buff', 'buffjson', 'obj', 'stl', 'stlb', 'json' ]
) ) );

2. Remapeo MIME por extensión (el arreglo de fondo):

// Fuerza obj/stl al MIME que tiene MediaHandler en 3DAlloy; MediaWiki
// los detecta como text/plain y sin esto el visor 3D no se activa.
$wgHooks['MimeMagicImproveFromExtension'][] = static function ( $analyzer, $ext, &$mime ) {
	if ( $ext === 'obj' ) {
		$mime = 'application/obj';
	} elseif ( $ext === 'stl' || $ext === 'stlb' ) {
		$mime = 'application/stl';
	}
};
Reconocimiento de tipo. 3DAlloy registra MediaHandler para application/json, application/obj y application/stl: el visor solo se activa si el archivo subido queda guardado con uno de esos MIME. La familia JSON (.json/.3dj/.3djson/.three/.buff/.buffjson) ya funciona porque el propio hook de la extensión la remapea a application/json; pero .obj/.stl no: al ser texto ASCII, MediaWiki los deja en text/plain, sin MediaHandler, y se muestran como archivo de texto (bug secundario del upstream: para stl registra application/sla, que el handler no espera). El hook de arriba los fuerza al MIME correcto.

Por qué NO se editan mime.types / mime.info: las instrucciones antiguas de 3DAlloy decían tocar esos archivos del núcleo, pero en MW 1.43 ya no existen — el mapa MIME está compilado en includes/libs/mime/MimeMap.php y $wgMimeTypeFile / $wgMimeInfoFile valen 'internal'. El hook MimeMagicImproveFromExtension es la vía 1.43-correcta: es justo el punto donde MediaWiki decide el MIME definitivo a partir de la extensión, así que la subida tampoco se rechaza por mismatch (no hace falta tocar $wgVerifyMimeType ni $wgTrustedMediaFormats) y sobrevive a los upgrades.

Dos vías de incrustación (solo una depende de este ajuste): la etiqueta <3d file="modelo.obj" width="800" height="500"></3d> y la función {{#3d:modelo.obj}} funcionan sin el ajuste (arman el <canvas class="threed-container"> desde la URL); la incrustación en línea [[Archivo:modelo.obj]] sí lo requiere.

Importante: los archivos ya subidos como text/plain conservan ese MIME en la base de datos; tras aplicar el hook hay que re-subirlos o refrescar su metadata con maintenance/refreshImageMetadata.php. Rendimiento: three.js descarga y procesa la malla completa en el cliente con CanvasRenderer; mantener los modelos livianos (pocos MB) — uno de decenas de MB deja el visor en blanco o cuelga la pestaña. Verificación: php8.4 -l LocalSettings.php sin errores; subir un .obj y un .stl ASCII y abrir su página de archivo → debe verse el visor (no el texto); en la descripción del archivo el MIME debe ser application/obj / application/stl, no text/plain.

Desinstalaciones seguras

Extensiones que conviene retirar de producción: aportaban poco o nada y/o son incompatibles con el stack actual (PHP 8.4, sistema de tokens del skin). Misma lógica de tabla: la columna Configuración indica cómo retirarlas; la Descripción, por qué es seguro.

Extensión Configuración Descripción
Mpdf
(descartada)
Archivo: LocalSettings.php — quitar la carga:
# borrar esta línea:
wfLoadExtension( 'Mpdf' );

Opcional: borrar el árbol extensions/Mpdf/.

Compatibilidad de servidor / PHP → se resuelve descartándola. La extensión Mpdf 1.1 fija mpdf/mpdf: ^6.1; mpdf 6.1.3 (2016) usa la sintaxis de offset con llaves ($str{0}) que PHP eliminó en 8.0, así que bajo PHP 8.4 ?action=mpdf arroja un ParseError fatal (mpdf.php:2349). Subir la librería a mpdf 8.x arregla ese fatal, pero no el problema de fondo: el motor CSS de mpdf (~2010) no entiende el sistema de tokens del skin (var() / light-dark()) ni resuelve los <link> relativos de ResourceLoader → el PDF sale sin estilos (contraproducente). Como la extensión aportaba solo action=mpdf, se descarta (igual que GraphViz y PdfBook). La exportación a PDF la cubre el skin con la previsualización Vivliostyle (honra print.css): cualquier página puede llevar un botón <span class="sn-print-pdf">Exportar PDF</span> (o el viejo enlace action=mpdf, que el skin intercepta) → maqueta paginada → "Guardar como PDF" del navegador. Acción para producción: quitar wfLoadExtension( 'Mpdf' ) (opcional: borrar la carpeta). Verificación: ?action=mpdf → 404 (acción desconocida) y Mpdf ya no aparece en Special:Versión.
MinervaNeue
(skin huérfano)
Archivo: LocalSettings.php — quitar la carga del skin:
# borrar esta línea:
wfLoadSkin( 'MinervaNeue' );
Skin móvil sin su motor. MinervaNeue es el skin que la extensión MobileFrontend activa en dispositivos móviles; por sí solo no hace nada. Producción no tiene MobileFrontend instalado (verificado vía el API siteinfo), así que Minerva nunca se sirve: es peso muerto en el arranque de ResourceLoader y una opción inútil en las preferencias de apariencia. El móvil ya lo cubre Stella Nova (responsive). Verificación: tras quitarlo, Minerva desaparece de Special:Versión y de las preferencias de apariencia; la navegación en móvil no cambia.
PdfBook
versión 2.0.5
Archivo: LocalSettings.php — quitar la carga:
# borrar esta línea:
wfLoadExtension( 'PdfBook' );
Exportador PDF redundante. PdfBook añade action=pdfbook (volcar una página o una colección a un PDF). Es un segundo camino de PDF del lado servidor, redundante con la previsualización Vivliostyle del skin — que además respeta print.css y el tema claro/oscuro. La búsqueda de "pdfbook" en el contenido da 0 resultados y no hay rastro de uso. Al ser una action (no deja markup en las páginas), retirarla solo podría romper enlaces action=pdfbook directos, de los que no hay evidencia. Verificación: ?action=pdfbook → 404 y PdfBook fuera de Special:Versión.

Candidatas pendientes de verificación

Estas podrían ser seguras, pero no se pueden confirmar desde el API (la wiki no tiene CirrusSearch y son ~610 000 archivos): requieren un grep en el servidor. Si el conteo da 0, pasan a la tabla de arriba.

  • 3DAlloy (visor 3D) — en uso, no retirar. Se está adoptando para incrustar mallas 3D nativas (modelos .obj/.stl). Su ajuste de servidor está en Ajustes de configuración (remapeo MIME). Antes se consideró candidata a retiro por no tener modelos subidos; ya no aplica.
  • Math — ¿se usa la etiqueta <math>? php maintenance/run.php dumpBackup --current | grep -c '<math' → 0 = segura.
  • EasyTimeline — ¿se usa <timeline>? … | grep -c '<timeline' → 0 = segura; además libera dependencias de sistema (ploticus + perl).
  • Skin Citizen — ¿alguien lo eligió en preferencias? SELECT COUNT(*) FROM user_properties WHERE up_property='skin' AND up_value='citizen'; → 0 = nadie lo usa (riesgo bajo de todos modos: solo afecta a quien lo haya seteado).

No retirar todavía: Chameleon (y Bootstrap, su framework CSS) es el skin por defecto actual de producción — verificado vía siteinfo (chameleon [default]). Solo se puede retirar después de poner Stella Nova como skin por defecto; hacerlo antes dejaría la wiki sin skin default.

Funciona en desarrollo, no en producción

Extensiones que en el entorno de desarrollo funcionan pero en producción no, sin diferencia de configuración ni de código detectada. Se expone la configuración local exacta y se pide verificar la paridad en el servidor y/o descartar una colisión con otra extensión, gadget o caché.

Extensión Configuración local Qué verificar en producción
InlineComments
versión 1.0
Archivo: LocalSettings.php — solo la carga, sin variables (todo por defecto):
wfLoadExtension( 'InlineComments' );

Defaults que aplica la extensión (de su extension.json):

  • $wgInlineCommentsNamespaces = $wgContentNamespaces → [0] (namespace principal)
  • $wgInlineCommentsAutoDeleteComments = true
  • Permisos: user → inlinecomments-add; * → inlinecomments-view; sysop → inlinecomments-edit-all
  • Sin tabla SQL: guarda en un slot MCR annotation+json
Síntoma: el ícono "añadir comentario" no aparece (logueado, ?useskin=stellanova, seleccionando texto en un artículo del namespace principal), pese a que producción (Stella Nova v0.6.6, hash 91b9138) corre el mismo código de InlineComments y la misma extensión (v1.0) que desarrollo (v0.6.7, hash e2f15f4), donde sí funciona. Las dos versiones del skin solo difieren en CSS de rótulos de Mermaid, ajeno a esta extensión.

Ya verificado por API (coincide con desarrollo): extensión cargada (v1.0) · content namespaces = [0].

Falta verificar en el servidor / sesión:

  1. Que el $wgGroupPermissions de producción no revoque inlinecomments-add al grupo user.
  2. Que $wgInlineCommentsNamespaces no esté sobrescrito en LocalSettings.php a algo distinto de los content namespaces.
  3. Colisión JS (la sospecha principal): en la consola del navegador (logueado, en un artículo), mw.loader.getState('ext.inlineComments.makeComment') debe dar 'ready'. Si da 'ready' y aun así no hay ícono, revisar errores en rojo de MediaWiki:Common.js, gadgets o Widgets que puedan frenar makeComment.js antes de que corra. Si da null/'registered', el módulo ni se pidió (gating del servidor).
  4. Caché HTML (Varnish / CDN / $wgUseFileCache): que no se sirva HTML cacheado sin el módulo por-usuario.
Navegación

← Fase 15: Riesgos colaterales