12. Finalizar el archivo de docker-compose

 Vamos a finalizar la configuración de nuestro archivo docker-compose.yml y configurar MySQL para nuestra aplicación Laravel.

Detener contenedores existentes

Primero, asegurémonos de que no haya contenedores corriendo:

bash
docker ps

Si vemos el contenedor que creamos anteriormente ejecutándose, lo detenemos:

bash
docker compose down

Verificamos que esté abajo:

bash
docker ps

Crear estructura de directorios

Creamos los directorios necesarios:

bash
mkdir docker-compose
cd docker-compose
mkdir nginx

Configurar Nginx

Dentro del directorio nginx, creamos el archivo de configuración:

bash
nano docker-compose/nginx/app.laravel.conf

Copiamos la siguiente configuración (boilerplate de la documentación oficial de Laravel):

nginx
server {
    listen 80;
    server_name localhost;
    root /var/www/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Puntos importantes a verificar:

  • Puerto: 80

  • Root: /var/www/public

  • Puerto PHP-FPM: 9000

Configurar docker-compose.yml

Editamos nuestro archivo principal:

bash
nano docker-compose.yml

Agregamos los servicios de nginx y MySQL:

yaml
services:
  # Servicio de la aplicación PHP (existente)
  app:
    # ... configuración existente ...
  
  # Servicio de Nginx
  nginx:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "8000:80"
    volumes:
      - .:/var/www
      - ./docker-compose/nginx:/etc/nginx/conf.d
    networks:
      - laravel

  # Servicio de base de datos MySQL
  db:
    image: mysql:8.0
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_USER: ${DB_USERNAME}
    networks:
      - laravel

networks:
  laravel:
    driver: bridge

Configurar variables de entorno

Actualizamos el archivo .env:

bash
nano .env
env
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel_database
DB_USERNAME=laravel
DB_PASSWORD=secret

Nota importante: El DB_HOST debe ser db (el nombre del servicio en docker-compose), no localhost.

Verificación final

Nuestra configuración final de docker-compose.yml debería verse similar a esta:

yaml
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: laravel-app
    container_name: laravel-app
    restart: unless-stopped
    working_dir: /var/www/
    volumes:
      - .:/var/www
    networks:
      - laravel

  nginx:
    image: nginx:alpine
    container_name: nginx-server
    restart: unless-stopped
    ports:
      - "8000:80"
    volumes:
      - .:/var/www
      - ./docker-compose/nginx:/etc/nginx/conf.d
    networks:
      - laravel

  db:
    image: mysql:8.0
    container_name: mysql-db
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_USER: ${DB_USERNAME}
    networks:
      - laravel

networks:
  laravel:
    driver: bridge

Próximos pasos

En el siguiente video probaremos si toda esta configuración funciona correctamente. Si hay algún error, lo identificaremos y corregiremos.

Resumen de lo configurado:

  • ✅ Servicio de aplicación PHP

  • ✅ Servicio de Nginx (puerto 8000 expuesto)

  • ✅ Servicio de MySQL 8.0

  • ✅ Red bridge "laravel" para comunicación entre contenedores

  • ✅ Variables de entorno configuradas

  • ✅ Archivo de configuración de Nginx

¡Listo para probar nuestra aplicación Laravel con Docker! 🚀

Comentarios

Entradas más populares de este blog

ejercicios-Crear Carpeta y Archivo de Texto en Ubuntu

Instalar Docker en Ubuntu Server usando docker.io

Tutorial de Carpetas y Directorios en Ubuntu Linux