In der folgenden Anleitung möchte ich kurz auf die Installation von paperless-ngx‘ Docker-Compose Stack unter einem frisch installierten Hetzner Cloud-Server mit Ubuntu 24.04 eingehen.
Schritt 1: Bestellprozess
Der Bestellprozess bei Hetzner wird durchlaufen, je nach Notwendigkeit wird ein entsprechend dimensionierter Hetzner Cloud-Server mit IPv4 oder ohne IPv4 (dann nur mit IPv6) bestellt. Wenn der Hetzner Cloud-Server verfügbar ist, erhält man die initialen Zugangsdaten zum root-Account per E-Mail.
Schritt 2: Verbindung
Um einen Linux-basierten Server zu steuern bedarf es eines SSH-Clients. Dieser kann z. B. MobaXTerm oder PuTTY sein, auch WSL2 mit Kommandozeilen-SSH-Client ist denkbar. Je nach Client lohnt es sich, sich mit der entsprechenden Dokumentation (MobaXTerm, PuTTY, ssh, Hetzner bietet eine umfassende Anwender-Dokumentation zu SSH) auseinanderzusetzen.
In der E-Mail finden wir eine oder zwei IP-Adressen, einen Benutzernamen und ein Passwort. Diese sind für den weiteren Verlauf und unmittelbar für die Herstellung der Verbindung zum Server nötig. Bei Wartungsaufgaben am Server oder paperless-ngx sind die Zugangsdaten ebenfalls zwingend nötig. Ein Verlust ist verkraftbar, aber die Rücksetzung des Passworts ist mit Aufwand verbunden.
Schritt 3: root-Zugang – Passwort ändern
Hetzner forciert nun eine sofortige Änderung des Passwortes.
Nicht verwirren lassen: Die Passworteingabe erfolgt ohne einen Fortschitt dieser anzuzeigen. Das Passwort wird trotzdem eingegeben (auch bei Copy & Paste). Mit einem „Enter“ ist die Passworteingabe dann abzuschließen:
Changing password for root.
Current password:
New password:
Retype new password:
root@ubuntu-4gb-fsn1-5:~#
Sollte es zu einem Fehler kommen, wird Hetzner die Verbindung trennen und eine neuerliche Verbindung mit neuerlichem Passwort-Reset erfordern.
Schritt 4: Installation von Docker mit Docker-Compose
Nun installieren wir eine Grundvoraussetzung für paperless-ngx in unserer Betriebsweise, Docker und Docker-Compose:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
Schritt 5: Benutzer anlegen
Im nächsten Schritt legen wir einen einzelnen Benutzer „user“ für unsere paperless-Installation und die Installationsroutine an:
adduser --disabled-password --gecos "" user
Schritt 6: Installation von paperless-ngx starten
Die Installation starten wir wie folgt:
sudo usermod -aG docker user
su - user
bash -c "$(curl --location --silent --show-error https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"
Schritt 7: Installation von paperless-ngx
Der Installationsprozess stellt uns nun spezifische Fragen, die wir allesamt nacheinander wie folgt beantworten. Die Passwortabfrage wird wieder versteckt eingegeben. Wenn keine Werte eingegeben werden, werden die Standardwerte in eckigen Klammern [] genutzt.
#############################################
###   paperless-ngx docker installation   ###
#############################################
This script will download, configure and start paperless-ngx.
1. Application configuration
============================
The URL paperless will be available at. This is required if the
installation will be accessible via the web, otherwise can be left blank.
Example: https://paperless.example.com
URL []:
The port on which the paperless webserver will listen for incoming
connections.
Port [8000]:
Paperless requires you to configure the current time zone correctly.
Otherwise, the dates of your documents may appear off by one day,
depending on where you are on earth.
Example: Europe/Berlin
See here for a list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Current time zone [Etc/UTC]: Europe/Berlin
Database backend: PostgreSQL, MariaDB, and SQLite are available. Use PostgreSQL
if unsure. If you're running on a low-power device such as Raspberry
Pi, use SQLite to save resources.
Database backend (postgres sqlite mariadb) [postgres]:
Paperless is able to use Apache Tika to support Office documents such as
Word, Excel, PowerPoint, and LibreOffice equivalents. This feature
requires more resources due to the required services.
Enable Apache Tika? (yes no) [no]: yes
Specify the default language that most of your documents are written in.
Use ISO 639-2, (T) variant language codes:
https://www.loc.gov/standards/iso639-2/php/code_list.php
Common values: eng (English) deu (German) nld (Dutch) fra (French)
This can be a combination of multiple languages such as deu+eng
OCR language [eng]: deu
Specify the user id and group id you wish to run paperless as.
Paperless will also change ownership on the data, media and consume
folder to the specified values, so it's a good idea to supply the user id
and group id of your Unix user account.
If unsure, leave default.
User ID [1000]:
Group ID [1000]:
2. Folder configuration
=======================
The target folder is used to store the configuration files of
paperless. You can move this folder around after installing paperless.
You will need this folder whenever you want to start, stop, update or
maintain your paperless instance.
Target folder [/home/user/paperless-ngx]:
The consume folder is where paperless will search for new documents.
Point this to a folder where your scanner is able to put your scanned
documents.
CAUTION: You must specify an absolute path starting with / or a relative
path starting with ./ here. Examples:
  /mnt/consume
  ./consume
Consume folder [/home/user/paperless-ngx/consume]:
The media folder is where paperless stores your documents.
Leave empty and docker will manage this folder for you.
Docker usually stores managed folders in /var/lib/docker/volumes.
CAUTION: If specified, you must specify an absolute path starting with /
or a relative path starting with ./ here.
Media folder []:
The data folder is where paperless stores other data, such as your
search index and other data.
As with the media folder, leave empty to have this managed by Docker.
CAUTION: If specified, you must specify an absolute path starting with /
or a relative path starting with ./ here.
Data folder []:
The database folder, where your database stores its data.
Leave empty to have this managed by Docker.
CAUTION: If specified, you must specify an absolute path starting with /
or a relative path starting with ./ here.
Database folder []:
3. Login credentials
====================
Specify initial login credentials. You can change these later.
A mail address is required, however it is not used in paperless. You don't
need to provide an actual mail address.
Paperless username [user]:
Paperless password:
Paperless password (again):
Email [user@localhost]:
Summary
=======
Target folder: /home/user/paperless-ngx
Consume folder: /home/user/paperless-ngx/consume
Media folder: Managed by Docker
Data folder: Managed by Docker
Database folder: Managed by Docker
URL:
Port: 8000
Database: postgres
Tika enabled: yes
OCR language: deu
User id: 1000
Group id: 1000
Paperless username: user
Paperless email: user@localhost
Press any key to install.
Schritt 8: Installation läuft
Die Installationsroutine läd nun alle Containerimages für Docker herunter und startet anschließend unsere paperless-ngx Instanz unter dem angegebenen Port.
Schritt 9: Installation abgeschlossen
Über unseren Browser erreichen wir die Instanz dann über:
http://<Hier die IP von Hetzner>:8000/

Schritt 10: Weitere Schritte bedenken
Im Anschluss sollte man sich Gedanken über die Verschlüsselung der Daten in transit und at rest (Übertragende Daten und ruhende Daten) machen. Außerdem gibt es noch ein paar „Nice-to-haves“ die man nun nachrüsten kann. Eine entsprechende Referenz werde ich hier setzen sobald die entsprechenden Artikel publiziert sind.