Docker
El camino soportado. Nada más que instalar: sin runtime, sin build, sin recursos de terceros.
notarum es una sola imagen de Docker y no necesita ningún servicio externo. El binario es estático, pesa unos 38 MB y trae todo adentro: el lector, la API, el servidor MCP y el contrato OpenAPI.
Docker
El camino soportado. Nada más que instalar: sin runtime, sin build, sin recursos de terceros.
Dónde guardar los datos
Un volumen montado, o una base Postgres. Sin una de las dos se pierde todo en el próximo despliegue — ver más abajo.
Alrededor de 1 GB de RAM
Sólo si encendés el buscador de normativa nacional, que tiene 428 mil normas en memoria. Sin eso, bastante menos.
Postgres conviene por dos motivos: no se escribe nada en disco, así que los respaldos son problema de tu base y ya están resueltos; y las escrituras masivas van por lotes, que importa cuando una sincronización escribe más de un millón de filas.
docker run -d -p 8080:8080 \ -e NOTARUM_ALMACEN=postgres \ -e NOTARUM_POSTGRES_DSN='postgres://usuario:clave@host:5432/notarum?sslmode=disable' \ -e NOTARUM_ADMIN_USUARIO=vos@ejemplo.com \ -e NOTARUM_ADMIN_CLAVE='una clave larga tuya' \ ghcr.io/diegoparras/notarum:latestSirve cualquier Postgres 13+ con contrib: unaccent y to_tsvector('spanish', …) son lo que
hace que buscar sin acentos encuentre. La imagen pgvector/pgvector:pg17 es una buena elección
porque está construida sobre la oficial, así que trae las dos cosas.
docker run -d -p 8080:8080 \ -v notarum-datos:/datos \ -e NOTARUM_ALMACEN=sqlite \ -e NOTARUM_ADMIN_USUARIO=vos@ejemplo.com \ -e NOTARUM_ADMIN_CLAVE='una clave larga tuya' \ ghcr.io/diegoparras/notarum:latestEl motor más simple, para probarlo. Sirve por fecha pero no indexa, así que la búsqueda de texto le pregunta al Boletín en vez de contestar localmente.
docker run -d -p 8080:8080 -v notarum-datos:/datos \ ghcr.io/diegoparras/notarum:latestAbrí http://localhost:8080 y ya estás leyendo el Boletín de hoy.
Entrá con la cuenta de administración de tus variables de entorno. Si no pusiste una clave, se genera una y se imprime una sola vez en el log.
Abrí el panel en /admin. Mirá qué dice del almacén: en un volumen nuevo va a decir que
arrancó vacío, y la primera vez está bien. Si sigue diciendo lo mismo después de un despliegue,
tus datos no se están guardando.
Sincronizá los catálogos. Sincronizar InfoLEG tarda unos minutos y trae las 428 mil normas nacionales más las relaciones de modificación. Bajar la normativa provincial tarda segundos.
Llená el Boletín del período que te interese. Con el texto de cada aviso tarda mucho más —es un pedido por aviso, al ritmo que el Boletín tolera— pero es lo que hace que la búsqueda llegue al cuerpo y no sólo al sumario.
Creá un token desde tu cuenta, para la API y el MCP.
De ahí en más se maneja solo: los catálogos se actualizan todos los días y el Boletín baja una semana entera los sábados a las 4 de la mañana.
Todo tiene un valor por defecto razonable. Las que importan:
| Variable | Qué hace |
|---|---|
NOTARUM_ALMACEN | disco, sqlite o postgres |
NOTARUM_POSTGRES_DSN | La cadena de conexión entera, o usá las piezas _HOST, _BASE, _USUARIO, _CLAVE |
NOTARUM_ADMIN_USUARIO / _CLAVE | La cuenta que administra. Poniendo la clave acá siempre podés volver a entrar |
NOTARUM_ACCESO | abierto, mixto o cerrado. También se cambia desde el panel, en el acto |
NOTARUM_BUSCADOR_INFOLEG | Enciende la búsqueda nacional. Cuesta unos 480 MB de memoria, por eso se pide |
NOTARUM_ACTUALIZAR_A_LAS | Cuándo se actualizan los catálogos. Por defecto 05:00 |
NOTARUM_BOLETIN_A_LAS | Cuándo corre la bajada semanal del Boletín. Por defecto 04:00, los sábados |
NOTARUM_ZONA | La zona horaria de esas horas. Por defecto America/Argentina/Buenos_Aires |
NOTARUM_MEMORIA_MAX | Un techo como 1GB. Si no está, se lee del contenedor |
NOTARUM_AUTH | federado delega la entrada en Lockatus, al lado del formulario propio |
Las variables de sí o no entienden 1/0, si/no, true/false y on/off.
Pasar de SQLite a Postgres no cuesta volver a bajar los catálogos:
notarum migrar --origen sqlite --db /datos/notarum.dbSe corre con la configuración del motor nuevo puesta y el viejo como origen. Lo vencido no se arrastra, y el índice de búsqueda se rearma en vez de traducirse.