Wordpress, almacenar las imágenes en Azure Blob

Sitio dedicado a Microsoft Azure y otras tecnologías Cloud

Static Content Hosting Pattern

Sabes de eso que estás tan tranquilo y te pones cómodo en el sillón dispuesto a escribir un bonito artículo sobre un interesante tema que compartir con tus lectores… y descubres que tu blog (otra vez) ha perdido decenas de imágenes.

Sabes de eso que te bajas todos los ángeles del cielo e invocas a todos los demonios interiores que te acompañan en el subconsciente al ser la tercera o cuarta vez que te ocurre, revelándose inútil cada una de las mediadas tomadas, ante las horas de reconstrucción que te esperan.

Pues eso me pasó este fin de semana y encontré la solución.

Un escurridizo efecto colateral

Mi primera aproximación fue volver a echarle las culpas al plugin JetPack –que me ofrece estadísticas e integración con capacidades de WordPress.com– y a su sistema de aceleración de la descarga de las imágenes; que es un conjunto de compresión y CDN’s propios.

Pero, me llevé la sorpresa de que ya estaba deshabilitado a la espera de la última actualización del CMS.

La segunda fue entrar por KUDU a la WebApp y observar horrorizado que las carpetas de imágenes de septiembre y octubre estaban vacías… y esto me puso en la pista del problema!

En algunas ocasiones, en mis clases de formación sobre Azure, le enseño las capacidades de escalado vertical a mis alumnos con este Website. Es decir, es una S1, pero la aumento temporalmente a P1 y la bajo a B1.

Y aquí el problema: el App Plan Standard S1 tiene un almacenamiento de 50Gb, mientras que el Basic 1 solamente de 10Gb.

Al principio del blog solo tenía unas pocas imágenes, pero ya llevo unos cuantos añitos añadiendo material y he superado el almacenamiento disponible en el tamaño pequeño. Así, al escoger la B1, la WebAp me hacía un truncate de las últimas imágenes y yo entraba en desesperación.

Almacenando las imágenes en una Storage Account

La solución era obvia cuando pienso en una arquitectura Cloud. Olvidarme de almacenar las imágenes en el servidor de aplicaciones y hacerlo de la forma más correcta; almacenar las imágenes en una Storage Account.

Pero el problema vino al constatar que iba a ser complejo picarme el PHP de WordPress para hacer eso. Incluso me pensé seriamente en abandonar este CMS y migrar hacia un website estático.

Por suerte no soy ni el primero ni el último con este problema, y todo se solucionó con un Plugin llamado: Microsoft Azure Storage for WordPress.

Descargarlo e instalarlo es cosa de coser y cantar. A continuación me voy al portal y creo una nueva cuenta de almacenamiento V2, en donde he creado un contenedor de tipo Blob.

Luego la configuración, como se observa a continuación, es muy sencilla. Le digo el nombre de la Storage Account; le paso la clave de acceso (por esto he creado una SG específica); le indico cual es el contenedor en donde almacenar las imágenes como Blob; configuro que por defecto todas las imágenes subidas a WordPress se almacenen en Azure; y, por último, que no me guarde las imágenes en local para no volver a quedarme sin espacio y que me borre material.

Pantalla de configuración del Plugin para WordPress

A partir de ese momento, cada vez que subo una imagen a la librería de WordPress, puedo observar como me la guarda en mi cuenta de almacenamiento. Es más, este excelente plugin me almacena cuatro versiones diferentes de mis gráficos, de dimensiones óptimas según el medio.

Espera, no te vayas aún.

Si bien el guardar las imágenes como un blob me va a bajar los costes de manera directa, además de evitar que se vuelvan a perder imágenes dada la abrumadora SLA de las SA, todavía lo puedo hacer aún mejor si utilizo las capacidades de gestión del ciclo de vida de las cuentas de almacenamiento.

Storage Account Livecycle ManagmentStorage Account Livecycle Managment

Así, como verás, he creado una nueva regla que le indica a la cuenta de almacenamiento que me cambie el tipo de acceso de Hot a Cool cuando haya pasado un día desde la última modificación de la imagen/blob, ahorrando más del 50% en el coste mensual.

Por último y como resultado, como bien dice el patrón arquitectónico, también he incrementado la velocidad de mi Blog al separar el servidor de las páginas del servidor de las imágenes, siendo las cuentas de almacenamiento especialmente rápidas y mucho más eficientes que una Web App.

Espero que esto sea de ayuda (especialmente a mi colega Ransino que me ha sido el promotor de este artículo).

 

4 comentarios

  1. Paris Marin dice:

    Hola!
    Muy interesante este artículo y es lo que buscaba
    ahora toca poner en práctica lo mostrado aquí.

    • Administrador dice:

      Buenas,

      Me alegro mucho que te haya ayudado. Ahora te puedo decir que vá como un tiro, pero cuidado con la caché local de la Web App, porque me ha estado volviendo loco durante meses hasta que me dí cuenta que la tenía habilitada y que me estaba rompiendo la instalación de los plugin y del propio wordpress.

      Saludos.

  2. BEDER dice:

    Hola,

    Gracias por el contenido, Cual sería el procedimiento para garantizar una conexión privada entre wordpress y el Blob, actualmente he subido un archivo al blob que deseo que solo se pueda visualizarlo desde el wordpress, ya que al hacer click derecho sobre el video compartido en el wordpress se puede obtener el url del video y cargar dicho url en otra pestaña.

    Por favor si conoces algún manual para dicho proceso me sería de gran ayuda.

    Saludos,

    • Administrador dice:

      Buenas,

      Si te digo la verdad, lo desconozco porque es un tema de permisos que debe gestionar el propio WordPress, ya sea pidiendo un SaS a la cuenta de almacenamiento o a un Key Vault (o KMS similar). El blob por defecto viene cerrado a el acceso anónimo, por lo cual la dificultad está en proveer de ese token a WordPress.

      Creo que lo más fácil y rápido es hablar con los autores del plugin y preguntarles a ellos si se podría añadir esa capacidad. O que la desarrolles tu mismo ya que es un proyecto en GitHub.

      https://wordpress.org/support/plugin/windows-azure-storage/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.