WordPress
Los blogs ya no son lo que fueron antaño, pero aun quedamos quienes los utilizamos. De todos, WordPress sigue siendo la principal opción.
He elegido la opción creada por Bitnami para el despliegue ya que WordPress es algo peculiar. Este está pensado para actualizarse a sí mismo, modificando sus datos, así que las actualizaciones desde el propio Helm pueden causar que el blog deje de funcionar. El sistema correcto es instalar un WordPress vacío y migrar los datos del existente hacia este utilizando el plugin preinstalado All-in-One WP Migration
.
WordPress tiene un sistema propio de exportación e importación, pero únicamente mueve posts y poco más. Este plugin mueve todo.
Este plugin permite exportar todo el sistema (configuración, media, plantillas, ...), pero tiene la pega de que el fichero resultante es muy grande, normalmente superior a lo que Apache, PHP o Ingress pueden gestionar por defecto. Para evitar estos problemas, el plugin tiene infinidad de soluciones, todas de pago. Para solucionar esto se debe ampliar el tamaño de subida de datos, algo que no está documentado en ningún lugar y es lo que convierte en un infierno esta instalación. Hasta que sabes qué valores tocar, entonces es muy sencilla.
Requisitos
WordPress requiere de MariaDB. En este Helm se desactiva el despliegue de MariaDB y se utiliza un existente.
Despliegue
Más detalles en Artifact Hub.
Añadimos el repositorio.
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
Definimos el fichero de propiedades.
vi wordpress-values.yaml
El fichero tiene varias secciones.
# Configuración básica WordPress para que realice la preinstalación
wordpressUsername: admin
wordpressPassword: admin
wordpressEmail: [email protected]
wordpressFirstName: Nombre
wordpressLastName: Apellido
wordpressBlogName: Nombre del blog
wordpressScheme: https
allowEmptyPassword: false
# Preconfiguración del plugin WP Mail SMTP
smtpHost: smtp-relay.email-relay-mngmt
smtpPort: 25
# Configuración de PHP para soportar un tamaño superior de subida de datos
extraEnvVars:
- name: PHP_POST_MAX_SIZE
value: "512M"
- name: PHP_UPLOAD_MAX_FILESIZE
value: "512M"
- name: PHP_MEMORY_LIMIT
value: "512M"
- name: PHP_MAX_EXECUTION_TIME
value: "0"
# Cambio de recursos requeridos, en un blog pequeño es un desperdicio los requisitos originales
resources:
requests:
cpu: 100m
memory: 52Mi
limits:
cpu: 600m
memory: 1Gi
# Cambio del tipo de servicio ya que se utilizará Ingress
service:
type: ClusterIP
# Habilitar Ingress hacia la extranet y soporte para subir grandes ficheros
ingress:
enabled: true
ingressClassName: nginx-extranet
hostname: blog.domain.cat
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/proxy-body-size: 512m
# Volumen en Longhorn para almacenar el WordPress
persistence:
storageClass: longhorn
size: 5Gi
accessMode:
- ReadWriteMany
# Conexión al MariaDB externo
mariadb:
enabled: false
externalDatabase:
host: database.domain.intranet
port: 3306
user: user
password: password
database: wordpress
Desplegamos el servicio.
helm upgrade --install blog bitnami/wordpress \
-f wordpress-values.yaml \
--namespace wordpress --create-namespace
WordPress necesita enviar e-mails utilizando el SMTP Relay.
vi wordpress-allow-relay.yaml
Abrimos acceso al nuevo servicio en su namespace.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-wordpress
namespace: email-relay-mngmt
spec:
podSelector:
matchLabels:
app.kubernetes.io/instance: smtp-relay
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: wordpress
podSelector:
matchLabels:
app.kubernetes.io/instance: wordpress
ports:
- protocol: TCP
port: 25
Aplicamos los cambios.
kubectl apply -f wordpress-allow-relay.yaml
Tras desplegar, accedemos a la consola administrativa acorde al usuario y contraseña definidos.
https://blog.domain.cat/wp-login.php
Ojo con las actualizaciones por error, que podrían corromper WordPress, y también con borrar el Helm ya que el volumen está asociado a él y será también destruido.
Es aconsejable confirmar desde el plugin de SMTP que todo funciona correctamente. Este se quejará de que el dominio utilizado es extraño y quizás no seguro. Esto no es problema ya que es la red de Kubernetes quien se encarga del relay.
Importación
La instalación nos crea un WordPress totalmente nuevo y funcional, pero si procedemos de uno anterior, habrá que migrar los datos.
Para ello se debe generar un fichero de exportación del viejo WordPress, para ello se utiliza el plugin All-in-One WP Migration
. En el nuevo viene preinstalado así que se activa y se importa el nuevo fichero.
Si importamos, también se modificarán los datos de usuario, título del blog, SMTP, ... así que habrá que reajustarlos al acabar.
Si la URL de acceso ha cambiado, los posts seguramente apunten a la vieja y habrá que actualizarlos manualmente.