Cómo instalar Open Archiver con Docker: archiva un buzón IMAP y busca en él
Índice de contenidos
- Puntos clave
- Qué es Open Archiver y qué no es
- Requisitos
- Instalar Open Archiver con Docker Compose
- Montar un servidor IMAP de pruebas con mensajes propios
- Archivar el buzón por IMAP
- Importar un mbox y un zip de EML
- Buscar en el archivo, adjuntos incluidos
- Qué ocupa el archivo
- Comprobar la integridad
- Qué no he probado
- Preguntas frecuentes
- ¿Open Archiver sustituye a una copia de seguridad?
- ¿Puedo borrar correos del archivo?
- ¿Es gratis para uso comercial?
- Conclusión
- Fuentes
Open Archiver v0.6.0 es una plataforma AGPL-3.0 que archiva correo de IMAP, Google Workspace, Microsoft 365, PST, EML y mbox, y lo indexa con Meilisearch. Lo instalé con Docker Compose el 7 de octubre de 2026, archivé 8 mensajes de un servidor IMAP de pruebas, importé un mbox y un zip de EML, y la búsqueda encontró texto dentro de un adjunto .docx.
Open Archiver es una plataforma de código abierto, con licencia AGPL-3.0, que archiva correo de servidores IMAP, Google Workspace, Microsoft 365 y ficheros PST, EML o mbox, lo guarda en formato .eml y lo indexa para buscar en el texto de los mensajes y de los adjuntos. El 7 de octubre de 2026 instalé la versión 0.6.0 con Docker Compose, archivé un buzón IMAP de pruebas, importé un mbox y un zip de EML, y busqué en todo. Esta guía recoge los comandos que ejecuté, lo que verifiqué y lo que no. También tienes la versión en inglés.
Puntos clave
- Open Archiver 0.6.0 salió el 24 de agosto de 2026 con licencia AGPL-3.0; el repositorio de LogicLabs tiene 2.406 estrellas en GitHub a 7 de octubre.
- El despliegue son 5 contenedores: la aplicación, PostgreSQL 17, Valkey 8, Meilisearch 1.38 y Apache Tika. Con el servidor IMAP de pruebas ya cargado, la pila ocupaba unos 1,1 GiB de RAM.
- Archivé 8 de 8 mensajes por IMAP, 3 de 3 de un mbox y 2 de 2 de un zip de EML, sin fallos.
- La búsqueda encontró la palabra "aurora", que solo estaba dentro de un adjunto
presupuesto.docx, y tolera tildes: "retencion" y "retención" dieron el mismo resultado. - Importar el mismo mbox bajo una segunda fuente lo archivó otra vez: 16 filas para 13 identificadores
Message-IDdistintos. La deduplicación no es global.
Qué es Open Archiver y qué no es
El README del proyecto[1] lo resume así: "Use Open Archiver to keep a permanent, tamper-proof record of your communication history, free from vendor lock-in." Es un archivo, no un servidor de correo ni una copia de seguridad. Lee de tus buzones, guarda una copia inmutable y te deja buscar y recuperar mensajes sueltos.
Las fuentes de ingesta que lista el proyecto son IMAP genérico, Google Workspace, Microsoft 365, buzón OAuth para Outlook.com, PST, EML en zip, mbox y diarios SMTP. La versión 0.6.0 incorporó la autenticación en dos pasos en la edición de código abierto y el origen "OAuth Mailbox", según las notas de la versión[2]. La documentación agrupa retención, retenciones legales, registro de auditoría y diarios SMTP como funciones "Enterprise", y yo no las probé.
Requisitos
Necesitas Docker con el plugin Compose. Yo usé Docker 29.5.2 y Compose 2.40.3 en Linux arm64. El README pide al menos 4 GB de RAM, o 2 GB si usas instancias externas de PostgreSQL, Valkey y Meilisearch. Si aún no tienes Docker, empieza por cómo instalar Docker en Ubuntu 24.04.
Instalar Open Archiver con Docker Compose
El repositorio trae su propio docker-compose.yml con la imagen latest. Yo escribí uno más corto que fija la versión v0.6.0, para que el resultado sea reproducible:
services:
open-archiver:
image: logiclabshq/open-archiver:v0.6.0
restart: unless-stopped
ports: ["3000:3000"]
env_file: .env
volumes:
- archiver-data:${STORAGE_LOCAL_ROOT_PATH}
depends_on: [postgres, valkey, meilisearch]
postgres:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes: [pgdata:/var/lib/postgresql/data]
valkey:
image: valkey/valkey:8-alpine
restart: unless-stopped
command: valkey-server --requirepass ${REDIS_PASSWORD}
volumes: [valkeydata:/data]
meilisearch:
image: getmeili/meilisearch:v1.38
restart: unless-stopped
environment:
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY}
volumes: [meilidata:/meili_data]
tika:
image: apache/tika:3.2.2.0-full
restart: unless-stopped
volumes:
pgdata: {}
valkeydata: {}
meilidata: {}
archiver-data: {}
Tika es el extractor de texto de los adjuntos. Su imagen full pesa 1,16 GB, frente a los 279 MB de la aplicación, así que es la descarga más grande de la pila. Los volúmenes nombrados siguen el mismo criterio que explico en volúmenes y bind mounts en Docker.
Descarga el fichero de variables del proyecto y genera los secretos. El .env.example deja ENCRYPTION_KEY y STORAGE_ENCRYPTION_KEY vacíos, y la contraseña de PostgreSQL y la clave JWT con valores de ejemplo:
curl -s -o .env \
https://raw.githubusercontent.com/LogicLabs-OU/OpenArchiver/main/.env.example
sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 8)|; \
s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 16)|; \
s|^JWT_SECRET=.*|JWT_SECRET=$(openssl rand -hex 32)|; \
s|^ENCRYPTION_KEY=.*|ENCRYPTION_KEY=$(openssl rand -hex 32)|; \
s|^STORAGE_ENCRYPTION_KEY=.*|STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)|;\
s|^REDIS_PASSWORD=.*|REDIS_PASSWORD=$(openssl rand -hex 8)|; \
s|^NODE_ENV=.*|NODE_ENV=production|; \
s|^APP_URL=.*|APP_URL=http://localhost:3000|" .env
docker compose up -d
APP_URL debe coincidir con la dirección con la que abres la interfaz, porque el proyecto la usa para CORS y para el origen del servidor web. Guarda las dos claves de cifrado en un gestor de contraseñas: con STORAGE_ENCRYPTION_KEY los ficheros se guardan cifrados, y sin esa clave no se pueden leer. En el primer arranque el contenedor de la aplicación instala dependencias antes de escuchar, así que la web tarda en responder; en mi prueba devolvió una redirección a /setup cuando terminó.
En /setup creas la cuenta de administrador. Después de entrar, la interfaz muestra Dashboard, Archive, Search, Compliance, Admin y Settings, y la versión 0.6.0 en el pie.
Montar un servidor IMAP de pruebas con mensajes propios
No quería conectar un buzón real, así que añadí GreenMail, un servidor de correo de pruebas, al mismo Compose. El usuario archiv con contraseña secret123 se crea al arrancar:
greenmail:
image: greenmail/standalone:latest
environment:
GREENMAIL_OPTS: >-
-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0
-Dgreenmail.users=archiv:secret123@lab.test
ports: ["3143:3143"]
Generé 8 mensajes en español con Python (imaplib y email) y los añadí a la bandeja de entrada con el comando APPEND de IMAP. Dos llevan adjunto: un presupuesto.docx de 36.626 bytes cuyo texto contiene la palabra "aurora", que no aparece en ningún cuerpo, y un informe.txt de 66 bytes. También preparé un import.mbox de 3 mensajes (1.089 bytes) y un import-eml.zip con 2 ficheros .eml.
Archivar el buzón por IMAP
En Ingestion Sources, el botón Create New abre un formulario. Elegí el proveedor Generic IMAP y rellené el host greenmail (el nombre del servicio en la red de Compose), el puerto 3143, el usuario archiv y la contraseña. Desmarqué "Use TLS", porque el servidor de pruebas habla sin cifrar; con un servidor real déjalo marcado.
La fuente quedó en "auth success" y, en el siguiente ciclo del planificador, que por defecto corre cada minuto (SYNC_FREQUENCY='* * * * *'), la importación inicial terminó con messagesSeen: 8, messagesArchived: 8 y messagesFailed: 0. Los ciclos siguientes vieron 0 mensajes nuevos, que es lo esperado: la sincronización es incremental y sigue sola.

