Manual:Familia de wikis
Una familia de wikis es una colección de dos o más wikis que se ejecutan en el mismo servidor y comparten un conjunto común de recursos de la instalación padre, aunque cada uno de ellos permanece por otra parte independiente. Esta configuración es una alternativa a la ejecución de instalaciones completamente separadas de MediaWiki. Puede ser la mejor opción si el administrador del sitio desea reducir la cantidad de trabajo dedicada a la administración de varios wiki o reducir el uso de inodos. Por esta razón algunos servicios de alojamiento de wikis optan por el modelo de la familia de wikis.
La mejor implementación conocida de una familia de wikis es la granja de wikis, aunque también existen otros enfoques. En WikiApiary está disponible una lista de granjas de wikis conocidas.
A continuación hay instrucciones acerca de cómo configurar MediaWiki para alojar más de un wiki.
Métodos
Granja de wikis
Los siguientes pasos son para ejecutar varios wikis con la misma versión de MediaWiki:
- Instala el primer wiki como de costumbre. Para más información, consulta Manual:Guía de instalación .
- Activa tu servidor web para que comparta tu instalación MediaWiki con todos los wikis. Para varios (sub)dominios, configura tu servidor web para que acepte conexiones desde todos los dominios pertinentes. Para varios subdirectorios, puedes emplear reglas de reescritura, alias o enlaces simbólicos.
- Añade código al principio de
LocalSettings.php
para detectar el wiki actual. Ten en cuenta que, si el argumento de--wiki
contiene un guion, el argumento se dividirá en el guion y los dos valores resultantes se asignarán respectivamente aMW_DB
yMW_PREFIX
. Para los wikis por nombre de dominio:$wikis = [ 'example.org' => 'examplewiki', 'one.example.org' => 'onewiki', ]; if ( defined( 'MW_DB' ) ) { // Inicializado automáticamente a partir de la opción --wiki para scripts de mantenimiento $wikiID = MW_DB; } else { // Utiliza la variable de entorno MW_DB o mapea el nombre del dominio $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null; if ( !$wikiID ) { die( 'Unknown wiki.' ); } } $wgLocalDatabases = $wgConf->wikis = array_values( $wikis ); $wgDBname = $wikiID; $wgDBuser = 'mediawiki';
- Configura los parámetros que deben diferir en cada wiki. Por ejemplo:
$wgCacheDirectory = "/tmp/mediawiki_cache/$wgDBname"; $wgUploadDirectory = "$IP/images/$wgDBname"; $wgUploadPath = "/w/images/$wgDBname";
- Configura las redefiniciones a nivel de wiki. Esto debe incluir al menos
$wgServer
y$wgArticlePath
.Se puede hacer a partir de un archivo separado, por ejemplo:$wgConf->settings = [ 'wgServer' => [ 'examplewiki' => 'https://example.org', 'onewiki' => 'https://one.example.org', ], 'wgArticlePath' => [ 'default' => '/wiki', ], 'wgSitename' => [ 'default' => 'Example', 'onewiki' => 'One', ], 'wgLogo' => [ 'default' => '/images/examplewiki/Example_logo.png', ], 'wgLanguageCode' => [ 'default' => 'en', 'onewiki' => 'pt', ], ]; extract( $wgConf->getAll( $wgDBname ) );
# LocalSettings.php $wgConf->settings = require __DIR__ . '/LocalSettings_overrides.php'; # LocalSettings_overrides.php <?php return [ 'wgServer' => .., .., ];
Para añadir un nuevo wiki a la familia:
- Crea su base de datos y añade sus parámetros en primer lugar con
--wiki=mywiki
si ejecutasinstall.php
desde la línea de comandos. - Ejecuta
php maintenance/run.php update --wiki=mywiki
Archivos de configuración separados
Este enfoque es para operar wikis completamente independientes, pero con el mismo servidor web y el mismo código fuente de MediaWiki.
- Instala el primer wiki de forma normal, desde la web o desde el instalador CLI, que configurará tu base de datos y generará un archivo LocalSettings.php .
- Tras la instalación, renombra el archivo generado
LocalSettings.php
para que incluya el identificador del wiki (por ejemplo, el nombre de la base de datos), como enLocalSettings_mywiki.php
. - Repite los pasos anteriores 1 y 2 para cada wiki que desees crear.
- Crea un nuevo archivo
LocalSettings.php
que cargue el correcto. Al igual que en el ejemplo anterior de la granja de wikis, un argumento--wiki
que contenga un guion se dividirá en el guion en dos valores que se asignarán respectivamente aMW_DB
yMW_PREFIX
.Si tus wikis están en el mismo dominio pero con distintas rutas (por ejemplo,<?php $wikis = [ 'example.org' => 'examplewiki', 'one.example.org' => 'onewiki', ]; if ( defined( 'MW_DB' ) ) { // Inicializado automáticamente a partir de la opción --wiki para scripts de mantenimiento $wikiID = MW_DB; } else { // Utiliza la variable de entorno MW_DB o mapea el nombre del dominio $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null; } if ( $wikiID ) { require_once "LocalSettings_$wikiID.php"; } else { die( 'Unknown wiki.' ); } // Añade bajo esta línea cualquier parámetro que deba aplicarse a todos los wikis // -------
example.org/wiki1
,example.org/wiki2
, etc.), puedes utilizar algo así:<?php $wikis = [ 'example' => 'examplewiki', 'w_example' => 'examplewiki', 'one' => 'onewiki', 'w_one' => 'onewiki', ]; if ( defined( 'MW_DB' ) ) { // Inicializado automáticamente a partir de la opción --wiki para scripts de mantenimiento $wikiID = MW_DB; } else { $wikiID = $_SERVER['MW_DB'] ?? $wikis[ explode( '/', $_SERVER['REQUEST_URI'], 3 )[1] ] ?? null; } if ( $wikiID ) { require_once "LocalSettings_$wikiID.php"; } else { die( 'Unknown wiki.' ); }
Sitios de estilo Drupal
Esta configuración tiene la ventaja de ser completamente transparente para los usuarios y razonablemente segura en lo que concierne el directorio de imágenes.
- Crea un directorio base para que contenga todos los archivos de MediaWiki, por ejemplo,
mkdir /home/web/mediawiki
. - Instala MediaWiki y las herramientas adicionales de la forma habitual a un subdirectorio que indique la versión (por ejemplo,
/home/web/mediawiki/mediawiki-1.10.0
). - Enlaza el directorio que indica la versión a un directorio de código. Por ejemplo,
ln -s /home/web/mediawiki/mediawiki-1.10.0 /home/web/mediawiki/code
- Crea un directorio sites para que contenga las imágenes y configuraciones:
mkdir /home/web/mediawiki/sites
- Configura el wiki de la forma habitual desde el directorio /code.
- Tras haber realizado con éxito la instalación, mueve
LocalSettings.php
a un directorio de sitios que será un resultado cuando se verifique el sitio. Por ejemplo, para capturar http://example.com/mywiki, habría que crear el directorio example.com.mywiki; por ejemplo,mkdir /home/web/mediawiki/sites/example.com.mywiki
. Consulta el archivosettings.php
de Drupal para más información al respecto. - Si tienes pensar utilizar archivos multimedia, crea un directorio images en el directorio de tu sitio; por ejemplo,
mkdir /home/web/mediawiki/sites/example.com.wiki/images
. Habilita la escritura según sea necesario. - Ubica el archivo
LocalSettings.php
de estilo Drupal en tu directorio principal:cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
- Modifica el
LocalSettings.php
de cada subsitio para apuntar a las rutas correctas:- En primer lugar, comenta el código relacionado con
$IP
(líneas 16 a 20 en 1.15.3), ya que esto está inicializado al directorio code enindex.php
. - A continuación, introduce las dos líneas siguientes para asegurar que los archivos de imágenes son accesibles, por ejemplo,
$wgUploadDirectory = "/home/web/mediawiki/sites/wiki.example.com/images";
y$wgUploadPath = "/images";
. Esto se debe incluir en algún lugar después de la llamada aDefaultSettings.php
(línea 25 en 1.15.3), ya que de lo contrario se restablecerán las variables. - Haz más cambios según sea necesario.
- En primer lugar, comenta el código relacionado con
- Prepara tu instalación Apache 2. Sitio de ejemplo: wiki.example.com
- Crea un enlace al directorio code en caso necesario, por ejemplo,
ln -s /home/web/mediawiki/code /home/web/wiki.example.com
- Crea una configuración apropiada de host virtual:
<VirtualHost *:80> ServerAdmin me@example.com DocumentRoot /home/web/wiki.example.com ServerName wiki.example.com CustomLog /var/log/apache2/wiki.mysite.log common # Alias para poder acceder al sitio Alias /mediawiki/code /home/web/mediawiki/code # Alias para que el wiki pueda acceder a las imágenes Alias /images /home/web/mediawiki/sites/wiki.example.com/images # Si deseas proteger tu sitio con una contraseña # <Directory /home/web/wiki.example.com> # AuthType Basic # AuthName "Mi wiki protegido" # AuthUserFile /etc/apache2/htpasswd/users-mywiki # require valid-user # </Directory> </VirtualHost>
- Crea un enlace al directorio code en caso necesario, por ejemplo,
- 11. Si estás configurando los sitios en local, actualiza tu archivo
hosts
con los nombres de los sitios. Ahora el sitio debería funcionar.
En mi caso, hice otra copia del código con la que instalar y actualizar mi LocalSettings.php
y bases de datos.
Ten en cuenta que $_SERVER['HTTP_HOST']
en el código del acompañante Drupal no está definido cuando se ejecutan scripts de mantenimiento desde la línea de comandos, por lo que esta solución no permite el uso de scripts de mantenimiento si alguna modificación.
Método de estilo Drupal modificado para Ubuntu
Un método simplificado para varios wikis y varios subwikis (o subwikis anidados) en Ubuntu/Kubuntu en gran medida basado en el anterior se puede encontrar en:
Cómo gestionar granjas de wikis en scripts de mantenimiento
Los scripts de mantenimiento de MediaWiki (por ejemplo, update.php) aceptan un argumento --wiki
que se pasa a tu archivo LocalSettings.php en forma de las constantes MW_DB
, MW_PREFIX
y MW_WIKI_NAME
.
El valor entero del argumento --wiki
es el valor de MW_WIKI_NAME
.
--wiki
, entonces la parte que va antes se asigna a MW_DB
, y la parte que va después se asigna a MW_PREFIX
.Esta tabla muestra el funcionamiento:
--wiki |
MW_WIKI_NAME |
MW_DB |
MW_PREFIX
|
---|---|---|---|
enwiki | enwiki | enwiki | empty |
enwiki-one | enwiki-one | enwiki | one |
enwiki-one-two | enwiki-one-two | enwiki | one-two |
Dado que no hay argumento --wiki
en las solicitudes web, deben gestionarse de otra forma.
Por lo general, se emplea el nombre de dominio y/o la ruta de la URL para seleccionar un wiki.
Consejos para compartir recursos entre wikis
Puedes utilizar $wgForeignFileRepos
para compartir archivos multimedia subidos entre varios wikis. Esto se parece a Wikimedia Commons para Wikipedia.
Por ejemplo:
- en.example.org - inglés
- fr.example.org - francés
- de.example.org - alemán
- pool.example.org - Archivos multimedia compartidos con todos los wikis.
commons
para [[commons
|Wikimedia Commons]].
Evita asimismo utilizar el nombre «media» (por ejemplo, media.example.org), ya que puede causar un conflicto entre tus enlaces interwiki y el espacio de nombres interno Media:
para acceder a archivos multimedia locales, como [[media:File.png]].
Tablas compartidas de la base de datos
Considera utilizar una base de datos compartida para las cuentas de usuario. Consulta Manual:Shared database para obtener instrucciones para configurar tablas compartidas de la base de datos.
Interwiki
Puedes crear enlaces interwiki entre todos los wikis mediante Extensión:Interwiki . Si los wikis son ediciones en distintos idiomas, se recomienda nombrar el prefijo interwiki según el código exacto de cada idioma. Por ejemplo, «de» para el wiki en alemán de tu familia. De esta manera, podrás conectar páginas sobre el mismo tema mediante enlaces idiomáticos.
Si añades [[de:Hauptseite]] en tu página «Main Page» en inglés, se creará un enlace «Deutsch» en le barra lateral de idiomas. Para más información, véase Help:Interwiki linking .
Si tienes un wiki central para los archivos, crea también un prefijo para el mismo.
Por ejemplo, pool
para https://pool.example.org/wiki/$1, y habilita la casilla de verificación «Forward» para reconocerlo como un wiki local de la misma familia.
Subir archivos
Asegúrate de que la carpeta «images» del wiki banco de recursos (pool) tiene habilitada la escritura.
Es útil cambiar el enlace «Subir archivo» de los wikis en los distintos idiomas para que apunte al wiki banco de recursos. Abre el archivo «LocalSettings.php» de cada wiki de idioma y añade:
$wgUploadNavigationUrl = "https://pool.example.org/index.php/Special:Upload";
En 1.17, también tendrás qe inicializar $wgUploadMissingFileUrl
para que redirija al wiki banco de recursos en los enlaces rojos.
$wgUploadMissingFileUrl= "https://pool.example.org/index.php/Special:Upload";
Si deseas permitir las subidas solo a tu wiki banco de recursos, puedes utilizar algo así como:
if ( $wgDBname === 'pool' ) {
$wgEnableUploads = true;
} else {
$wgEnableUploads = false;
}
Utilizar archivos compartidos
Para ver los archivos del wiki banco de recursos en los wikis de idiomas, abre «LocalSettings.php» para cada wiki de idioma y añade:
$wgUseSharedUploads = true;
$wgSharedUploadPath = 'https://pool.example.org/images';
$wgSharedUploadDirectory = '/(LOCALPATH)/POOL-FOLDER/images/';
$wgHashedSharedUploadDirectory = true;
Ahora puedes integrar los archivos del banco de recursos con, por ejemplo, [[File:MyLogo.png]], en los wikis de idiomas.
Descripción de las imágenes
En cada wiki de idioma, abre (como administrador) el mensaje MediaWiki:Sharedupload-desc-here.
Cambia el texto a algo como:
Este archivo está almacenado en nuestro banco de recursos. Para obtener información y una descripción, visita la [[:pool:File:{{PAGENAME}}|descripción en el mismo]].
(Y ten en cuenta el carácter ':' al principio de la línea, que impide que 'pool' se incluya en la lista de enlaces interwiki a la izquierda de la página.)
Si deseas añadir también la descripción del archivo, que está almacenada en el banco de recursos, añade al «LocalSettings.php» de los wikis de idiomas:
$wgFetchCommonsDescriptions = true;
$wgSharedUploadDBname = 'pool'; # DB-Name of PoolWiki
$wgSharedUploadDBprefix = 'wiki_'; # Table name prefix for PoolWiki
$wgRepositoryBaseUrl = "https://pool.example.org/index.php/Image:";
Extensiones a las granjas de wikis
Hay varias extensiones de MediaWiki que tratan de simplificar el alojamiento de varios wikis mediante una sola base de código, aunque solo hay una que sea notable en la actualidad:
- Extension:MediaWikiFarm - beta.
- Extension:PersonalizarApariencias : para abordar la localización de la Barra lateral y personalizar las apariencias relativas a los archivos
MediaWiki:Cologneblue.css
,MediaWiki:Modern.css
,MediaWiki:Monobook.css
,MediaWiki:Vector.css
,MediaWiki:Mobile.css
,MediaWiki:Common.css
, respectivamente.
Véase también
- Extensión:CentralAuth
- Manual:InitialiseSettings.php
- Manual:CommonSettings.php
- Manual:$wgConf
- Manual:Identificador central — el mecanismo por el que las cuentas de usuario pueden tener un identificador «central» adicional.