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 createsuperuserAhora 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.


Interesante esta herramienta. Quedo a la espera de esa segunda parte.
Hola Daniel,
Espero que no se demore, la estoy preparando.
Saludos
Dale
Hola Juanan,
Lo estoy preparando, tengo antes otras entradas en borradores, pero no te preocupes que tarde o temprano tendrás la segunda parte. Un saludo
Gracias por la información, me siento identificado.
Le echo un vistazo.