Drupal con Docker | Configuración entorno local
Si haz decidido dedicarte profesionalmente al desarrollo de aplicaciones web, lo ideal es que comiences a experimentar con las herramientas y opciones más actuales que existen en el mercado. Una de mis recomendaciones es el uso de contenedores Docker, que nos permitirá configurar, replicar y/o compartir, entornos de trabajo, evitando los históricos fallos de versión del lenguaje, o del servidor con el que estemos trabajando en nuestros proyectos.
En el caso de Drupal, no basta con añadir un archivo Dockerfile, para contar con todos los requerimientos necesarios, pero ya existen varias alternativas disponibles, facilitándonos esa parte del proceso. Una de ellas es la conocida como Docker4Drupal, cuyo mantenimiento continuo y permanente, nos permite realizar las instalaciones de Drupal, en cada nueva versión publicada.
Docker4Drupal, tiene múltiples funcionalidades, que podremos activar, personalizar y utilizar, dependiendo de las necesidades del proyecto, como son el administrador de base de datos Adminer, Xdebug, servidor para correos locales Mailhog, servidor de base de datos Postgres, servidor Apache Solr, entre otros.
Además de utilizar las variables de entorno, que nos pueden servir para realizar comprobaciones sobre el comportamiento de nuestras aplicaciones, sin la necesidad de realizar despliegues en otros entornos adicionales a nuestro local.
Aunque no profundizaremos en todas las opciones y configuraciones disponibles con Docker4Drupal, te animo a que visites su página oficial https://github.com/wodby/docker4drupal y eches un vistazo a su documentación, para que conozcas un poco más acerca de todo lo que tiene para ofrecernos.
Cómo instalar un entorno local con Docker4Drupal
Requisitos:
- Entorno Linux: Yo he utilizado el subsistema WSL2, con Ubuntu 2204, dentro de una máquina Windows 11. HAZ CLIC AQUI
- Docker Desktop: Para las instrucciones desde su página oficial. HAZ CLIC AQUI
Para este curso, utilizaremos Docker4Drupal, dentro de un entorno Linux (Ubuntu 2204), con WSL2 y Windows 11, de esta manera no tendremos que configurar máquinas virtuales adicionales, que podrían consumir muchos más recursos de los necesarios en nuestra máquina. Aunque si lo deseas, también puedes aplicar los mismos pasos en la distribución de Linux que prefieras.
Si quieres reproducir exactamente los ejercicios que vamos a detallar en este curso, sólo necesitarás descargar y configurar DockerDesktop y WSL2 en tu ordenador y a continuación, abrir la consola para continuar con el resto de la instalación que verás en el video.
Descarga y configuración del Docker4Drupal
Ahora que ya tienes configurado el entorno Linux donde vas a trabajar, abriremos nuestra consola y nos colocaremos en la ubicación donde instalaremos nuestro Drupal 10, a continuación, abriremos la url del respositorio de Docker4Drupal y lo clonaremos, para comenzar con la descarga de los archivos que vamos a necesitar.
Si quieres, puedes aprovechar el proceso de clonación para configurar el nombre de tu carpeta, al mismo tiempo que realiza la descarga, para ello, tendrás que añadir una línea como la siguiente:
git clone https://github.com/wodby/docker4drupal.git/ drupal_10
Esto creará la carpeta con el nombre drupal_10 en la ubicación que hayas seleccionado y dentro de ella colocará todos los archivos descargados desde el repositorio, donde podremos continuar con otros cambios necesarios, antes de descargar el esqueleto o estructura principal de nuestro proyecto de Drupal.
Configuración inicial del servidor
Una vez terminada la descarga de los archivos para nuestro servidor, el siguiente paso será la personalización de algunas opciones, para que podamos descargar, arrancar y acceder a nuestro proyecto de Drupal, que descargaremos, una vez terminados estos primeros cambios.
Así que, con nuestro IDE favorito, abriremos la carpeta donde hemos descargado los archivos del repositorio, para comenzar con las primeras configuraciones.
Paso 1 - Eliminar docker-compose.override.yml
Eliminaremos el archivo docker-compose.override.yml, para que podamos controlar el comportamiento del servidor a través de la configuración en la variable de entorno.
Paso 2 - Ajustes en la variable de entorno.
Por el momento, el archivo que necesitamos conocer y ajustar es el responsable de nuestro entorno de trabajo, conocido como .env, donde podremos personalizar los siguientes detalles:
Nombre del proyecto, url y puerto de conexión
- Nombre del proyecto: PROJECT_NAME=my_drupal10_project
- Url del proyecto: PROJECT_BASE_URL=drupal.docker.localhost
- El puerto de conexión: PROJECT_PORT=8000
Cuando hayamos realizado el cambio en la url del proyecto y el puerto, podremos acceder a nuestro Drupal, una vez descargado, escribiendo en el navegador
http://drupal.docker.localhost:8000
Nombre de usuario, base de datos y contraseña
- Nombre de la base de datos: DB_NAME=drupal
- Nombre del usuario para la base de datos: DB_USER=drupal
- Contraseña del usuario de base de datos: DB_PASSWORD=drupal
Arrancando nuestros contenedores Docker
Un servidor basado Docker que ejecuta varios contenedores, conectados entre sí, que permiten ejecutar nuestro código sin la necesidad de instalar ningún archivo extra en nuestra máquina, esto es lo que se conoce como virtualización del entorno.
En otra palabras, en lugar de arrancar un servidor tipo XAMPP, con todo incluido y administrable desde un panel de control, como hacíamos años atrás, con Docker, tendremos varios servicios independientes, que podremos modificar y/o ajustar, según nuestras necesidades.
Si exploras un poco más, dentro del archivo .env, que modificamos hace un momento, podrás comprobar que tienes varias opciones de versión y configuración, que podrás activar o desacticar, añadiendo o quitando, el símbolo de almohadilla (#), que acompaña cada una de las definiciones:
### --- MARIADB ---- MARIADB_TAG=10.11-3.26.3 #MARIADB_TAG=11.0-3.26.3 #MARIADB_TAG=10.10-3.26.3 #MARIADB_TAG=10.9-3.26.3 #MARIADB_TAG=10.6-3.26.3 #MARIADB_TAG=10.5-3.26.3 #MARIADB_TAG=10.4-3.26.3 ### --- VANILLA DRUPAL ---- DRUPAL_TAG=10-4.58.1 #DRUPAL_TAG=9-4.58.1 #DRUPAL_TAG=7-4.58.1 ### --- PHP ---- # Linux (uid 1000 gid 1000) PHP_TAG=8.2-dev-4.47.1 #PHP_TAG=8.1-dev-4.47.1 #PHP_TAG=8.0-dev-4.47.1
Para arrancar nuestros contenedores, tenemos dos opciones:
docker compose up -d
O también puedes utilizar el paquete Make, que viene por defecto instalado con la distribución de Ubuntu, en este caso el comando para arrancar los contenedores sería:
make up
Una vez ejecutado cualquiera de los anteriores comandos, si todo va bien, deberías ver en tu consola, algo parecido a la siguiente imagen:
Descargando Drupal en nuestro servidor con Docker
Gracias a que hemos eliminado previamente, el archivo docker-compose.override.yml, que reescribe la configuración de nuestros contenedores, podremos descargar el esqueleto de un proyecto Drupal 10, en este caso, para colocarlo dentro de nuestra carpeta del rood y así tener todos los archivos listos, por si en un futuro queremos compartir nuestro código, con otros miembros del equipo o trasladarlo a otra máquina.
Pasos para descargar el Esqueleto de Drupal
Paso 1 - Acceder al contenedor PHP
A partir de Drupal 8, es recomendable utilizar el gestor de paquetes Composer, para garantizar la descarga total de las dependencias y facilitar las tareas de actualización y/o mantenimiento de Drupal, una vez esté en funcionamiento.
Composer está disponible dentro del contenedor encargado de ejecutar PHP, así que primero comprobaremos los nombres de todos los contenedores y luego accederemos al contenedor de PHP. Para conocer los contenedores que tenemos funcionando actualmente, ejecutaremos el siguiente comando en la consola:
docker ps
Esto nos debería devolver el listado con todos los contenedores que estén en funcionamiento:
En nuestro caso, el contenedor de php se llama my_drupal10_project_php, para acceder dentro del contenedor y poder ejecutar el comando composer, escribiremos lo siguiente en la consola:
docker exec -it my_drupal10_project_php bash
Esto nos colocará dentro de la carpeta ROOT del servidor:
A continuación, podremos descargar el esqueleto de Drupal 10, añadiendo el siguiente comando:
composer create-project drupal/recommended-project vaciar
Este comando descargará todos los arhivos necesarios para una instalación de Drupal 10, dentro de la carpeta que yo he llamado VACIAR, para que recordemos que no debemos dejar nada dentro una vez termine la descarga.
Añadiendo archivos no deseados al .gitignore
Antes de sacar los archivos de la carpeta VACIAR, para evitar que se suban por error, cualquiera de los archivos de Docker, que sólo deberían estar en nuestro servidor local, tendremos que añadir esos archivos al .gitignore que nos viene por defecto al descargar Docker4Drupal, así que, lo abriremos con nuestro editor, y a continuación, añadiremos todos los archivos correspondientes a Docker y sus contenedores:
El archivo .gitignore, quedaría de la siguiente manera, con nuestros cambios añadidos:
.idea/ mutagen.yml.lock .vscode #ignoramos los archivos de Docker y el servidor tests .dockerignore .env docker-compose.yml docker.mk LICENSE.md Makefile README.md traefik.yml
Moviendo los archivos de Drupal a la raiz del servidor
Ya que tenemos configurado el archivo .gitignore, procederemos a extraer todos los archivos de la carpeta vaciar, para colocarlos en la carpeta raíz de nuestro servidor y de esta forma iniciar el proceso de instalación del Drupal. Para ello, no hace falta que estemos dentro del contenedor:
mv vaciar/* .
mv vaciar/.* .
Con esto, quedarán fuera de la carpeta vaciar, todos los archivos de Drupal y a continuación, podremos eliminar la carpeta.
sudo rm -rf vaciar
Arrancando el instalador de Drupal
Ahora que ya hemos colocado todos los archivos necesarios para instalar Drupal, podremos proceder con el instalador, pero antes, para estar seguros de que tenemos todo actualizado a la versión más reciente disponible, ejecutaremos el comando update de Composer, desde nuestro contenedor php:
composer update
El resultado, debería ser algo parecido a la siguiente imagen:
Para comprobar que podremos instalar nuestro Drupal 10, abriremos el navegador y escribiremos los datos que constan en la variable de entorno, y que explicamos al principio de este ejercicio, si no has cambiado ninguno de los valores por defecto, deberías escribir esto en tu navegador :
http://drupal.docker.localhost:8000/
El resultado, será que se pondrá en marcha el instalador de Drupal 10.
Proceso de instalación
Al hacer clic en la primera pantalla del instalador, es posible que nos encontremos con algunos mensajes, relacionados con archivos que nos faltan por descargar, crear o configurar. El primero de ellos, en mi caso es una alerta que me advierte de la ausencia de la carpeta translations, encargada de alojar los archivos relacionados con las traducciones de Drupal, ya que nuestra instalación será en Español.
Para corregir el error, creaemos la carpeta files, dentro de la ubicación: web/sites/default/, y acontinuación, daremos permisos de escritura a la carpeta files...
Si volvemos al navegador y refrescamos, veremos que nos deja continuar con el proceso de instalación, hasta la siguiente pantalla:
Al hacer clic en el botón Guardar y continuar, nos encontraremos con otro mensaje de alerta:
El instalador Drupal necesita que se cree un archivo ./sites/default/settings.php como parte del proceso de instalación. Así que simplemente, seguiremos las instrucciones, copiaremos el archivo default.settings.php y lo renombraremos a settings.php, asegurándonos de otorgarle permisos de escritura, que serán necesarios durante el resto de la instalación, para que Drupal pueda configurar los datos de acceso a la base de datos y la carpeta para la sincronización.
cp web/sites/default/default.settings.php web/sites/default/settings.php chmod -R 777 web/sites/default/settings.php
Esta vez, cuando hayamos refrescado el navegador, veremos la pantalla donde tendremos que añadir los datos de acceso a la base de datos, que son los que podremos confirmar en nuestra variable de entorno .env, es muy importate que en lugar de dejar localhost, cambiemos el servidor de la base de datos por mariadb, o nos devolverá un error de permisos.
Tan pronto como se terminen de descargar las traducciones, debido a que nuestra instalación es en Español, veremos la pantalla final, donde debemos rellenar los detalles del usuario administrador, el correo electrónico que utilizará Drupal, para comunicarse con los usuarios que interactuén, el lenguaje, horario y pais...
Rellenaremos todo, presionaremos el botón continuar, y por fin, hemos terminado el proceso completo de instalación de un proyecto Drupal 10, con Docker.
Ahora ya podremos comenzar a trabajar con nuestro Drupal.
Añadiendo archivos al repositorio
Como hemos comentado al principio, por lo general, cuando estás trabajando con algún proyecto de desarrollo, en algún momento tendrás que realizar el despliegue al entorno de producción, por lo cual es muy recomendable, que desde el principio, te acostumbres a trabajar con un repositorio, añadiendo y comiteando tus cambios, a medida que vayas avanzando en el proceso.
Para evitar que se añadan archivos innecesarios de Drupal, como vendor o files, actualizaremos el archivo .gitignore, antes de realizar nuestro primer commit.
Accede a este enlace y copia todo su contenido, justo debajo de nuestros últimos cambios en el .gitignore:
https://drupaladicto.com/snippet/git-ignore-para-drupal
Una vez actualizado tu archivo, podemos añadir y comentar nuestros cambios:
git init git add . git commit -m "Archivos base para instalar Drupal 10"
Así nos aseguramos de que, al ejecutar el comando de subida a nuestro repositorio, git pull, sólo subamos lo necesario para no ocupar espacio innecesario en nuestro repositorio final.