Por defecto el archivo excluye las carpetas Junk y Trash (ALL_INCLUSIVE_ARCHIVE=false) y los borradores (ARCHIVE_DRAFTS=false). Cámbialo en .env si tu política de retención los incluye.
Importar un mbox y un zip de EML
Los dos formatos de fichero funcionan como fuentes más: eliges "Mbox Import" o "EML Import", das un nombre y subes el fichero. El formulario ofrece también "Local Path", que la documentación[3] recomienda para ficheros de gran tamaño porque evita el límite de subida BODY_SIZE_LIMIT, que en el .env.example vale 100M.
| Fuente | Mensajes vistos | Archivados | Fallos |
|---|---|---|---|
| IMAP (GreenMail) | 8 | 8 | 0 |
| Mbox | 3 | 3 | 0 |
| Zip de EML | 2 | 2 | 0 |
Para probar duplicados subí otra vez el mismo mbox con otro nombre. Open Archiver lo archivó de nuevo: la tabla archived_emails quedó con 16 filas y 13 Message-ID distintos. La deduplicación del proyecto actúa dentro de una fuente, no entre fuentes, así que no subas el mismo fichero dos veces si quieres un archivo sin repeticiones.
Buscar en el archivo, adjuntos incluidos
La página Search usa Meilisearch. Probé estas consultas sobre los 16 mensajes archivados:
| Consulta | Resultados | Dónde estaba el texto |
|---|---|---|
aurora |
1 | solo dentro del adjunto presupuesto.docx |
88431 |
1 | cuerpo y adjunto informe.txt del mismo mensaje |
retencion y retención |
1 y 1 | el mismo mensaje, con y sin tilde |
presupuesto |
2 | asunto del mensaje original y de su respuesta |
4.800 |
1 | cuerpo del mensaje |
zzzxyz |
0 | no existe |
El resultado de aurora muestra el mensaje y, debajo, el adjunto y el fragmento con la palabra resaltada. Esa es la función que justifica Tika: sin ella solo se buscaría en asuntos y cuerpos. El selector "Search options" empieza en Fuzzy, por lo que servidor de copias devolvió 3 mensajes, uno de ellos por coincidencia aproximada, y hay filtros por fuente, fechas y remitente.
Qué ocupa el archivo
Medí el volumen de datos de la aplicación, PostgreSQL y Meilisearch después de archivar los 16 mensajes y 2 adjuntos:
El panel muestra "Total Storage Used: 5.13 KB", la suma del tamaño de los correos (5.249 bytes). No cuenta los adjuntos, así que en disco hay más de lo que indica.
Cada fichero cifrado pesa 45 bytes más que el original: el .docx pasó de 36.626 a 36.671 bytes y el .txt de 66 a 111. Los adjuntos se guardan aparte del .eml, en una carpeta attachments. La base de datos de 8,9 MB es casi todo el esquema vacío, no mis datos.
En memoria, Docker informó de 610 MiB para la aplicación, 210 MiB para Tika, 183 MiB para Meilisearch y 49 MiB para PostgreSQL con el archivo ya cargado y la pila en reposo.
Comprobar la integridad
Cada mensaje abierto muestra un "Integrity Report". Según la documentación[4], Open Archiver calcula un hash SHA-256 del .eml y de cada adjunto al archivarlos, y lo recalcula al abrir el mensaje. En mi mensaje del presupuesto, el .eml y el .docx salieron como "Valid".
Para ver si detecta cambios añadí un byte (X) al final del adjunto informe.txt guardado en el volumen, y abrí el mensaje: el .eml siguió en "Valid" y el adjunto pasó a "Invalid". Restauré después el fichero original.

