ClovaLink: Gestión de archivos empresarial autoalojada con Rust y React
Plataforma multiinquilino para cumplimiento normativo, almacenamiento S3 compatible y autenticación SSO, diseñada para reducir costes frente a soluciones SaaS tradicionales
Vídeo tutorial en YouTube
Mira el vídeo completo sobre cómo instalar y usar ClovaLink: Gestión de archivos empresarial autoalojada con Rust y React en el canal GENBYTE:
¿Qué es ClovaLink: Gestión de archivos empresarial autoalojada con Rust y React?
ClovaLink es una plataforma de gestión de archivos empresarial de código abierto, construida con Rust en el backend y React en el frontend, que permite el autoalojamiento completo. Ofrece arquitectura multiinquilino con aislamiento de datos por inquilino, modos de cumplimiento HIPAA, SOX y GDPR, backends de almacenamiento conectables (S3, Wasabi, Backblaze B2, MinIO, sistema de archivos local), autenticación mediante OIDC y SAML 2.0, escaneo de virus con ClamAV, replicación S3 asíncrona para recuperación ante desastres y un sistema de extensiones sandboxed. El proyecto está licenciado bajo MIT y su coste operativo se estima en 25-30 dólares mensuales para 50 usuarios frente a los 10.000-12.000 dólares anuales de proveedores como Box o Dropbox.
Características principales
Gestión de archivos completa
Subida y descarga con progreso, jerarquía de carpetas ilimitada, bloqueo y versionado de archivos, eliminación suave con recuperación, operaciones en lote, almacenamiento direccionado por contenido con deduplicación, grupos de archivos (colecciones virtuales) y carpetas de empresa para uso compartido organizativo
Seguridad y cumplimiento normativo
Modos HIPAA, SOX y GDPR que bloquean configuraciones (MFA obligatorio, tiempo de espera de 15 minutos, auditoría inmutable, bloqueo de uso compartido público, retención de 7 años), control de acceso basado en roles, autenticación de dos factores TOTP, SSO OIDC y SAML 2.0, flujos de trabajo de aprobación de documentos, copias de seguridad cifradas, registros de auditoría inmutables, alertas de seguridad en tiempo real, gestión de sesiones y escaneo antivirus con ClamAV
Multiinquilino nativo
Aislamiento completo de datos por inquilino, configuración y marca por inquilino, organización basada en departamentos, acceso de usuarios entre inquilinos y cambio de inquilino en la interfaz
Compartición avanzada
Enlaces de compartición con expiración, protección por contraseña, límites de descarga, portales de carga pública (solicitudes de archivos) y uso compartido a nivel de organización o privado
Sistema de extensiones
Extensiones de UI (iframe/ES modules), procesadores de archivos mediante webhooks, automatizaciones programadas (cron), todo ejecutado en entorno sandboxed con concesión de permisos
Funciones de IA
Resumen de documentos, preguntas y respuestas sobre documentos, soporte multi-proveedor, soporte para LLM autoalojados, límites de uso y monitorización
Backends de almacenamiento conectables
Sistema de archivos local, AWS S3, Wasabi (80% más barato que S3), Backblaze B2, MinIO (autoalojado) y replicación S3 para recuperación ante desastres
Autenticación empresarial
Email/contraseña por defecto, SSO OIDC (Google, Microsoft, Okta, genérico), SSO SAML 2.0 (ADFS, Okta, Azure AD, genérico), mapeo de atributos/claims del IdP a roles y departamentos, configuración de proveedor por inquilino, vinculación de cuentas (contraseña + SSO) y aprovisionamiento automático opcional
Requisitos del sistema
- CPU: 1 núcleo mínimo (2+ núcleos recomendados para producción)
- RAM: 1 GB mínimo (4 GB recomendados para producción)
- Almacenamiento: 10 GB para la aplicación y SO (archivos separados en backend de almacenamiento)
- PostgreSQL 14 o superior (requerido)
- Redis 6 o superior (requerido)
- Docker 24.x o superior / Podman con plugin compose
- Para compilación desde código: 8 GB+ RAM para compilación de Rust
Instalación con Docker Compose
Instalación en una línea (recomendada)
Ejecuta el script oficial que verifica Docker, descarga la configuración, genera secretos seguros, inicia los servicios y muestra la URL de acceso.
Actualización mediante script
El mismo script con la bandera –update realiza copia de seguridad de la configuración, descarga las imágenes más recientes y reinicia los servicios; las migraciones se ejecutan automáticamente.
Instalación manual con Docker Compose
Crea un directorio, descarga compose.yml y .env.example desde el directorio infra del repositorio, renombra .env.example a .env, edita JWT_SECRET (mínimo 32 caracteres) y POSTGRES_PASSWORD, y levanta los contenedores.
curl -LO https://raw.githubusercontent.com/ClovaLink/ClovaLink/main/infra/compose.yml
curl -LO https://raw.githubusercontent.com/ClovaLink/ClovaLink/main/infra/.env.example
mv .env.example .env
nano .env
docker compose up -d
Clonar repositorio completo (desarrollo)
Clona el repositorio, entra en infra, copia .env.example, edita y levanta los servicios.
cd ClovaLink/infra
cp .env.example .env
nano .env
docker compose up -d
Compilación desde código fuente
Requiere 8 GB+ RAM. Usa el archivo compose.build.yml adicional para compilar las imágenes localmente.
cd ClovaLink/infra
cp .env.example .env
docker compose -f compose.yml -f compose.build.yml up -d –build
Acceder al proyecto
Interfaz web
http://localhost:8080 (puerto configurable en compose.yml)
API REST
http://localhost:3000
PostgreSQL
localhost:5433 (interno del contenedor)
Redis
localhost:6379 (interno del contenedor)
Credenciales de demostración (cambiar inmediatamente en producción)
SuperAdmin: [email protected] / password123 | Admin: [email protected] / password123 | Manager: [email protected] / password123 | Employee: [email protected] / password123
Casos de uso
- Empresas que requieren cumplimiento HIPAA, SOX o GDPR con bloqueo de configuraciones críticas
- Proveedores de servicios gestionados (MSP) que administran múltiples clientes desde una única instancia
- Organizaciones que buscan evitar el modelo de precios por usuario de Box, Dropbox, SharePoint o Egnyte
- Equipos que necesitan control total sobre sus datos y almacenamiento en backends S3 compatibles (Wasabi, Backblaze B2, MinIO)
- Entornos que requieren SSO empresarial con OIDC o SAML 2.0 y mapeo de atributos a roles y departamentos
- Casos de uso con escaneo antivirus obligatorio en cargas de archivos
- Implementaciones que necesitan replicación asíncrona a bucket S3 secundario para recuperación ante desastres
Configuración avanzada
Configuración de almacenamiento local (desarrollo)
Define STORAGE_TYPE=local y UPLOAD_DIR en el archivo .env del backend.
UPLOAD_DIR=./uploads
Configuración AWS S3
Variables necesarias para usar S3 como backend principal con URLs prefirmadas.
S3_BUCKET=your-bucket-name
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_REGION=us-east-1
USE_PRESIGNED_URLS=true
Configuración Wasabi (S3 compatible, 80% más barato)
Igual que S3 añadiendo endpoint específico de Wasabi.
S3_BUCKET=your-bucket-name
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_REGION=us-east-1
S3_ENDPOINT=https://s3.wasabisys.com
USE_PRESIGNED_URLS=true
Configuración MinIO (autoalojado)
Endpoint local, credenciales por defecto y path-style addressing.
S3_BUCKET=clovalink
AWS_ACCESS_KEY_ID=minioadmin
AWS_SECRET_ACCESS_KEY=minioadmin
AWS_REGION=us-east-1
S3_ENDPOINT=http://localhost:9000
S3_PATH_STYLE=true
Replicación S3 asíncrona (backup o mirror)
Habilita replicación a bucket secundario para DR. Modo backup replica solo subidas; mirror replica subidas y eliminaciones.
REPLICATION_ENDPOINT=https://s3.us-west-2.amazonaws.com
REPLICATION_BUCKET=clovalink-backup
REPLICATION_REGION=us-west-2
REPLICATION_ACCESS_KEY=your-access-key
REPLICATION_SECRET_KEY=your-secret-key
REPLICATION_MODE=backup
REPLICATION_RETRY_SECONDS=60
REPLICATION_WORKERS=4
Escaneo antivirus con ClamAV
Activa escaneo de todas las subidas. Requiere servicio ClamAV accesible en host/puerto indicados.
CLAMAV_HOST=clamav
CLAMAV_PORT=3310
Configuración SSO (OIDC/SAML) – variables base
Clave de cifrado para secretos de clientes IdP. URLs de callback, ACS y metadatos se derivan de BASE_URL. Proveedores se configuran en la UI de administración.
# BASE_URL debe estar correctamente configurada (el instalador lo hace automáticamente)
Entorno de producción recomendado
Variables de entorno para despliegue productivo con logging reducido, secretos fuertes, almacenamiento S3, URLs prefirmadas y CORS restringido.
JWT_SECRET=<64-character-cryptographically-random-string>
DATABASE_URL=postgres://…
REDIS_URL=redis://…
STORAGE_TYPE=s3
USE_PRESIGNED_URLS=true
CORS_ALLOWED_ORIGINS=https://yourdomain.com
Gestión y mantenimiento
Verificar estado de los servicios
Muestra el estado de todos los contenedores definidos en compose.yml.
Ver logs en tiempo real
Útil para diagnosticar fallos de arranque o errores en tiempo de ejecución.
Detener ClovaLink
Para todos los contenedores sin eliminar volúmenes ni redes.
Reiniciar servicios
Reinicia todos los contenedores manteniendo la configuración actual.
Actualizar a la última versión (manual)
Descarga las imágenes más recientes y recrea los contenedores.
docker compose up -d
Solucionar error 502 tras reiniciar backend
Nginx cachea la IP interna del backend; tras reinicio del backend hay que reiniciar también el frontend.
Corregir VersionMismatch de migraciones SQLx
Si un archivo de migración fue modificado tras aplicarse, actualiza el checksum almacenado en la base de datos o elimina la entrada para reaplicar.
sha256sum backend/migrations/003_oidc_sso.sql
# Actualizar en base de datos (reemplazar <new_hash>)
psql $DATABASE_URL -c "UPDATE _sqlx_migrations SET checksum = E'\\x<new_hash>' WHERE version = 3;"
# Alternativa en desarrollo: eliminar entrada y reiniciar backend
psql $DATABASE_URL -c "DELETE FROM _sqlx_migrations WHERE version = 3;"
docker compose restart backend
Habilitar proveedor SSO creado
Los proveedores OIDC/SAML se crean deshabilitados por seguridad. Hay que activarlos en Ajustes → SSO.
Copia de seguridad de datos
Base de datos: pg_dump o snapshots del proveedor gestionado. Archivos: versionado S3 o rclone para almacenamiento local. Configuración: versionar .env (secretos en vault).
# Para archivos en S3: habilitar versionado en bucket
# Para archivos locales: rclone sync /ruta/uploads remote:bucket
Stack técnico
- Rust 1.75+
- Axum (framework web async)
- SQLx (ORM con verificación de SQL en tiempo de compilación)
- PostgreSQL 14+
- Redis 6+
- React 19
- TypeScript
- Nginx (reverse proxy y servir frontend estático)
- Docker / Podman
- ClamAV (opcional, escaneo antivirus)
- S3 API compatible (AWS S3, Wasabi, Backblaze B2, MinIO)
Referencias oficiales
- Repositorio oficial en GitHub: https://github.com/ClovaLink/ClovaLink
- Sitio web oficial y versión alojada: https://clovalink.org
- Documentación de despliegue (wiki): https://github.com/ClovaLink/ClovaLink/wiki/Deployment-Guide
- Documentación de seguridad: https://github.com/ClovaLink/ClovaLink/wiki/Security
- Documentación de escaneo antivirus: https://github.com/ClovaLink/ClovaLink/wiki/Virus-Scanning
- README del backend (referencia API completa): https://github.com/ClovaLink/ClovaLink/blob/main/backend/README.md
- Licencia MIT: https://github.com/ClovaLink/ClovaLink/blob/main/LICENSE
Apoya el canal GENBYTE
¿Te ha sido útil este contenido?
Suscríbete a YouTube
Newsletter GENBYTE
Ko-fi
Contacto: [email protected]
