Tutorial

Cómo configurar WordPress con MySQL en Kubernetes usando Helm

Published on January 21, 2020
Default avatar

By Erika Heidi

Developer Advocate

Español
Cómo configurar WordPress con MySQL en Kubernetes usando Helm

Introducción

A medida que más desarrolladores trabajan en entornos distribuidos, herramientas como Kubernetes han llegado a ser cruciales para mantener la estandarización de los componentes de aplicaciones entre entornos de compilación y producción dinámicos. Con la creciente complejidad de los ecosistemas de aplicaciones, y el aumento de la popularidad de Kubernetes, las herramientas que ayudan a administrar recursos en Kubernetes se volvieron esenciales.

helm es un gestor de paquetes de código abierto para Kubernetes que simplifica el proceso de implementación y actualización de aplicaciones en un clúster de Kubernetes, y también proporciona una forma de encontrar y compartir aplicaciones listas para instalar que están empaquetadas como Gráficos de Kubernetes.

A lo largo de este tutorial, usaremos Helm para configurar WordPress sobre un clúster Kubernetes a fin de crear un sitio web de alta disponibilidad. Además de aprovechar la escalabilidad intrínseca y los aspectos de alta disponibilidad de Kubernetes, esta configuración permitirá preservar la seguridad de WordPress proporcionando flujos de trabajo simplificados de actualización y reversión a través de Helm.

Usaremos un servidor de MySQL externo para extraer el componente de la base de datos, ya que puede ser parte de un clúster o servicio gestionado independiente para mayor disponibilidad. Tras completar los pasos descritos en este tutorial, tendrá una instalación de WordPress completamente funcional en un entorno de clústeres en contenedores administrado por Kubernetes.

Requisitos previos

Para completar esta guía, necesitará lo siguiente:

Antes de continuar, asegúrese de poder iniciar sesión en su servidor de MySQL y disponer de conectividad con su clúster de Kubernetes. En caso de que tenga configurados varios clústeres en su archivo de configuración kubectl, debe asegurarse de estar conectado al clúster correcto ejecutando el siguiente comando desde su máquina o servidor de desarrollo local:

  1. kubectl config get-contexts

Este es un resultado de ejemplo:

Output
CURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-sfo2-wordpress-cluster do-sfo2-wordpress-cluster do-sfo2-wordpress-cluster-admin minikube minikube minikube

El signo asterisco (*) indica el clúster que actualmente representa el contexto predeterminado. En caso de que deba cambiar el contexto actual, ejecute:

  1. kubectl config use-context context-name

Con esto, debería estar listo para seguir el resto de la guía.

Paso 1: Configurar MySQL

Primero, crearemos un usuario MySQL dedicado y una base de datos para WordPress a fin de permitir conexiones desde hosts externos. Esto es necesario porque nuestra instalación de WordPress residirá en un servidor independiente dentro del clúster de Kubernetes. En caso de que ya disponga de un usuario de MySQL dedicado y una base de datos configurados para WordPress, podrá continuar con el siguiente paso.

Desde el servidor de MySQL, inicie sesión en MySQL con el siguiente comando:

  1. mysql -u root -p

Se le solicitará proporcionar la contraseña que configuró para la cuenta root de MySQL cuando instaló el software. Después de iniciar sesión, MySQL le proporcionará un mensaje de comando que puede usar para crear la base de datos y el usuario que necesitamos para WordPress.

Nota: Para este tutorial, crearemos una base de datos llamada wordpress y un usuario llamado wordpress_user, identificado por la contraseña password. Tenga en cuenta que estos son valores de ejemplo no seguros;** debería modificarlos** a lo largo de esta guía.

Para crear la base de datos, puede usar la siguiente instrucción:

  1. CREATE DATABASE wordpress;

Ahora, crearemos un usuario de MySQL dedicado para esta base de datos:

  1. CREATE USER wordpress_user IDENTIFIED BY 'password';

Se creó el usuario wordpress_user, pero aún no tiene permisos de acceso. El siguiente comando proporcionará a este usuario acceso de administrador (todos los privilegios) a la base de datos de wordpress desde redes locales y externas:

  1. GRANT ALL PRIVILEGES ON wordpress.* TO wordpress_user@'%';

