116 lines
5.0 KiB
Markdown
116 lines
5.0 KiB
Markdown
# 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 `<plugin>/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). |