Mediawiki en Lightsail

Cuando estudio tomo muchas notas para no olvidar lo que leo, porque escribir me fuerza a aclarar las ideas, y para que me sirva de material de referencia. Para anotar fragmentos de código y algoritmos uso Quiver, y para el resto uso una instancia de Mediawiki. Mediawiki es el software sobre el que se basa Wikipedia.

Aquí voy a explicar cual es la opción más económica y fiable para instalar una instancia privada de Mediawiki: Amazon Lightsail. Aunque hay instancias con aplicaciones pre-instaladas, aquí la instalaré manualmente en un Ubuntu. Si no eres técnico, la aplicación pre-instalada es una opción aceptable.

LightSail

Lightsail es la versión económica de Amazon EC2. Los precios mensuales van de $5 (20Gb SSD, 500Mb RAM), $10 (20Gb SSD, 1Gb RAM), hasta 80$ al mes. Puedes crear una instancia en segundos basada en Ubuntu, Debian, FreeBSD, OpenSUSE, o Amazon Linux. Las versiones con aplicaciones pre-instaladas usan imágenes de Bitnami.

Vamos a abrir una cuenta en Lightsail. Ve a https://amazonlightsail.com/ y crea una cuenta o entra con tus credenciales de Amazon. Aparecerán dos botones: Create Instance, y Create static IP. Los dialogos que aparecen a continuación son auto explicativos. Si quieres seguir este tutorial crea una instancia Linux, con solo sistema operativo (OS Only) de tipo Ubuntu. Más abajo puedes escoger el tipo de instancia. Para ejecutar mediawiki te vale la de 5 dólares, que además te da un mes gratis, así que hacer este tutorial no te cuesta nada.

Cuando crees la instancia, tardará unos 10 segundos en estar disponible. Podrás acceder por SSH inmediatamente pulsando en el icono. Pero primero, añade una IP estática a la instancia que acabas de crear.

Yo he creado una instancia, y le he añadido IP estática. Si te pide que les pongas un nombre inventa uno, no importa. Lo de añadir IP estática es simplemente decirle a Amazon, no me cambies la IP cuando reinicie la máquina. He aquí mis instancias:

Yo he contratado la de $10 para poder ejecutar Node, que requiere más memoria. No me gustó Node pero por pereza no he migrado a la de $5.

Puedes acceder a tu máquina desde el navegador abriendo un terminal SSH. Pero es más cómodo si subes tu clave SSH y la añades a tu cuenta (pulsa en Account, y luego en SSH keys). Cuando subes una clave SSH a una región, la clave vale para todas las instancias de esa región. Si te fijas en los pantallazos mi máquina está en Londres, porque escogí esa región cuando la cree.

Instalación

LAMP

Accedemos al terminal por SSH e instalamos LAMP (Apache, MySQL, PHP), imagemagick (mediawiki lo usa para redimensionar gráficos).

Los comandos anteriores descargan e instalan unos 400MB de software. Veremos que las instancias de Amazon se ejecutan en hardware de alto rendimiento, e instalar todo esto tarda unos cuatro minutos. Si te pregunta algo escoge la opción por defecto.

Apache

Instala Apache

SOLO si tienes un nombre de dominio edita la configuración

Y añade esto al final

Ahora vamos a verificar la corrección de nuestra configuración y reiniciar Apache (si no configuraste un nombre de dominio te puedes saltar este paso).

UFW

UFW es el “firewall sencillo” (Uncomplicated Firewall) de Ubuntu. Efectivamente es muy simple de usar.

Comprueba que UFW tiene un perfil para Apache. Un perfil es una serie de normas pre-configuradas.

Comprueba que UFW tiene un perfil “Apache Full” que activa los puertos 80 y 443.

SOLO si en vez del puerto 80, quieres usar el puerto 90, tendras que cambiar el puerto 80 a 90 en /etc/apache2/ports.conf, y /etc/apache2/sites-enabled/000-default.conf. Luego tendrás que abrir el puerto en el firewall con este comando:

Comprueba que la página por defecto de Apache es accesible a través del firewall. Usa tu dominio o dirección IP si no tienes dominio: http://jano.com.es.

Algo que NO me funcionó fue preguntarle a mi máquina su IP con:

Seguramente esto corre en un contenedor con una subred y gateway propio. Como no sé cuál es la topología de red tengo que consultar la IP en la consola de Lightsail, o preguntarle a este servidor:

Let’s Encrypt

SOLO si has comprado un dominio y quieres instalar un certificado SSL con Let’s encrypt haz lo siguiente:

En este ejemplo mi dominio es jano.com.es, reemplazalo por el tuyo.

MySQL

Esto ya lo hemos hecho arriba para ahorrar tiempo, pero si quisieras instalar MySQL harías esto (no lo hagas ahora porque no hace falta):

Opcionalmente puedes ejecutar un script para securizar MySQL:

PHP

Ahora vamos a instalar PHP en Apache.

