¿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.
[wp-svg-icons icon=»info» wrap=»i»] 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.
[wp-svg-icons icon=»question» wrap=»i»] 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
[wp-svg-icons icon=»smiley» wrap=»i»] 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: