RUIN.MEDIA: Procesamiento de medios con PHP y FFmpeg en contenedores
Una aplicación web ligera para manipulación de archivos multimedia usando PHP 8.2, FFmpeg y Nginx en Alpine Linux
Vídeo tutorial en YouTube
Mira el vídeo completo sobre cómo instalar y usar RUIN.MEDIA: Procesamiento de medios con PHP y FFmpeg en contenedores en el canal GENBYTE:
¿Qué es RUIN.MEDIA: Procesamiento de medios con PHP y FFmpeg en contenedores?
RUIN.MEDIA es un proyecto open source desarrollado por Korosys que permite el procesamiento de archivos multimedia a través de una interfaz web. La aplicación está construida sobre PHP 8.2 (variante Hack) y utiliza FFmpeg para la manipulación de vídeo y audio, servida mediante Nginx y PHP-FPM en un contenedor Alpine Linux. El proyecto se distribuye como imagen Docker lista para producción, con límites de subida configurados a 50 MB y gestión de procesos mediante Supervisor.
Características principales
Entorno PHP 8.2 FPM optimizado
Utiliza la imagen oficial php:8.2-fpm-alpine como base, con configuración de upload_max_filesize y post_max_size establecidos en 50 MB para manejar archivos multimedia de tamaño considerable.
Procesamiento multimedia con FFmpeg
Incluye FFmpeg instalado en el contenedor, permitiendo transcodificación, corte, conversión y manipulación de formatos de vídeo y audio directamente desde la aplicación.
Servidor web Nginx integrado
Nginx actúa como servidor frontal y proxy inverso para PHP-FPM, con configuración personalizada mediante nginx-main.conf y nginx.conf copiados al contenedor.
Gestión de procesos con Supervisor
Supervisor orquesta Nginx, PHP-FPM y procesos de limpieza mediante supervisor.conf, asegurando que todos los servicios permanezcan activos y se reinicien ante fallos.
Despliegue simplificado con Docker Compose
El archivo docker-compose.yml define el servicio ruin.media usando la imagen korosys/ruin.media:latest, mapeando el puerto 8080 del host al 80 del contenedor con política de reinicio unless-stopped.
Base Alpine Linux minimalista
La imagen final se construye sobre Alpine Linux, reduciendo la superficie de ataque y el tamaño del contenedor, instalando únicamente dependencias necesarias mediante apk.
Requisitos del sistema
- Docker Engine 20.10 o superior
- Docker Compose v2 (plugin compose) o docker-compose standalone
- Puerto 8080 disponible en el host
- Arquitectura compatible con imágenes linux/amd64 (imagen base php:8.2-fpm-alpine)
Instalación con Docker Compose
Clonar el repositorio
Obtén el código fuente y los archivos de configuración Docker desde GitHub.
cd RUIN.MEDIA
Levantar la pila con Docker Compose
Inicia el contenedor en segundo plano. La imagen korosys/ruin.media:latest se descargará automáticamente si no existe localmente.
Verificar estado del contenedor
Comprueba que el servicio está corriendo y expone el puerto 8080.
docker logs ruin.media
Acceder al proyecto
Interfaz web
Accede a la aplicación abriendo http://localhost:8080 en el navegador. El contenedor expone internamente el puerto 80, mapeado al 8080 del host según docker-compose.yml.
Casos de uso
- Conversión y transcodificación de archivos de vídeo y audio mediante FFmpeg expuesto vía web
- Subida y procesamiento de archivos multimedia hasta 50 MB
- Entorno de pruebas para pipelines de procesamiento de medios basados en PHP
- Demostración de arquitectura multi-servicio (Nginx + PHP-FPM + FFmpeg) en un solo contenedor gestionado por Supervisor
Configuración avanzada
Personalizar límites de subida PHP
Modifica los valores upload_max_filesize y post_max_size en el Dockerfile o crea un archivo de configuración PHP adicional montado como volumen.
RUN echo "upload_max_filesize = 100M" >> /usr/local/etc/php/conf.d/uploads.ini && \
echo "post_max_size = 100M" >> /usr/local/etc/php/conf.d/uploads.ini
Ajustar configuración de Nginx
Los archivos docker/nginx-main.conf y docker/nginx.conf se copian al contenedor. Para sobrescribirlos sin reconstruir la imagen, móntalos como volúmenes en docker-compose.yml.
ruin.media:
image: korosys/ruin.media:latest
container_name: "ruin.media"
ports:
– "8080:80"
volumes:
– ./docker/nginx.conf:/etc/nginx/conf.d/default.conf:ro
– ./docker/nginx-main.conf:/etc/nginx/nginx.conf:ro
restart: unless-stopped
Configurar Supervisor para tareas adicionales
Edita docker/supervisor.conf para añadir programas personalizados (workers, colas, limpieza periódica) y vuelve a construir la imagen.
[program:custom-worker]
command=php /var/www/html/worker.php
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/worker.log
Gestión y mantenimiento
Actualizar a la última versión de la imagen
Descarga la imagen más reciente y recrea el contenedor.
docker compose up -d
Inspeccionar logs de la aplicación y servicios internos
Supervisor redirige la salida de Nginx, PHP-FPM y procesos propios. Usa docker logs para ver la salida combinada.
Reiniciar servicios internos sin detener el contenedor
Ejecuta supervisorctl dentro del contenedor para gestionar procesos individuales.
# Reiniciar nginx o php-fpm
# docker exec -it ruin.media supervisorctl restart nginx
# docker exec -it ruin.media supervisorctl restart php-fpm
Eliminar la pila completa
Detiene y elimina el contenedor, red y volúmenes anónimos asociados.
Stack técnico
- PHP 8.2 (Hack)
- FFmpeg
- Nginx
- Supervisor
- Alpine Linux
- Docker
- Docker Compose
Referencias oficiales
- Repositorio oficial en GitHub: https://github.com/Korosys/RUIN.MEDIA
- Imagen Docker en Docker Hub: https://hub.docker.com/r/korosys/ruin.media
Apoya el canal GENBYTE
¿Te ha sido útil este contenido?
Suscríbete a YouTube
Newsletter GENBYTE
Ko-fi
Contacto: [email protected]
