Skip to content

🚀 Laravel + PHP-FPM (Docker y entorno real)

Esta sección documenta detalladamente cómo se ha instalado y configurado Laravel 11.x junto con PHP-FPM 8.4 dentro del contenedor Docker Alpine y en un entorno manual. Se explica cada paso técnico con claridad, incluyendo comandos reales y el propósito de cada uno, cumpliendo con los criterios de evaluación de la UF2 (Implementación) y UF4 (Documentación).


🧱 1. Preparación del contenedor laravel

📦 Instalación de dependencias

Entramos al contenedor laravel y ejecutamos:

apk update
apk add --no-cache php84 php84-fpm php84-pdo php84-pdo_mysql php84-mbstring \
  php84-tokenizer php84-xml php84-openssl php84-json php84-fileinfo \
  php84-curl php84-session nodejs npm nano curl unzip git composer

🧠 Explicación:

  • php84: lenguaje PHP versión 8.4.
  • php84-fpm: demonio que ejecuta scripts PHP como servicio (FastCGI Process Manager).
  • nodejs y npm: necesarios para compilar los assets de Laravel Breeze.
  • nano, curl, git, composer: herramientas básicas de desarrollo.

Instalación de paquetes PHP y Node


📁 2. Creación del proyecto Laravel

Dentro del contenedor, accedemos al directorio base de Laravel y generamos el proyecto:

cd /var/www/html
composer create-project laravel/laravel josue-app
cd josue-app

🔧 Este comando instala Laravel 11.x en el directorio josue-app, con todas sus dependencias.

Estructura del proyecto Laravel Estructura del proyecto Laravel


🔐 3. Configuración de la base de datos .env

Editamos el archivo .env para conectar Laravel a MariaDB:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=josue_db
DB_USERNAME=sail
DB_PASSWORD=password

🧠 Explicación:

  • mysql: nombre del contenedor del servicio.
  • 3306: puerto por defecto de MariaDB.
  • sail/password: usuario y contraseña creados anteriormente.

📌 Guarda los cambios con CTRL + O y luego CTRL + X.

Archivo .env configurado


🛡️ 4. Instalación de Laravel Breeze (Autenticación)

Laravel Breeze nos proporciona un sistema de login y registro funcional:

composer require laravel/breeze --dev
php artisan breeze:install
npm install
npm run build

📦 Esto instalará Breeze, compilará los assets con Vite, y dejará el frontend funcional.

Compilación de Breeze con Vite Compilación de Breeze con Vite Compilación de Breeze con Vite


⚙️ 5. Migraciones y permisos

Ejecutamos las migraciones para crear las tablas por defecto:

php artisan migrate
![Migraciones exitosas en Laravel](img/migrate-ok.png)

Luego, configuramos permisos correctos para que PHP-FPM acceda a los archivos sin errores de lectura/escritura:

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

🧠 www-data es el usuario bajo el que se ejecuta PHP-FPM.

Migraciones exitosas en Laravel


🧩 6. Configuración de PHP-FPM

🔧 Crear el socket de ejecución

mkdir -p /run/php
chown -R www-data:www-data /run/php
chmod 755 /run/php

🔌 Este socket es el punto de comunicación entre Nginx y PHP-FPM.

Directorio /run/php creado


📝 Editar configuración de FPM

Editamos el archivo principal de configuración:

nano /etc/php84/php-fpm.d/www.conf

🔁 Cambiamos las siguientes líneas:

user = www-data
group = www-data
listen = 9000

🧠 Esto indica que el servicio PHP-FPM correrá con el usuario www-data y escuchará en el puerto 9000, que es el que Nginx usará para ejecutar scripts PHP.

Contenido del archivo www.conf


▶️ 7. Iniciar PHP-FPM

Arrancamos el servicio de forma persistente:

php-fpm84 -D

Verificamos que esté funcionando:

netstat -tuln | grep 9000

🔍 Si ves el puerto 9000 abierto, PHP-FPM está activo.

Puerto 9000 abierto



🧪 9. Comprobación final

Accede a la aplicación desde tu navegador:

http://localhost:8080

Si todo está bien configurado, deberías ver la página de bienvenida de Laravel, servida por Nginx y ejecutada a través del socket PHP-FPM en el contenedor laravel.

Pantalla de bienvenida de Laravel


✅ Checklist Evaluación UF2/UF4

Requisito Cumplido
Laravel 11.x instalado correctamente
Laravel Breeze funcional
Proyecto funcional sin Sail
PHP-FPM configurado en puerto 9000
Usuario www-data configurado
Laravel funcionando en entorno real
Documentación clara y con capturas