Introducción
No podía ser de otra forma, la primera entrada tenía que ser la instalación del WordPress y su configuración básica para poder empezar al publicar entradas.
La elección de WordPress como gestor para la página ha sido simple y llanamente porque es uno de los más utilizados. En en principio estuve pensando en hacer la página tipo wiki y que no fuera pública, pero al final decidí hacerla tipo blog y entre las opciones que conocía me decante por WordPress por ser que dispone de un mayor número de plugin y posibilidad de personalización.
Pre-requisitos para la elección del motor de la página
Los requisitos que me impuse para crear la página fueron:
- Instalación en mi servidor NAS, mediante Docker
- Motor poco pesado
- Fácil instalación y mantenimiento
- Requerimientos bajos para su instalación
- Desarrollo activo y con respuesta rápida antes posibles bug
- Comunidad grande, para en caso de dudas poder obtener información
- Publicaciones con editor tipo WYSIWYG
Elección método de instalación
En principal requerimiento, que me puse a la hora de crear la página, fue que en principio estaría alojado en mi servidor NAS, concretamente es un QNAP TS-251 con 8GB de RAM.
QNAP tiene básicamente tres forma de poder instarla aplicaciones, aunque la elección de la forma de instalación la tenía clara antes de comenzar, os las comento para el que nos las conozca. Por orden de facilidad de instalación y mantenimiento son las siguientes:
- Aplicaciones que tienen en su «tienda» de aplicaciones, llamada AppCenter
En el momento de la instalación la versión existente en el AppCenter es la versión 4.9.5.0.1.
Mientras que WordPress estaba en la versión 5.5.1.
Como pros tiene que la instalación es bastante sencilla, con unas pocas pulsaciones de ratón se tiene instalado, pero como contras, al menos para mí, tiene varías entre ellas que las aplicaciones de este tipo, que no son aplicaciones propias de QNAP, las actualizan de tarde en tarde y tienen poca opciones de poder modificarla uno mismo.
- Virtualización mediante contenedores Docker
QNAP tiene implementada la virtualización mediante Docker, gestionando las imágenes y sus contenedores mediante la aplicación Container Station. Realmente bastante intuitiva y fácil de manejar. En el momento de la instalación en su buscador aparecía la versión 4.9.8
Al igual que en el caso de la tienda, la facilidad de instalación es un punto a favor, al que hay que añadir que las imágenes que se pueden usar son todas las que permite Docker, desde imágenes propias, como las publicadas en cualquier repositorio, como por ejemplo: https://hub.docker.com.
Éste fue el método que elegí y que intentó elegir cuando instaló alguna aplicación en el NAS. Aunque, como veréis en los pasos de instalación, no utilizo ContainerStation para administrar las imágenes de Docker.
- Maquina virtual
Como última posibilidad, QNAP proporciona otro método de vitualización, en este caso de un servidor completo o máquina virtual, como es denominado en la virtualización de servidores. La aplicación para su gestión se denomina VirtualizationStation 3
Es la opción más potente, pero la que requiere más recurso y sobre todo más tiempo, tanto para realizar la instalación como para el mantenimiento.
Pasos instalación
Como he comentado con anterioridad, la opción elegida para realizar la instalación fue mediante un contenedor de Docker.
Para la creación y gestión de las imágenes, así como los contenedores de Docker, utilizo el gestor de contenedores Portainer:
Obtener el certificado para el dominio
Como paso previo a la instalación, es necesario obtener un certificado para el dominio. En principio utilizaré el certificado gratis proporcionado por Let’s Encrypt. Tengo pensado en hacer una entrada exclusiva sobre como se obtienen certificado con dicha entidad certificadora, así que que en esta entrada solo indicamos que hay que tener preparados los ficheros correspondiente al certificado.
Los ficheros los ubicaremos en una carpeta accesible desde el Container Station, en mí caso:
/share/containerStation/datos/letsencrypt/etc/letsencrypt
La siguiente es la propia instalación del WordPress, como se ha comentado la instalación se realiza mediante Docker y haciendo uso de Portainer, para la explicación lo haré en 2 pasos, uno la descarga de la imagen de WordPress y en un segundo paso la creación y configuración del contenedor. Se puede unificar estos 2 pasos en uno sólo, en caso de crear un contener cuya imagen no está descarga se hace en ese momento la descarga.
Descarga de la imagen de WordPress y creación del contener Docker
La versión de la imagen a descargar será la última versión oficial de WordPress (latest) que está alojada en DockerHub
Iniciamos sesión en Portainer y pulsamos en images del menú de opciones:
Escribimos el nombre de la image a descargar en el campo Image, para nuestro caso: wordpress:latest:
Si la imagen no está en DockerHub, en este caso abrir la opción avanzada pulsando en en «simple mode»
En este caso, elegimos en el combo Registry donde se encuentra, previamente se darán de alta en la opción «Registries«, del menú de opciones, en el campo Image escribimos el nombre la imagen más el tags a descargar, separado por dos puntos, en nuestro caso sería wordpress:latest.
NOTA: El tags o «versión» última que se denota como «latest» y se puede omitir, siendo necesario solo en los casos que queramos descargar un tag específico.
Para iniciar la descarga pulsaremos el botón Pull the image, una vez terminada se mostrará en la lista de imágenes de la misma página donde se hace la descarga:
Creación y configuración del contenedor Docker para WordPress
Leemos la documentación de la imagen para obtener la información necesaria para crear el contenedor, buscaremos la siguiente información:
- Volúmenes: Son necesarios para independizar los datos del contenedor de la propia Imagen, con esto conseguiremos que el mantenimiento del contenedor sea más sencillo y se puede actualizar de una forma las fácil.
- Variables de entorno: Son valores ha proporcionar al contenedor para que se puede iniciar correctamente.
- Puertos que expone: Necesario en el caso de mapear los puertos en el host, donde esté el Docker. La configuración que haré es mediante asignación de una IP al contenedor, de tal forma, que no realizaré mapeo de puertos.
En el caso de WordPress esta información se puede obtener directamente desde la página de DockerHub: https://hub.docker.com/_/wordpress:
Volúmenes
Según la documentación la imagen tiene definido un volumen en la ruta:
/var/www/html
Como realizaremos una configuración con SSL, nos anticiparemos a esta configuración y definiremos 2 volúmenes más en:
- Directorio de configuración del Apache dónde pondremos la configuración para https. La imagen utiliza como servidor PHP y html el servidor Apache, siendo por tanto el directorio de configuración el siguiente:
/etc/apache2/sites-enabled
- Volumen donde ubicar los certificados del dominio:
/certs
De estos 3 volúmenes, el correspondiente a la configuración lo haremos mediante «bind» a un directorio de qnap, simplemente realizamos esto para tener un mejor acceso cuando necesitemos cambiar algún dato en la configuración, también haremos esto para el directorio de certificados que utilizaremos la misma ubicación / volumen donde están los ficheros de los certificados.
Para el volumen primero crearemos un volumen utilizando la opción «volumes» en Portainer
La creación de realizará pulsando el botón «Add volume«, asignado el nombre «wp-data«.
Variables de entorno
De todas la variables definidas por la imagen de WordPress utilizaremos aquellas que son necesarias para indicar la configuración del servidor de base de datos (MySQL), como servidor MySQL utilizaremos el que proporciona del propio NAS, se crearemos la base de datos (wordpress) y definiremos el usuario, así como su clave.
Creación contenedor
Una vez obtenidos los datos anteriores, estaremos en disposición de realizar la creación del contenedor. Abriremos la opción «Containers«
Pulsaré con el botón «Add container«, como primeras opciones indicaremos el nombre del contenedor y la imagen desde la que crear el contenedor
Definiremos los volúmenes:
En la pestaña «Network«, configuraremos la red, utilizando el driver que proporciona QNAP y que permite configurar una IP fija:
En la pestaña «Env» definiremos las variables de entorno, en nuestro caso las que define el acceso a la base de datos MySQL:
Por último en la pestaña «Restart policy» seleccionaremos la política de reinicio que tendrá el contenedor, que la definiremos como iniciada a menos que se apague manualmente «Unless stopped»
Como último paso, pulsaremos el botón «Deploy the cointainer«, que crea e iniciará el contenedor.
Una vez finalizada la creación se visualizará en la lista de contenedores:
Configuración Inicial WordPress
Para realizar la configuración tendremos que asociar el DNS utilizado a la IP asignada, si no tenemos un servidor DNS en al red local, lo haremos añadiendo un registro al fichero hosts del equipo, que tendrá la forma
<IP_Asignada_WordPress> <nombreDNS>
Para nuestro caso sería:
192.168.1.17 www.autoaprendizaje.es
- Accederemos mediante un navegador a la dirección http://www.autoaprendizaje.es
Seleccionando el idioma como primer paso de la instalación:
- Creación usuario y título para la página
En la siguiente página se definirá el título de a página y crearemos el usuario de administración, con su respectiva clave. Pulsando el botón «Instalar WordPress«
Con estas simples acciones tendremos la página configurada y lista para empezar a crear entradas, páginas, etc.. Pero sin al seguridad de una conexión https.
Probaremos el acceso para confirmar que está correctamente instalado, pulsando el botón «Acceder«
El resto de personalizaciones y configuración serán de cada uso, así que terminamos la parte de configuración inicial en este punto, lo siguiente a configurar será el acceso mediante https con el certificado previamente obtenido.
Configuración seguridad acceso por https
Como se ha comentado anteriormente la imagen de Docker oficial de WordPress se ejecuta bajo un servidor Apache, que será el que tengamos que configurar para poder acceder por https mediante el certificado Let’s Encrypt. Para esto se definieron dos volumenes en el contenedor de Docker, uno en la ruta /certs del contenedor y que contendrá los ficheros de los certificados:
Los fichero que nos interesan para la configuración:
- cert.pem = Fichero con el certíficado del domínio
- fullchain.pem = Fichero con todos los certificado que intervienen en la firma del certificado
- privkey.pem = Fichero con la clave privada del certificado.
El directorio anterior es el directorio de configuración certbot, cliente para obtener los certificados de Let’s Encrypt, ubicando los fichero en los subdirectorio live/autoaprendizaje.es
Como segundo volumen, de configuración del servidor Apache, se creo otro para el directorio de Apache: /etc/apache2/sites-enabled, en el directorio del servidor NAS correspondiente a ese volumen, crearemos un fichero con nombre 001-autoaprendizaje.es.conf, con el siguiente contenido:
IncludeOptional mods-available/ssl.load
IncludeOptional mods-enabled/ssl.conf
Listen 443
<VirtualHost *:80>
ServerName www.autoaprendizaje.es
ServerName autoaprendizaje.es
ServerAlias blog.autoaprendizaje.es
Redirect / https://www.autoaprendiazje.es/
</VirtualHost>
<VirtualHost *:443>
ServerName www.autoaprendizaje.es
ServerName autoaprendizaje.es
ServerAlias blog.autoaprendizaje.es
ServerAdmin info@autoaprendizaje.es
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /certs/live/autoaprendizaje.es/cert.pem
SSLCertificateKeyFile /certs/live/autoaprendizaje.es/privkey.pem
SSLCertificateChainFile /certs/live/autoaprendizaje.es/fullchain.pem
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
El fichero anterior realiza las siguientes configuraciones:
- Carga de los módulos para configurar https.
- Inicia el puerto de escucha 443 (https)
- Creamos dos VirtualHost, el primero encargado de redirigir las llamadas http a https y el segundo con la configuración propia del servidor https
Reiniciaremos el contenedor para que el fichero sea cargado:
Validamos la configuración entrando en el navegador en http://www.aprendizaje.es y comprobando que redirecciona a https://www.aprendizaje.es y que carga correctamente el certificado:
Configuración para el acceso desde internet
Por último resta configurar el DNS del dominio para asignar la IP del router donde está el QNAP, en caso de IPv4 y fija será mediante un registro de tipo A y en caso de ser dinámica mediante algún servicio de DynDNS.
También se deberán redirigir los puertos 80 y 443 en el router y re-dirigirlos al contenedor creado. Haciendo esto sólo tenemos la posibilidad de tener una única página alojada en el QNAP, para tener la opción de disponer de más página o poder acceder a la página web del propio servidor QNAP tendremos que utilizar otro tipo de configuraciones.
Como solucionar esto será tratado en otra publicación.