¿Qué ventajas presentan los entornos de desarrollo basados en virtualización?

Cuando trabajamos sobre un entorno de desarrollo demasiado básico, es probable que tengamos que enfrentarnos a algunos retos no detectados previamente, ya sea en el momento del lanzamiento a producción o cuando ponemos en marcha las inevitables actualizaciones… Afortunadamente, hoy en día,  la virtualización nos permite desplegar entornos de desarrollo, facilitando gran parte de las tareas de Desarrollo Web y la sostenibilidad de nuestros proyectos web. En este artículo, te explicamos sus ventajas de entornos de desarrollo basados en virtualización desde un punto de vista teórico y, en próximos artículos, abordaremos este tema desde puntos de vista más prácticos.

El problema

Hay algunas situaciones problemáticas derivadas de nuestro entorno de desarrollo, que nos pueden hacer pasar malos ratos, o al menos hacernos perder algo más de tiempo que lo deseable:

  • En local me funciona. ¿Cuántas veces hemos subido un proyecto a producción y comprobamos que en el servidor no está funcionando correctamente?… o al menos, de manera idéntica a cómo funcionaba en nuestro ordenador local.
    Esto es debido a que en local no tenemos exactamente el mismo entorno de ejecución que tenemos en el servidor remoto. Puede ocurrir simplemente que estemos desarrollando en una estación de trabajo Windows y que luego el servidor tenga en Linux. Puede ocurrir que las versiones del lenguaje de programación local y producción no sean las mismas, o quizás que no tengamos instaladas las mismas librerías o sus mismas versiones.
  • En mi máquina funciona. Otro problema que puedes haber encontrado cantidad de veces es que el proyecto en tu máquina funciona, pero no en la máquina de otro integrante del equipo de desarrollo. Tu compañero prueba un módulo que has desarrollado tú y te dice que no está correctamente programado.
    Este problema ocurre porque ambos integrantes del equipo no disponen de la misma configuración del entorno de desarrollo. Igual que en el caso anterior, puede que no tengan la misma versión del lenguaje, el mismo servidor web, sistema operativo, etc.

La solución

Todas estas situaciones problemáticas se resuelven de la misma manera: a través de un entorno de desarrollo basado en virtualización. Básicamente, consiste en la instalación de una máquina virtual en el ordenador del desarrollador, haciendo que nos sirva de plataforma de ejecución, en lugar de correr el código directamente en la máquina host.

Esta situación permite que todos los desarrolladores del equipo de trabajo compartan una misma virtualización como plataforma de ejecución del proyecto que están desarrollando en local. De este modo, lo que funciona para un integrante del equipo estamos seguros que funcionará también para el resto de los compañeros, ya que en el fondo todos están ejecutando el proyecto bajo el mismo sistema operativo, las mismas versiones de lenguajes y librerías, etc. Además, gracias a la virtualización del entorno de desarrollo podemos conseguir que tengamos en local exactamente los mismos recursos que tendremos en el servidor en remoto, allí donde el código va a desplegarse en producción. Lo ideal es por tanto que las virtualizaciones de los entornos de desarrollo sean una copia exacta del servidor que se va a disponer en producción, de este modo estaremos seguros que, lo que funciona en local, funcionará también en remoto.

Adicionalmente, gracias a la virtualización podemos contar con herramientas adicionales, que solamente suelen estar disponibles en servidores, como software para gestión de colas, programación de tareas recurrentes en Cron, etc.

Cómo conseguir la virtualización del entorno de desarrollo

Existen diversas alternativas interesantes para conseguir crear nuestro entorno de desarrollo virtualizado. Las más destacables son Vagrant y Docker.

  • Vagrant. Es un software que nos permite crear máquinas virtuales por medio de una declaración escrita en código. Por medio de un script podemos conseguir que se creen las máquinas virtuales en local, con unas especificaciones muy concretas. La gracia es que ese script se puede compartir entre todos los integrantes del equipo de desarrollo. Con ello conseguimos asegurarnos que todas las creaciones de máquinas sean idénticas en todos los desarrolladores. Incluso, el script de creación de la máquina virtual se puede subir a un repositorio, de modo que si alguien lo necesita cambiar, todos los desarrolladores puedan incorporar esos cambios a su entorno, manteniendo las máquinas idénticas a lo largo del tiempo.
  • Docker. Docker es un software que permite el despliegue de aplicaciones en contenedores, que son al fin y al cabo como máquinas virtuales. De un modo similar a Vagrant, se puede compartir la configuración de los contenedores donde se van a desplegar las aplicaciones, para que sean idénticas en todos los entornos de los desarrolladores, incluso en el servidor de producción. De Docker ya hemos hablado en numerosos artículos en este mismo blog.

Sabemos que todo esto te habrá sonado muy bien. Pero ¿cómo incorporar la virtualización del entorno de desarrollo en tus proyectos? No te preocupes porque te lo vamos a explicar en siguientes artículos prácticos.