Para actualizar las tablas internas de MySQL que gestionan los permisos de acceso, utilice la siguiente instrucción:

  1. FLUSH PRIVILEGES;

Ahora podrá cerrar el cliente de MySQL con lo siguiente:

  1. exit;

Para comprobar que los cambios se realizaron correctamente, puede iniciar sesión en el cliente de línea de comandos de MySQL de nuevo, esta vez usando la nueva cuenta wordpress_user para la autenticación:

  1. mysql -u wordpress_user -p

Debería usar la misma contraseña que proporcionó al crear este usuario MySQL con la declaración CREATE_USER. Para confirmar que su nuevo usuario tenga acceso a la base de datos wordpress, puede usar la siguiente instrucción:

  1. show databases;

Se espera el siguiente resultado:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | wordpress | +--------------------+ 2 rows in set (0.03 sec)

Después de confirmar que la base de datos wordpress esté incluida en los resultados, puede salir del cliente de línea de comandos de MySQL con lo siguiente:

  1. exit;

Ahora, dispondrá de una base de datos de MySQL dedicada para WordPress y credenciales de acceso válidas para usarlas dentro de ella. Debido a que nuestra instalación de WordPress residirá en un servidor independiente, de todas formas necesitaremos editar nuestra configuración de MySQL para permitir conexiones provenientes de hosts externos.

Mientras se encuentre en su servidor MySQL, abra el archivo /etc/mysql/mysql.conf.d/mysqld.cnf usando el editor de línea de comandos que prefiera:

  1. sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Busque el ajuste bind-address en este archivo. Por defecto, MySQL escucha solo en 127.0.0.1 (localhost). Para aceptar las conexiones desde hosts externos, debemos cambiar este valor a 0.0.0.0. Así es como debería quedar la configuración bind-address:

/etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0

Cuando termine de realizar estos cambios, guarde y cierre el archivo. Deberá reiniciar MySQL con el siguiente comando:

  1. sudo systemctl restart mysql

Para probar si puede establecer la conexión de manera remota, ejecute el siguiente comando desde su máquina o servidor de desarrollo local:

  1. mysql -h mysql_server_ip -u wordpress_user -p

Recuerde cambiar mysql_server_ip por la dirección IP o el nombre de host de su servidor de MySQL. Si puede establecer conexión sin errores, estará listo para continuar con el siguiente paso.

Paso 2: Instalar WordPress

Ahora que tenemos la información necesaria para establecer conexión con la base de datos MySQL, podemos instalar WordPress usando Helm.

Por defecto, el gráfico de WordPress instala MariaDB en un pod separado dentro del clúster y lo utiliza como base de datos de WordPress. Nos convendrá deshabilitar este comportamiento y configurar WordPress para que utilice una base de datos de MySQL externa. Es posible ajustar esta y otras opciones de configuración (como el usuario de administración y la contraseña predeterminados de WordPress) en el momento de la instalación, ya sea a través de los parámetros de línea de comandos o mediante un archivo de configuración YAML independiente.

Para que todo esté organizado y se pueda extender de forma sencilla, usaremos un archivo de configuración.

Desde su máquina o servidor de desarrollo local, cree un nuevo directorio para los ajustes de su proyecto y diríjase a él:

  1. mkdir myblog-settings
  2. cd myblog-settings

A continuación, cree un archivo llamado values.yaml, usando el editor de texto que prefiera:

  1. nano values.yaml

Dentro de este archivo, debemos configurar algunas variables que definirán la forma en que WordPress se conectará con la base de datos, así como algunas informaciones básicas sobre su sitio y el usuario de administración inicial para iniciar sesión en WordPress cuando la instalación se complete.

Basaremos nuestra configuración en el archivo predeterminado values.yaml del gráfico de Helm de WordPress. La sección **_Información del blog _**y del sitio contiene opciones generales para su blog de WordPress, como el nombre del blog y las credenciales de usuario iniciales. La sección Configuración de la base de datos de este archivo contiene los ajustes para la conexión con el servidor de MySQL remoto. MariaDB está desactivado en la sección final.

Copie el siguiente contenido a su archivo values.yaml y sustituya los valores resaltados por sus valores personalizados:

values.yaml

