Desarrollo local de WordPress con Lando (o Docker simplificado)

Publicado: 2019-11-22

A principios de este año escribí una guía sobre cómo usar Docker para desarrollar en WordPress. Realmente disfruté trabajar en esa publicación, y parece que a ti también te gustó (gracias por todos tus comentarios y correos electrónicos). Si no leyó la publicación, aquí hay un recordatorio rápido:

Docker es un programa que le permite empaquetar software en contenedores y ejecutarlos sobre máquinas virtuales. La principal ventaja de Docker es que sus contenedores se ejecutan utilizando el entorno de virtualización proporcionado por el sistema operativo host, lo que da como resultado contenedores rápidos y livianos .

El principal problema que tiene Docker es que su configuración es engorrosa . Por ejemplo, para crear un entorno de desarrollo de WordPress, necesitamos iniciar dos (al menos) servicios: un servicio de base de datos y un servidor de aplicaciones web.

En el post que comentaba al principio vimos una herramienta, Docker Compose , que permite definir todos los servicios que tenemos que poner en marcha para un determinado proyecto. Con Docker Compose , logramos definir en un solo archivo docker-compose.yml todas las dependencias de nuestro proyecto y ponerlo en marcha con un solo comando.

O eso es lo que inicialmente prometí, porque cerré la publicación explicando cómo configurar otro servicio de Docker que le permitiría usar hermosos nombres de dominio en sus instalaciones de WordPress. Si recuerda, con el archivo docker-compose.yml original, se podría acceder a nuestro entorno de desarrollo de WordPress a través de http://localhost:8080 . Pero si queríamos usar algo como http://myplugin.local , teníamos que configurar un proxy que pudiera resolver los nombres de dominio y agregar más configuraciones a nuestro docker-compose.yml ...

Lo sé, lo sé, ¡fue bastante complicado poner las cosas en marcha! Pero una vez que tuviste todo correctamente configurado, fue bastante fácil, ¿verdad? De todas formas, he decidido presentaros a mi nuevo amigo: Lando. Lo ayudará a configurar nuevos entornos de desarrollo en segundos.

Entra Lando

Creo que la mejor manera de presentarte a Lando es usando una oración de su documentación:

Lando es para desarrolladores que quieren evitar el masoquismo incorporado de usar directamente docker o docker-compose .

documentos de Lando

Sí, aparentemente usar docker y docker-compose es para masoquistas… Así que veamos cómo podemos especificar rápidamente y sin complicaciones todos los servicios que necesitamos para trabajar en un nuevo proyecto de WordPress.

Instalando Lando

Lo primero que debes hacer para poder utilizar Lando es (¡sorpresa, sorpresa!) instalarlo en tu ordenador. El proceso de instalación es sumamente sencillo y está muy bien documentado, pero podemos resumirlo en los siguientes pasos:

  1. Lando requiere Docker. Si está en Linux, primero instale Docker Community Edition. Si está en Mac o Windows, el instalador de Lando instalará Docker si aún no está disponible.
  2. Descargue el instalador de Lando apropiado para su sistema operativo. En mi caso, por ejemplo, descargué el archivo lando-v3.0.0-rc.22.deb (estoy en Linux) y lo instalé con dpkg . Para Mac, use el archivo .dmg y, para Windows, el .exe .
  3. Ejecute el instalador y siga los pasos.

¡Y eso es!

Cómo crear un nuevo proyecto de WordPress en Lando

Lo primero que tenemos que hacer es ir a la carpeta del proyecto con el que queremos trabajar (o crear una nueva para él). En mi caso, crearé un nuevo entorno de desarrollo de WordPress para desarrollar nuestro complemento Nelio A/B Testing, por lo que me cd a la carpeta donde descargué el proyecto: ~/dev/plugins/nelio-ab-testing .

Una vez allí, tenemos que crear el archivo de configuración de Lando. Este archivo es similar a docker-compose.yml , pero mucho más simple. Para empezar, ni siquiera necesita escribirlo: ¡Lando puede hacerlo por usted! Simplemente use lando init para crear un nuevo entorno de desarrollo:

 lando init \ --recipe wordpress --source remote --remote-url https://wordpress.org/latest.tar.gz --webroot wordpress --name "Nelio AB Testing" # name the project as you want

Veamos qué hace la instrucción anterior:

  • Primero, le decimos a Lando que queremos crear un nuevo archivo de configuración en el directorio actual usando lando init .
  • El primer parámetro ( --recipe wordpress ) le dice a Lando que queremos crear un proyecto de WordPress. Esto ayudará a Lando a conocer los servicios que debe configurar (una base de datos, un servidor web, etc.).
  • Luego le indicamos que queremos que Lando descargue WordPress desde WordPress.org.
  • Con --webroot wordpress le decimos a Lando dónde se va a instalar WordPress. Como acabamos de especificar que WordPress debe descargarse de WordPress.org y el zip que Lando descargará creará una carpeta de wordpress después de descomprimir, esa es la ubicación que usamos para Lando.
  • Finalmente, especificamos el nombre de nuestro proyecto (Lando lo usará para generar dominios URL amigables).

Luego de ejecutar el comando anterior, verás como Lando instala todo y te da la bienvenida con la siguiente información:

 NOW WE'RE COOKING WITH FIRE!!! Your app has been initialized! Go to the directory where your app was initialized and run `lando start` to get rolling. Check the LOCATION printed below if you are unsure where to go. Oh... and here are some vitals: NAME my-site LOCATION /tmp/plugin RECIPE wordpress DOCS https://docs.devwithlando.io/tutorials/wordpress.html

