Separar Aplicación y Archivos Multimedia

 

Solución Recomendada: Separar Aplicación y Archivos Multimedia

1. Estructura de Directorios Recomendada

text
/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:

env
# Para desarrollo local
FILESYSTEM_DISK=local_media

# O para producción con disco externo
FILESYSTEM_DISK=external

En config/filesystems.php:

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)

bash
# 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

bash
# 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

php
// 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

php
// 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:

bash
#!/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

php
// 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

dockerfile
# 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: bind

10. Monitoreo de Espacio

bash
# 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

Entradas más populares de este blog

ejercicios-Crear Carpeta y Archivo de Texto en Ubuntu

Instalar Docker en Ubuntu Server usando docker.io

Tutorial de Carpetas y Directorios en Ubuntu Linux