diff --git a/README.md b/README.md index e69de29..21026a4 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,117 @@ +# 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. + +- Issues: [GitLab Issues](https://git.brasdrive.com.br/Brasdrive/flysystem-offload/-/issues) +- Documentación: [docs.brasdrive.com.br/flysystem-offload](https://docs.brasdrive.com.br/flysystem-offload) +- Contacto: soporte@brasdrive.com.br + + ## Licencia + + GPL v2. Consulta [LICENSE](LICENSE) para más detalles. + +--- + +Desarrollado por [Brasdrive](https://brasdrive.com.br). \ No newline at end of file