ClovaLink: Gestión de archivos empresarial autoalojada con Rust y React

Publicado por


Open Source

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.

Arquitectura multiinquilino nativa con modos de cumplimiento bloqueados, almacenamiento S3 compatible y SSO empresarial, todo autoalojado sin coste por usuario

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.

curl -fsSL https://raw.githubusercontent.com/ClovaLink/ClovaLink/main/install.sh | bash

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.

curl -fsSL https://raw.githubusercontent.com/ClovaLink/ClovaLink/main/install.sh | bash -s — –update

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.

mkdir clovalink && cd clovalink
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.

git clone https://github.com/ClovaLink/ClovaLink.git
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.

git clone https://github.com/ClovaLink/ClovaLink.git
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.

STORAGE_TYPE=local
UPLOAD_DIR=./uploads

Configuración AWS S3

Variables necesarias para usar S3 como backend principal con URLs prefirmadas.

STORAGE_TYPE=s3
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.

STORAGE_TYPE=s3
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.

STORAGE_TYPE=s3
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_ENABLED=true
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_ENABLED=true
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.

SECRETS_ENCRYPTION_KEY=base64-encoded-32-byte-key
# 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.

RUST_LOG=warn
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.

docker compose ps

Ver logs en tiempo real

Útil para diagnosticar fallos de arranque o errores en tiempo de ejecución.

docker compose logs -f

Detener ClovaLink

Para todos los contenedores sin eliminar volúmenes ni redes.

docker compose down

Reiniciar servicios

Reinicia todos los contenedores manteniendo la configuración actual.

docker compose restart

Actualizar a la última versión (manual)

Descarga las imágenes más recientes y recrea los contenedores.

docker compose pull
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.

docker compose restart 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.

# Generar nuevo checksum
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.

Interfaz web: Ajustes → SSO → alternar proveedor a Habilitado

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).

pg_dump $DATABASE_URL > backup.sql
# 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

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *