Agilizando el desarrollo Drupal con Lando: make local development great again!

En muchas ocasiones nos encontramos peculiaridades de cada entorno que pueden causar incidencias cuando el entorno cambia, por ejemplo cuando ponemos una web en producción o cuando implementamos ciertos cambios en una web que ya está en producción, las diferencias entre el entorno que se uso para desarrollar y el entorno de producción son causa de incertidumbre, y en ocasiones pueden ser también causa de dolores de cabeza y de tiempo invertido innecesariamente. Versiones de php, motores de base de datos, apache, nginx, varnish, etc. pueden convertirse en una gran molestia si no lo tenemos en cuenta desde el principio y si no disponemos de un entorno adaptado a las peculiaridades de cada proyecto.

Para minimizar esta incertidumbre, una buena práctica consiste en usar un entorno de desarrollo que sea lo más parecido posible al entorno donde va a estar publicado el proyecto, y en este sentido un sistema de virtualización por containers como docker resulta de gran ayuda. La contrapartida es que añade un punto de complejidad técnica para el que no siempre tenemos tiempo. No todos tenemos los conocimientos o la disponibilidad para pelearnos con docker, y en este sentido una capa de abstracción como Lando puede ser justo lo que necesitamos. Queremos un asistente que nos permita tener nuestro container listo de inmediato para poder empezar a trabajar en el proyecto, y queremos poder cambiar cualquier cosa del setup en cualquier momento sin perder tiempo.

Lando es el heredero de kalabox, una aplicación con interfaz gráfica y de consola para ayudar en el desarrollo local contra pantheon. Debido a la complejidad técnica y la limitación del alcance de la aplicación, sus desarrolladores decidieron abandonarla y emplear la experiencia adquirida en crear Lando, que a diferencia de su predecesor cuenta únicamente con interfaz de consola, pero esta es mucho más potente y estable, y sus usos tienen un alcance que va mucho más allá de pantheon, aunque en el caso de pantheon cuenta con algunas características extra realmente jugosas de las que hablaremos más adelante. Lando permite crear entornos de desarrollo local personalizados para proyectos drupal, wordpress, php, java, python, ruby, node... y muchos otros tipos de proyectos web.

 

Instalando Lando

La documentación de Lando es bastante explicativa, pero aquí vamos a cubrir la instalación en Linux.

1. Instalando docker comunity edition

Si ya tienes docker instalado en tu equipo, omite este paso

cd /tmp
wget -O get-docker.sh https://get.docker.com/
chmod +x get-docker.sh
./get-docker.sh

2. Instalando lando

Descargamos e instalamos el paquete .deb o .rpm de la última versión de Lando que encontraremos en el éste enlace

 

Primeros pasos con Lando

Lando cuenta con una serie de recetas enfocadas al desarrollo web, esto es containers preconfigurados y parametrizados para acelerar nuestro desarrollo local. La interfaz de consola de Lando nos ayuda en el proceso de creación de estas recetas que al final se gestionan mediante un fichero de configuración .lando.yml situado en la carpeta raíz de nuestro proyecto.

Por ejemplo, imaginemos que queremos el típico entorno LAMP (Linux + Apache + Mysql + PHP):

mkdir lamp-example
cd lamp-example/
lando init

Y comenzará el asistente:

? What recipe do you want to use? 
  drupal8 
  joomla 
  laravel 
❯ lamp 
  lemp 
  mean 
  pantheon 
(Move up and down to reveal more choices)

Seleccionamos la receta que queremos usar y continuamos

? What recipe do you want to use? lamp
? Where is your webroot relative to the init destination? .
? What do you want to call this app? lamp-example

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.

Here are some vitals:

 NAME      lamp-example                                     
 LOCATION  /var/www/lamp-example                            
 RECIPE    lamp                                             
 DOCS      https://docs.devwithlando.io/tutorials/lamp.html

El asistente se explica por sí solo, pero lo hemos reflejado aquí para que se vea la sencillez y agilidad que nos aporta Lando. El asistente lo que ha hecho es crearnos el fichero .lando.yml que comentábamos antes.

cat .lando.yml
name: lamp-example
recipe: lamp
config:
  webroot: .

el efecto sería el mismo si lo creásemos a mano. Ahora sólo tenemos que inicializar la receta.

lando start
landoproxyhyperion5000gandalfedition_proxy_1 is up-to-date
Creating network "lampexample_default" with the default driver
Creating volume "lampexample_appserver" with default driver
Creating volume "lampexample_data" with default driver
Creating volume "lampexample_data_database" with default driver
Creating lampexample_appserver_1 ... 
Creating lampexample_database_1 ... 
Creating lampexample_database_1
Creating lampexample_appserver_1 ... done

BOOMSHAKALAKA!!!

Your app has started up correctly.
Here are some vitals:

 NAME            lamp-example                       
 LOCATION        /var/www/lamp-example              
 SERVICES        appserver, database                
                                                    
 APPSERVER URLS  https://localhost:32794            
                 http://localhost:32795             
                 http://lamp-example.lndo.site:8000 
                 https://lamp-example.lndo.site

Y listo! ya tenemos un entorno lamp plenamente funcional, con urls para sus versiones http y https.

Ahora veamos que version de php tenemos.

lando php -v
PHP 7.1.13 (cli) (built: Jan  9 2018 00:41:00) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.13, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans

Como podemos ver tenemos instalado php 7.1 en nuestro container. Supongamos que estamos trabajando en un proyecto cuyo servidor de producción utiliza php 5.6. Si hacemos uso de nuevas características de php7 fallarán al instalar el proyecto en un hosting con php 5.6, asi que vamos adecuar el entorno de desarrollo a las necesidades del proyecto. Editamos el fichero .lando.yml, añadiendo el apartado php: 5.6, dentro del apartado config del yml, quedando el fichero como siguie:

vim .lando.yml
name: lamp-example
recipe: lamp
config:
  webroot: .
  php: 5.6

...reconstruímos el container con el comando rebuild:

lando rebuild

y comprobamos:

lando php -v
PHP 5.6.33 (cli) (built: Jan  9 2018 02:55:39) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans

 

Lando y drupal

Lando cuenta con recetas específicas para drupal. Podemos seleccionar drupal7 o drupal8 en la lista de recetas al hacer lando init o podemos omitir ese primer paso especificando la receta mediante el parámetro opcional --recipe. Veamos un ejemplo

cd /var/www
mkdir d8-example
cd d8-example/
lando init --recipe=drupal8
lando start
cat .lando.yml
name: d8-example
recipe: drupal8
config:
  webroot: .

Esto nos creará un container con apache en su última vesión, drush y drupal console, mysql 5.7 y php 7.1 (en el momento en que se escribe este artículo). Supongamos que queremos tener nginx, mariadb y php 7.2, y que además queremos tener phpmyadmin. Editamos el fichero .lando.yml quedando como sigue:

vim .lando.yml
name: d8-example
recipe: drupal8
config:
  webroot: .
  php: 7.2
  database: mariadb
  via: nginx
services:
  pma:
    type: phpmyadmin
proxy:
  pma:
    - pma.d8-example.lndo.site

y reconstruímos el container

lando rebuild

 

Lando y pantheon

Pantheon es un PAAS (Platform As A Service) orientado incialmente a alojar proyectos drupal, y que actualmente también soporta proyectos wordpress. Como decíamos anteriormente, el equipo que desarrolló Lando es el que desarrolló en su momento Kalabox, un servicio orientado exclusivamente a pantheon, del que Lando es su digno heredero. Y como tal, viene con una serie de características extra para pantheon:

 

lando init pantheon

Es una variante del lando init adaptado a pantheon. La primera vez que lo ejecutamos nos pedirá nuestro machine token de pantheon, y acto seguido nos mostrará una lista con los proyectos a los que tenemos acceso para que seleccionemos con cual de ellos queremos trabajar en local. El fichero .lando.yml generado contendrá el uuid del proyecto de pantheon.

 

lando pull

Este asistente nos preguntará de que entorno (dev, test o live)  nos queremos bajar código, base de datos y/o files. Sirve tanto para inicializar nuestro entorno local como para actualizarlo con los últimos contenidos de producción o de otro entorno.

 

lando push

Es el reverso del comando pull. Nos permite subir nuestra base de datos y ficheros de local a un entorno de pantheon. No obstante, este comando debe usarse con cautela, y en todo caso no utilizarlo para evitar exportar nuestras configuraciones, que deben estar siempre en git.

 

lando terminus

Permite ejecutar cualquier comando de terminus en el container. Términus es la interfaz de linea de comandos de pantheon, donde podemos hacer todo lo que hacemos desde el dashboard pero desde nuestro terminal (y algunas cosas más).

 

Esto es todo. Esperamos haber realizado una buena introducción a Lando y que más gente se anime a utilizar esta magnífica herramienta.

Contacto

¿Te interesan nuestros servicios?

Contáctanos