Laravel es un framework de desarrollo PHP muy potente y cada vez más utilizado. Además tiene una comunidad impresionante, donde muchas personas contribuyen a crear un ecosistema genial. Hoy vamos a ver como empezar un proyecto Laravel y además añadirle Docker para así no tener que instalar nada de software en nuestro ordenador y hacerlo todo usando contenedores de Docker.

Creando el proyecto Laravel
En la documentación de Laravel (bastante buena por cierto), nos indican las mejores maneras de comenzar. Como la idea es utilizar Docker para todo, lo que haremos será clonar el proyecto de Laravel:
$ git clone https://github.com/laravel/laravel webapp
A mi me gusta utilizar git, sobre todo para poder ir commiteando los cambios que están bien y poder volver atrás si nos equivocamos, así que en este punto lo que vamos a hacer es iniciar un repositorio de git en la carpeta del proyecto
$ cd web app
$ rm -rf .git/ ## Cuidado con este paso
$ git init
$ git add .
$ git commit -m 'initial commit'
Debemos tener cuidado con el paso de borrar el git anterior ese rm -rf .git
es un paso muy crítico y hay que estar muy seguro de donde estamos, cuando lo hagamos. Ahora vamos a crear el contenedor de docker.
Creando el contenedor de Docker para Laravel
Ahora podríamos empezar a escribir nuestro docker-compose.yml, podríamos escribir nuestros Dockerfile, o buscar imágenes en docker, pero aquí hay algo mucho mejor LaraDock. LaraDock es un proyecto que nos proporciona un entorno de desarrollo en PHP usando Docker. Es muy sencillo de utilizar y además muy configurable.
Instalando LaraDock
La manera más sencilla de usar LaraDock en nuestro proyecto es como un submódulo de git. Los submódulos de git no son más que proyectos git dentro de una subcarpeta dentro de nuestro proyecto. Por ello, para instalar LaraDock solo tenemos que añadir el submódulo dentro de nuestro proyecto.
webapp $ git submodule add https://github.com/LaraDock/laradock.git
Configurando LaraDock
Laradock es un proyecto muy versatil, podemos elegir utilizar apache, nginx, redis, caddy, elasticsearch con tan solo un comando. En nuestro caso solo usaremos nginx y mysql. Además modificaremos PHP para tener xdebug desde el principio.
Abrimos el archivo docker-compose.yml
y buscamos INSTALL_XDEBUG para poner esta variable a true
...
workspace:
build:
context: ./workspace
args:
- INSTALL_XDEBUG=true
...
Hay 2 apariciones, sobre la linea 19 y sobre la linea 50. Con esto ya podemos lanzar nuestros containers ejecutando:
$ docker-compose up -d nginx mysql
Como hemos dicho antes, solo usaremos nginx y mysql en un principio.
Configurando Laravel env
En mi archivo /etc/hosts tengo apuntado un DNS para Docker. Yo utilizo una maquina virtual (docker-machine) para ejecutar Dokcer en Mac. Así que en mi caso tengo añadida la linea 192.168.100.99 docker.dev
Si este no es tu caso y utilizas Docker en local puedes añadir la linea 127.0.0.1 docker.dev
a tu /etc/hosts
Ahora antes de arrancar de ir a chrome e ir a http://docker.dev tenemos que configurar nuestro archivo .env con la configuración de la base de datos y demás.
Ejecutamos cp .env.example .env
en nuestro proyecto de Laravel y modificamos las lineas
APP_URL=http://docker.dev
DB_HOST=mysql
REDIS_HOST=redis
Ejecutando workspace en LaraDock
Ya están ejecutándose los containers en nuestra máquina. Si ejecutamos el comando docker-compose ps
Veremos algo como esto:
webapp/laradock ‹master*› » docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------
laradock_applications_1 /true Exit 0
laradock_mysql_1 docker-entrypoint.sh mysql ... Up 0.0.0.0:3306->3306/tcp
laradock_nginx_1 nginx Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_php-fpm_1 php-fpm Up 9000/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
LaraDock tiene un container especial y ese es laradock_workspace_1 que es donde tenemos todo lo necesario para desarrollar. Así que todo lo que necesitemos ahora relacionado con el desarrollo, lo haremos dentro de ese contenedor. Para ello lo que vamos ha hacer será conectarnos al container y ejecuta ahí lo que necesitemos:
webapp/laradock $ docker-compose exec workspace bash
Lo primero será instalar todas las dependencias con composer
root@e8f9435e90f7:/var/www# composer install
root@e8f9435e90f7:/var/www# php artisan key:generate
Listo.
Ya podemos ir a Chrome o a nuestro navegador favoritos y navegar hasta http://docker.dev
Configurando XDebug con PHPStorm
Para saber si tenemos bien instalado xdebug y demás LaraDock tiene script que nos indica el estado de xdebug, además de poder activarlo/desactivarlo. Para ejecutar el script vamos a la carpeta laradock dentro de nuestro proyecto y ejecutamos:
webapp/laradock ‹master*› » chmod +x xdebugPhpFpm
webapp/laradock ‹master*› » ./xdebugPhpFpm
1 ↵
xDebug [Stop | Start | Status] in the laradock_php-fpm_1 container.
xDebug must have already been installed.
Usage:
./xdebugPhpFpm stop|start|status
Ahora ya tenemos el script listo, para ver el estado ejecutamos ./xdebugPhpFpm status
y deberíamos tener xDebug funcionando
Para configurar XDebug, lo mejor es poner un punto de ruptura en el archivo public/index.php
, pinchar sobre el icono del teléfono y acceder a la url http://docker.dev a través del navegador.
Arrancará el debug y configuramos el servidor en PHPStorm. El nombre del servidor debe ser Laravel y el mapping debe ser hacia /var/www como se muestra en la imagen.
Listo con esto tendremos todo funcionando.
Conclusiones
Laravel es un framework con una comunidad enorme que mantiene proyectos geniales (más información aquí). Además unido a Docker podemos montar un proyecto sin necesidad de instalar nada en nuestro equipo.
Hola jesus, he estado aprnediendo apra instalar este nuevo docker, pero he tenido bastante problemas, al intentar hacer el docker-compose up -d etc etc me tira un error grandisimo, y si ya cambie lo que mencionas anteriormente en docker-compose.yml. por favor si me puedes ayudar de lo agradeceria. aqui te dejo mi correo maxilive4@gmail.com
Me gustaLe gusta a 1 persona