Instalar MediaWiki con Nginx en CentOS 7

Intención principal y variantes relacionadas
- Objetivo principal: instalar MediaWiki en CentOS 7 con Nginx y SSL.
- Variantes: instalar MediaWiki con Apache, instalar en contenedores Docker, migrar desde otra versión, configurar alta disponibilidad, automatizar renovaciones de certs.
Qué haremos
- Instalar Nginx en CentOS 7
- Instalar y configurar PHP-FPM
- Instalar y configurar MariaDB
- Descargar y configurar MediaWiki
- Generar certificado SSL con Let’s Encrypt
- Configurar el virtual host de Nginx para MediaWiki
- Instalar MediaWiki desde la interfaz web
- Activar y configurar el skin por defecto
Requisitos previos
- Servidor CentOS 7 con acceso root o privilegios sudo
- Nombre de dominio apuntando al servidor (A/AAAA)
- Puertos 80 y 443 abiertos
Paso 1 - Instalar Nginx en CentOS 7
Para esta instalación usaremos Nginx como servidor web. En CentOS 7 el paquete puede venir desde el repositorio EPEL (Extra Packages for Enterprise Linux).
Actualiza paquetes e instala el repositorio EPEL:
yum -y update
yum -y install epel-release
Instala Nginx:
yum -y install nginx
Inicia y habilita Nginx para que arranque con el sistema:
systemctl start nginx
systemctl enable nginx
Verifica puertos y servicios con netstat:
netstat -plntu
Notas rápidas:
- Si netstat no está disponible, instala net-tools:
yum -y install net-tools
. - Si usas firewalld, asegúrate de abrir puertos HTTP/HTTPS antes de proceder.
Paso 2 - Instalar y configurar PHP-FPM
MediaWiki requiere PHP y varias extensiones. En este tutorial se usa PHP 7.0 desde el repositorio Webtatic.
Añade el repositorio webtatic:
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
Instala PHP 7.0 y extensiones necesarias:
yum -y install ImageMagick php70w-fpm php70w-intl php70w-xml php70w-curl php70w-gd php70w-mbstring php70w-mysql php70w-cli php70w-pear php70w-pecl-apcu
Configura PHP-FPM y php.ini:
- Edita
/etc/php.ini
y asegura quecgi.fix_pathinfo=0
esté descomentado y en 0:
vim /etc/php.ini
# localizar y cambiar:
cgi.fix_pathinfo=0
- Edita
/etc/php-fpm.d/www.conf
para que el proceso FPM corra como usuario y gruponginx
y use un socket UNIX:
vim /etc/php-fpm.d/www.conf
# Cambia:
user = nginx
group = nginx
listen = /run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
# Variables de entorno recomendadas (descomentar):
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Crea el directorio de sesiones y ajusta permisos:
mkdir -p /var/lib/php/session/
chown -R nginx:nginx /var/lib/php/session/
Inicia y habilita php-fpm:
systemctl start php-fpm
systemctl enable php-fpm
Verifica que PHP-FPM esté escuchando en el socket:
netstat -pl | grep php
Importante: en algunos sistemas la cuenta web es www-data
(Debian/Ubuntu). En CentOS 7, nginx:nginx
es la práctica habitual.
Paso 3 - Instalar y configurar MariaDB
MediaWiki funciona con MySQL/MariaDB o SQLite. Aquí usaremos MariaDB.
Instala MariaDB:
yum -y install mariadb mariadb-server
Inicia y habilita MariaDB:
systemctl start mariadb
systemctl enable mariadb
Ejecuta el script de seguridad para establecer la contraseña root y endurecer la instalación:
mysql_secure_installation
Responde a las preguntas (recomendado aceptar todas las opciones seguras):
Set root password? [Y/n] Y
# Escribe la contraseña de root
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
Crear la base de datos y el usuario para MediaWiki:
mysql -u root -p
# introduce la contraseña
create database mediawikidb;
grant all privileges on mediawikidb.* to mediawiki@'localhost' identified by 'mypassword';
flush privileges;
exit;
Consejo: sustituye mypassword
por una contraseña segura. Para producción, evita usar root
en aplicaciones.
Paso 4 - Descargar y configurar MediaWiki
Descargaremos la rama principal del código fuente de MediaWiki y resolveremos dependencias con Composer.
Instala git y utilidades:
yum -y install git zip unzip composer
Crea la ruta de trabajo y clona el repositorio:
mkdir -p /var/www/mediawiki
git clone https://gerrit.wikimedia.org/r/p/mediawiki/core.git /var/www/mediawiki
Instala dependencias PHP con Composer (modo producción):
cd /var/www/mediawiki
composer install --no-dev
Ajusta propietarios para que Nginx pueda leer/escribir según sea necesario:
chown -R nginx:nginx /var/www/mediawiki
Nota: si planificas usar SELinux en modo enforcing, también tendrás que ajustar contextos SELinux (ej.: chcon -R -t httpd_sys_rw_content_t /var/www/mediawiki
para directorios que requieran escritura).
Paso 5 - Generar SSL con Let’s Encrypt en CentOS 7
MediaWiki debe servir sobre HTTPS. Usaremos Let’s Encrypt para obtener certificados gratuitos.
Instala el cliente Certbot (aquí referenciado como letsencrypt):
yum -y install letsencrypt
Detén temporalmente Nginx para que Certbot pueda usar su servidor temporal (opción standalone):
systemctl stop nginx
Asegúrate de que firewalld permite HTTP/HTTPS:
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
Genera el certificado:
letsencrypt certonly
- Elige la opción 1 para usar el servidor temporal (standalone).
- Introduce tu email para notificaciones de renovación.
- Acepta los términos y añade tu(s) dominios.
Después del proceso deberías ver los archivos del certificado en /etc/letsencrypt/live/tu-dominio/
.
Consejo: para producción, configura un cron o systemd timer para renovar certificados automáticamente: certbot renew --quiet
y añade hooks para recargar Nginx tras la renovación.
Paso 6 - Configurar virtual host de Nginx para MediaWiki
Crea el archivo de configuración de Nginx en /etc/nginx/conf.d/mediawiki.conf
y pega el contenido siguiente (ajusta server_name
y las rutas de los certificados):
# HTTP Request will be Redirected to the HTTPS
server {
listen 80;
listen [::]:80;
server_name wiki.hakase-labs.co;
return 301 https://$host$request_uri;
}
# HTTPS Configuration
server {
listen 443 ssl;
listen [::]:443;
server_name wiki.hakase-labs.co;
root /var/www/mediawiki;
index index.php;
autoindex off;
# SSL Certificate Configuration
ssl_certificate /etc/letsencrypt/live/wiki.hakase-labs.co/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wiki.hakase-labs.co/privkey.pem;
client_max_body_size 5m;
client_body_timeout 60;
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?title=$1&$args;
}
location ^~ /maintenance/ {
return 403;
}
# PHP-FPM Configuration Nginx
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
try_files $uri /index.php;
expires max;
log_not_found off;
}
location = /_.gif {
expires max;
empty_gif;
}
location ^~ ^/(cache|includes|maintenance|languages|serialized|tests|images/deleted)/ {
deny all;
}
location ^~ ^/(bin|docs|extensions|includes|maintenance|mw-config|resources|serialized|tests)/ {
internal;
}
# Security for 'image' directory
location ~* ^/images/.*.(html|htm|shtml|php)$ {
types { }
default_type text/plain;
}
# Security for 'image' directory
location ^~ /images/ {
try_files $uri /index.php;
}
}
Antes de reiniciar Nginx, prueba la configuración:
nginx -t
systemctl restart nginx
Nota: cambia wiki.hakase-labs.co
por tu dominio y ajusta rutas si has usado nombres distintos para el directorio raíz.
Paso 7 - Instalación web de MediaWiki
Abre tu navegador y visita http://tu-dominio/
. Serás redirigido a HTTPS. Haz clic en “Set up the wiki”.
Configuración de idioma
Elige el idioma (por ejemplo English en
) y continúa.
Comprobación de entorno
Asegúrate de que todas las comprobaciones pasen. Corrige cualquier advertencia antes de continuar.
Configuración de base de datos
Introduce los datos creados en el paso de MariaDB: base mediawikidb
, usuario mediawiki
, contraseña mypassword
.
Usuario administrador
Crea el usuario administrador, correo y contraseña. Continúa con la instalación.
Finalizar instalación y descargar LocalSettings.php
Al completarse la instalación, se te pedirá descargar LocalSettings.php
. Descárgalo a tu máquina y súbelo a /var/www/mediawiki/
en el servidor.
Sube el archivo y ajusta permisos. Nota: el tutorial original usó www-data
; en CentOS usa nginx
:
scp LocalSettings.php [email protected]:/var/www/mediawiki/
chown -R nginx:nginx /var/www/mediawiki
Vuelve al navegador y entra en tu wiki. Debes ver la página principal de MediaWiki.
Paso 8 - Descargar y activar el skin Vector (por defecto)
Clona el skin Vector en el directorio de skins y habilítalo en LocalSettings.php
.
cd /var/www/mediawiki/skins/
sudo git clone https://gerrit.wikimedia.org/r/mediawiki/skins/Vector
chown -R nginx:nginx /var/www/mediawiki/skins/
Agrega la línea de carga al final de /var/www/mediawiki/LocalSettings.php
:
vim /var/www/mediawiki/LocalSettings.php
# al final del archivo añade:
wfLoadSkin( 'Vector' );
Actualiza la página en tu navegador y deberías ver el skin Vector activo.
La instalación y configuración básica de MediaWiki sobre Nginx en CentOS 7 ha terminado.
Contenido adicional de valor
Mini-metodología para implementar MediaWiki en producción
- Planificación: decidir dominio, tamaño esperado, extensiones imprescindibles, política de backups.
- Entorno: preparar servidor (CPU, RAM, disco), configurar SELinux/Firewall y monitoreo.
- LEMP básico: instalar Nginx, PHP-FPM, MariaDB y comprobar operaciones básicas.
- Seguridad: generar certificados, endurecer Nginx, cerrar puertos y activar HTTPS-forzado.
- Instalación: clonar MediaWiki, instalar dependencias y ejecutar instalador web.
- Post-instalación: activar skin y extensiones, ajustar permisos y backups.
- Operación: automatizar renovaciones de certs, aplicar actualizaciones y realizar auditorías periódicas.
Checklist por roles
Administrador de sistema (Sysadmin):
- Crear servidor y apuntar DNS
- Abrir puertos 80/443 en firewall
- Instalar Nginx, PHP-FPM y MariaDB
- Configurar SELinux o contextos si aplica
- Automatizar backup de base de datos y archivos
Operaciones / DevOps:
- Crear playbooks (Ansible) para replicar instalación
- Configurar monitoreo (CPU/RAM/disk/SSL)
- Configurar renovaciones automáticas de Let’s Encrypt
Administrador de la wiki (Content Admin):
- Crear usuario administrador
- Definir políticas de edición y permisos
- Instalar extensiones necesarias y configurar skin
Criterios de aceptación
- El dominio responde por HTTPS y redirige HTTP -> HTTPS.
- El instalador de MediaWiki completa sin errores.
- La página principal carga en menos de 5 segundos (objetivo, depende del hosting).
- Las sesiones funcionan y logueo de usuarios opera correctamente.
- El backup de la base de datos se realiza correctamente mediante script.
Rutina de solución de incidentes (runbook breve)
Sintoma: sitio inaccesible (timeout)
- Verificar
systemctl status nginx php-fpm mariadb
. - Revisar logs:
/var/log/nginx/error.log
,/var/log/php-fpm/error.log
,/var/log/mysqld.log
. - Comprobar uso de recursos:
top
,df -h
.
- Verificar
Sintoma: errores 502 Bad Gateway
- Verificar que php-fpm está corriendo y que el socket existe
/run/php-fpm/php-fpm.sock
. - Comprobar permisos del socket y que Nginx puede acceder.
- Reiniciar
systemctl restart php-fpm && systemctl restart nginx
.
- Verificar que php-fpm está corriendo y que el socket existe
Sintoma: certificados vencidos
- Ejecutar
letsencrypt renew --dry-run
. - Si falla, revisar logs de certbot y la posibilidad de bloqueo por firewall.
- Ejecutar
Sintoma: errores de base de datos en la wiki
- Verificar conexión desde el servidor:
mysql -u mediawiki -p -h localhost mediawikidb
. - Reiniciar MariaDB y revisar permisos del usuario.
- Verificar conexión desde el servidor:
Hardening y seguridad recomendada
- Forzar HSTS (añadir encabezado
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
en Nginx). - Deshabilitar versiones de protocolo TLS obsoletas y forzar TLS1.2+.
- Configurar Content Security Policy (CSP) si es aplicable.
- Limitar tamaño máximo de carga y tiempos en Nginx (
client_max_body_size
,client_body_timeout
). - Establecer backups automáticos de la base de datos y directorio
images/
. - Auditar y aplicar actualizaciones de seguridad periódicamente.
Alternativas y cuándo elegirlas
- Apache en lugar de Nginx: si tu organización ya usa Apache o necesita módulos .htaccess, Apache puede ser más fácil.
- Docker: ideal para entornos con despliegue automatizado y aislamiento. Usa imágenes oficiales o construye una propia.
- SQLite: para wikis pequeñas o pruebas, SQLite evita configurar MariaDB/MySQL.
- Alta disponibilidad: usar réplica de MariaDB y un balanceador (HAProxy/Nginx) para tráfico en producción.
Cuándo este procedimiento puede fallar (contrajemplos)
- Repositorios de terceros obsoletos: si Webtatic o mirrors dejan de ofrecer PHP 7.0, la instalación fallará. Solución: usar repositorios alternativos o versiones soportadas.
- SELinux en modo enforcing sin contexto correcto: problemas de escritura en directorios de uploads.
- Firewall/ISP bloqueando puertos: Let’s Encrypt no puede verificar el dominio.
- Espacio en disco insuficiente durante composer install.
Pruebas de aceptación básicas (test cases)
- Test 1: Acceso web a
https://tu-dominio/
devuelve HTTP 200 en la página principal. - Test 2: Login con usuario admin funciona y crea sesión válida.
- Test 3: Subida de imagen via editor funciona y aparece en
Special:Images
. - Test 4: Renovación de certificado corre y recarga Nginx automáticamente.
Glosario (línea por término)
- LEMP: conjunto Linux + Nginx (Engine-X) + MariaDB/MySQL + PHP-FPM.
- PHP-FPM: FastCGI Process Manager para ejecutar PHP bajo un servidor web.
- Let’s Encrypt/Certbot: autoridad y cliente para certificados TLS gratuitos.
- Composer: gestor de dependencias para PHP.
Plantilla de verificación post-despliegue (SOP resumido)
- Verificar servicios en ejecución (Nginx, php-fpm, mariadb).
- Acceder a la URL principal por HTTPS.
- Probar login y creación de una página de prueba.
- Comprobar permisos de
LocalSettings.php
y directorios de carga. - Programar backup diario de DB y semanal de archivos.
Referencias
- Página oficial de MediaWiki: https://www.mediawiki.org/wiki/
Resumen final
MediaWiki 1.30 puede desplegarse sobre CentOS 7 con Nginx modificando la configuración de PHP-FPM para usar un socket, creando la base de datos en MariaDB, instalando dependencias con Composer y protegiendo el sitio con certificados de Let’s Encrypt. La guía incluye pasos operativos, seguridad, pruebas y listas de verificación para llevar la instalación a producción de forma repetible.
Importante: adapta nombres de usuarios, dominios y rutas a tu entorno y reemplaza contraseñas de ejemplo por contraseñas seguras.
Materiales similares

Reiniciar termostato Nest: guía rápida

Cómo descargar y usar YouTube TV desde India

Configurar módulos y clientes de red en WiKID
Controlador de pantalla falla tras actualizar Windows
