¿Cómo montar un entorno de desarrollo para Drupal 8 con docker4drupal?

¿Cómo montar un entorno de desarrollo para Drupal 8 con docker4drupal?

Hace poco inicié mis primeros pasos en el apasionante camino del desarrollo web en Drupal, uno de los primeros retos a los que me enfrenté fue montar un entorno de desarrollo para mis prácticas. Como todo principiante tuve muchos intentos y errores, pero gracias a la ayuda de mis compañeros logré culminar con éxito este primer paso, lo que me inspiró a compartir mi experiencia a través de este artículo.

En este artículo veremos paso a paso cómo montar un entorno de desarrollo utilizando docker4drupal. A continuación se describirán los requisitos necesarios de Drupal 8, los cuales se cumplirán con la instalación de docker4drupal.

Servidor Web: Nginx, Apache, Internet Information Server o cualquiera que soporte PHP 7

Motor de base de datos:  MYSQL 5.5.3 o equivalente como Mariadb 5.5.20 o Percona 5.5.8 en estas versiones o superiores

Lenguaje PHP: Versión 7.1 en 64 Bits con las siguientes extensiones

  • PDO
  • XML
  • GD o Imagemagick
  • Openssl
  • Json
  • Curl
  • Mbstring

Más información puede ser consultada en los requerimientos de sistema de Drupal 8

Para montar un entorno local de desarrollo puede elegir alguna de las siguientes opciones:

  • Realizar la instalación de estos componentes por separado y configurarlos.
  • Instalar paquetes predeterminados como Wamp Server para Windows, Mamp Server para Mac o Xampp para Windows, Mac o Linux todas son muy buenas opciones sin embargo están diseñados para propósitos generales, lo cual indica que tras su instalación será necesario hacer algunas configuraciones adicionales para que funcionen correctamente para Drupal 8.
  • Implementar docker4drupal o similares como Docksal los cuales están diseñados específicamente para Drupal, mediante contenedores optimizados para desarrollo.

Un poco más sobre Docker y Docker4Drupal...

Trabajar con Docker en los ambientes de desarrollo nos permite ahorrar mucho tiempo en los despliegues de entornos y un mejor aprovechamiento de nuestros recursos de hardware.

Docker4Drupal es un conjunto de imágenes para docker optimizadas para Drupal que le permiten disponer de un ambiente de desarrollo para su despliegue en cuestión de minutos.

Es un proyecto de código abierto disponible para libre descarga y uso desde el repositorio de Docker4Drupal en Github. El entorno se construye con las instrucciones definidas en el archivo docker-compose.yml las cuales son interpretadas por docker-compose.

Requerimientos para ejecutar Docker4Drupal

Primero es necesario descargar Docker-compose.

  • Sistema Operativo Linux (recomendado), MacOS o Windows Pro 10 64 Bits, Enterprise o Education.
  • Docker

Las instrucciones completas sobre cómo aprovechar estos entornos las puede encontrar en la documentación oficial sobre entornos locales con Docker4Drupal.

Para la fecha en que se ha elaborado este documento la versión más reciente de docker4drupal es la 5.1.1, es recomendable que consulte la versión más reciente de Docker4Drupal

Descarga de Drupal 8

Nuestro siguiente paso es descargar la versión estable más reciente de Drupal 8.

En este momento descargaremos la versión 8.5.5, ya que es la última publicada para la fecha de realización de este artículo

descarga

Instalar un entorno con Docker4Drupal

A continuación lo que debe hacer es descargar el archivo docker4drupal.tar.gz, como se muestra en la siguiente imagen:

descarga

Al descomprimir el archivo docker4drupal, tendrá los siguientes archivos: 

