OpenArchiver: Plataforma de archivado de correo electrónico autohospedada y legalmente conforme

Publicado por


Open Source

OpenArchiver: Plataforma de archivado de correo electrónico autohospedada y legalmente conforme

Solución robusta para archivar, almacenar, indexar y buscar correos de Google Workspace, Microsoft 365, IMAP, PST y más, con cumplimiento normativo y sin dependencia de proveedores.

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar OpenArchiver: Plataforma de archivado de correo electrónico autohospedada y legalmente conforme en el canal GENBYTE:

¿Qué es OpenArchiver: Plataforma de archivado de correo electrónico autohospedada y legalmente conforme?

OpenArchiver es una plataforma de código abierto diseñada para el archivado de correo electrónico con cumplimiento legal. Permite a organizaciones y particulares mantener un registro permanente e inalterable de su historial de comunicaciones, libre de dependencia de proveedores (vendor lock-in). El proyecto está desarrollado por LogicLabs-OU y se distribuye bajo licencia AGPL-3.0. Su arquitectura se basa en contenedores Docker y una pila tecnológica moderna que incluye SvelteKit, Node.js, PostgreSQL, Meilisearch, Redis (Valkey) y Apache Tika para extracción de texto.

Archivado universal con ingesta en tiempo real, búsqueda full-text avanzada, cifrado en reposo, deduplicación, informes de integridad y pista de auditoría inmutable.

Características principales

Ingesta universal

Conexión a múltiples fuentes: IMAP genérico, Google Workspace (Gmail), Microsoft 365, archivos PST, archivos .eml comprimidos y formato mbox. Soporta importación masiva inicial y sincronización continua en tiempo real.

Almacenamiento seguro y eficiente

Los correos se guardan en formato estándar .eml con deduplicación y compresión para reducir costes. Cifrado en reposo opcional mediante AES-256. Backends de almacenamiento intercambiables: sistema de archivos local o almacenamiento de objetos compatible con S3 (AWS S3, MinIO, etc.).

Búsqueda y eDiscovery de alto rendimiento

Motor de búsqueda Meilisearch que indexa el texto completo de correos y adjuntos (PDF, DOCX, etc.). Incluye descubrimiento de hilos (thread discovery) para presentar el contexto de las conversaciones.

Cumplimiento y retención

Políticas de retención granulares para gestionar el ciclo de vida de los datos. Bloqueos legales (legal holds) para impedir la eliminación durante litigios (pendiente de implementación). Hashes de archivo almacenados en base de datos para detectar alteraciones; cada correo archivado dispone de un informe de integridad.

Auditoría completa

Registro inmutable de auditoría que registra todas las actividades del sistema, garantizando trazabilidad de quién accedió a qué y cuándo.

Procesamiento asíncrono robusto

Cola de trabajos BullMQ sobre Redis (Valkey) para ingesta, indexación y planificación de sincronización. Workers configurables con control de concurrencia y límites de memoria.

Requisitos del sistema

  • Docker y Docker Compose instalados
  • Servidor o máquina local con al menos 4 GB de RAM (2 GB si se usan instancias externas de PostgreSQL, Valkey y Meilisearch)
  • Node.js >= 22.0.0 y pnpm 10.13.1 para desarrollo local (opcional, no requerido en despliegue Docker)

Instalación con Docker Compose

Clonar el repositorio

Descarga el código fuente desde GitHub y accede al directorio del proyecto.

git clone https://github.com/LogicLabs-OU/OpenArchiver.git
cd OpenArchiver

Configurar variables de entorno

Copia el archivo de ejemplo y edita los valores según tu entorno: contraseñas de administrador, claves secretas, URLs públicas, configuración de almacenamiento, claves de cifrado, etc. Lee .env.example para conocer cada variable.

cp .env.example .env
# Edita .env con tu editor preferido

Levantar los servicios con Docker Compose

Inicia todos los contenedores (frontend, backend, PostgreSQL, Valkey, Meilisearch, Apache Tika) en segundo plano usando las imágenes preconstruidas.

docker compose up -d

Acceder al proyecto

Interfaz web

Una vez que los contenedores estén en marcha, accede a la interfaz en http://localhost:3000 (o el puerto configurado en PORT_FRONTEND).

Configuración de fuentes de ingesta

Tras el primer acceso, configura una o más fuentes de ingesta (Google Workspace, Microsoft 365, IMAP genérico, PST, EML, mbox) siguiendo las guías oficiales de la documentación.

Casos de uso

  • Archivado legal y regulatorio de comunicaciones corporativas
  • eDiscovery y búsqueda forense de correos y adjuntos
  • Migración y consolidación de buzones de múltiples proveedores a un repositorio único y soberano
  • Cumplimiento de políticas de retención y bloqueos legales (legal holds)
  • Eliminación de dependencia de proveedores de correo (vendor lock-in) manteniendo historial completo
  • Auditoría de accesos y acciones sobre el archivo de correo

Configuración avanzada

Almacenamiento S3 compatible

