Docker
O caminho suportado. Nada mais para instalar: sem runtime, sem build, sem recursos de terceiros.
O notarum é uma única imagem Docker e não precisa de nenhum serviço externo. O binário é estático, pesa cerca de 38 MB e traz tudo dentro: o leitor, a API, o servidor MCP e o contrato OpenAPI.
Docker
O caminho suportado. Nada mais para instalar: sem runtime, sem build, sem recursos de terceiros.
Onde guardar os dados
Um volume montado, ou um banco Postgres. Sem um dos dois, tudo se perde na próxima implantação — veja abaixo.
Cerca de 1 GB de RAM
Só se você ligar o índice de busca nacional, que mantém 428 mil normas na memória. Sem ele, bem menos.
O Postgres é a melhor escolha por dois motivos: nada é escrito em disco, então os backups são problema do seu banco e já estão resolvidos; e as escritas em massa vão em lotes, o que importa quando uma sincronização escreve mais de um milhão de linhas.
docker run -d -p 8080:8080 \ -e NOTARUM_ALMACEN=postgres \ -e NOTARUM_POSTGRES_DSN='postgres://user:pass@host:5432/notarum?sslmode=disable' \ -e NOTARUM_ADMIN_USUARIO=voce@exemplo.com \ -e NOTARUM_ADMIN_CLAVE='uma senha longa sua' \ ghcr.io/diegoparras/notarum:latestServe qualquer Postgres 13+ com contrib: unaccent e to_tsvector('spanish', …) são o que faz a
busca ignorar acentos. A imagem pgvector/pgvector:pg17 é uma boa escolha porque é construída
sobre a oficial, então traz as duas coisas.
docker run -d -p 8080:8080 \ -v notarum-datos:/datos \ -e NOTARUM_ALMACEN=sqlite \ -e NOTARUM_ADMIN_USUARIO=voce@exemplo.com \ -e NOTARUM_ADMIN_CLAVE='uma senha longa sua' \ ghcr.io/diegoparras/notarum:latestO motor mais simples, para experimentar. Serve por data mas não indexa, então a busca de texto pergunta ao Diário em vez de responder localmente.
docker run -d -p 8080:8080 -v notarum-datos:/datos \ ghcr.io/diegoparras/notarum:latestAbra http://localhost:8080 e você já está lendo o Diário de hoje.
Entre com a conta de administração das suas variáveis de ambiente. Se você não definiu uma senha, uma é gerada e impressa uma única vez no log.
Abra o painel em /admin. Veja o que ele diz sobre o armazenamento: num volume novo dirá que
começou vazio, e na primeira vez isso está certo. Se disser o mesmo depois de uma implantação,
seus dados não estão sendo guardados.
Sincronize os catálogos. Sincronizar InfoLEG leva alguns minutos e traz as 428 mil normas nacionais mais as relações de modificação. Baixar a normativa provincial leva segundos.
Preencha o Diário do período que interessa. Com o texto de cada aviso demora bem mais — é uma requisição por aviso, no ritmo que o Diário tolera — mas é o que faz a busca chegar ao corpo e não só ao sumário.
Crie um token na sua conta, para a API e o MCP.
Daí em diante ele se vira sozinho: os catálogos se atualizam todos os dias e o Diário baixa uma semana inteira aos sábados às 4 da manhã.
Tudo tem um padrão razoável. As que importam:
| Variável | O que faz |
|---|---|
NOTARUM_ALMACEN | disco, sqlite ou postgres |
NOTARUM_POSTGRES_DSN | A string de conexão inteira, ou use _HOST, _BASE, _USUARIO, _CLAVE |
NOTARUM_ADMIN_USUARIO / _CLAVE | A conta que administra. Com a senha aqui você sempre consegue voltar a entrar |
NOTARUM_ACCESO | abierto, mixto ou cerrado. Também mudável pelo painel, na hora |
NOTARUM_BUSCADOR_INFOLEG | Liga a busca nacional. Custa cerca de 480 MB de memória, por isso é opcional |
NOTARUM_ACTUALIZAR_A_LAS | Quando os catálogos se atualizam. Padrão 05:00 |
NOTARUM_BOLETIN_A_LAS | Quando roda a baixa semanal do Diário. Padrão 04:00, aos sábados |
NOTARUM_ZONA | O fuso dessas horas. Padrão America/Argentina/Buenos_Aires |
NOTARUM_MEMORIA_MAX | Um teto como 1GB. Lido do contêiner se ausente |
NOTARUM_AUTH | federado delega a entrada ao Lockatus, ao lado do formulário próprio |
As variáveis de sim ou não entendem 1/0, si/no, true/false e on/off.
Passar de SQLite para Postgres não custa baixar os catálogos de novo:
notarum migrar --origen sqlite --db /datos/notarum.dbRoda com a configuração do motor novo no lugar e o antigo como origem. O que venceu não é arrastado, e o índice de busca é reconstruído em vez de traduzido.