Concerns
Overview
OhnePapier is functional (~467 documents processed) but has several operational risks, configuration gaps, and planned-but-unbuilt features. This document captures known issues to inform planning.
Configuration Risks
Hardcoded PostgreSQL Credentials
- Location:
docker-compose.ymllines 37-39 - Issue:
POSTGRES_USER: paperless,POSTGRES_PASSWORD: paperlessare hardcoded directly in the compose file — committed to git - Risk: Acceptable for local-only deployment (no external access to :5432), but violates secret hygiene if the repo ever goes public
- Mitigation: Move to
docker-compose.env
No docker-compose.env Template
- Issue:
docker-compose.envis required for startup but not in git, and no.env.exampleor template exists - Risk: Fresh installs will fail with no clear guidance on what values are needed
- Mitigation: Create
docker-compose.env.examplewith placeholder values and required keys documented
Unpinned Image Versions (:latest tags)
- Location:
docker-compose.yml ghcr.io/paperless-ngx/paperless-ngx:latestclusterzx/paperless-ai(no tag)- Risk: Silent breaking changes on
docker compose pull; non-reproducible deployments - Mitigation: Pin to specific digest or semver tags
PostgreSQL 18 Pre-release Risk
- Image:
docker.io/library/postgres:18 - Issue: PostgreSQL 18 was pre-release at time of setup — may have instability or behavioral changes
- Risk: Data integrity or query behavior issues on postgres upgrades
- Mitigation: Consider pinning to
postgres:17(stable) orpostgres:18-betafor explicit pre-release opt-in
Security Concerns
Port Exposure
:8000(Paperless web UI) and:3000(paperless-ai) exposed to all interfaces by default (0.0.0.0)- On a home network this is typically fine, but adds risk if the host machine is publicly reachable
- No TLS / reverse proxy configured
API Token in Docker Volume
- Paperless API token is configured inside the paperless-ai container's
/app/datavolume - No rotation strategy documented
- If volume is inspected, token is exposed
SECRET_KEY Handling
- Paperless-ngx
SECRET_KEYlives indocker-compose.env(not in git) — correct - No guidance on how to generate a strong key
Operational Risks
No Health Checks
- Docker Compose has no
healthcheckdirectives for any service - Services report as "running" even if the application layer is broken
docker compose psgives false confidence
No Ollama Dependency Probe
- paperless-ai starts immediately after webserver, but has no check that Ollama is reachable on the host
- Known failure mode: If Ollama is not running, paperless-ai silently fails on AI calls with no alerting
- Documented in CLAUDE.md pre-flight, but not enforced
Cold-Start Ordering Risk
- paperless-ai
depends_on: webserverbut webserver takes 30-60s to become ready after container starts - paperless-ai may attempt API calls before webserver is fully initialized
- No
condition: service_healthycheck in depends_on
No Backup Strategy
- PostgreSQL data is in a named Docker volume (
pgdata) with no documented backup procedure export/directory exists for Paperless export but no automated schedule- Loss of
pgdatavolume = loss of all document metadata and configuration
Missing Features (Planned)
From CLAUDE.md Project Status:
| Feature | Status | Notes |
|---|---|---|
| Custom Fields | ⏳ Not configured | Paperless-ngx supports custom fields — not yet set up |
| Nullfeld-Integration | ⏳ Planned | FPGA × SoC star maps layer |
| Vector-Bridge to Eule/Qdrant | ⏳ Planned | Cross-system RAG with external vector store |
| ChromaDB/RAGZ embeddings | ⏳ Partial | Referenced in data flow diagram but not visible in docker-compose.yml |
Technical Debt
paperless-ai Configuration Not in docker-compose.yml
- paperless-ai environment (PAPERLESS_API_URL, OLLAMA_MODEL, SCAN_INTERVAL, etc.) is configured inside the container's
/app/datavolume via the paperless-ai web UI - This configuration is not version-controlled or reproducible without manual re-entry
- Risk: configuration lost if
paperless-ai_datavolume is deleted
No Compose Override Files
- No
docker-compose.override.ymlpattern for local development vs production variants - All environment differences must be managed via
docker-compose.env
Single-User Setup
- Currently assumes a single admin user (token generated from
User.objects.first()) - No multi-user or role-based access documented
Fragile Areas
| Area | Why Fragile |
|---|---|
| paperless-ai ↔ Ollama connection | Breaks silently when Ollama is not running on host; host.docker.internal only works if host machine allows it |
docker-compose.env |
Entire stack fails to start without this file; no template exists |
| PostgreSQL credentials | Hardcoded in compose file; changing requires data migration |
| paperless-ai internal config | Stored in Docker volume, not version-controlled |
Mapped: 2026-04-17