## Blog/Site Info
wordpressUsername: sammy
wordpressPassword: password
wordpressEmail: sammy@example.com
wordpressFirstName: Sammy
wordpressLastName: the Shark
wordpressBlogName: Sammy's Blog!

## Database Settings
externalDatabase:
  host: mysql_server_ip
  user: wordpress_user
  password: password
  database: wordpress

## Disabling MariaDB
mariadb:
  enabled: false

Acabamos de configurar las siguientes opciones:

  • wordpressUsername: nombre de usuario para iniciar sesión en WordPress.
  • wordpressPassword: contraseña del usuario de WordPress.
  • wordpressEmail: correo electrónico del usuario de WordPress.
  • wordpressFirstName: nombre del usuario de Wordpress.
  • wordpressLastName: apellido del usuario de Wordpress.
  • wordpressBlogName: nombre del sitio o blog.
  • host: dirección IP o nombre de host del servidor de MySQL.
  • user: usuario de MySQL.
  • password: contraseña de MySQL.
  • database: nombre de la base de datos de MySQL.

Cuando termine con la edición, guarde el archivo y cierre el editor.

Ahora que realizamos toda la configuración necesaria, es el momento de ejecutar helm para instalar WordPress. El siguiente comando indica a helm que instale la versión estable más reciente del gráfico de WordPress con el nombre myblog, usando values.yaml como archivo de configuración:

  1. helm install --name myblog -f values.yaml stable/wordpress

El resultado debe ser similar al siguiente:

Output
NAME: myblog LAST DEPLOYED: Fri Jan 25 20:24:10 2019 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Deployment NAME READY UP-TO-DATE AVAILABLE AGE myblog-wordpress 0/1 1 0 1s ==> v1/PersistentVolumeClaim NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myblog-wordpress Pending do-block-storage 1s ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE myblog-wordpress-5965f49485-8zfl7 0/1 Pending 0 1s ==> v1/Secret NAME TYPE DATA AGE myblog-externaldb Opaque 1 1s myblog-wordpress Opaque 1 1s ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE myblog-wordpress LoadBalancer 10.245.144.79 <pending> 80:31403/TCP,443:30879/TCP 1s (...)

Una vez que la instalación finalice, se creará un servicio llamado myblog-wordpress en su clúster de Kubernetes, pero pueden transcurrir unos minutos hasta que el contenedor esté listo y la información de External-IP esté disponible. Para verificar el estado de este servicio y recuperar su dirección IP externa, ejecute lo siguiente:

  1. kubectl get services

El resultado debe ser similar al siguiente:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 20h myblog-wordpress LoadBalancer 10.245.144.79 203.0.113.110 80:31403/TCP,443:30879/TCP 3m40s

Este comando le proporciona información detallada sobre los servicios que se ejecutan en su clúster, incluidos el nombre y el tipo del servicio, y las direcciones IP utilizadas por este. Como puede ver en el resultado, la instalación de WordPress se presenta como myblog-wordpress en la dirección IP externa 203.0.113.110.

Nota: En caso de que utilice minikube para probar esta configuración, deberá ejecutar minikube service myblog-wordpress para exponer el servidor web del contenedor de modo que pueda acceder a él desde su navegador.

De esta manera, su instalación de WordPress quedará en condiciones de funcionamiento. Para acceder a la interfaz de administración, utilice la dirección IP obtenida a partir del resultado de kubectl get services, seguida de /wp-admin en su navegador web:

http://203.0.113.110/wp-admin

Pantalla de inicio de sesión

Debería usar las credenciales definidas en su archivo values.yaml para iniciar sesión y comenzar a configurar su sitio de WordPress.

Paso 3: Actualizar WordPress

Debido a su popularidad, WordPress es a menudo objetivo de usos malintencionados. Por ello, es importante mantenerlo actualizado. Podemos actualizar las versiones de Helm con el comando helm upgrade.

Para enumerar todas sus versiones actuales, ejecute el siguiente comando desde su computadora local o servidor de desarrollo:

  1. helm list

El resultado deberá ser similar a este:

Output
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE myblog 1 Fri Jan 25 20:24:10 2019 DEPLOYED wordpress-5.1.2 5.0.3 default

