Zenko CloudServer
Zenko CloudServer (anteriormente Scality S3 Server) es un servidor de almacenamiento de objetos open source que implementa el protocolo Amazon S3 en Node.js. Proporciona una interfaz única AWS S3 API para acceder a múltiples sistemas de almacenamiento backend tanto on-premise como en la nube pública.
¿Qué es y para quién?
Zenko CloudServer es un proyecto open source bajo licencia Apache 2.0, parte de Zenko, el controlador de datos multi-nube de código abierto de Scality. Está diseñado para:
- Desarrolladores que necesitan compatibilidad S3 sin cambios de código
- Organizaciones que requieren almacenamiento on-premise o en múltiples nubes
- Proyectos que buscan evitar vendor lock-in con proveedores cloud
- Aplicaciones de backup, archivado y colaboración basadas en S3
Casos de uso
- Desarrollo local: Crear aplicaciones S3 para pruebas sin depender de AWS
- Auto-alojado: Desplegar almacenamiento compatible con S3 en infraestructura propia
- Multi-cloud: Mover datos entre AWS, Azure y Google Cloud Storage sin reescribir código
- Backup/Archivado: Soluciones de backup compatibles con SDKs de S3 existentes
- CI/CD: Almacenamiento para pipelines de integración continua
Arquitectura
Zenko CloudServer utiliza una arquitectura modular basada en backends intercambiables:
- Frontend: Implementación completa del protocolo S3 en Node.js
- Backend: Soporte para múltiples sistemas de almacenamiento (memoria, archivos, Scality RING, Docker)
- Vault: Gestión de usuarios y autenticación opcional con HashiCorp Vault
- Endpoints: Soporte para path-style y virtual-hosted-style buckets
La arquitectura permite añadir nuevos backends mediante módulos, facilitando la extensión del sistema.
Requisitos reales
- Node.js: 10.x o superior (recomendado: versión actualizada desde Nodesource)
- yarn: v1.17.x o superior
- Docker: Para despliegue en contenedores (imagen oficial disponible en Docker Hub)
- Vault (opcional): HashiCorp Vault para gestión de autenticación
- Redis (opcional): Para caché local en pruebas funcionales
Instalación y despliegue
Método nativo (Node.js + Yarn)
git clone https://github.com/scality/cloudserver.git
cd cloudserver
yarn install
yarn startEsto inicia CloudServer en el puerto 8000. Los puertos internos 9990 y 9991 se usan para transferencia de metadatos y datos.
Docker (Producción)
docker pull scality/cloudserver
docker run -d \
--name cloudserver \
-p 8000:8000 \
-v /ruta/persistencia:/usr/src/app/localData \
-e S3DATA=/usr/src/app/localData \
scality/cloudserverDocker Compose (Ejemplo)
version: '3'
services:
cloudserver:
image: scality/cloudserver
ports:
- "8000:8000"
volumes:
- ./data:/usr/src/app/localData
environment:
- S3DATA=/usr/src/app/localData
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:8000', (r) => process.exit(r.statusCode === 200 ? 0 : 1)]Backend de memoria (Desarrollo)
yarn run mem_backendPersistencia
En producción, los datos deben persistir fuera del contenedor:
- localData: Directorio para archivos de objetos (volumen mount)
- localMetadata: Directorio para metadatos (volumen mount)
- Configuración: Especificar rutas absolutas en
S3DATAPATHyS3METADATAPATH
mkdir -m 700 /myFavoriteDataPath
export S3DATAPATH="/myFavoriteDataPath"
yarn startRed y puertos
| Puerto | Protocolo | Uso |
|---|---|---|
| 8000 | HTTP/HTTPS | API S3 principal |
| 9990 | HTTP | Transferencia de metadatos (interno) |
| 9991 | HTTP | Transferencia de datos (interno) |
Endpoints configurables
Soporta ambos estilos de endpoints:
- Path-style:
http://myhostname.com/mybucket - Virtual-hosted:
http://mybucket.myhostname.com - IP Address: Requiere path-style (
s3ForcePathStyle: true)
Seguridad
Credenciales
Configurar credenciales en conf/authdata.json o mediante variables de entorno:
export SCALITY_ACCESS_KEY_ID="nuevaClave"
export SCALITY_SECRET_ACCESS_KEY="nuevoSecret"SSL/HTTPS
Para habilitar HTTPS, configurar certificados en config.json:
{"certFilePaths": {"key": "./test.key", "cert": "./test.crt", "ca": "./ca.crt"}}Vault (Opcional)
Para gestión avanzada de autenticación:
export S3VAULT=vault
yarn startActualización y backup
Actualizar
git pull origin development/9.5
yarn install
docker restart cloudserverCopias de seguridad
- Backup de
localData/ylocalMetadata/ - Exportar credenciales de
conf/authdata.json - Guardar configuración en
config.jsonylocationConfig.json
Ventajas
- Código abierto: Licencia Apache 2.0, modificable y extensible
- Multi-cloud: Acceso unificado a AWS S3, Azure Blob, Google Cloud Storage
- Sin vendor lock-in: Datos accesibles en cualquier cloud sin post-tratamiento
- Fácil despliegue: Contenedor Docker listo para producción en minutos
- Ecosistema S3: Compatible con todos los SDKs y herramientas existentes
Limitaciones
- No incluye replicación automática entre backends (requiere configuración manual)
- Vault es propietario y debe gestionarse externamente
- Algunos backends requieren configuración adicional de endpoints
- No soporta todas las características avanzadas de AWS S3 (ej. lifecycle rules complejos)
Alternativas reales
- AWS S3: Servicio cloud nativo, pero con vendor lock-in
- Ceph RGW: Solución open source alternativa para almacenamiento S3-compatible
- MinIO: Implementación de alto rendimiento compatible con S3
- OpenStack Swift: Protocolo similar, pero no totalmente compatible con S3
FAQ
¿CloudServer es compatible con AWS SDKs?
Sí. Todos los SDKs de S3 (JavaScript, Python, Java, etc.) funcionan sin cambios.
¿Puedo usarlo en producción?
Sí, pero requiere configuración de persistencia, SSL y credenciales seguras.
¿Qué backends soporta?
In-memory, archivos locales, Scality RING, Docker, AWS S3, Azure Blob Storage y Google Cloud Storage.
¿Requiere Redis?
No es obligatorio, pero recomendado para caché en pruebas funcionales.