Dile a Apache que sirva el index.php antes que la página por defecto index.html. Edita el /etc/apache2/mods-enabled/dir.conf y pon el index.php primero.

Reinicia Apache

Comprueba el estado de Apache (si no ves errores todo está bien):

Comprueba que PHP funciona creando una página:

con este contenido

Carga la página: http://jano.com.es/info.php (usa tu IP o dominio), y a continuación borrala para que nadie vea la información de tu servidor:

Mediawiki

Es hora de instalar Mediawiki

La configuración de PHP está aquí: sudo nano /etc/php/7.0/apache2/php.ini Ahora mismo no necesitas cambiar nada.

Instala fastcgi:

Activa los módulos de Apache proxy, proxy_http, rewrite, y reinicia Apache. Se hace así:

Si antes no configuraste un certificado SSL no te va a servir de mucho activar el módulo SSL, pero no importa. Seguiremos el tutorial usando HTTP.

Probablemente Perl se haya quejado amargamente de que no has configurado tu idioma. En realidad no importa, pero por curiosidad se arregla añadiendo lo siguiente en ~/.bashrc (no hace falta que lo hagas ahora):

La configuración de Apache está en /etc/apache2/apache2.conf (no necesitas cambiarla ahora).

Descomprime la distribución mediawiki en el directorio /var/www/wikijano (el nombre del directorio puedes cambiarlo)

Edita /etc/apache2/sites-available/000-default.conf y sustituye DocumentRoot /var/www/html por DocumentRoot /var/www/wikijano. Reinicia Apache con sudo systemctl restart apache2

Ve al navegador y accede a http://awsjano/

(usa tu IP o nombre de dominio). Aquí podrás iniciar la configuración de mediawiki, que creará la base de datos en MySQL. Ve leyendo y dándole a siguiente, pero acuérdate de escribir la contraseña de MySQL que escogiste cuando instalaste MySQL.

Importante: Al terminar de instalar mediawiki te ofrece la descarga de LocalSettings.php. Bajatela, copia todo el contenido al portapapeles, crea el fichero en remoto con sudo nano /var/www/wikijano/LocalSettings.php, pega lo que copiaste antes, y graba el fichero. Esto completa la instalación.

Ahora accede a tu servidor http://awsjano (usa tu IP) y disfruta de tu Mediawiki!

Otras cosas útiles

Backup

Me conecto por SSH a la máquina awsjano con nombre de usuario ubuntu. awsjano es un alias de la IP que tengo en /etc/hosts. Tú tendrás que usar tu IP, o nombre de dominio, o el alias que hayas creado en /etc/hosts.

Las siguientes líneas hacen un backup comprimido en el directorio ~/backup de la base de datos wikijano, y del directorio /var/www/wikijano donde instalamos la mediawiki. Si usaste nombres diferentes reemplazalos en el script.

En mi wiki, MySQL exporta 21MB de backup en 5 segundos. Mi directorio de mediawiki pesa 160MB comprimido. Los backups los puedes dejar en tu instancia de Lightsail, recuerda que tienes gigas de sobra. También deberías descargar una copia y colocarla en otro sitio. Por ejemplo en Google Drive.

Para descargar los ficheros comprimidos yo uso Transmit que es de pago. Pero puedes hacerlo por SSH desde el terminal.

Como crear una clave SSH

Como ejemplo voy a generar una clave para awsjano, que es un nombre que previamente he asociado a la IP en /etc/hosts. El procedimiento para otro dominio es el mismo, solo cambia el dominio y el nombre de usuario.

Genera tus claves

Edita la configuración

Y añade lo siguiente

Permissions

Copia el contenido de id_rsa.pub al portapapeles. Si estas en Linux no te va a funcionar pbcopy, puedes instalar xclip o hacerlo a mano.

Comprueba que todo funciona

Cómo crear claves SSH para varias instancias

Esto es lo mismo pero para el caso en que tienes varios sitios para los que crear las claves, que es lo normal. Por ejemplo, vamos a crear claves para awsjano y github.com

Crea una clave para cada servicio o identidad:

Copia las claves públicas y pegalas en cada sitio.

Añade la ruta a la clave privada en el keychain

Crea un fichero de configuración

y pega el siguiente contenido

Ahora cuando hagas SSH a un host, SSH seleccionará automáticamente la clave para ese host. Esto vale para hacer ssh a la máquina de Amazon, o para usar git con direcciones git@domain/path/repository.git.

Cómo configurar una misma clave para una segunda instancia

Supón que creas otra instancia en la misma zona que la primera y en /etc/hosts configuras la IP como awsjano2. Ahora quieres usar la misma clave ssh para esta instancia. Pues logate con ssh -l ubuntu awsjano2 después de haber añadido la siguiente entrada a ~/.ssh/config:

Cómo resetear la clave de MySQL

Ejecuta este SQL. Cambia SECRETO por una contraseña que te inventes, obviamente.

Arranca MySQL normalmente.

Cómo resetear la clave de Mediawiki