12-Configuración de Nginx y MySQL con Docker Compose
Configuración de Nginx y MySQL con Docker Compose
Asegúrate de tener Docker y Docker Compose instalados en tu sistema antes de comenzar.
Paso 1: Detener Contenedores Existentes
Primero, asegúrate de que no haya contenedores de tu proyecto corriendo para evitar conflictos de puertos o recursos.
Verifica los contenedores activos:
docker ps
Si ves algún contenedor corriendo que pertenece a tu proyecto de Docker Compose (por ejemplo, uno que acabas de crear), derríbalo usando
docker-compose down. Si no tienes un archivodocker-compose.ymlen la carpeta actual, este comando fallará, pero no importa si no hay contenedores corriendo.docker-compose down
Paso 2: Crear la Estructura de Directorios
Crea un directorio para almacenar la configuración de Docker Compose y el archivo de configuración de Nginx.
mkdir -p docker-compose/nginx
cd docker-compose
Paso 3: Crear el Archivo de Configuración de Nginx
Dentro del directorio que acabamos de crear (docker-compose/nginx), crea el archivo de configuración de Nginx para tu aplicación.
Crea el archivo de configuración:
nano nginx/app-laravel.confCopia y pega la siguiente configuración (este es el "boilerplate" estándar para Laravel con Nginx, extraído de la documentación oficial, como mencionaste):
Nota importante: El root en este archivo (
/var/www/html/public) debe coincidir con la ruta donde Laravel monta el directoriopublicdentro del contenedor. El fastcgi_pass (php-app:9000) asume que tu contenedor PHP-FPM se llamaphp-appy escucha en el puerto 9000.Nginxserver { listen 80; server_name localhost; root /var/www/html/public; index index.html index.htm 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$ { # Debe coincidir con el nombre de tu servicio PHP-FPM en docker-compose fastcgi_pass php-app:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }Guarda el archivo (Ctrl+O, Enter) y sal del editor (Ctrl+X).
Paso 4: Configurar las Variables de Entorno de Laravel (.env)
Asegúrate de que tu archivo .env en la raíz de tu proyecto Laravel tenga las siguientes variables de configuración de la base de datos:
Abre el archivo
.env(si estás en el directorio de tu proyecto Laravel):Bashnano .envVerifica/modifica las variables para que coincidan con la configuración de Docker Compose.
Variable de Entorno Valor Sugerido Notas DB_CONNECTION mysql DB_HOST db IMPORTANTE: Debe ser el nombre del servicio de la base de datos en docker-compose.yml, nolocalhost.DB_PORT 3306 Puerto por defecto de MySQL. DB_DATABASE laravel_db El nombre de la base de datos que crearemos. DB_USERNAME laravel_user El usuario que crearemos. DB_PASSWORD secret La contraseña que usaremos. Asegúrate de que tus variables se vean así (o con los valores que elijas):
Ini, TOMLDB_HOST=db DB_DATABASE=laravel_db DB_USERNAME=laravel_user DB_PASSWORD=secretGuarda y cierra el archivo.
Paso 5: Crear el Archivo Docker Compose (docker-compose.yml)
Ahora crea el archivo principal que define los servicios (Nginx, PHP-FPM y MySQL).
Crea el archivo en el directorio raíz de Docker Compose (donde creaste la carpeta
nginx):Bashnano docker-compose.ymlIntroduce la siguiente configuración. Aquí se definen los tres servicios principales:
nginx,db(MySQL), y se incluye un serviciophp-apppara Laravel, que es necesario para que Nginx funcione.YAMLversion: '3.7' services: # --- SERVICIO NGINX --- nginx: image: nginx:alpine # Usamos la imagen oficial de Nginx restart: unless-stopped ports: # Exponemos el puerto 8000 del host al puerto 80 del contenedor - "8000:80" volumes: # Monta el código de la aplicación (asume que el .yml está en la raíz de Laravel) - ../:/var/www/html # Monta el archivo de configuración de Nginx que creamos - ./nginx/app-laravel.conf:/etc/nginx/conf.d/default.conf depends_on: - php-app # Nginx depende de que el servicio PHP esté corriendo networks: - laravel-network # --- SERVICIO PHP-FPM --- # (Necesario para procesar los archivos .php de Laravel) php-app: image: php:7.4-fpm # Ajusta la versión de PHP según sea necesario restart: unless-stopped volumes: # Monta el código de la aplicación - ../:/var/www/html networks: - laravel-network # --- SERVICIO DE BASE DE DATOS (MySQL) --- db: image: mysql:8.0 # Versión de MySQL restart: unless-stopped environment: # Variables de entorno para la configuración de la DB (tomadas de .env) MYSQL_DATABASE: ${DB_DATABASE:-laravel_db} MYSQL_USER: ${DB_USERNAME:-laravel_user} MYSQL_PASSWORD: ${DB_PASSWORD:-secret} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-secret} # Usamos la misma para root volumes: # Volumen persistente para los datos de la DB - db-data:/var/lib/mysql networks: - laravel-network # Definición de Redes networks: laravel-network: driver: bridge # Definición de Volúmenes (para persistencia de datos) volumes: db-data: driver: localGuarda el archivo (Ctrl+O, Enter) y sal del editor (Ctrl+X).
Paso 6: Ejecutar los Contenedores
Una vez que tengas los archivos de configuración en su lugar, puedes iniciar los servicios:
Asegúrate de estar en el directorio donde se encuentra el archivo
docker-compose.yml.Ejecuta el comando para crear y levantar los contenedores en segundo plano (
-d):Bashdocker-compose up -d
Paso 7: Verificación
Verifica que los tres contenedores (nginx, php-app, db) se estén ejecutando correctamente:
Bashdocker psSi todo ha salido bien, tu aplicación Laravel debería ser accesible en el puerto que expusiste para Nginx. En este tutorial, se configuró para usar el puerto 8000.
Abre tu navegador y navega a:
http://localhost:8000
Este proceso configura tus servicios, asegura que Nginx sepa cómo manejar los archivos PHP a través del servicio PHP-FPM (php-app), y que todos puedan comunicarse usando la red interna (laravel-network).
Comentarios
Publicar un comentario