Gestión documental con Paperless-ngx y Docker

¿Alguna vez has pasado media mañana buscando aquel contrato de alquiler de hace tres años o la factura de la lavadora que justo se acaba de romper? Todos hemos estado ahí: una montaña de papeles en un cajón o, en el mejor de los casos, una carpeta en el PC llena de archivos llamados por ejemplo escaneo_factura_enero_2025.pdf.

Paperless-ngx llega para ayudarnos. Es una aplicación de gestión documental, que sigue la filosofía de desarrollo del código abierto, que transforma tus documentos físicos en un archivo digital inteligente y consultable.

Veamos un poco más al detalle:

  • Deshacernos del papel: Podemos escanear las facturas, contratos o nóminas y olvidarnos del original (siempre que la ley lo permita).
  • OCR (Reconocimiento Óptico de Caracteres): No solo guarda el PDF, sino que «lee» el contenido. Si buscamos «Naturgy», encontrará todas las facturas de la luz aunque el archivo se llame INVOICE_2024.pdf.
  • Auto-etiquetado: Aprende de tus hábitos. Con el tiempo, sabe que si un documento menciona a tu casero, debe etiquetarlo automáticamente como «Vivienda» y «Contrato».
  • Acceso desde cualquier lugar: Al ser una interfaz web, podemos consultar la documentación desde el móvil o la tablet.

Logo oficial de la herramienta

Desplegar Paperless-ngx con Docker

Para mantener nuestro sistema limpio y siguiendo el flujo de trabajo habitual que tengamos, vamos a utilizar la base de datos PostgreSQL. Aunque también se pueden utilizar otras como SQLite o MariaDB.

Además, en mi caso, también voy a definir unos volúmenes que usarán recursos NFS, que ya tengo montados en mi RaspberryPi

Veamos, a modo de ejemplo, el YAML de docker compose que utilizo yo:

version: '3'

services:
  broker:
    image: docker.io/library/redis:7
    restart: unless-stopped
    volumes:
      - redisdata:/data

  db:
    image: docker.io/library/postgres:15-alpine
    restart: unless-stopped
    volumes:
      - /mnt/docker/paperless-ngx/dbdata:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: contrasea

  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:1.17.4
    restart: unless-stopped
    depends_on:
      - db
      - broker
    ports:
      - "8000:8000"
    volumes:
      - /mnt/docker/paperless-ngx/userdata:/usr/src/paperless/data
      - /mnt/docker/paperless-ngx/media:/usr/src/paperless/media
      - /mnt/docker/paperless-ngx/export:/usr/src/paperless/export
      - /mnt/docker/paperless-ngx/consume:/usr/src/paperless/consume
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBENGINE: postgresql
      PAPERLESS_DBHOST: db
      PAPERLESS_DBNAME: paperless
      PAPERLESS_DBUSER: paperless
      PAPERLESS_DBPASS: contrasea
      PAPERLESS_OCR_LANGUAGE: spa
      PAPERLESS_URL: http://192.168.0.20:8000
      PAPERLESS_ALLOWED_HOSTS: "*"

volumes:
  userdata:
  media:
  export:
  consume:
  redisdata:
  dbdata

Hay que tener en cuenta que este fichero está adaptado a mis necesidades, ya que mi versión de ARM de 32 bits es antigua, por lo que no he podio utilizar la última versión del producto.

Tenéis diferentes ejemplos en el propio directorio de la herramienta en Github: https://github.com/paperless-ngx/paperless-ngx/tree/main/docker/compose

Podemos ver todo ya desplegado:

Resultado del despliegue

Antes de ir a la web, creamos un usuario administrador, así:

docker-compose exec webserver python3 manage.py createsuperuser

Ahora sí, ya nos podemos ir a la web:

Accedemos a la web por primera vez

Conclusiones de uso de Paperless-ngx sobre una RaspberryPi antigua

Una vez ya tenemos el despliegue hecho podemos empezar a subir documentos. Pero, hay que tener en cuenta, sobre todo si usamos, como es mi caso, un hardware limitado y antiguo, que depende el tamaño del documento o el número de estos, puede ser un poco lento el proceso. No esperes la velocidad de un servidor profesional. La primera vez que subas un archivo, dale 5 o 10 minutos. Si ves que el log no da errores, es que simplemente está trabajando duro. ¡Lo bueno se hace esperar!

No hace falta que os diga, que si lo usamos en un servidor, o en una RaspberryPi más moderna y con más memoria y CPU, notaremos una gran mejoría.

¿Os gustaría una segunda parte sobre sus usos más habituales? Puedes dejar tu comentario aquí o en las redes sociales libres como Mastodon.

5 Respuestas

  1. Daniel dice:

    Interesante esta herramienta. Quedo a la espera de esa segunda parte.

  2. Juanan dice:

    Dale

  3. jose dice:

    Gracias por la información, me siento identificado.
    Le echo un vistazo.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.