Guía de tecnologías

Instalar MediaWiki con Nginx en CentOS 7

9 min read Guías Linux Actualizado 18 Oct 2025
Instalar MediaWiki con Nginx en CentOS 7
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

  1. Instalar Nginx en CentOS 7
  2. Instalar y configurar PHP-FPM
  3. Instalar y configurar MariaDB
  4. Descargar y configurar MediaWiki
  5. Generar certificado SSL con Let’s Encrypt
  6. Configurar el virtual host de Nginx para MediaWiki
  7. Instalar MediaWiki desde la interfaz web
  8. 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

Salida de netstat mostrando puertos HTTP y HTTPS en uso por Nginx

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:

  1. Edita /etc/php.ini y asegura que cgi.fix_pathinfo=0 esté descomentado y en 0:
vim /etc/php.ini
# localizar y cambiar:
cgi.fix_pathinfo=0
  1. Edita /etc/php-fpm.d/www.conf para que el proceso FPM corra como usuario y grupo nginx 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

Listado mostrando php-fpm y su socket

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;

Pantalla mostrando creación de base de datos en MariaDB

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

Salida de composer instalando dependencias de MediaWiki

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

Captura mostrando reglas añadidas a firewalld para HTTP/HTTPS

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/.

Resultado de generación de certificado con Let's Encrypt

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

Prueba y reinicio de Nginx exitosos

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”.

Página inicial de instalación de MediaWiki

Configuración de idioma

Elige el idioma (por ejemplo English en) y continúa.

Selección de idioma en instalador de MediaWiki

Comprobación de entorno

Asegúrate de que todas las comprobaciones pasen. Corrige cualquier advertencia antes de continuar.

Chequeo de entorno de MediaWiki

Configuración de base de datos

Introduce los datos creados en el paso de MariaDB: base mediawikidb, usuario mediawiki, contraseña mypassword.

Formulario de configuración de la base de datos en MediaWiki

Usuario administrador

Crea el usuario administrador, correo y contraseña. Continúa con la instalación.

Creación de usuario administrador en MediaWiki

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.

Página final de instalación invitando a descargar LocalSettings.php

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.

Interfaz inicial de MediaWiki tras la instalación

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' );

Captura del directorio de skins y activación del skin Vector

Actualiza la página en tu navegador y deberías ver el skin Vector activo.

MediaWiki con 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

  1. Planificación: decidir dominio, tamaño esperado, extensiones imprescindibles, política de backups.
  2. Entorno: preparar servidor (CPU, RAM, disco), configurar SELinux/Firewall y monitoreo.
  3. LEMP básico: instalar Nginx, PHP-FPM, MariaDB y comprobar operaciones básicas.
  4. Seguridad: generar certificados, endurecer Nginx, cerrar puertos y activar HTTPS-forzado.
  5. Instalación: clonar MediaWiki, instalar dependencias y ejecutar instalador web.
  6. Post-instalación: activar skin y extensiones, ajustar permisos y backups.
  7. 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)

  1. 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.
  2. 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.
  3. Sintoma: certificados vencidos

    • Ejecutar letsencrypt renew --dry-run.
    • Si falla, revisar logs de certbot y la posibilidad de bloqueo por firewall.
  4. 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.

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)

  1. Verificar servicios en ejecución (Nginx, php-fpm, mariadb).
  2. Acceder a la URL principal por HTTPS.
  3. Probar login y creación de una página de prueba.
  4. Comprobar permisos de LocalSettings.php y directorios de carga.
  5. Programar backup diario de DB y semanal de archivos.

Referencias

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.

Autor
Edición

Materiales similares

Reiniciar termostato Nest: guía rápida
Domótica

Reiniciar termostato Nest: guía rápida

Cómo descargar y usar YouTube TV desde India
Guía técnica

Cómo descargar y usar YouTube TV desde India

Configurar módulos y clientes de red en WiKID
Guía técnica

Configurar módulos y clientes de red en WiKID

Controlador de pantalla falla tras actualizar Windows
Soporte técnico

Controlador de pantalla falla tras actualizar Windows

Instalar Apache Cassandra en CentOS 8
Bases de Datos

Instalar Apache Cassandra en CentOS 8

Ethernet más lento que Wi‑Fi: causas y soluciones
Redes domésticas

Ethernet más lento que Wi‑Fi: causas y soluciones