https://fotosycaptura.cl

Bitácora personal del capitán @fotosycaptura ✨

Un repositorio documental en local


Un vistazo

Hace un tiempo mientras navegaba, buscaba y leía sobre algunos sistemas que sirvieran para un propósito: un gestor documental, que me permitiera encontrar lo que quisiera de manera rápida, que me permitiera etiquetar las cosas, que soportara más usuarios, en fin... Muchas cosas... Ven a ver lo que pillé...

Lo que pillé se llama Paperless-ngx, y lo mejor de todo, se puede ejecutar como contenedor...

¿Qué es?

Para poder comentarte que es, primero debo contarte algo...

Cuando uno empieza a acumular documentación técnica, manuales, informes, respaldos, contratos, procedimientos o simples PDF, tarde o temprano aparece el mismo problema: encontrar algo se vuelve más difícil que guardarlo.

Una solución bastante interesante para esto es Paperless-ngx, un sistema de gestión documental - DMS, Document Management System - de código abierto y autoalojable.

Su objetivo no es simplemente guardar archivos, sino convertirlos en un archivo documental indexado y permitir búsquedas rápidas y sobre todo, simples.

Entre sus características se puede mencionar que realiza OCR sobre los documentos, extrae texto, asigna metadatos ya sea automáticamente, o de manera manual, lo cual te permitirá clasificar documentos y permitir búsquedas por contenido.

¿Para qué sirve?

A veces me pregunto si realmente cuando lees, entiendes lo que lees... o.O... Pero bueno, vamos... Paciencia... Puede servirte ya sea en el ámbito personal como también en el profesional...

¿Qué puedo almacenar?

Algunos ejemplos de documentos que se pueden almacenarse son:

  • Manuales
  • Procedimientos
  • Informes
  • Facturas
  • Contratos
  • Certificados
  • Documentación técnica
  • Documentación de proveedores
  • Informes de incidencias
  • Diagramas
  • Auditorías
  • etc.

Te podría dar otros ejemplos más pero creo que ya se entiende la idea, espero...

La principal diferencia respecto a un sistema tradicional de carpetas es que no estarás obligado a recordar dónde está físicamente el documento.

En lugar de una estructura de carpetas típica, simplemente puedes buscar y encontrar, y le dejas lo del almacenamiento a la plataforma. ¡Simple!

La carpeta consume

Paperless posee un mecanismo muy útil llamado consumption directory.

En palabras simples, es una carpeta vigilada por el sistema, éste sistema... No vayas a pensar que hay un guardia de seguridad o algo por el estilo.. e.e.. Entonces, esta carpeta servirá para que como usuario, puedas dejar archivos ahí y Paperless se encargará de automatizar el proceso. Puedes entenderlo de esta manera si habláramos como un oficinista, como si fuera una bandeja de entrada.

¿Ventajas?

Las ventajas más interesantes son las siguientes.

  • Control de los datos. Al poder ser auto alojado, los documentos pueden permanecer completamente dentro de nuestra infraestructura. Paperless no necesita enviar nuestros archivos a servicios externos para nada.
  • Búsqueda por contenido. No depende únicamente del nombre del archivo ni de recordar la carpeta correcta.
  • OCR. Los documentos escaneados se convierten en documentos en los cuales se pueden realizar búsquedas.
  • Metadatos. Se pueden organizar mediante tipos, etiquetas, correspondientes y campos personalizados, aunque esto último no lo he experimentado todavía.
  • Automatización. La carpeta consume permite integrar escáneres, scripts, SCP, Samba, tareas programadas u otros sistemas. Pero también se pueden automatizar el tema de las etiquetas, autores, en fin...
  • Backups bajo control. Si eres entendido, que imagino que sí, osea, lo doy por hecho porque por algo lees mi sitio XD, puedes automatizar los respaldos...
  • Multiusuario. Paperless permite disponer de usuarios, grupos y permisos tanto globales como sobre documentos y otros objetos.

Puede reemplazar a otros gestores documentales

Acá te respondería con un depende... Principalmente porque hay tipos de archivos que no soporta. Sí, esto lo he revisado hace poco y me he percatado de ello, pero no es algo de lo que me preocupe mucho la verdad, casi todos mis archivos son de todo menos de Office XDD...

Como ya expliqué antes, no usa el concepto de carpetas, pero por ejemplo podrías complementarlo como un archivador documental o histórico si por ejemplo usaras otro gestor que fuera colaborativo...