archivos

  • docker-compose.yml: es el archivo con las instrucciones de construcción del entorno
  • docker-sync.yml: muy importante para usarlo en entornos MacOs, se usa en conjunto con docker-compose.yml
  • .env: es el archivo donde se definen las versiones y demás variables de las imágenes a usar en el archivo docker-compose.yml, si no puede verlo puede ser que el sistema operativo lo esté ocultando, para eso tendrá que configurarlo para que muestre los archivos ocultos
  • Makefile: Contiene comandos para facilitar la gestión de los contenedores, mas información de los comandos los puede encontrar en Drupal Stack Documentation.
  • traefik.yml: Traefik es un proxy balanceador HTTP usado por docker4drupal como front-end del stack en caso que quiera trabajar en el modelo multi entornos va a necesitar este archivo para hacer el redireccionamiento, en un modelo estándar no lo necesitará.

Configuración y despliegue del entorno

  • En la ubicación donde desee almacenar su proyecto debe crear una carpeta dándole  el nombre que prefiera, en este caso la hemos querido llamar proyectodrupal, fíjese cómo se ha creado dentro de en una carpeta llamada docker, que a su vez se encuentra dentro de otra llamada workspace, como lo mencionamos  anteriormente, puede ser en cualquier directorio, en el que usted prefiera.

ubicacion

  • Ubique los archivos descomprimidos de docker4drupal dentro de la carpeta que creó.

carpeta

  • Si el código lo tiene en un repositorio, clone el código fuente en una carpeta llamada code dentro del nuevo directorio, usando su herramienta de control de versiones preferida, por ejemplo git, si por el contrario tiene el código dentro de una carpeta, solo cópiela a la carpeta del proyecto y cambie el nombre a code, hemos querido que la carpeta se llame code para estandarizar el nombre, no porque sea obligatorio que se llame así, cuando ya domine la configuración del entorno podrá renombrarla como prefiera.

code

  • La carpeta debe contener el código fuente del sitio, es decir, al ingresar debería ver lo siguiente:

carpeta

  • En la carpeta proyectodrupal, cree una carpeta llamada mariadb-init y dentro de ella ubique el backup de la base de datos en SQL, es importante que el archivo tenga la extensión .sql, este será importado automáticamente al iniciar los contenedores, un script del contenedor de mariadb se encargará de eso.

Configuración del archivo docker-compose.yml

  • Abra el archivo docker-compose.yml en su editor de preferencia y retire los comentarios de las líneas de la definición de volúmenes para el servicio mariadb y adicional al volumen ./mariadb (líneas 13 y 14 del archivo que estamos utilizando en este ejemplo), el cual debería quedar así:

edicion

  • Al hacer esto le estamos indicando a docker que queremos montar nuestra carpeta mariadb-init dentro del contenedor mariadb como un carpeta ubicada en /docker-entrypoint-initdb.d, al iniciar por primera vez el contenedor, un script dentro de él buscará los archivos .sql y los importará en una base de datos llamada drupal.
  • En el servicio PHP debemos indicarle que el código del sitio se encuentra dentro de la carpeta code, esta definición se hace en el volumen del contenedor el cual originalmente se define como el montaje de la carpeta actual usando ./ pero como en nuestro caso el código está en la carpeta code, entonces debemos cambiarlo por ./code, fíjese en la siguiente imagen sobre el cambio realizado. Esta línea básicamente indica que nuestra carpeta code va a ser montada en el contenedor como /var/www/html.

code

  • Lo mismo hacemos para la definición del contenedor NGINX y adicional cambiamos la ruta de publicación ya que predeterminadamente espera que dentro de nuestra carpeta tengamos una carpeta llamada web, que es donde estaría el archivo index.php de Drupal, no es el caso de nuestro proyecto ya que no fue montado en esa estructura, en nuestro caso index.php se encuentra en la raíz de la carpeta code, por eso se debe retirar /web en la definición del root. Fíjese en la siguiente imagen sobre los cambios realizados. 

edicion

