[[Uebersicht|← Zurück zur Homepage]]
# PaperSafe – Installation
> **Ist-Stand nach abgeschlossener Umsetzung (18.07.2026).** Diese Notiz beschreibt, was tatsächlich installiert wurde – nicht mehr die Planung. Der chronologische Verlauf inklusive Fehlversuchen steht in [[06-Umsetzungsprotokoll]].
## Überblick
| Wert | Ergebnis |
|---|---|
| Host | Proxmox VE 9.2.0, 192.168.2.146 |
| CTID / Hostname | **110** / `papersafe` |
| IP | **192.168.2.35** (DHCP-Reservierung im Router, MAC `BC:24:11:E0:81:A8`) |
| Weboberfläche | `http://192.168.2.35:8000` |
| Betriebssystem | Debian 12 (`debian-12-standard_12.12-1_amd64`), unprivilegierter LXC |
| Ressourcen | 2 Kerne (`cpuunits 50`), 4096 MB RAM, 512 MB Swap |
| Root-Disk | 20 GB auf `local-lvm` |
| Daten-Volume | `mp0`, 200 GB auf `local-lvm`, gemountet auf `/opt/paperless/data`, `backup=1` |
| IPv6 | deaktiviert |
## 1. Container
Angelegt mit:
```
pct create 110 local:vztmpl/debian-12-standard_12.12-1_amd64.tar.zst \
--hostname papersafe --unprivileged 1 --ostype debian \
--cores 2 --cpuunits 50 --memory 4096 --swap 512 \
--rootfs local-lvm:20 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp,type=veth \
--features nesting=1,keyctl=1 --onboot 1
```
Daten-Volume nachträglich ergänzt:
```
pct set 110 --mp0 local-lvm:200,mp=/opt/paperless/data,backup=1
```
**Wichtige Punkte:**
- **`nesting=1,keyctl=1` sind zwingend** – ohne sie startet der Docker-Daemon im unprivilegierten Container nicht
- **`cpuunits 50`** (Standard 100) gibt Home Assistant (VM 109) bei CPU-Konflikten Vorrang, damit OCR-Lastspitzen das Smart Home nicht ausbremsen
- **`local-lvm` statt `nvme-thin`** – bewusst gewählt, um die I/O von Home Assistant zu entkoppeln, das auf `nvme-thin` liegt
- **`ip=dhcp`** statt fester Container-IP – konsistent mit allen anderen Gästen, die feste Adresse kommt aus der Router-Reservierung
## 2. IPv6 deaktiviert
`ip6=none` existiert in Proxmox 9 **nicht** (gültig: `IPv6/CIDR|auto|dhcp|manual`). Gesetzt wurde `ip6=manual`. Das allein verhindert allerdings kein SLAAC im Gast – der Container zog sich trotzdem eine öffentliche IPv6-Adresse. Zusätzlich im Container:
```
/etc/sysctl.d/99-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
```
## 3. Grundsystem
- `apt update && apt full-upgrade`
- Locale `de_DE.UTF-8`, Zeitzone `Europe/Berlin`
- `unattended-upgrades` installiert und aktiv (Debian-Security-Origins standardmäßig aktiviert)
- Basiswerkzeuge: `curl`, `ca-certificates`, `gnupg`
**Beobachtung, kein Fehler:** Über `pct exec` aufgerufene Befehle zeigen weiterhin `en_US.UTF-8`, weil `lxc-attach` kein PAM durchläuft. Bei einem echten Login (SSH/Konsole) greift die gesetzte Locale korrekt.
## 4. Docker
Aus dem **offiziellen Docker-APT-Repository** (kein `get.docker.com`-Skript). Die aktuelle Doku nutzt das Deb822-Format:
```
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
/etc/apt/sources.list.d/docker.sources:
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: bookworm
Components: stable
Architectures: amd64
Signed-By: /etc/apt/keyrings/docker.asc
```
Installierte Versionen (Stand 18.07.2026):
| Komponente | Version |
|---|---|
| Docker Engine / CLI | 29.6.2 |
| containerd | v2.2.6 |
| runc | 1.3.6 |
| Compose-Plugin | v5.3.1 |
| Buildx-Plugin | 0.35.0 |
`docker run --rm hello-world` lief auf Anhieb durch – keine Probleme mit `nesting`/`keyctl`.
## 5. Paperless-ngx
Compose-Stack unter `/opt/paperless/`, fünf Dienste, **alle Images auf feste Versionen gepinnt**:
| Dienst | Image |
|---|---|
| webserver | `ghcr.io/paperless-ngx/paperless-ngx:2.20.15` |
| db | `postgres:18.4-bookworm` |
| broker | `redis:8.8.0` |
| gotenberg | `gotenberg/gotenberg:8.25` |
| tika | `apache/tika:3.3.1.0` |
Die offizielle Vorlage verwendet für Paperless und Tika `latest` – das wurde bewusst durch feste Versionen ersetzt, damit Rollback und Nachvollziehbarkeit möglich sind. `postgres:18` und `redis:8` sind Major-Tags und wurden aus demselben Grund auf Patch-Versionen festgelegt.
**Datenverzeichnisse als Bind-Mounts** (keine benannten Docker-Volumes), alle unterhalb des 200-GB-Volumes:
```
./data/data -> /usr/src/paperless/data
./data/media -> /usr/src/paperless/media
./data/export -> /usr/src/paperless/export
./data/consume -> /usr/src/paperless/consume
```
Zusätzlich `./data/pgdata` und `./data/redisdata` für Datenbank und Broker.
**Hinweis zur Doku-Quelle:** `docs.paperless-ngx.com` lieferte durchgehend HTTP 403 (vermutlich Bot-Schutz). Als Quelle diente stattdessen das GitHub-Release zum Tag `v2.20.15`.
## 6. Dateien und Rechte
| Datei | Inhalt | Rechte |
|---|---|---|
| `/opt/paperless/docker-compose.yml` | Stack-Definition | 644 |
| `/opt/paperless/docker-compose.env` | Paperless-Variablen | 600 |
| `/opt/paperless/.env` | `POSTGRES_PASSWORD`, Projektname | 600 |
Passwörter und `PAPERLESS_SECRET_KEY` liegen **nicht im Vault**, sondern im Passwortmanager. `PAPERLESS_ADMIN_USER`/`_PASSWORD`/`_MAIL` wurden nach der Inbetriebnahme aus `docker-compose.env` entfernt – sie werden nur beim ersten Start gebraucht, und das Passwort soll nicht dauerhaft im Klartext liegen und in jedes Backup wandern.
## Nacharbeiten / offen
- [ ] Scanner-Anbindung (Gerät noch nicht festgelegt) – siehe [[03-Konfiguration]]
- [ ] Tag-Schema festlegen, bevor größere Mengen eingespielt werden
- [ ] Snapshot `snap_vm-110-disk-1_Basis20260718` aufräumen, falls nicht mehr benötigt
## Quellen
- Paperless-ngx – GitHub-Release v2.20.15, `docker/compose/docker-compose.postgres-tika.yml` und `docs/advanced_usage.md` – Zugriff 18.07.2026
- Docker – Install Docker Engine on Debian, docs.docker.com – Zugriff 18.07.2026
- Proxmox VE – `man pct.conf` auf dem Host (Version 9.2.0) – Zugriff 18.07.2026
---
**Status:** Abgeschlossen – installiert und in Betrieb
**Version:** 2.0
**Letzte Aktualisierung:** 18.07.2026 17:35 Uhr
### Änderungshistorie
| Version | Datum | Uhrzeit | Änderung |
|---|---|---|---|
| 1.0 | 18.07.2026 | 13:44 | Erstfassung – Gerüst für Installation nach Variante A, Voraussetzungen, Variablenübersicht, Erstprüfung |
| 1.1 | 18.07.2026 | 13:52 | Variante A als verbindlich gesetzt, LXC-Eckdaten konkretisiert inkl. Feature-Konfiguration `nesting`/`keyctl`, Backup-Voraussetzung auf NAS `dsobe2023` ergänzt |
| 2.0 | 18.07.2026 | 17:35 | **Von Planung auf Ist-Stand umgestellt** (Phase 7): tatsächlich ausgeführte Befehle, CTID 110, IP 192.168.2.35, Daten-Volume, IPv6-Deaktivierung, Docker- und Paperless-Versionen, Bind-Mount-Struktur, Rechte und Secrets-Handhabung dokumentiert |
---
[[Impressum|Impressum]] | [[Datenschutzerklärung|Datenschutz]]