DevOps

Desarrollo Laravel con Docker Compose

La preparación de un entorno de desarrollo utilizando Laravel con un servidor Nginx y una base de datos MySQL mediante Docker Compose es una tarea fundamental para aquellos que deseen trabajar en proyectos basados en esta tecnología. Docker Compose es una herramienta que facilita la definición y ejecución de aplicaciones Docker multi-contenedor, permitiendo configurar y orquestar fácilmente los servicios necesarios para una aplicación.

Para comenzar, es esencial tener instalado Docker y Docker Compose en el sistema. Una vez hecho esto, podemos proceder a crear los archivos de configuración necesarios para nuestro entorno. En este caso, necesitaremos un archivo docker-compose.yml para definir los servicios que utilizaremos.

yaml
version: '3' services: app: build: context: . dockerfile: Dockerfile volumes: - .:/var/www/html ports: - "8080:80" depends_on: - db db: image: mysql:latest environment: MYSQL_DATABASE: laravel MYSQL_USER: user MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: root ports: - "3306:3306" volumes: - db_data:/var/lib/mysql volumes: db_data:

En este archivo, hemos definido dos servicios principales: app y db. El servicio app será nuestro contenedor de Laravel, mientras que db será el contenedor de MySQL.

Para el servicio app, hemos especificado la construcción del contenedor utilizando un archivo Dockerfile que debemos crear en el mismo directorio que el archivo docker-compose.yml. El contenido de este Dockerfile puede ser algo similar a lo siguiente:

Dockerfile
FROM php:7.4-fpm WORKDIR /var/www/html RUN apt-get update && apt-get install -y \ libzip-dev \ zip \ unzip \ && docker-php-ext-install zip pdo pdo_mysql \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer COPY . . RUN composer install RUN php artisan key:generate CMD ["php-fpm"]

Este Dockerfile utiliza la imagen oficial de PHP para FPM (FastCGI Process Manager) con PHP 7.4 como base. Luego, instala algunas dependencias necesarias, como zip y unzip, y habilita extensiones PHP necesarias para Laravel, como pdo y pdo_mysql. También instala Composer para manejar las dependencias de PHP.

En cuanto al servicio db, simplemente hemos especificado que utilizaremos la imagen oficial de MySQL. Además, configuramos algunas variables de entorno para inicializar la base de datos con una base de datos llamada laravel, un usuario user con contraseña secret, y la contraseña de root como root.

Una vez que hayamos creado estos archivos de configuración, podemos proceder a construir y ejecutar nuestros contenedores. Para ello, ejecutamos el siguiente comando en el directorio que contiene los archivos docker-compose.yml y Dockerfile:

css
docker-compose up --build

Este comando construirá las imágenes necesarias y luego ejecutará los contenedores. Una vez que los contenedores estén en funcionamiento, podremos acceder a nuestra aplicación Laravel a través de un navegador web visitando http://localhost:8080.

Además, podemos utilizar herramientas como phpMyAdmin para administrar nuestra base de datos MySQL de forma gráfica. Podemos agregar un servicio adicional en nuestro archivo docker-compose.yml para phpMyAdmin, similar a este:

yaml
phpmyadmin: image: phpmyadmin/phpmyadmin environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: root ports: - "8081:80" depends_on: - db

Esto agregará un servicio de phpMyAdmin que estará disponible en http://localhost:8081, lo que nos permitirá administrar nuestra base de datos MySQL de manera conveniente a través de una interfaz web.

En resumen, Docker Compose es una herramienta poderosa que facilita enormemente la configuración y ejecución de entornos de desarrollo complejos, como el que hemos creado aquí para Laravel con Nginx y MySQL. Este enfoque basado en contenedores proporciona un ambiente consistente y reproducible que simplifica el proceso de desarrollo y colaboración en proyectos de software.

Más Informaciones

Por supuesto, profundicemos más en cada uno de los aspectos involucrados en la configuración de un entorno de desarrollo de Laravel utilizando Docker Compose con Nginx y MySQL.

Docker Compose:

Docker Compose es una herramienta que permite definir y ejecutar aplicaciones Docker de manera sencilla y reproducible. Con Docker Compose, podemos definir todos los servicios que componen nuestra aplicación en un archivo YAML, lo que facilita la configuración y gestión de los contenedores necesarios para ejecutar la aplicación.

Laravel:

Laravel es un popular framework de desarrollo de aplicaciones web con PHP. Ofrece una amplia gama de características y funcionalidades que hacen que el desarrollo de aplicaciones web sea más rápido y eficiente. Laravel proporciona una sintaxis elegante y expresiva que facilita la escritura de código limpio y mantenible.

Nginx:

Nginx es un servidor web ligero y de alto rendimiento que se utiliza comúnmente como un servidor proxy inverso para servir contenido estático, manejar solicitudes HTTP y HTTPS, y equilibrar la carga entre múltiples servidores. En el contexto de un entorno de desarrollo de Laravel, Nginx se utiliza para servir la aplicación web y manejar las solicitudes HTTP entrantes.

MySQL:

MySQL es un sistema de gestión de bases de datos relacional de código abierto ampliamente utilizado en el desarrollo de aplicaciones web. En un entorno de desarrollo de Laravel, MySQL se utiliza como el motor de base de datos para almacenar y recuperar datos para la aplicación.

Detalles adicionales:

  1. Persistencia de datos: En el archivo docker-compose.yml, hemos definido un volumen llamado db_data que se utiliza para persistir los datos de la base de datos MySQL. Esto garantiza que los datos de la base de datos no se pierdan cuando se detienen o eliminan los contenedores.

  2. Dependencias entre servicios: En la sección depends_on del servicio app, hemos especificado que depende del servicio db. Esto garantiza que el contenedor de la aplicación Laravel no se inicie hasta que el contenedor de la base de datos MySQL esté en funcionamiento, lo que evita errores de conexión a la base de datos durante el inicio de la aplicación.

  3. Configuración de Nginx: Aunque no hemos proporcionado detalles específicos sobre la configuración de Nginx en este ejemplo, en un entorno de producción, sería necesario configurar Nginx para servir la aplicación Laravel y manejar las rutas de manera adecuada. Esto puede implicar la configuración de archivos de host virtual (vhost) y el uso de reglas de reescritura para enrutar las solicitudes a la aplicación Laravel.

  4. Gestión de dependencias de Laravel: En el Dockerfile del servicio app, hemos instalado Composer para manejar las dependencias de PHP de la aplicación Laravel. Composer es una herramienta de gestión de dependencias para PHP que se utiliza comúnmente en proyectos de Laravel para instalar paquetes de PHP y gestionar las dependencias del proyecto.

En resumen, la configuración de un entorno de desarrollo de Laravel utilizando Docker Compose con Nginx y MySQL proporciona una forma conveniente y eficiente de desarrollar aplicaciones web basadas en Laravel. Este enfoque basado en contenedores garantiza que el entorno de desarrollo sea consistente y reproducible en diferentes sistemas, lo que facilita la colaboración entre desarrolladores y la implementación de aplicaciones en diferentes entornos.

Botón volver arriba