Como puede ver en el resultado, nuestra versión actual de WordPress es la 5.0.3 (versión app), mientras que la versión del gráfico es la 5.1.2. Si desea actualizar a una versión más reciente de un gráfico, primero actualice sus repositorios de Helm con lo siguiente:

  1. helm repo update

El siguiente resultado estará previsto:

Output
Hang tight while we grab the latest from your chart repositories... ...Skip local chart repository ...Successfully got an update from the "stable" chart repository Update Complete. ⎈ Happy Helming!⎈

Ahora, podrá verificar si hay una versión más reciente del gráfico de WordPress disponible con lo siguiente:

  1. helm inspect chart stable/wordpress

El resultado deberá ser similar a este:

Output
apiVersion: v1 appVersion: 5.1.1 description: Web publishing platform for building blogs and websites. engine: gotpl home: http://www.wordpress.com/ icon: https://bitnami.com/assets/stacks/wordpress/img/wordpress-stack-220x234.png keywords: - wordpress - cms - blog - http - web - application - php maintainers: - email: containers@bitnami.com name: Bitnami name: wordpress sources: - https://github.com/bitnami/bitnami-docker-wordpress version: 5.9.0

Como puede ver en el resultado, hay un nuevo gráfico disponible (versión 5.9.0) con WordPress 5.1.1 (versión app). Cuando desee actualizar su versión de WordPress al gráfico de WordPress más reciente, debería ejecutar lo siguiente:

  1. helm upgrade -f values.yaml myblog stable/wordpress

Con este comando se generará un resultado muy similar al de helm install. Es importante proporcionar el mismo archivo de configuración que usamos al instalar el gráfico de WordPress por primera vez, ya que contiene los ajustes de la base de datos personal que definimos para nuestra configuración.

Ahora, si ejecuta helm list de nuevo, debería ver información actualizada sobre su versión:

Output
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE myblog 2 Fri May 3 14:51:20 2019 DEPLOYED wordpress-5.9.0 5.1.1 default

Con esto, habrá realizado de forma correcta la actualización de WordPress a la última versión del gráfico de WordPress.

Volver a una versión anterior

Cada vez que actualice una versión, Helm creará una nueva revisión de esta. Una revisión establece un punto de control fijo que podrá restablecer si no obtiene los resultados que espera. Es similar a una confirmación en Git, porque crea un historial de cambios que pueden compararse y revertirse. Si se produce algún error durante el proceso de actualización, siempre puede restablecer una revisión anterior de una versión de Helm concreta con el comando helm rollback:

  1. helm rollback release-name revision-number

Por ejemplo, si queremos deshacer la actualización y restablecer nuestra primera versión de WordPress, lo haríamos así:

  1. helm rollback myblog 1

Con esto, se restablecería la primera versión de la instalación de WordPress. Debería ver el siguiente resultado, lo cual indica que la reversión se realizó correctamente:

Output
Rollback was a success! Happy Helming!

Al ejecutar helm list de nuevo, se debería indicar que WordPress volvió a la versión 5.0.3, versión del gráfico 5.1.2:

Output
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE myblog 3 Mon Jan 28 22:02:42 2019 DEPLOYED wordpress-5.1.2 5.0.3 default

Observe que con el restablecimiento a una versión anterior se creará una nueva revisión, basada en la revisión de destino de la reversión. La revisión de nuestra versión de WordPress llamada myblog ahora tiene el número tres, que se basó en el número de revisión uno.

Conclusión

A lo largo de esta guía, instalamos WordPress con un servidor de MySQL externo en un clúster de Kubernetes usando la herramienta de línea de comandos de Helm. También aprendimos a actualizar una versión de WordPress a una nueva del gráfico, y a volver a una versión anterior si se produce un error durante la actualización.

Como pasos adicionales, podría considerar configurar Nginx Ingress con Cert-Manager para permitir alojamiento virtual basado en nombres y configurar un certificado SSL para su sitio de WordPress. También debería verificar los ajustes de producción recomendados para obtener información sobre gráfico de WordPress que usamos en esta guía.

Si desea obtener más información sobre Kubernetes y Helm, consulte la sección Kubernetes de la página de nuestra comunidad.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors
Default avatar

Developer Advocate

Dev/Ops passionate about open source, PHP, and Linux.

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel