# Flysystem Offload — Almacenamiento universal para WordPress Flysystem Offload sustituye el sistema de archivos local de WordPress por un backend remoto operado con Flysystem v3. Los medios se suben, sirven y eliminan directamente desde el proveedor seleccionado (S3 y compatibles en la primera versión) sin modificar el flujo editorial. ## Características - **Proveedor seleccionable:** Amazon S3 y endpoints compatibles (MinIO, DigitalOcean Spaces, Wasabi, etc.). - **Integración transparente:** hooks de `upload_dir`, `wp_get_attachment_url`, stream wrapper `fly://` y borrado sincronizado. - **Arquitectura modular:** preparada para añadir SFTP, WebDAV y otros adaptadores en iteraciones futuras. - **Panel de ajustes:** selector de proveedor y credenciales gestionadas desde la administración. ## Requisitos - PHP 8.0+ - WordPress 6.0+ - Extensiones PHP: `curl`, `mbstring`, `xml` - Acceso a Composer durante la construcción del paquete (o usar la imagen Docker proporcionada) - Credenciales válidas de S3 o servicio compatible ## Instalación ### Opción A · Proyecto existente de WordPress 1. Clona este repositorio dentro del árbol de tu sitio: `git clone https://git.brasdrive.com.br/Brasdrive/flysystem-offload.git` 2. Entra en la carpeta del plugin y ejecuta Composer para traer las dependencias: ```bash cd flysystem-offload composer install --no-dev --optimize-autoloader ``` 3. Empaqueta el plugin con la carpeta `vendor/` incluida y súbelo a `/wp-content/plugins/` del sitio que corresponda (vía SCP, rsync o panel de hosting). 4. Activa **Flysystem Offload** desde **Plugins > Plugins instalados** en el escritorio de WordPress. ### Opción B · Imagen Docker (multi-stage) El repositorio incluye un Dockerfile que construye una imagen basada en `wordpress:6.8.3-php8.4-apache` y prepara el plugin en tiempo de build: ```Dockerfile # Etapa 1: composer:2.8.12 instala las dependencias en /app/wp-content/plugins/flysystem-offload # Etapa 2: copia el plugin con vendor/ dentro de /usr/src/wordpress y /var/www/html # Instala redis, WP-CLI y algunas utilidades # Habilita módulos de Apache y carga configuraciones personalizadas de PHP/Apache ``` Pasos para usarla: ```bash # Desde la raíz del repositorio docker build -t flysystem-offload-wp . # Arranca el contenedor exponiendo el puerto 80 (puedes convertirlo en un stack Compose si lo prefieres) docker run --rm -p 8080:80 flysystem-offload-wp ``` La imagen resultante ya contiene: - El plugin con todas sus dependencias PHP en `/usr/src/wordpress/wp-content/plugins/flysystem-offload`. - Copia pre-sincronizada en `/var/www/html/wp-content/plugins` para que esté disponible desde el primer arranque. - Extensión Redis habilitada, WP-CLI disponible y módulos `rewrite`, `headers`, `expires`, `deflate` activos. ### Nota sobre Composer En entornos que no usan Docker, asegúrate de ejecutar `/composer install` antes de empaquetar o desplegar. WordPress no ejecuta Composer automáticamente durante la activación de un plugin. ## Configuración inicial (S3 / compatible) 1. En el escritorio de WordPress abre **Ajustes > Flysystem Offload**. 2. Selecciona **Amazon S3 / Compatible**. 3. Completa los campos: - Access Key - Secret Key (permanece oculta tras guardarla) - Región (`us-east-1`, `eu-west-1`, etc.) - Bucket - Prefijo opcional (subcarpeta dentro del bucket) - Endpoint personalizado (solo para servicios compatibles con S3) - URL CDN opcional (sustituye la URL pública del bucket por tu dominio CDN) 4. Guarda los cambios. El plugin reconstruye automáticamente el filesystem y el stream wrapper. **Prefijo base:** Puedes definir un prefijo global (`wordpress/uploads/`) que se añadirá a todas las rutas remotas antes de delegar en el adaptador. ## Flujo de funcionamiento - WordPress sigue usando `wp_handle_upload()`. - Los filtros de `upload_dir` cambian `basedir` a `fly://...`. - El stream wrapper reenvía lecturas/escrituras a Flysystem y este al cliente S3. - `wp_get_attachment_url` reescribe la URL base con el dominio del bucket o el CDN configurado. - Al eliminar un adjunto, se borran el archivo principal y sus derivadas desde el almacenamiento remoto. ## Roadmap inmediato - Campos y validaciones para SFTP y WebDAV. - Health check vía WP-CLI. - Herramientas de migración para copiar la biblioteca existente al proveedor remoto. - Adaptadores adicionales (GCS, Azure Blob) y conectores OAuth (Drive, OneDrive, Dropbox). ## Contribuir 1. Haz fork y crea una rama (`feature/tu-feature`). 2. Sigue los [WordPress Coding Standards](https://developer.wordpress.org/coding-standards/). 3. Ejecuta tests si están disponibles y actualiza la documentación si corresponde. 4. Abre un Pull Request describiendo el cambio. - Documentación: Este archivo. - Issues/Contacto: jdavidcamejo@gmail.com ## Licencia GPL v2. Consulta [LICENSE](LICENSE) para más detalles. --- Desarrollado por [Brasdrive](https://brasdrive.com.br).