Iniciando un proyecto en Laravel con Docker

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.

16717763124_62fdc893e5_z
Laravel | Sotaro OMURA

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.

debug

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.

debug-server-config

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.

Anuncios

Comenta la entrada

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s