Es una prueba de alteración accidental, no una auditoría: alguien con acceso a la base de datos y a la clave de cifrado podría rehacer también el hash.
Qué no he probado
No conecté Google Workspace ni Microsoft 365, que necesitan registrar una aplicación OAuth en tu proveedor, ni importé un PST. Tampoco probé las funciones Enterprise, el almacenamiento S3 ni cómo se comporta con buzones de decenas de gigabytes. Las cifras de arriba son de 16 mensajes, no de un archivo real, y no incluyo tiempos porque la máquina de pruebas estaba cargada.
Preguntas frecuentes
¿Open Archiver sustituye a una copia de seguridad?
No. Archiva correo para conservarlo y buscarlo, pero no guarda tu servidor de correo ni los datos del propio Open Archiver. Haz copia de los volúmenes de PostgreSQL y de datos, y de las claves de cifrado, con una herramienta como restic.
¿Puedo borrar correos del archivo?
Por defecto no. El .env.example trae ENABLE_DELETION=false, y en la página de un mensaje el botón Delete Email existe, pero depende de ese ajuste. Para un archivo de cumplimiento, déjalo desactivado.
¿Es gratis para uso comercial?
El código tiene licencia AGPL-3.0, que permite el uso comercial si cumples sus condiciones, entre ellas ofrecer el código a los usuarios de una versión modificada que expongas en red. Las funciones Enterprise las distingue la documentación aparte, así que revisa qué necesitas antes de comprometerte.
Conclusión
Open Archiver cumple lo que promete en un entorno controlado: 13 mensajes distintos archivados por tres vías, búsqueda dentro de un .docx y detección de un byte alterado. Lo que me falta es la prueba con un buzón real y el comportamiento con un volumen grande.
Si lo vas a usar, fija la versión de la imagen, guarda las claves de cifrado fuera del servidor y no importes el mismo fichero bajo dos fuentes.
Fuentes: [1] Repositorio de Open Archiver[1], [2] Versión v0.6.0[2], [3] Documentación de Open Archiver[5], [4] Guía de importación mbox[3], [5] Comprobación de integridad[4], [6] Documentación de Meilisearch[6], [7] Apache Tika[7], [8] GreenMail[8].
Fuentes
Código fuente
Accede a todo el código fuente de este artículo en GitHub.
Ver en GitHub