Configura STORAGE_TYPE=s3 y define endpoint, bucket, credenciales, región y STORAGE_S3_FORCE_PATH_STYLE=true para MinIO u otros servicios no AWS.

STORAGE_TYPE=s3
STORAGE_S3_ENDPOINT=https://s3.example.com
STORAGE_S3_BUCKET=open-archiver
STORAGE_S3_ACCESS_KEY_ID=xxxx
STORAGE_S3_SECRET_ACCESS_KEY=xxxx
STORAGE_S3_REGION=us-east-1
STORAGE_S3_FORCE_PATH_STYLE=true

Cifrado en reposo

Genera una clave de 32 bytes en hexadecimal (openssl rand -hex 32) y asígnala a STORAGE_ENCRYPTION_KEY. Sin esta clave, los archivos no se cifran.

STORAGE_ENCRYPTION_KEY=tu_clave_hex_de_64_caracteres

Claves maestras de seguridad

Cambia JWT_SECRET y ENCRYPTION_KEY (para credenciales de fuentes de ingesta) por valores aleatorios seguros. Genera con openssl rand -hex 32.

JWT_SECRET=clave_larga_aleatoria
ENCRYPTION_KEY=clave_hex_32_bytes

Extracción de texto con Apache Tika

El servicio Tika se incluye en docker-compose.yml. Define TIKA_URL=http://tika:9998 para activar la extracción avanzada de texto en adjuntos (PDF, Office, etc.). Si no se define, se usa el extractor PDF interno con límites de tiempo y memoria configurables (PDF_PARSE_TIMEOUT_MS, PDF_PARSE_HEAP_BUDGET_RATIO).

TIKA_URL=http://tika:9998

Ajuste de rendimiento de indexación

Controla MEILI_INDEXING_BATCH (granularidad de cola), MEILI_INDEXING_CHUNK (documentos por envío a Meilisearch, afecta a memoria), INDEXING_WORKER_CONCURRENCY (jobs simultáneos) e INDEXING_WORKER_MAX_OLD_SPACE_MB (límite de heap del worker).

MEILI_INDEXING_BATCH=500
MEILI_INDEXING_CHUNK=25
INDEXING_WORKER_CONCURRENCY=4
INDEXING_WORKER_MAX_OLD_SPACE_MB=2048

Journaling SMTP (Enterprise)

Disponible solo en versión Enterprise. Permite recibir correos de journaling vía SMTP en puerto 2525 (SMTP_JOURNALING_PORT) con dominio de enrutamiento (SMTP_JOURNALING_DOMAIN). Incluye backpressure y concurrencia de worker configurable.

SMTP_JOURNALING_PORT=2525
SMTP_JOURNALING_DOMAIN=journal.tudominio.com
JOURNAL_QUEUE_BACKPRESSURE_THRESHOLD=10000
JOURNAL_WORKER_CONCURRENCY=3

Gestión y mantenimiento

Actualizar imágenes y reiniciar

Descarga las últimas imágenes y recrea los contenedores manteniendo los volúmenes de datos.

docker compose pull
docker compose up -d

Ver logs de servicios

Inspecciona la salida de cualquier contenedor para diagnóstico.

docker compose logs -f open-archiver
# O cualquier otro servicio: postgres, valkey, meilisearch, tika

Ejecutar migraciones de base de datos (desarrollo)

Si actualizas la versión y hay cambios de esquema, ejecuta las migraciones desde el contenedor backend o en entorno de desarrollo.

docker compose exec open-archiver pnpm –filter @open-archiver/backend db:migrate

Backup de volúmenes persistentes

Los datos residen en volúmenes Docker: pgdata (PostgreSQL), valkeydata (Valkey), meilidata (Meilisearch), archiver-data (archivos .eml). Realiza copias de seguridad de estos volúmenes según tu estrategia de backup.

# Ejemplo: backup de volumen archiver-data
docker run –rm -v openarchiver_archiver-data:/data -v $(pwd):/backup alpine tar czf /backup/archiver-data-$(date +%F).tar.gz -C /data .

Gestión de workers en desarrollo

Para desarrollo local sin Docker, los workers de ingesta, indexación y planificación se inician con comandos específicos.

pnpm run start:workers:dev
# Inicia ingestion-worker, indexing-worker y sync-scheduler en modo desarrollo

Stack técnico

  • Frontend: SvelteKit con Svelte 5
  • Backend: Node.js con Express.js y TypeScript
  • Cola de trabajos: BullMQ sobre Redis (Valkey en Docker Compose)
  • Motor de búsqueda: Meilisearch
  • Base de datos: PostgreSQL 17 (metadatos, usuarios, auditoría)
  • Extracción de texto: Apache Tika 3.2.2 (opcional, activado vía TIKA_URL)
  • Despliegue: Docker Compose (imagen logiclabshq/open-archiver:latest)
  • Gestor de paquetes: pnpm 10.13.1 (monorepo)
  • Lenguaje principal: TypeScript

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 *