Separar Aplicación y Archivos Multimedia
Solución Recomendada: Separar Aplicación y Archivos Multimedia
1. Estructura de Directorios Recomendada
/home/ ├── tu_usuario/ │ ├── laravel_app/ # Tu código Laravel │ └── laravel_storage/ # Archivos multimedia (videos/imágenes) │ ├── videos/ │ ├── images/ │ └── backups/
2. Configuración en Laravel
En tu archivo .env:
# Para desarrollo local FILESYSTEM_DISK=local_media # O para producción con disco externo FILESYSTEM_DISK=external
En config/filesystems.php:
'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'local_media' => [ 'driver' => 'local', 'root' => '/home/tu_usuario/laravel_storage', ], 'external' => [ 'driver' => 'local', 'root' => '/mnt/external_drive/media_storage', ], ],
3. Montar un Disco Duro Externo (Recomendado)
# Crear punto de montaje sudo mkdir /mnt/external_drive # Montar el disco (ejemplo para NTFS) sudo mount -t ntfs-3g /dev/sdb1 /mnt/external_drive # Montar automáticamente al inicio echo '/dev/sdb1 /mnt/external_drive ntfs-3g defaults 0 0' | sudo tee -a /etc/fstab
4. Usar Enlaces Simbólicos
# Desde tu proyecto Laravel ln -s /home/tu_usuario/laravel_storage ./storage/app/media # O ln -s /mnt/external_drive/media_storage ./storage/app/public
5. Solución Cloud + Local (Híbrida)
Para desarrollo/testing: Archivos pequeños locales
Para producción: Sistema híbrido
// En tu modelo de Media public function storeFile($file) { if (config('app.env') === 'local') { return $file->store('media', 'local_media'); } else { return $file->store('media', 'external'); } }
6. Solución con Almacenamiento en la Nube
// Configuración para AWS S3, DigitalOcean Spaces, etc. 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), ],
7. Script de Respaldo Automatizado
Crea un script backup_media.sh:
#!/bin/bash # Backup de la aplicación php artisan backup:run # Backup de archivos multimedia (solo los nuevos/modificados) rsync -av --progress /home/tu_usuario/laravel_storage/ /mnt/backup_drive/media_backup/ # Backup de la base de datos mysqldump -u usuario -p contraseña tu_base_datos > /mnt/backup_drive/db_backup/backup_$(date +%Y%m%d_%H%M%S).sql # Limpiar backups antiguos find /mnt/backup_drive/db_backup/ -name "*.sql" -mtime +7 -delete
8. Política de Retención Inteligente
// En un comando de Laravel o Job public function handle() { // Eliminar archivos temporales antiguos $files = Storage::disk('local_media')->files('temp'); foreach ($files as $file) { if (Storage::lastModified($file) < now()->subDays(2)->getTimestamp()) { Storage::delete($file); } } // Comprimir archivos antiguos $oldVideos = Storage::files('videos', true); foreach ($oldVideos as $video) { if (Storage::lastModified($video) < now()->subMonths(6)->getTimestamp()) { // Lógica para comprimir o mover a archivo } } }
9. Usar Docker con Volumes Externos
# docker-compose.yml
version: '3'
services:
app:
build: .
volumes:
- ./:/var/www/html
- media_volume:/var/www/html/storage/app/media
volumes:
media_volume:
driver: local
driver_opts:
type: none
device: /home/tu_usuario/laravel_storage
o: bind10. Monitoreo de Espacio
# Script para monitorear espacio #!/bin/bash USAGE=$(df /home | awk 'NR==2 {print $5}' | sed 's/%//') if [ $USAGE -gt 80 ]; then echo "Alerta: Espacio en disco al $USAGE%" | mail -s "Alerta Disco" tu@email.com fi
Ventajas de esta Estructura:
✅ Separación clara: Código vs Datos
✅ Respaldo fácil: Solo respaldas archivos multimedia por separado
✅ Escalabilidad: Puedes migrar archivos a otro disco/nube fácilmente
✅ Mantenimiento: Reparar sistema sin tocar los archivos multimedia
✅ Rendimiento: Discos optimizados para diferentes tipos de datos
Comentarios
Publicar un comentario