Ya, mucho relato, quiero instalarlo

Los pasos para su instalación en contenedores usando Docker o Podman serían estos:

Si no tienes docker o no sabes que es, puedes mirar primero acá.

  • Primero, necesitas tener un archivo docker-compose.yml, puedes usar este que te dejo o uno similar...
services:

  broker:
    image: docker.io/library/redis:8
    container_name: paperless-redis
    restart: unless-stopped

    volumes:
      - ./redis:/data

    networks:
      - paperless-net

  db:
    image: docker.io/library/postgres:18
    container_name: paperless-postgres
    restart: unless-stopped

    volumes:
      - ./postgres:/var/lib/postgresql

    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

    networks:
      - paperless-net


  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    container_name: paperless-webserver
    restart: unless-stopped

    depends_on:
      - db
      - broker

    ports:
      - "8000:8000"

    volumes:
      - ./data:/usr/src/paperless/data
      - ./media:/usr/src/paperless/media
      - ./export:/usr/src/paperless/export
      - ./consume:/usr/src/paperless/consume

    environment:
      # Base de datos
      PAPERLESS_DBENGINE: postgresql
      PAPERLESS_DBHOST: db
      PAPERLESS_DBNAME: ${POSTGRES_DB}
      PAPERLESS_DBUSER: ${POSTGRES_USER}
      PAPERLESS_DBPASS: ${POSTGRES_PASSWORD}

      # Broker
      PAPERLESS_REDIS: redis://broker:6379

      # Seguridad
      PAPERLESS_SECRET_KEY: ${PAPERLESS_SECRET_KEY}

      # Configuración regional
      PAPERLESS_TIME_ZONE: America/Santiago

      # OCR
      PAPERLESS_OCR_LANGUAGE: spa+eng
      PAPERLESS_OCR_LANGUAGES: spa eng

      # Usuario/grupo del host
      USERMAP_UID: ${USERMAP_UID}
      USERMAP_GID: ${USERMAP_GID}

      # Nombre mostrado
      PAPERLESS_APP_TITLE: "Repositorio documental"

    networks:
      - paperless-net


networks:

  paperless-net:
    name: paperless-net

Como advertirás, hay claves y otras cosas que no están disponibles acá y eso es justamente porque se usa un archivo .env para dar un poco más de seguridad. Necesitarás crearlo mediante tu editor de texto favorito, sí, VIM o Emacs. Si es otro, ¡Fuera de mi iglesia!

POSTGRES_DB=paperless
POSTGRES_USER=paperless
POSTGRES_PASSWORD=AcáTuClaveSuperRobusta

PAPERLESS_SECRET_KEY=AcáTuClaveSuperRobusta2.0

USERMAP_UID=1000
USERMAP_GID=1000

Bueno, está demás decir que deberás establecer una contraseña robusta... Te recomendaría si no se te ocurre nada usar algo como:

openssl rand -base64 32
openssl rand -base64 64

Con eso tendrás algo totalmente aleatorio y bien robusto...

  • Lo siguiente será crear la estructura de carpeta. Puedes hacer algo como:
mkdir -p \
    data \
    media \
    consume \
    export \
    postgres \
    redis

Con eso se generará en tu disco algo como esto:

/tu-ruta/paperless/
├── docker-compose.yml
├── .env
├── data/
├── media/
├── consume/
├── export/
├── postgres/
└── redis/
  • Si lo has hecho todo bien, entonces podrás ir al último paso que será este:
docker compose up -d

Lo que esto hará será descargar la imagen, y después arrancará Paperless.

Accediendo a Paperless

Pues, para ello deberás dirigirte a tu equipo de manera local e ingresar a http://localhost:8000

Te comento que soporta perfectamente el uso con nginx, pero eso es tema de otra configuración y de otra sección de quizás más adelante... Por lo que, de momento no lo detallaré acá...

La primera vez que ingreses al sitio te pedirá generar un usuario que será quien administre la plataforma. ¿Y después? Pues, ve, juega y ¡experimenta!

La interfaz no es compleja, además que soporta arrastrar y soltar, por lo que puedes abrir tu gestor de archivos favoritos y arrastrar los archivos a Paperless...

El principal cambio conceptual será algo como esto: antes pensabas "¿Dónde dejé el documento?", mientras que ahora pensarás en "¿Que decía?", o "recuerdo que el documento hablaba de esto..."


Y eso sería todo por hoy, hasta la próxima!