Requisitos Previos
Docker Desktop 4.x o superior
Introducción
FrankenPHP es un servidor web moderno escrito en Go que integra el runtime de PHP directamente. A diferencia de configuraciones tradicionales como Apache o Nginx con PHP-FPM, FrankenPHP ofrece mejor rendimiento y una configuración más simplificada.
Estructura del Proyecto
Primero, crea un nuevo directorio para tu proyecto:
mkdir mi-proyecto-frankenphp
cd mi-proyecto-frankenphpPaso 1: Configuración de Docker
Dockerfile
Crea un archivo Dockerfile:
Explicación del Dockerfile
Vamos a analizar cada parte del Dockerfile para entender su función:
Imagen Base
FROM dunglas/frankenphp:1.4.2-php8.4-alpine
Utilizamos FrankenPHP 1.4.2 que es la versión más reciente y estable
Incluye PHP 8.4 preinstalado
Basada en Alpine Linux, que es una distribución ligera ideal para contenedores
Alpine reduce significativamente el tamaño de la imagen final
Dependencias del Sistema
RUN apk add --no-cache \ unzip \ git
apkes el gestor de paquetes de Alpine Linux--no-cacheevita almacenar archivos temporales, reduciendo el tamaño de la imagenunzipes necesario para que Composer pueda descomprimir paquetesgitpermite a Composer clonar repositorios de paquetes
Instalación de Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
Usa la técnica de multi-stage building para optimizar el tamaño
Obtiene la última versión estable de Composer
Solo copia el binario de Composer, no toda la imagen
Extensiones PHP
RUN install-php-extensions \ pdo_mysql \ zip \ opcache \ intl
install-php-extensionses un script que simplifica la instalación de extensiones PHPpdo_mysql: necesario para conectar con bases de datos MySQLzip: requerido para manipular archivos comprimidos (usado por Composer)opcache: mejora el rendimiento cacheando el bytecode de PHPintl: proporciona soporte para internacionalización
Configuración de PHP y Directorio de Trabajo
COPY php.ini /usr/local/etc/php/conf.d/app.ini WORKDIR /app COPY . /app
Copia tu configuración personalizada de PHP
La ubica en
conf.dpara que se combine con la configuración baseEstablece
/appcomo el directorio de trabajoCopia todos los archivos del proyecto al contenedor
Puerto y Permisos
EXPOSE 80 RUN chmod -R 777 /app
EXPOSE 80: documenta que el contenedor usa el puerto 80 (HTTP)Los permisos 777 son útiles para desarrollo pero NO recomendados para producción
En producción, deberías usar permisos más restrictivos
Consideraciones de Seguridad
Los permisos 777 son demasiado permisivos para producción
En producción, considera usar permisos más restrictivos (como 755 para directorios y 644 para archivos)
Asegúrate de que el usuario www-data tenga los permisos necesarios
Optimizaciones Posibles
Usar una versión específica de las extensiones PHP
Añadir más extensiones según las necesidades del proyecto
Configurar OPcache para mejor rendimiento
Ajustar los permisos según el entorno
docker-compose.yml
Crea un archivo docker-compose.yml:
Explicación de las Variables de Entorno
PHP_MEMORY_LIMIT=256M: Establece el límite de memoria para PHP.APP_ENV=development: Define el entorno como desarrollo.SERVER_NAME=:80: Configura FrankenPHP para escuchar en todas las interfaces en el puerto 80.FRANKENPHP_CONFIG: Especifica la configuración del worker de FrankenPHP.
Paso 2: Configuración de PHP
Crea un archivo php.ini:
Paso 3: Archivo de Prueba
Crea un archivo index.php en el directorio public de tu proyecto:
Paso 4: Construir y Ejecutar
# Construir la imagen
docker-compose build --no-cache
# Iniciar el contenedor
docker-compose up -d
# Verificar que el contenedor está corriendo
docker-compose psPaso 5: Trabajando con Composer
Una vez que el contenedor esté en funcionamiento, puedes usar Composer de varias formas:
Iniciar un Nuevo Proyecto
docker-compose exec app composer initInstalar Dependencias
docker-compose exec app composer require monolog/monologInstalar Dependencias de Desarrollo
docker-compose exec app composer require --dev phpunit/phpunitOptimizar para Producción
docker-compose exec app composer install --no-dev --optimize-autoloaderVerificación y Pruebas
Accede a
http://localhost:8000en tu navegadorDeberías ver la página de phpinfo() mostrando la configuración de PHP 8.4
Solución de Problemas Comunes
Problemas de Permisos
Si encuentras errores de permisos:
docker-compose exec app chown -R www-data:www-data /appPuerto en Uso
Si el puerto 8000 está ocupado, modifica el puerto en docker-compose.yml:
ports: - "8080:80" # O cualquier otro puerto disponibleProblemas con Composer
Si encuentras errores de memoria con Composer:
docker-compose exec app php -d memory_limit=-1 /usr/bin/composer require paquete-grandePróximos Pasos
Framework PHP
Instalar Laravel, Symfony u otro framework de tu elección
Configurar el documento root según el framework
Base de Datos
Añadir servicios adicionales como MySQL o PostgreSQL
Configurar la conexión a la base de datos
Producción
Configurar HTTPS
Optimizar la configuración de PHP
Ajustar los workers de FrankenPHP
Recursos Adicionales
Conclusión
Esta configuración te proporciona un entorno de desarrollo moderno y eficiente con FrankenPHP, PHP 8.4 y Composer. La combinación de estas tecnologías te permite desarrollar aplicaciones PHP de manera rápida y eficiente, aprovechando las últimas características de PHP y el rendimiento optimizado de FrankenPHP.