Enumere todos los archivos en la carpeta actual y verá que Lando creó un archivo oculto llamado .lando.yml con el siguiente contenido:

 name: my-site recipe: wordpress config: webroot: wordpress

Extremadamente simple, ¿verdad? Ahora inicie su servicio usando lando start y estará listo para comenzar:

 BOOMSHAKALAKA!!! Your app has started up correctly. Here are some vitals: NAME my-site LOCATION /tmp/plugin SERVICES appserver, database APPSERVER URLS https://localhost:32781 http://localhost:32782 http://nelio-ab-testing.lndo.site https://nelio-ab-testing.lndo.site

¡Felicitaciones! Ahora tiene una nueva instalación de WordPress en funcionamiento. Si ahora vamos a una de las URL que Lando enumeró al inicio, verás que simplemente debes seguir los pasos para completar la instalación de WordPress:

Instalar WordPress en el país
Instalar WordPress en Lando.

Completar la instalación de WordPress rápidamente

Obviamente puedes completar la instalación de WordPress usando el instalador de la pantalla anterior. Pero hay una solución aún mejor: usa WP-CLI, que también tenemos disponible en Lando.

Para instalar WordPress con WP-CLI, primero debemos crear un wp-config.php en el directorio de wordpress . Para crear ese archivo, necesitamos cierta información sobre nuestra base de datos: dónde está, su nombre de usuario y contraseña, etc. Toda esta información se puede encontrar a través de lando info , que devuelve el siguiente JSON:

 [ { service: 'appserver', urls: [ 'https://localhost:32781', 'http://localhost:32782', 'http://nelio-ab-testing.lndo.site', 'https://nelio-ab-testing.lndo.site' ], //... }, { service: 'database', //... creds: { database: 'wordpress', password: 'wordpress', user: 'wordpress', }, //... } ]

Dado que el resultado es una cadena JSON, podemos usar la herramienta jq de Unix para recuperar los valores específicos que nos interesan. Por ejemplo, si queremos conocer el usuario de nuestra base de datos, simplemente ejecute esto:

 $ lando info --service database --format json | jq -r ".[0].creds.user" wordpress

Ahora, aprovechemos este comando y recuperemos todos los datos relevantes que necesitamos para construir el archivo de configuración usando WP-CLI:

 # Find WordPress' directory (webroot entry in .lando.yml) WEBROOT=`grep webroot .lando.yml | cut -d: -f2 | xargs` # Retrieve database credentials using lando info DBNAME=`lando info --service database --format json | jq -r ".[0].creds.database"` DBUSER=`lando info --service database --format json | jq -r ".[0].creds.user"` DBPASS=`lando info --service database --format json | jq -r ".[0].creds.password"` DBHOST=`lando info --service database --format json | jq -r ".[0].hostnames[0]"` # Create WordPress' config file lando wp config create \ --dbname=$DBNAME \ --dbuser=$DBUSER \ --dbpass=$DBPASS \ --dbhost=$DBHOST \ --path=$WEBROOT

Una vez que tenemos el archivo creado, podemos lanzar el comando de instalación:

 # Get WordPress' project name from .lando.yml PROJECT_NAME=`grep name .lando.yml | cut -d: -f2 | xargs` SITE_NAME=`echo "$PROJECT_NAME" | sed -e "s/-/ /g" | sed "s/\b[az]/\u&/g"` # Get one of the possible WordPress' URLs ando created (https) URL=`lando info --service appserver --format json | jq -r ".[0].urls" | grep -vw localhost | grep https: | cut -d'"' -f2` # Extract the domain from the previous URL (removing https) DOMAIN=`echo "$URL" | sed -e "s/^https:\/\///"` # Install WordPress lando wp core install --url=$URL --title="$SITE_NAME" --admin_user=admin --admin_password=password --admin_email=admin@$DOMAIN --path=$WEBROOT

¡Hecho! Ya tenemos WordPress instalado y funcionando.

Cómo poner nuestro proyecto en WordPress

Si ahora iniciamos sesión en WordPress y echamos un vistazo a los plugins disponibles, veremos que nuestro plugin (Nelio A/B Testing, en mi ejemplo) no está. Eso es porque Nelio A/B Testing no está en wordpress/wp-content/plugins/ . Para arreglar esto, simplemente necesitamos crear un enlace suave en este directorio que apunte a la raíz de nuestro proyecto:

 cd wordpress/wp-content/plugins/ ln -s ../../../ nelio-ab-testing cd -

¡Y eso es!

Ahora depende de usted decidir el enfoque que mejor se adapte a sus necesidades. Si desea crear una instalación de WordPress para cada proyecto, simplemente siga los pasos que he descrito. Si, por otro lado, desea una sola instalación de WordPress con todos sus temas y complementos, simplemente cree una nueva carpeta, inicie Lando allí y agregue todos sus complementos en wordpress/wp-content/plugins/ .

Espero que les haya gustado este post y esta herramienta tanto como a mí. Y espero que haga su trabajo más fácil y divertido. Desde que usé Lando, me alejé de Docker por completo.

Imagen destacada de Victoire Joncheray en Unsplash.