Configuración del archivo .env

  • Abra el archivo .env en su editor de preferencia
  • Edite el valor de PROJECT_NAME con el nombre de su proyecto, el nombre que quiera, no tiene que ser el mismo nombre de la carpeta, en minúsculas, sin espacios y sin caracteres especiales, en este caso vamos a llamarlo proyectodrupal. Adicionalmente puede cambiar los valores DB_NAME, DB_USER, DB_PASSWORD y DB_ROOT_PASSWORD a su preferencia, pero no es obligatorio.

edicion

Configuración de los parámetros de conexión a la base de datos y la carpeta de archivos

  • Dentro de la carpeta code/web/sites/default haga una copia del archivo default.settings.php y renombre esa copia a settings.php.

creacion

Nota: si va a trabajar en un entorno local deben crear un archivo settings.local.php con el siguiente script en el archivo settings.php

 

if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {

include $app_root . '/' . $site_path . '/settings.local.php';

}

 

Abra el archivo settings.php con su editor favorito y al final agregue el siguiente código:

 

$settings['hash_salt'] = 'jksdbcusdbcuocusdbcudyc';

 

$databases['default']['default'] = array (

   'database' => 'drupal',

   'username' => 'drupal',

   'password' => 'drupal',

   'host' => 'mariadb',

   'port' => '3306',

   'driver' => 'mysql',

   'prefix' => '',

);

 

Lo anterior agrega una cadena aleatoria llamada “hash_salt” la cual será usada para generar valores aleatorios y encriptar la comunicación, lo siguiente es el arreglo de conexión a la base de datos, note que los datos son los definidos en el archivo .env, así que si cambió los que venían por defecto, asegúrese de cambiarlos acá también.

Ahora debería tener su archivo settings.php como en la siguiente imagen:

edicion

Ahora cree la carpeta code/sites/default/files que es donde drupal subirá los archivos públicos y asígnele permisos de escritura.

edicion

Al tratarse de un entorno de desarrollo puede asignarle permisos de escritura para todos los usuarios, implementando el permiso 777 desde la consola, o el equivalente en su sistema operativo, es muy importante que haga esto para que Drupal pueda escribir sus archivos temporales en la carpeta files.

$ sudo chmod -R 777 files

Importante: Use el permiso 777 únicamente en un entorno local y máquina que esté bajo su control para evitar problemas de seguridad.

Ejecución del entorno

Asegúrese de que el servicio docker este iniciado.

Ahora, para ejecutar el entorno y que docker descargue, configure y despliegue los entornos, ejecute el siguiente comando usando la consola y ubicado en la carpeta del proyecto, es decir donde está el archivo docker-compose.yml que configuró.

$ docker-compose up -d

Una vez se ejecute el comando podrá ver como se descargan las imágenes de los contenedores.

carga

Para revisar el estado de los contenedores puede usar el siguiente comando:

$ docker ps 

Una vez termine debería ver la confirmación de la creación de los contenedores.

comprobacion

Revisión del entorno y configuración final

Una vez haya esperado a que cargue la base de datos, puede visitar el sitio en la siguiente URL

http://drupal.docker.localhost:8000/

Si abre esta URL y le aparece el siguiente mensaje:

error

Lo más seguro es que aún no ha terminado de cargar todos los contenedores, en dado caso, espere un momento y vuelva a cargar la página. 

Cuando los contenedores terminaron de cargar, empezaremos con la configuración de Drupal: 

instalacion

sitio

Una vez terminada la instalación y configuración de Drupal, veremos algo parecido a esto: 

drupal

En conclusión:

Trabajar con docker4drupal, nos ayuda bastante en muchos aspectos como en los despliegues del entorno, aprovechamientos de recursos de hardware, etc.

También al ser un proyecto de código abierto nos brinda las siguientes ventajas:

  • • Libre uso
  • • Detección de fallas de forma temprana
  • • Imágenes para docker optimizadas para Drupal

Esto nos beneficia porque podremos aprovechar mejor nuestro tiempo, recursos y opciones.