Crea tu Entorno de Desarrollo para Laravel usando Docker, Nginx y PHP-FPM

Dificultad: Intermedio
Tiempo de Lectura: 4 minutos

¿Buscas la solución para crear un entorno de desarrollo igual al espacio en donde alojaras tu aplicación web? Si es así, en en el post de hoy te vamos a mostrar cómo instalar y configurar Laravel usando Docker como plataforma de virtualización, con los servicios Nginx y PHP-FPM, bajo plataformas basadas en RPM como Fedora o CentOS Linux.

Laravel usando Docker

Antes de comenzar con el tutorial en si, vamos a ver qué es Docker y las ventajas que nos ofrece como desarrolladores.

Docker tiene como idea crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues.

¿Para que sirve?

Docker, me permite meter en un contenedor, todas aquellas cosas que mi aplicación necesita para ser ejecutada y la propia aplicación. Así yo me puedo llevar ese contenedor a cualquier máquina que tenga instalado Docker y ejecutar la aplicación sin tener que hacer nada más, ni preocuparme de qué versiones de software tiene instalada esa máquina, de si tiene los elementos necesarios para que funcione mi aplicación, de si son compatibles.

Yo ejecutaré mi aplicación software desde el contenedor de Docker, y dentro de él estarán todas las librerías y cosas que necesita dicha aplicación para funcionar correctamente.

¿Es Docker igual a una maquina virtual? En realidad no, si bien es similar en el propósito, es mejor en rendimiento y aplicación.

Ventajas

Mientras cada aplicación en máquinas virtuales necesita contar con un sistema operativo completo virtualizado (ocupando, por ejemplo, 1 GB de memoria RAM), Docker aprovecha el kernel de la máquina real y, con su motor, tan solo carga en la memoria las librerías y dependencias necesarias para ejecutar la aplicación, despreciando todo lo demás y ocupando alrededor del un 80% menos, por ejemplo, 200 MB de RAM.

Todos los contenedores son portables, por lo que podemos llevarlos fácilmente a cualquier otro equipo con Docker sin tener que volver a configurar nada.
Al no virtualizar un sistema completo, sino solo lo necesario, el consumo de recursos es mínimo. El ahorro de recursos es de alrededor de un 80%.
Docker se encarga de todo, por lo que los contenedores tan solo deben tener lo necesario para que la aplicación funcione, por ejemplo, aquellas librerías, archivos y configuraciones necesarias para poder realizar su función.

 Instalación de Docker

Docker se instala de forma muy sencilla y solo toma unos minutos completar la configuración para poder comenzar a desarrollar tu aplicación.
Antes de proceder con la instalación crearemos el siguiente directorio “Codigos” dentro de /home/usuario/Documentos/

El primer paso para poder instalar docker es abrir la terminal e ingresar como root para luego actualizar los paquetes existentes

yum update

Agregamos el repo de docker a nuestro sistema

rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Instalamos Docker ejecutando el siguiente comando:

yum -y install docker-io

Iniciamos el servicio Docker

service docker start

Finalmente creamos un contenedor, seteamos el nombre y montamos una imagen,

docker create -i -t -v '/home/usuario/Documentos/Codigos/:/var/www/html' --name MiPrimerDocker centos:6.6 /bin/bash

Este comando indica el espacio de trabajo /home/diego/Documentos/Codigos/ replicandose los cambios que realicemos en nuestro proyecto, en el mismo contenedor dentro del directorio /var/www/html; en este caso la imagen que escogimos fue centos:6.6

Otros comandos útiles de Docker

docker images => este comando nos brinda información acerca de cada una de las imágenes que se encuentran en nuestra maquina
docker ps -a => mostrara los contadores

Luego de tener Docker instalado es hora de configurarlo para correr Laravel y poder utilizar ese contenedor como el servidor virtual que alojara nuestra web, para ello iniciaremos nuestro docker:

docker start MiPrimerDocker (Asi le puse de nombre al contenedor )
docker attach MiPrimerDocker

Instalar y configurar Laravel, Nginx, PHP-FPM y algunas herramientas más

Una vez dentro de el instalaremos algunas herramientas que necesitaremos y lo prepararemos para poder comenzar a desarrollar

yum -y install wget which openssh openssh-client nano curl unzip gcc g++ tar mlocate

Repositorios Nginx y PHP – FPM

Instalamos los repositorios EPEL y Nginx para instalar el servidor web

yum -y install epel-release
wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -i nginx-release-centos-6-0.el6.ngx.noarch.rpm
rpm -iUvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Instalando Nginx

yum -y install nginx

Configurando Instalacion de php-fpm

yum -y --enablerepo=remi,remi-php56 install php php-common

Instalando PHP-FPM

yum -y --enablerepo=remi,remi-php56 install php-cli php-gd php-pear php-mysqlnd php-pdo php-pgsql php-pecl-mongo php-sqlite php-pecl-memcached php-pecl-memcache php-mbstrin php-xml php-soap php-mcrypt php-fpm

MySQL

yum install mysql mysql-server -y

Instalando Composer

Composer es el manejador de dependencias que usa Laravel para instalarlas y configurarlas de forma rápida.

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer

Instalando Laravel

cd /var/www/html
git clone https://github.com/laravel/laravel.git
cd /var/www/html/laravel

Modificamos permisos

chown -R apache.apache /var/www/html/laravel
chmod -R 755 /var/www/html/laravel

Generamos la clave para Laravel

php artisan key:generate

El output debería ser algo parecido a:

Application key [Z4hfTHU7hFMwHauzOwv7rO9e0MJ9UnhQ] set successfully.

Modificamos el archivo .env copiando el contenido de .env-example dentro del directorio Laravel

Listo!

Ya tenemos Laravel usando Docker listo, queda únicamente configurar el dominio virtual y levantar los servicios de sistema

Ingresamos al archivo virtual.conf ejecutando el siguiente comando

nano -w /etc/nginx/conf.d/virtual.conf

En el agregamos lo siguiente contenido:

server_name www.example.com example.com;
root /var/www/html/laravel/public;
index index.php index.html index.htm;

Levantamos los servicios finalmente

service nginx start
service php-fpm start
service mysqld start

Finalmente ejecutamos ifconfig

ifconfig

Obtenemos la ip del contenedor y con ella nos dirigimos al archivo host de nuestro equipo local, apuntamos el dominio que creamos en el virtual.cnf a la ip del contenedor.

Nos dirigimos al navegador ingresamos el dominio y comprobamos que funciona correctamente.

Conclusión

El tener un entorno de desarrollo ágil Laravel usando Docker, que te permite simular las futuras condiciones de funcionamiento  sin depender de  instalar o configurar tu entorno local para esa aplicación, nos da una gran ventaja a la hora de programar. La creación de contenedores con diferentes configuraciones y propiedades no abren un abanico enorme de posibilidades de desarrollo, el cual no tiene comparación alguna.

Por ultimo podemos destacar las garantías a la hora de migrar el proyecto a su servidor real, post producción sin miedo a llevarnos sorpresas de incompatibilidades u otros problemas.

 

Lecturas recomendadas:


¿Te resultó útil el artículo? Compártelo con tus colegas: