Paperless-ngx unter Docker im LXC Container installieren mit SMB/CIFS

Hallo!

Vielleicht hat schon mal jemand von euch etwas von Paperless bzw. Paperless-ng oder Paperless-ngx gehört.
Paperless-ngx ist ein Tool um sein Büro und die damit verbundene Papierwirtschaft zu digitalisieren. Es ist möglich Dokumente mit OCR zu scannen und anschließend mit Tags zu versehen.

Des Weiteren können Korrespondenten erstellt werden, denen Schlagwörter zugeordnet werden. So kann Paperless-ng automatisch neue Dokumente zu ordnen.
Ein weiteres Feature ist, dass Paperless ein sogenanntes consume Verzeichnis hat. So kann z.B. mit einem Scanner ein Dokument eingescannt werden und per FTP oder SMB/CIFS automatisiert in dem consume Verzeichnis abgelegt werden.

Wir benötigen dazu folgendes:

Für die Installation verwenden wir 2 Disks im LXC Container. Das hat den Vorteil, dass das die Daten und ein potenzielles Backup schnell getrennt und erneut eingespielt werden können. Dazu ruft Ihr im Proxmox WebUI einfach den Container auf und wählt oben links „Hinzufügen“ aus. Nun könnt ihr eine zweite virtuelle Harddisk hinzufügen. Diese müsst ihr unter „/data“ mounten.

Wir verbinden uns per SSH auf den LXC Container und stoßen ein Update & Upgrade an.
Danach installieren wir samba, welches wir für die Netzwerkfreigabe benötigen.

sudo apt update && sudo apt upgrade -y
sudo apt install samba -y

Anschließend erstellen wir einige Verzeichnisse, welche für die Installation benörigt werden. Der Ordner „consume“ wird im weiter laufenden Beitrag per SMB im Netzwerk verteilt.

cd /
sudo mkdir data/paperless
sudo mkdir data/paperless/consume
sudo mkdir data/paperless/data
sudo mkdir data/paperless/export
sudo mkdir data/paperless/media

Wir legen einen Nutzer für die Samba Freigabe an, diesen Nutzer verwenden wir auch später für Paperless. Den erstellten User fügen wir der docker Gruppe hinzu, damit dieser Container verwalten kann. Anschließend erstellen wir ein SMB Passwort, damit der User in der Lage ist sich gegen den SMB Service zu authentifizieren.

sudo adduser paperless
sudo usermod -aG docker paperless
sudo smbpasswd -a paperless

Ist dies geschafft legen wir ein Backup der smb.conf an. Danach passen wir unsere smb.conf an. Dazu editieren wir einige bereits bestehende Werte und fügen neue Parameter hinzu.

sudo nano /etc/samba/smb.conf

[global]
map to guest = never

#[printers]
#   comment = All Printers
#   browseable = no
#   path = /var/spool/samba
#   printable = yes
#   guest ok = no
#   read only = yes
#   create mask = 0700

# Windows clients look for this share name as a source of downloadable
# printer drivers
#[print$]
#   comment = Printer Drivers
#   path = /var/lib/samba/printers
#   browseable = yes
#   read only = yes
#  guest ok = no

[homes]
browsable = no
read only = no

[Paperless]
valid users = paperless
path = /data/paperless/consume/
public = no
writable = yes
printable = no
browsable = no
guest ok = no
create mask = 0600
directory mask = 0700

Jetzt müssen wir die Berechtigungen auf den Samba Ordner anpassen, damit unser User auch Zugriff hat. Anschließend starten wir den smb Dienst neu.

sudo chown -R paperless:paperless /data/paperless/*
sudo chmod 700 /data/paperless/*
sudo systemctl restart smbd

Nun wechseln wir zu unserem User „paperless“. Anschließend wechseln wir in das Userverzeichnis von „paperless“ und legen die Konfigurationsdatei für unsere Paperless Applikation an.

version: "3.4"
services:
  broker:
    image: docker.io/library/redis:6.0
    restart: unless-stopped
    volumes:
      - redisdata:/data

  db:
    image: docker.io/library/postgres:13
    restart: unless-stopped
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: paperless

  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    restart: unless-stopped
    depends_on:
      - db
      - broker
      - gotenberg
      - tika
    ports:
      - 8001:8000
    healthcheck:
      test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - /data/paperless/consume:/usr/src/paperless/consume
      - /data/paperless/data:/usr/src/paperless/data
      - /data/paperless/media:/usr/src/paperless/media
      - /data/paperless/export:/usr/src/paperless/export
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_TIKA_ENABLED: 1
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
      PAPERLESS_TIKA_ENDPOINT: http://tika:9998
      PAPERLESS_OCR_LANGUAGE: deu
      PAPERLESS_TIME_ZONE: Europe/Berlin
      USERMAP_UID: 1001
      USERMAP_GID: 1001

  gotenberg:
    image: docker.io/gotenberg/gotenberg:7.4
    restart: unless-stopped
    command:
      - "gotenberg"
      - "--chromium-disable-routes=true"

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

volumes:
  data:
  media:
  pgdata:
  redisdata:

Nun können wir unsere Container starten. Dies geschieht ganz einfach über ein wohl bekanntes Kommando.

docker compose up -d

Wenn die Container runtergeladen, gebaut und gestartet wurden muss noch ein User für das WebUI erstellt werden. Nach der Eingabe des Kommandos werden die aktuellen Container zerstört und gelöscht. Anschließend werden diese neu erstellt und Ihr werdet aufgefordert einen neuen User für das WebUI zu erstellen.

docker compose run --rm webserver createsuperuser

paperless@Paperless-ngX:~/paperless$ docker compose run --rm webserver createsuperuser
[+] Running 4/4
 ⠿ Container paperless-tika-1       Recreated                                                                                    
3.3s
 ⠿ Container paperless-broker-1     Recreated                                                                                       2.1s
 ⠿ Container paperless-gotenberg-1  Recreated                                                                                       7.5s
 ⠿ Container paperless-db-1         Recreated                                                                                       3.8s
[+] Running 4/4
 ⠿ Container paperless-gotenberg-1  Started                                                                                         0.5s
 ⠿ Container paperless-broker-1     Started                                                                                         0.9s
 ⠿ Container paperless-tika-1       Started                                                                                         0.9s
 ⠿ Container paperless-db-1         Started                                                                                         0.6s
Paperless-ngx docker container starting...
Mapping UID and GID for paperless:paperless to 1001:1001
Creating directory /tmp/paperless
Adjusting permissions of paperless files. This may take a while.
Waiting for PostgreSQL to start...
Waiting for Redis: redis://broker:6379
Connected to Redis broker: redis://broker:6379
Apply database migrations...
Operations to perform:
  Apply all migrations: admin, auth, authtoken, contenttypes, django_q, documents, paperless_mail, sessions
Running migrations:
  No migrations to apply.
Executing management command createsuperuser
Username (leave blank to use 'paperless'): 
Email address: 
Password: 
Password (again): 
Superuser created successfully.

Am Ende sollte es so aussehen, wenn alles fehlerfrei installiert wurde. Abschließend richten wir das Backup noch ein. Dazu verwenden wir ein Paperless eigenes Tool, welches sich „document _exporter“ schimpft. Dann basteln wir uns noch ein kleines Shell Kommando zusammen was ein Backup in unseren „export“ Ordner anlegt. In welchem Zyklus ihr das backup anlegen wollt ist euch überlassen. Ich habe jeden Tag um 1 Uhr morgens gewählt.

crontab -e

0 1 * * * docker compose -f /home/paperless/paperless/docker-compose.yml exec -T webserver document_exporter /usr/src/paperless/export/

Ihr könnt nun das WebUI von Paperless über die 192.168.xxx.xxx:8001 erreichen.
Das war es auch schon!

Grüße gehen aus dem Archiv!

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht.