Desde que empecé con atareao.es, mucho han cambiado las cosas. Primero probé diferentes CMS. Que si Joomla, Drupal, hasta que llegué a WordPress. Incluso en WordPress tuve alguna tentativa de migrar a otro tipo de CMS como Pelican. Mi llegada a WordPress trajo consigo el aprender y comprender el funcionamiento de temas y complementos. Los primeros temas, venían directamente del repositorio de WordPress, aunque creo que llegué a comprar alguno. Luego, poco a poco, comencé a hacerlos yo. Hasta el día de hoy, que no solo me los hago para mi, sino que ya me he convertido en una fábrica de hacer temas y personalizar WordPress a la medida. Y es aquí precisamente donde quería llegar, al entorno de desarrollo para WordPress.
Como entorno de desarrollo para WordPress, empecé utilizando LAMP. Tanto en mi equipo como en la Raspberry Pi. Posteriormente, estuve jugueteando con Docker y WordPress. Sin embargo, mis necesidades de desarrollo cada vez son mayores, y estas soluciones se terminaban por quedar cortas.
Visto que docker se ha convertido en una solución muy extendida para la creación de entornos de desarrollo, estuve buscando diferentes soluciones. Soluciones que me ayudaran con la creación de un entorno de desarrollo para WordPress. Lo cierto, es que no me dedicar tiempo a mantener la infraestructura de desarrollo. Mi objetivo es que otros se encarguen por mi. Así es como he dado con WP Local Docker.
WP Local Docker. Un entorno de desarrollo para WordPress
Como decía en la introducción, mi objetivo en esta búsqueda, era encontrar un entorno de desarrollo para WordPress que me permitiera dedicarme a desarrollar tanto temas como complementos, y no me tuviera que preocupar de la infraestructura. Esto es precisamente lo que me ofrece WP Local Docker.
WP Local Docker
WP Local Docker, es una manera realmente sencilla de crear un entorno de desarrollo para WordPress que funciona en cualquier plataforma, ya sea Linux, Mac o Windows. No solo esto, si no que además, puedes crear tantos entornos de desarrollo como necesites, y además, todos estos entornos de desarrollo pueden estar funcionando de forma simultánea. De esta manera puedes acceder desde tu navegador a cada uno de los sitios, utilizando la dirección que le hayas asignado durante el proceso de creación.
Cada entorno de desarrollo para WordPress está constituido por,
- Nginx
- PHP FPM
- Memcached
- Y de forma opcional ElasticSearch
Además es posible elegir la versión de PHP que queremos utilizar para cada uno de los entornos de desarrollo para WordPress que utilicemos. Así podemos elegir, 5.5, 5.6, 7.0, 7.1 o 7.2.
Herramientas
Pero si esto te parece poco, WP Local Docker viene acompañado de un set de herramientas y utilidades que te harán, tu vida de desarrollador, mucho más cómoda y sencilla.
phpMyAdmin
phpMyAdmin está disponible para todos los entornos de desarrollo que hayas creado en tu sistema. De esta manera, puedes acceder a todas las bases de datos de los diferentes entornos de desarrollo desde un punto sitio.
Para acceder a phpMyAdmin desde el navegador tienes que iniciar https://localhost:8092, con las siguientes credenciales,
- Usuario:
wordpress
- Contraseña:
password
MailCatcher
Otra utilidad muy interesante configurada como un servicio global para todos los entornos de desarrollo es MailCatcher. MailCatcher es un servidor SMTP super simple. Este servidor se encarga de capturar los mensajes enviados para mostrarlos en un servidor web. La configuración es muy sencilla, porque solo tienes que configurar como smpt://127.0.0.1:1025
.
Para poder acceder a MailCatcher tienes que navegar a https://localhost:1080
PHPMemcachedAdmin
PHPMemcachedAdmin está configurado para cada uno de tus entornos de desarrollo de WordPress. Esta herramienta te permite ver las estadísticas de memcache de forma muy sencilla.
Para poder acceder a PHPMemcachedAdmin para cada un entorno de desarrollo de WordPress, tan solo tienes que añadir /__memcacheadmin/
al nombre del sitio. Así por ejemplo, si al sitio lo has llamado prueba.test
, tendrás que acceder a prueba.test/__memcacheadmin/
Xdebug
Xdebug está incluido con las imágenes PHP, y preparado para funcionar. Tan solo tienes que asegurarte que tu IDE está preparado para utilizarlo y apuntando al directorio wordpress/
de tu entorno de desarrollo.
Instalación
WP Local Docker necesita, docker, docker-compose, Node 8 y NPM. De acuerdo a lo que indican en la página web, es recomendable que utilices la última versión tanto de docker como de docker-compose. Por otro lado Node 8, es la única versión que está soportado.
Si quieres ver como instalar WP Local Docker en otros plataformas distintas a Linux, te recomiendo vayas a la página de instalación de WP Local Docker.
Instalando los requisitos
Instalando docker
En el caso de Ubuntu 18.04, puedes instalarlo ejecutando las siguientes órdenes,
sudo apt update
sudo apt install apt-transport-https
sudo apt install ca-certificates
sudo apt install curl
sudo apt install software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Sin embargo, en el momento de escribir este artículo, estoy utilizando, 18.10, y estas instrucciones no son válidas. Directamente he tirado de los repositorios de Ubuntu,
sudo apt update
sudo apt install docker
Instalando docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Aquí he tirado también de los repositorios oficiales de Ubuntu,
sudo apt install docker-compose
Instalando Node y NPM
En el caso de Node y NPM he hecho lo mismo que en los casos anteriores, es decir, tirar de repositorio. De esta manera, el procedimiento es tan sencillo como ejecutar las siguientes órdenes,
Para Node:
sudo apt install nodejs
Casualmente la versión de node que viene en Ubuntu 18.10 es la 8.11 que es compatible con los requerimientos indicados anteriormente.
Mientras que para NPM
sudo apt install npm
Instalando
Una vez ya hemos instalado todo lo anterior, que en mi caso ha sido muy fácil porque he utilizado todos los paquetes desde los repositorios oficiales de Ubuntu, ha llegado el momento de instalar WP Local Docker. Para instalar WP Local Docker, de nuevo vamos a un terminal y sencillamente ejecutamos,
npm install -g wp-local-docker
Y con esto ya tenmos instalado nuestro creador de entornos de desarrollo instalado. Para confirmar que todo es correcto podemos ejecutar la siguiente línea,
10updocker --version
Que nos tiene que dar como resultado algo como lo que ves a continuación,
WP Local Docker
Version 2.1.39
Configurar y actualizar
La primera vez que ejecutas un comando de WP Local Docker se establecerá la configuración por defecto. A partir de aquí, cada uno de los entornos de desarrollo para WordPress que crees lo puedes encontrar en ~/wp-local-docker-sites
. Es posible configurar y personalizar el creador de entornos utilizando 10updocker configure
.
Inicialmente no es necesario que configures nada. Con la configuración por defecto funciona perfectamente.
Por otro lado, para actualizar tu creador de entornos de desarrollo, tienes que ejecutar la siguiente orden,
npm update -g wp-local-docker
Uso y funcionamiento de WP Local Docker
Una vez ya tenemos instalado y configurado WP Local Docker, ha llegado el momento de crear nuestro primer entorno de trabajo. Y con nuestro primer entorno de trabajo me refiero a nuestro primer WordPress. Si, efectivamente, puedes tener levantados tantos WordPress como necesites, aunque por cuestiones de productividad no deberías de tener mas de uno. Pero, esto último solo depende de ti.
Vamos allá, para crear un entorno de trabajo, es tan sencillo como ejecutar,
10updocker create
A partir de aquí comenzará a hacerte una serie de preguntas para crear tu primer WordPress. Este sencillo cuestionario es el que puedes encontrar a continuación. Como, tu mismo puedes ver, no es nada del otro mundo.
What is the primary hostname for your site? (Ex: docker.test) www.atareao.es
? Are there additional domains the site should respond to? No
? What version of PHP would you like to use? 7.2
? Do you need Elasticsearch No
? Do you want to install WordPress? Yes
? Select a WordPress installation type: Single Site
? Do you want to remove the default content? Yes
? Site Name www.atareao.es
? Admin Username admin
? Admin Password password
? Admin Email admin@example.com
Una vez resuelto el cuestionario, comienza el proceso de creación, que reproduzco a continuación,
Ensuring global network exists
- Network exists
Ensuring global cache volume exists
- Creating Volume
Ensuring global services are running
Starting global_gateway_1 ... done
Starting global_mailcatcher_1 ... done
Starting global_dns_1 ... done
Starting global_mysql_1 ... done
Starting global_phpmyadmin_1 ... done
Waiting for mysql...
Copying required files...
Generating docker-compose.yml file...
done
Creating database
Locating project files for www-atareao-es
Starting docker containers for www-atareao-es
Creating network "www-atareao-es_default" with the default driver
Creating www-atareao-es_memcached_1 ... done
Creating www-atareao-es_memcacheadmin_1 ... done
Creating www-atareao-es_phpfpm_1 ... done
Creating www-atareao-es_nginx_1 ... done
Downloading WordPress
Downloading WordPress 5.0.2 (en_US)...
Using cached file '/var/www/.wp-cli/cache/core/wordpress-5.0.2-en_US.tar.gz'...
Success: WordPress downloaded.
Configuring WordPress
Success: Generated 'wp-config.php' file.
Success: WordPress installed successfully.
Success: Rewrite rules flushed.
Success: Rewrite structure set.
Success: The site at 'https://atareao.es' was emptied.
Deleted 'hello' plugin.
Deleted 'akismet' plugin.
Success: Deleted 2 of 2 plugins.
Warning: The 'twentyfifteen' theme could not be found.
Deleted 'twentysixteen' theme.
Success: Deleted 1 of 2 themes.
Success: Deleted 6 of 6 widgets.
Adding entry to hosts file
Added to hosts file successfully!
Successfully Created Site!
Operaciones
A parte del proceso de creación, también puedes realizar otras operaciones con los diferentes entornos de desarrollo. Operaciones, como las que te listo a continuación,
- borrar
10updocker delete <hostname>
- detener
10updocker stop <hostname>
- iniciar
10updocker start <hostname>
- reiniciar
10updocker restart <hostname>
Otra característica interesante de este entorno de desarrollo, es que puedes ejecutar commandos WP CLI. Algunos ejemplos,
10updocker wp search-replace 'atareao.es' 'atareao.com'
10updocker wp site list
Shell y logs
Puedes acceder al shell de cada uno de los contenedores de tu entorno de desarrollo utilizando 10updocker shell [<service>]
.
De la misma forma, también puedes acceder a los diferentes registros, logs, utilizando 10updocker log [<service>]
.
Conclusión
Es probable que si te dedicas al desarrollo de páginas web con WordPress conozcas esta herramienta. Si no tienes la suerte de conocerla, te recomiendo que la pruebes. Funciona de forma espectacular, y es toda una ayuda a la hora de trabajar en el desarrollo de temas y complementos para WordPress.
Para mi, esta herramienta ha venido a sustituir todos los medios que he estado empleando hasta hace poco. Sinceramente, es una solución espectacular y sencilla de mantener.
Más información