Blog

Crear un entorno de desarrollo para Laravel y MySQL usando Docker

02 October, 2023 - 177

Crear un entorno de desarrollo para Laravel y MySQL usando Docker
#Docker #MySql #Laravel

Intentaré explicarte cómo configurar un entorno de desarrollo local con Laravel y Docker, al hacer esto podrás trabajar con proyectos que tengan diferentes versiones de PHP, Laravel o dependencias sin crear conflictos con los recursos de tu sistema operativo. Al final dejaré el repositorio del proyecto.

Requisitos previos:

  • Tener Docker instalado y ejecutándose en el sistema operativo.
  • Conozca los requisitos del servidor para la versión de Laravel que debe ejecutarse en el contenedor Docker.
  • Editor de código como VS Code.

1. Estructura del proyecto

Abre tu editor de código en la raíz de tu entorno de desarrollo y crea una carpeta donde tendrás tu proyecto, en este ejemplo se llamará "test-docker-laravel", una vez creado ingresa a ella y crea otra carpeta llamada "www" Aquí es donde se registrará la estructura de Laravel. En el mismo nivel de la carpeta anterior, cree el archivo "docker-compose.yml" y cree también el archivo "Dockerfile".

2. Configurando el archivo docker-compose.yml

Abre el archivo "docker-compose.yml", en este archivo configuras los servicios que se utilizarán, la imagen, puertos, volúmenes, red, etc., agrega la siguiente configuración:

#Compose file format version.    	
version: '3'
#Containers must be defined
services:

    apache:
        build: .
        image: name-apache #we assign a name to the image
        container_name: name-apache ##we assign a name to the container
        restart: unless-stopped
        volumes:
            - ./www:/var/www/html/
        ports:
            - 80:80 #Port where the Apache runs (port 80 is recommended)
        networks:
            - name_network

    mysql:
        image: mariadb:10.3
        container_name: name-mysql
        restart: unless-stopped
        environment:
            MYSQL_ROOT_PASSWORD: 123456
            MYSQL_ROOT_HOST: '%'
        volumes:
            - ./mysql:/var/lib/mysql
        ports:
            - 3306:3306 #Port where the Mysql runs (port 3306 is recommended)
        networks:
            - name_network

#We define the name of the network.
networks:
    name_network:
        driver: bridge

Para este ejemplo, sólo se utilizarán dos servicios: Apache y MySQL. Si tu proyecto requiere más servicios como Mongo, aquí es donde debes agregarlos.

3. Configurar Dockerfile

En este archivo definiremos la versión de PHP que queremos usar, en este caso usaremos la versión PHP 8.1 junto con Apache, de igual manera instalaremos dependencias y extensiones para el correcto funcionamiento de PHP.

# We start from the php image in version 8.1
FROM php:8.1-apache

RUN apt-get update && apt-get upgrade -y

RUN apt-get install -y git
RUN apt-get install -y vim
RUN apt-get install -y libmcrypt-dev
RUN apt-get install -y openssl
RUN apt-get install -y libzip-dev
RUN apt-get install -y libpng-dev

RUN docker-php-ext-install mysqli
RUN docker-php-ext-install pdo
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-enable mysqli
RUN docker-php-ext-install zip

# We install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# We assign permissions to the www directory
RUN chown -R www-data:www-data /var/www
RUN chmod 755 /var/www

WORKDIR /var/www/html/

RUN a2enmod rewrite

4. Levantar el contenedor

En este punto ya deberíamos tener el contenedor ejecutándose. Simplemente tienes que ejecutar docker-compose up --build e ingresar 127.0.0.1:80.

$ docker-compose up --build

5. Comprobar PHP

Dentro del directorio "www" creamos un archivo PHP llamado "info.php" con el siguiente código:

<?php phpinfo(); ?>

Al ingresar 127.0.0.1:80 deberíamos ver la siguiente pantalla:

6. Verifique la conexión MySQL

Comprobaremos el ID del contenedor MySQL.

$ docker ps

Usamos el siguiente comando para ingresar al contenedor MySQL, nos pedirá la contraseña e ingresaremos la que definimos en el docker-compose.yml, en este caso es 123456.

$ docker exec -it container_id mysql -p

7. Instalación de Laravel

Esta vez ingresaremos al contenedor Apache y con el compositor descargaremos Laravel

Comprobamos el ID del contenedor apache.

$ docker ps

Ahora si, entramos al contenedor.

$ docker exec -it container_id /bin/bash

Dentro del contenedor solo veremos el archivo info.php que creamos antes.

En esa posición podemos descargar Laravel con compositor, en este caso lo descargaré con el nombre "sys".

# composer create-project laravel/laravel sys

8. Últimos pasos

Para una estructura más parecida a la de un servidor real moveremos y modificaremos algunos archivos.

Primero moveremos los archivos de la carpeta public/ al directorio "sys".


Ahora modificaremos el archivo index.php que movimos de la carpeta public/.

Cambiar /../ a /sys/

...
require __DIR__.'/../vendor/autoload.php';
//to
require __DIR__.'/sys/vendor/autoload.php';
....

Con solo estas configuraciones podremos ver la pantalla de bienvenida de Laravel.




👍 ¡Invitame un café! ☕️