DecaTec https://decatec.de Programmieren, Fotografie, Home-Server und einiges mehr Wed, 12 Dec 2018 13:43:03 +0000 de-DE hourly 1 Nextcloud Talk mit eigenem TURN-Server (coturn) https://decatec.de/home-server/nextcloud-talk-mit-eigenem-turn-server-coturn/ https://decatec.de/home-server/nextcloud-talk-mit-eigenem-turn-server-coturn/#comments Wed, 21 Nov 2018 15:12:55 +0000 https://decatec.de/?p=4930 Nextcloud Talk Logo

Für Nextcloud ist schon seit einiger Zeit eine Erweiterung als App verfügbar, mit der Chats und (Video-)Telefonate über die eigene Cloud geführt werden können: Nextcloud Talk.

Im Normalfall muss man dafür einfach die App im Nextcloud App Store herunterladen und kann sofort loslegen, mit anderen Nutzern der Cloud zu kommunizieren. Dank der Verfügbarkeit von mobilen Apps für Android und auch iOS kann diese Lösung auch als Alternative zu den bekannten Kommunikation-Apps (wie z.B. WhatsApp) genutzt werden. Das Hauptargument für Nextcloud Talk ist dabei sicherlich, dass Chats und (Video-)Telefonate komplett verschlüsselt über die eigene Nextcloud-Instanz ablaufen und so vor den neugierigen Blicken von Konzernen geschützt sind.

Dennoch treten bei Nextcloud Talk oftmals Probleme auf, wenn sich die genutzten Endgeräte nicht im selben Netzwerk befinden. Hier können dann keine (Video-)Telefonate geführt werden, da sich die Geräte einfach nicht finden können.

Damit über Nextcloud Talk jederzeit problemlos kommuniziert werden kann, ist ein eigener TURN-Server notwendig. Mit coturn ist ein solcher auch unter Ubuntu verfügbar. Dieser Artikel beschreibt daher die Installation und Konfiguration von coturn, um optimal mit Nextcloud Talk zusammen zu arbeiten.

Als Basis dient wie immer der Artikel Nextcloud auf Ubuntu Server 18.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban.

Probleme mit Nextcloud Talk mit eigenem STUN/TURN-Server lösen

Nextcloud Talk basiert auf WebRTC. Die bei der Kommunikation beteiligten Endgeräte bauen dabei eine direkte Peer-to-Peer-Verbindung auf.

Im gleichen Netzwerk (LAN) ist dies kein Problem, hier müssen alle Endgeräte lediglich WebRTC unterstützen.

Wenn sich die Geräte in unterschiedlichen Netzwerken befinden, müssen die Geräte sowohl ihre interne, also auch ihre externe IP-Adresse kennen. Diese Umsetzung ist die Aufgabe eines STUN-Servers (Session Traversal Utilities for NAT). Für Nextcloud Talk ist ein eigener STUN-Server verfügbar (stun.nextcloud.com:443), daher sollte dies auch kein Problem darstellen.

Wenn nun allerdings Firewalls mit im Spiel sind, kann der STUN-Server die „Übersetzung“ der Adressen nicht mehr leisten. In diesen Fällen spricht man von einem Symmetric NAT: Hier wird durch die Firewall verhindert, dass von außen (d.h. aus dem Internet) initiierte Verbindungen in das lokale Netzwerk möglich sind. In diesem Szenario ist dann ein TURN-Server (Traversal Using Relays around NAT) notwendig, über den sämtliche Verbindungen geleitet werden.

Diese Thematik ist durchaus komplex, aber vereinfacht kann man sagen, dass man einen TURN-Server benötigt, wenn die Verbindung zwischen Geräten in unterschiedlichen Netzwerken nicht aufgebaut werden kann (z.B. PC im Heimnetzwerk, Smartphone in Mobilfunknetz). Im Heimnetzwerk-Bereich ist dies vermutlich immer der Fall.

Unter Ubuntu ist coturn als quelloffene Implementierung eines STUN/TURN-Servers verfügbar.

Installation und Konfiguration coturn

coturn kann ganz einfach auf dem gleichen System installiert werden, auf dem auch schon Nextcloud läuft.

Zunächst bringen wir das System auf den neusten Stand:

apt-get update && apt-get upgrade -V

Anschließend kann coturn auch schon installiert werden, da es bereits Teil der Ubuntu-Paketquellen ist:

apt-get install coturn

Nach der Installation muss coturn nun nur noch konfiguriert werden, damit eine optimale Zusammenarbeit mit Nextcloud Talk gewährleistet ist.

Dazu wird coturn erst einmal aktiviert. Dies geschieht in folgender Datei:

nano /etc/default/coturn

Hier muss folgende Zeile eingefügt werden. Diese ist nach der Installation bereits vorhanden, ist allerdings auskommentiert. Daher entfernen wird einfach das Zeichen ‚#‘ am Anfang der Zeile:

TURNSERVER_ENABLED=1

Als nächstes werden die Einstellungen von coturn bearbeitet.
Diese befinden sich in folgender Datei:

nano /etc/turnserver.conf

Hier müssen die folgenden Werte angepasst werden. Die meisten Werte sind hier bereits vorhanden, allerdings auskommentiert. Auch hier entfernen wir die Raute (‚#‘) vor der entsprechenden Zeile.

  • tls-listening-port=5349
  • fingerprint
  • lt-cred-mech
  • use-auth-secret
  • static-auth-secret=<secret>
  • realm=meinedomain.de
  • total-quota=100
  • bps-capacity=0
  • stale-nonce=600
  • cert=/etc/letsencrypt/live/meinedomain.de/cert.pem
  • pkey=/etc/letsencrypt/live/meindomain.de/privkey.pem
  • cipher-list=“ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384″
  • no-loopback-peers
  • no-multicast-peers
  • dh-file=/etc/nginx/ssl/dhparams.pem
  • no-tlsv1
  • no-tlsv1_1
  • no-stdout-log

Zu den angegebenen Werten hier noch ein paar Erklärungen:

  • tls-listening-port: Hier verwende ich den Standard-Port für TLS-Verbindungen zu coturn (5349). Hier könnte man auch einen anderen Port angeben. Diesen sollte man sich merken, da man diesen nachher in der Firewall freischalten muss.
  • static-auth-secret: Dies ist ein Passwort, welches zur Nutzung des TURN-Servers benötigt wird. Dies ist ein Sicherheitsmerkmal, so dass kein Dritter ohne Kenntnis dieses Passwortes den TURN-Server verwenden kann. Dieses Passwort muss man sich nicht merken und wird später nur in den Nextcloud-Einstellungen hinterlegt, daher lässt man sich dies am besten einfach durch folgenden Befehl generieren: openssl rand -hex 32
  • cert/pkey/dh-file: Dies sind die SSL-Zertifikate bzw. Diffie-Hellman-Parameter, die für die verschlüsselte Verbindung über TLS benötigt werden. Hierzu verwenden wir einfach die bereits vorhandenen Zertifikate für die eigene Domain (siehe hier und hier).
  • cipher-list: Legt die Cipher-Suite für die TLS-Verbindung zum TURN-Server fest. Hier kann die Cipher-Suite angegeben werden, die auch schon der Webserver nginx verwendet (hier heißt die Variable ssl_ciphers, siehe hier).

Nach der Anpassung der Konfiguration von coturn wird das Programm neu gestartet, damit die Änderungen übernommen werden.

service coturn restart

Portfreigaben einrichten

Nach der Einrichtung des TURN-Servers muss nun noch eine Portfreigabe eingerichtet werden, damit coturn auch „von außen“ erreichbar ist.

Wichtig ist hier der Port, der bei der Variable tls-listening-port in der coturn-Konfiguration angegeben wurde. In diesem Beispiel verwende ich dazu den Standard-Port 5349.

Zunächst muss hier eine entsprechende Portweiterleitung im Router eingerichtet werden. Das genaue Vorgehen unterscheidet sich hier von Router zu Router, daher kann an dieser Stelle keine detaillierte Anleitung erfolgen. Hier sollte man aber alle notwendigen Informationen auf den Hersteller-Seiten finden (so z.B. auf den AVM Hilfeseiten, wenn man eine FritzBox im Einsatz hat). Wichtig ist hier, dass die Freigabe für die beiden Protokolle TCP und UDP angelegt werden. Dazu ist meistens das Anlegen von zwei Freigaben notwendig, hier am Beispiel einer FritzBox:

Portfreigaben für cotun (FritzBox)

Portfreigaben für cotun (FritzBox)

Wenn darüber hinaus auch noch eine Firewall auf dem System installiert ist, auf dem coturn eingerichtet wurde, so muss auch hier eine Freigabe erfolgen. Auf vielen Systemen wird wohl ufw (uncomplicated firewall) eingerichtet sein. Hier erfolgt die Freigabe dann über folgende Befehle:

ufw allow 5349/tcp
ufw allow 5349/udp

Nextcloud Talk mit eigenem STUN/TURN-Server

Nun kann Nextcloud Talk mit dem eigenen STUN bzw. TURN-Server betrieben werden.

Zunächst muss – falls noch nicht geschehen – die App Talk aus dem Nextcloud App Store heruntergeladen werden. Diese befindet sich in der Kategorie Kommunikation.

Talk im Nextcloud App Store

Talk im Nextcloud App Store

Nach der Installation der App muss diese noch konfiguriert werden, damit diese coturn als STUN bzw. TURN-Server nutzt. Die dazugehörigen Optionen findet man in den Admin-Einstellungen von Nextcloud unter dem Punkt Talk.

Nextcloud Talk: Einstellungen für eigenen STUN/TURN-Server

Nextcloud Talk: Einstellungen für eigenen STUN/TURN-Server

Zunächst fügen wir mit der Plus-Schaltfläche einen zusätzlichen STUN-Server hinzu:

meinedomain.de:5349

Die Einstellungen für den TURN-Server sehen dann folgendermaßen aus:

  • URI: meinedomain.de:5349: Der Port wurde zuvor in der coturn-Konfiguration (tls-listening-port) hinterlegt.
  • Gemeinsames Geheimnis: Hier muss das Passwort angegeben werden, welches bei der Konfiguration von coturn als Variable static-auth-secret hinterlegt wurde.
  • UDP und TCP: Nextcloud Talk soll hier für maximale Kompatibilität sowohl TCP- als auch UDP-Verbindungen nutzen.

Unter Signalisierungsserver sind keine Eingaben notwendig.

Die Konfiguration kann nun ganz einfach mit der entsprechenden Schaltfläche getestet werden (siehe Pfeil oberes Bild). Hier sollte dann nach einem kurzen Augenblick auch eine Erfolgsmeldung erscheinen:

TURN-Server ist richtig konfiguriert

TURN-Server ist richtig konfiguriert

Chats und (Video-)Telefonie über die eigene Nextcloud

Ab sofort können über Nextcloud Talk Chats, Telefonate und auch Video-Telefonate geführt werden. Dies ist auf den verschiedensten Endgeräten möglich: Zum einen kann Nextcloud Talk ganz einfach im Browser verwendet werden. Dazu in der oberen Menüleiste einfach auf das Talk-Symbol klicken. Nun noch den passenden (Nextcloud-)Kontakt auswählen und schon kann es losgehen.

Nextcloud Talk in Aktion

Nextcloud Talk in Aktion

Richtig interessant wird die Sache allerdings mit mobilen Geräten, wie z.B. Smartphones. Hier stehen App sowohl für iOS, als auch für Android bereit:

Nextcloud Talk (Kostenlos, Google Play) →

Nextcloud Talk (Kostenlos, App Store) →

Der Funktionstest des eigenen TURN-Servers erfolgt am besten mit einem Smartphone: Wenn dieses nicht mit dem Heimnetzwerk, sondern mit dem Mobilfunknetz verbunden ist, sollten sowohl Chats, auch als (Video-)Telefonate mit einem Gerät im Heimnetzwerk problemlos möglich sein.

Troubleshooting

Falls Probleme mit Nextcloud Talk auftreten, sollte zunächst einmal die grundsätzliche Konfiguration durch die entsprechende Schaltfläche in den Admin-Einstellungen zu Talk überprüft werden (siehe Screenshot weiter oben). Anschließend kann es auch sinnvoll sein, die Nextcloud-Logs zu überprüfen. Diese findet man in der Admin-Oberfläche von Nextcloud unter dem Punkt Protokollierung.

Wenn im Nextcloud-Log keine Einträge vorhanden sind, die sich mit Talk in Verbindung bringen lassen, sollte die Funktion von coturn überprüft werden. Die Log-Dateien von coturn befinden sich im Verzeichnis /var/log. Die gesuchten Log-Dateien beginnen alle mit turn_ und beinhalten eine Datumsangabe im Dateinamen, z.B. turn_1352_2018-11-08.log. In diesen Log-Dateien sollte dann zumindest ein Hinweis zu finden sein, warum es zu Problemen gekommen ist.

Fazit

Im Heim-Bereich funktioniert Nextcloud Talk leider nicht immer out-of-the-box – mit dem Aktivieren der App ist es hier meistens nicht getan. Allerdings kann mit coturn recht einfach ein eigener STUN/TURN-Server in Betrieb genommen werden. Der entsprechende Konfigurations-Aufwand hält sich hierfür auch in Grenzen.

Mit Hilfe des eigenen TURN-Servers ist es nun aber möglich, über die eigene Cloud Chats und (Video-)Telefonate zu führen. Dieses Konzept ist im Vergleich zu den bekannten Apps (wie z.B. WhatsApp) besonders interessant, da die Kommunikation ausschließlich verschlüsselt über die persönliche Cloud abläuft, ohne dass hier Konzerne wie Google oder Facebook „mitlesen“ können.

Weiterführende Artikel

Links

]]>
https://decatec.de/home-server/nextcloud-talk-mit-eigenem-turn-server-coturn/feed/ 3
Nextcloud: Online-Office mit ONLYOFFICE (mit eigener Subdomain) https://decatec.de/home-server/nextcloud-online-office-mit-onlyoffice-mit-eigener-subdomain/ https://decatec.de/home-server/nextcloud-online-office-mit-onlyoffice-mit-eigener-subdomain/#comments Fri, 09 Nov 2018 15:06:37 +0000 https://decatec.de/?p=4850 Nextcloud OnlyOffice Logo

Nextcloud bietet neben dem Speichern von Dateien auch noch erweiterte Funktionen wie z.B. die Verwaltung von Kontakten und Kalendern. Ebenso sind Online-Office-Funktionalitäten mit der eigenen Cloud-Lösung möglich: Hier gibt es die Alternativen ONLYOFFICE und Collabora. Für welche Lösung man sich hier entscheidet, ist zunächst einmal Geschmackssache.

Zum Thema ONLYOFFICE gab es bereits einen Artikel in diesem Blog. Die hier gezeigte Lösung hatte allerdings einen entscheidenden Nachteil: Die Office-Funktionalitäten waren nur verfügbar, wenn man über das lokale Netzwerk (LAN) auf die eigene Cloud zugegriffen hat. Das Bearbeiten von Dokumenten über das Internet war auf diese Art und Weise nicht möglich, da beim Bearbeiten von Dokumenten immer direkt auf die IP zugegriffen wurde, auf der ONLYOFFICE installiert wurde. Diese LAN-IP war über das Internet natürlich nicht erreichbar.

In diesem Artikel soll es daher wieder mal um die Einrichtung von ONLYOFFICE mittels Docker unter Nextcloud gehen. Dieses Mal sollen jedoch keine Einschränkungen für die Benutzung des Online-Office gelten: Somit ist dann der Zugriff sowohl über das lokale Netzwerk, also auch über das Internet möglich.

Als Grundlage dient wie immer der Artikel Nextcloud auf Ubuntu Server 18.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban.

Update-Historie (letztes Update 12.11.2018)
  • 12.11.2018:
    • Die SSL-Konfiguration wird nun unter /etc/nginx/conf.d/ssl.conf gespeichert/ausgelagert.

 

Zweite (Sub-)Domain für ONLYOFFICE

Ich gehe in diesem Artikel davon aus, dass der eigene Server, auf dem Nextcloud bereits läuft, über die DynDNS-Domain meindomain.de erreichbar ist. DynDNS sorgt hier dafür, dass die öffentliche IP-Adresse des Routers auf eine Domain gemappt wird. Im Router wird die Domain dazu in den DynDNS-Einstellungen hinterlegt. Leider unterscheidet sich das Vorgehen von Router zu Router, daher würde eine detaillierte Anleitung für verschiedene Router-Modelle dem Umfang des Artikels sprengen.

Voraussetzung für ONLYOFFICE ist nun eine zweite (Sub-)Domain, über die der Dokumenten-Server später erreichbar sein wird. Als Beispiel nehme ich hier einfach die Domain onlyoffice.meinedomain.de. Diese zweite Domain muss dabei ebenfalls auf die öffentliche IP-Adresse des Routers „zeigen“, ist sozusagen auch eine zweite (oder besser gesagt alternative) DynDNS-Domain.

Mehrere DynDNS-Domains mittels CNAME

Und genau das ist hier das Problem. In fast allen Router-Modellen kann nur ein DynDNS-Anschluss mit nur einer Domain festgelegt werden. Die Lösung für dieses Problem stellt ein sog. CNAME-Eintrag für eine zweite (Sub-)Domain dar. Mittels CNAME wird einfach ausgedrückt ein alternativer Name für eine Domain hinterlegt: Der CNAME-Eintrag der Office-Domain muss daher die bereits vorhandene DynDNS-Domain sein.

Wo kann man diesen CNAME-Eintrag nun hinterlegen? Dies passiert normalerweise in der Domain-Verwaltung des Webspace-Providers. Auch hier unterscheidet sich das Vorgehen von Anbieter zu Anbieter, gute Erfahrungen konnte ich hier allerdings mit All-Inkl.com (Affiliate-Link) machen.

Hier loggt man sich zunächst im Kundenportal (KAS) ein und legt eine neue Subdomain an. Dazu findet man im Menü den Eintrag Subdomain. Über den Punkt Neue Subdomain anlegen kann hier eine neue Subdomain beantragt werden. Hier kann man alle Einstellungen einfach übernehmen, da diese Domain später nicht auf den Webspace, sondern die öffentliche IP-Adresse des eigenen Routers zeigen wird.

All-Inkl.com: Neue Subdomain anlegen

All-Inkl.com: Neue Subdomain anlegen

Um nun noch den CNAME-Eintrag für die neue Subdomain hinzuzufügen, muss man die Domain-Einstellungen unter Tools > DNS-Einstellungen bearbeiten. Hier sieht man dann die eigene Domain, über die auch der DynDNS-Anschluss läuft (meinedomain.de). Mit einem Klick auf Bearbeiten kann diese Domain modifiziert werden. Hier klickt man dann auf den Punkt neuen DNS Eintrag erstellen. Folgende Einstellungen sind hier vorzunehmen:

  • Name: Der Name der Subdomain (hier also onlyoffice.meinedomain.de).
  • Typ/Prio.: CNAME
  • Data: Hier wird die eigentliche DynDNS-Domain eingetragen (also meinedomain.de).
All-Inkl.com: CNAME-Eintrag für Subdomain erstellen

All-Inkl.com: CNAME-Eintrag für Subdomain erstellen

Nach einem Klick auf Speichern werden die Änderungen übernommen.

SSL-Zertifikat für die neue Domain hinzufügen

Damit die Verbindung zu ONLYOFFICE stets verschlüsselt, also über HTTPS abläuft, muss für die neue Subdomain noch ein SSL-Zertifikat über Let’s Encrypt erzeugt werden. Dazu wird das bereits für Nextcloud verwendete Zertifikat modifiziert, indem wir dieses Zertifikat um eine weitere (Sub-)Domain erweitern. Hierfür sind keine Änderungen an den virtuellen Hosts von nginx erforderlich, es reicht einfach folgender Befehl auf der Kommandozeile:

certbot certonly --webroot -w /var/www/letsencrypt -d meinedomain.de -d onlyoffice.meinedomain.de --rsa-key-size 4096

Wichtig ist hier die Angabe aller (Sub-)Domains mit dem Parameter -d. Nach diesem Befehl werden die Zertifikats-Dateien unter /etc/letsencrypt/live/meinedaomin.de erneuert. Nicht wundern, hier wird nicht für jede (Sub-)Domain ein Zertifikat erzeugt, sondern nur ein Zertifikat, welches für mehrere Domains ausgestellt ist.

Die Diffie-Hellman-Parameter (siehe Beschreibung) müssen nicht neu erzeugt werden können aus der bestehenden Installation übernommen werden.

Auslagern der SSL-Einstellungen aus dem virtuellen Host für Nextcloud

Für die neue Domain muss nun natürlich ein neuer virtueller Host angelegt werden. Dieser zielt wieder auf SSL ab, daher sind hier auch sämtliche SSL-Einstellungen wie ssl_certificate, ssl_protocols, ssl_ciphers, etc. notwendig. Damit wir diese nicht doppelt pflegen müssen (im Gateway-Host und im virtuellen Host für ONLYOFFICE), lagern wir diese Anweisungen für SSL einfach aus.

Vorher sollten alle virtuellen Hosts gesichert werden, falls beim Umzug etwas schief gehen sollte.

Wir erstellen dazu eine neue Datei speziell für allgemeine SSL-Einstellungen, die für alle (Sub-)Domains gelten sollen:

nano /etc/nginx/conf.d/ssl.conf

Folgender Inhalt wird dazu aus dem Gateway-Host übernommen:

# Certificates used
ssl_certificate /etc/letsencrypt/live/meinedomain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/meinedomain.de/privkey.pem;

# Not using TLSv1 will break:
#	Android <= 4.4.40
#	IE <= 10
#	IE mobile <=10
# Removing TLSv1.1 breaks nothing else!
# TLSv1.3 is not supported by most clients, but it should be enabled.
ssl_protocols TLSv1.2 TLSv1.3;

# Cipher suite from https://cipherli.st/
# Max. security, but lower compatibility 
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384';

# Cipher suite from https://wiki.mozilla.org/Security/Server_Side_TLS
#ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';

# (Modern) cipher suite from https://mozilla.github.io/server-side-tls/ssl-config-generator/
#ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';

# Diffie-Hellman parameter for DHE ciphersuites, recommended 4096 bits
ssl_dhparam /etc/nginx/ssl/dhparams.pem;

# Use multiple curves.
# secp521r1: Not supported by Chrome
# secp384r1: Not supported by Android (DAVdroid)
ssl_ecdh_curve secp521r1:secp384r1:prime256v1;

# Server should determine the ciphers, not the client
ssl_prefer_server_ciphers on;

# OCSP Stapling
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

# This should be chain.pem
# See here: https://certbot.eff.org/docs/using.html
ssl_trusted_certificate /etc/letsencrypt/live/meinedomain.de/chain.pem;

resolver 192.168.178.1;

# SSL session handling
ssl_session_timeout 24h;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

#
# Add headers to serve security related headers
#  
# HSTS (ngx_http_headers_module is required)
# In order to be recoginzed by SSL test, there must be an index.hmtl in the server's root
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains" always;
add_header X-Content-Type-Options "nosniff" always;	
add_header Referrer-Policy "no-referrer" always;	
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;

Im nächsten Schritt werden nun genau diese Einstellungen aus dem Gateway-Host entfernt und durch eine einzige Zeile ersetzt:

include /etc/nginx/conf.d/ssl.conf;

Anschließend starten wir den Webserver neu:

service nginx restart

Nun sollte man zunächst einmal testen, ob alle vorhandenen Web-Anwendungen (wie z.B. Nextcloud) noch wie erwartet funktionieren. Erst wenn diese Überprüfung erfolgreich war, sollte man hier weitermachen.

Virtuellen Host für ONLYOFFICE hinzufügen

Alles funktioniert noch? Gut! Dann weiter…

Im nächsten Schritt wird für die neue Subdomain ein eigener vHost hinzugefügt:

nano /etc/nginx/conf.d/onlyoffice.meinedomain.de.conf

Der Inhalt ist hier recht übersichtlich:

server {
        listen 443 ssl http2;
        server_name onlyoffice.meinedomain.de;

        # Include SSL configuration
        include /etc/nginx/conf.d/ssl.conf;

        #
        # Configuration for OnlyOffice
        #
        location / {
                proxy_pass https://192.168.178.60:4433;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Forwarded-Proto $scheme;
        }
}

Die SSL-Einstellungen haben wird ja zuvor ausgelagert, so dass diese nun in diesem zweiten vHost einfach wiederverwendet werden können.

Wichtig bei der Angabe des proxy_pass:

  • Für die Verbindung zur Maschine, auf der später ONLYOFFICE laufen wird, nutzen wir ebenfalls HTTPS. Wenn dies der gleiche Rechner ist, auf dem auch Nextcloud schon läuft, könnte man hier auch einfach auf HTTP setzen, da die Kommunikation dann nur Rechner-intern abläuft (dazu später mehr).
  • Die IP ist hier die lokale IP-Adresse des Rechners, auf dem ONLYOFFICE später laufen wird. Dies kann also die IP der Maschine sein, auf der auch der Webserver (und z.B. Nextcloud) läuft, oder auch eine andere Maschine im LAN.
  • Als Port habe ich hier 4433 angegeben. Dies ist besonders wichtig, wenn ONLYOFFICE auf dem gleichen Rechner installiert wird, auf dem auch der Webserver/Nextcloud läuft. Der Standard-Port für HTTPS 443 wäre hier schon (durch den Gateway-Host) belegt, also muss man auf einen anderen Port ausweichen.

Installation und Einrichtung ONLYOFFICE

Nachdem nun sämtliche Voraussetzungen erfüllt sind, kann es an die Installation von ONLYOFFICE gehen. Ich bevorzuge hier den Weg über Docker, da eine komplett manuelle Installation sehr aufwendig ist. Hier ist es auch egal, auf welcher Maschine ONLYOFFICE installiert wird. Entweder man installiert das Online-Office direkt auf dem Rechner, auf dem auch Nextcloud bereits läuft, oder man nimmt eine zweite Maschine (oder VM), auf der dann nur ONLYOFFICE betrieben wird.

Docker sollte auf jeden Fall bereits installiert sein. Fall nicht, sollte dieser Schritt wie im Artikel Docker auf Ubuntu Server nun nachgeholt werden.

Alle folgenden Schritte müssen auf der Maschine ausgeführt werden, auf der ONLYOFFICE installiert werden soll.

Vorbereitungen für die Installation

Die Verbindung zu ONLYOFFICE sollte aus Sicherheitsgründen immer verschlüsselt, also über HTTPS ablaufen. Durch den vHost für ONLYOFFICE ist die Verbindung über das Internet auch bereits verschlüsselt. Bleibt nur der Verbindungsweg vom Webserver auf die Maschine, auf der das Online-Office später laufen wird (also die Verbindung im lokalen Netzwerk). Diese Verbindung sollte ebenfalls verschlüsselt werden, damit auch LAN-intern stets sichere Verbindungen aufgebaut wird.

Wenn ONLYOFFICE auf dem gleichen Rechner gehostet wird, auf dem schon Nextcloud und der Webserver laufen, ist dieser Schritt eigentlich optional, da hier nur eine Rechner-interne Verbindung zustande kommt. Trotzdem empfehle ich diese Schritte auszuführen, besonders wenn die Office-Lösung und der Webserver/Nextcloud auf unterschiedlichen Maschinen installiert werden.

Da wir hier ja nur mit einer IP-Adresse arbeiten (die beim proxy_pass angegeben wird), können wir hierfür kein Let’s Encrypt Zertifikat erstellen, da diese Zertifikate nicht auf IP-Adressen, sondern nur auf Domains ausgestellt werden können. Daher greifen wir hier auf ein selbst signiertes Zertifikat zurück.

Dieses wird mit folgenden Befehlen erzeugt:

mkdir -p /app/onlyoffice/DocumentServer/data/certs
cd /app/onlyoffice/DocumentServer/data/certs
openssl genrsa -out onlyoffice.key 4096
openssl req -new -key onlyoffice.key -out onlyoffice.csr
openssl x509 -req -days 3650 -in onlyoffice.csr -signkey onlyoffice.key -out onlyoffice.crt
openssl dhparam -out dhparam.pem 4096
chmod 400 onlyoffice.key
chmod 400 onlyoffice.crt
chmod 400 onlyoffice.csr
chmod 400 dhparam.pem

  • Beim Befehl openssl req -new -key onlyoffice.key -out onlyoffice.csr wird man nach dem „Common Name“ gefragt (Common Name (e.g. server FQDN or YOUR name)). Hier ist einfach die IP des lokalen Systems anzugeben (in diesem Fall 192.168.178.60). Ebenso kann man ein „challenge password“ angeben. Dieses kann man einfach leer lassen (einfach mit Enter bestätigen).
  • Achtung: Die Erzeugung der sog. Diffie-Hellmann-Parameter mit einer Länge von 4096 Bit (openssl dhparam -out dhparam.pem 4096) kann u.U. sehr lange dauern. Auf schwacher Hardware kann das schon einmal mehrere Stunden in Anspruch nehmen. Wer nicht so lange warten möchte, kann die Schlüssel-Länge auf 2048 Bit reduzieren (openssl dhparam -out dhparam.pem 2048).
  • Das Zertifikat hat eine Gültigkeit von 3650 Tagen (10 Jahre). Hier kann bei Bedarf auch eine andere Gültigkeitsdauer angegeben werden.

Installation ONLYOFFICE

Die Installation beschränkt sich dann dank Docker auf einen einzigen Befehl:

docker run --name=ONLYOFFICEDOCKER -i -t -d -p 4433:443 -e JWT_ENABLED='true' -e JWT_SECRET='geheimes-secret' --restart=always -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver

Hier gilt es folgende Punkte zu beachten:

  • Den Container nennen wir hier ONLYOFFICEDOCKER, damit dieser später über diesen Namen und nicht über eine kryptische ID angesprochen werden kann.
  • Da bereits der Webserver auf Port 443 lauscht (wenn ONLYOFFICE auf dem gleichen Rechner gestartet wird), müssen wird hier auf einen alternativen Port ausweichen. Der Parameter -p 4433:443 sorgt hier dafür, dass der Port 4433 des Docker-Hosts auf den Port 443 innerhalb des Docker-Containers gemappt wird. Wichtig ist hier, dass dieser Port (4433) mit demjenigen übereinstimmt, der beim proxy_pass im vHost für ONLYOFFICE angegeben wurde.
  • Die nächsten zwei Parameter (-e JWT_ENABLED=’true‘ -e JWT_SECRET=’geheimes-secret‘) erhöhen die Sicherheit, da zur Kommunikation mit dem Container ein sog. JSON Web Token benötigt wird. Im Grunde genommen handelt es sich dabei um ein Passwort (geheimes-secrethier sollte man natürlich ein eigenes Passwort wählen), welches später in Nextcloud hinterlegt werden muss, damit die Verbindung zu ONLYOFFICE aufgebaut werden kann. Dies verhindert, dass der ONLYOFFICE-Container „unbemerkt“ von anderen Verbindungen genutzt werden kann.
  • Mit —restart=always wird der Container bei jedem Systemstart automatisch gestartet.
  • Mit dem letzten Parameter (-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver) wird ein sog. Volume definiert: Alle Dateien, die im Verzeichnis /app/onlyoffice/DocumentServer/data des Hosts liegen, werden innerhalb des Containers im Verzeichnis /var/www/onlyoffice/Data onlyoffice/documentserver bereitgestellt. Diese Funktion wird benötigt, damit der Container das zuvor erzeugte Zertifikat finden und nutzen kann.

Nun wird das entsprechende Docker-Image heruntergeladen und auch gleich gestartet.

Installation von ONLYOFFICE mittels Docker

Installation von ONLYOFFICE mittels Docker

Nach dem Starten des Containers läuft ONLYOFFICE bereits. Wenn man nun im Browser die Domain onlyoffice.meinedomain.de oder die IP-Adresse der jeweiligen Maschine (dann aber mit dem alternativen Port 4433) aufruft, sollte folgende Seite erscheinen:

ONLYOFFICE läuft

ONLYOFFICE läuft

Einbinden von ONLYOFFICE in Nextcloud

Nachdem ONLYOFFICE läuft, geht es nun mit der eigenen Nextcloud weiter, damit hier Online-Office-Funktionalitäten hinzugefügt werden können.

Die passende App findet man dabei im Nextcloud App Store in der Kategorie Büro & Text:

ONLYOFFICE im Nextcloud App-Store

ONLYOFFICE im Nextcloud App-Store

Wenn die App aktiviert wurde, können die Einstellungen nun in der Admin-Oberfläche von Nextcloud unter dem Punkt ONLYOFFICE angepasst werden (damit alle Einstellungen angezeigt werden, muss man auf den Punkt Erweiterte Servereinstellungen klicken).

Nextcloud: ONLYOFFICE-Einstellungen in der Admin-Oberfläche

Nextcloud: ONLYOFFICE-Einstellungen in der Admin-Oberfläche

  • Serviceadresse der Dokumentbearbeitung: Hier wird die Subdomain angegeben, die wir extra für ONLYOFFICE angelegt habe, in diesem Beispiel also https://onlyoffice.meinedomain.de.
  • Geheimer Schlüssel (freilassen, um zu deaktivieren): Hier ist das JWT-Token anzugeben, welches beim Starten des Docker-Containers angegeben wurde (geheimes-secret).
  • Alle anderen Felder kann man leer lassen.

Nach einem Klick auf Speichern sollte eine Meldung erscheinen, dass die Einstellungen erfolgreich übernommen wurden.

Anschließend können Office-Dokumente ganz einfach direkt in der Cloud bearbeitet werden:

Online-Office mit Nextcloud und ONLYOFFICE

Online-Office mit Nextcloud und ONLYOFFICE

Update von ONLYOFFICE

Von Zeit zu Zeit erscheint ein neues Docker-Image für ONLYOFFICE. Leider ist es etwas umständlich herauszufinden, welche Version gerade installiert ist und ob es eine neue Container-Version gibt.

Um zu ermitteln, welche Version aktuell installiert ist, öffnet man am besten ein beliebiges Office-Dokument. Mit der Info-Schaltfläche wird die installierte Version von ONLYOFFICE angezeigt:

Über die Info-Schaltfläche kann die installierte Version ermittelt werden

Über die Info-Schaltfläche kann die installierte Version ermittelt werden

Die Version des aktuellsten Images kann nun über Docker Hub (eine Art Suche für Docker-Images) ermittelt werden. Dazu sucht man einfach nach onlyoffice und lässt sich dann die Tags anzeigen. Schneller geht es über diesen Direktlink. Hier werden dann alle Versionen des Images angezeigt:

Die aktuelle Version im Docker Hub

Die aktuelle Version im Docker Hub

Zwar werden in der ONLYOFFICE-Hilfe nur drei Versionsnummern angezeigt, allerdings sollte man auch anhand des Datums sehen können, wenn eine neue Version des Containers bereitsteht.

Das Update selbst kann man dann in wenigen Schritten durchführen:

Zunächst wird der aktuelle Container gestoppt und entfernt:

docker stop ONLYOFFICEDOCKER
docker rm ONLYOFFICEDOCKER

ONLYOFFICEDOCKER ist hier der Name des Containers, den wir beim ersten Start angegeben haben. Hier könnte man auch die ID des Containers angeben (kann man mit docker ps ermitteln).

Optional: Bei der Arbeit mit Docker bleiben oft Reste auf dem System zurück (z.B. alte, ungenutzte Container). Gerade wenn auf dem System ausschließlich ONLYOFFICE per Docker betrieben wird, empfiehlt es sich, das komplette Docker-System zu bereinigen. Dazu werden einfach folgende Befehle ausgeführt:

docker system prune -a
docker image prune -a
docker container prune

Anschließend wird die neuste Version des Containers heruntergeladen und über den bekannten Befehl gestartet:

docker pull onlyoffice/documentserver
docker run --name=ONLYOFFICEDOCKER -i -t -d -p 4433:443 -e JWT_ENABLED='true' -e JWT_SECRET='geheimes-secret' --restart=always -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver

Beim zweiten Befehl ist hier nur wichtig, dass genau das gleiche JWT_SECRET wie schon beim Start des Containers angegeben wird, ansonsten kann nach dem Update keine Verbindung mehr von Nextcloud hergestellt werden.

Troubleshooting

Manchmal kann es vorkommen, dass ONLYOFFICE nicht wie erwartet funktioniert. Bei dem System sind ziemlich viele Komponenten beteiligt (Webserver, Nextcloud, Docker-Container), so dass man zunächst einmal das Problem eingrenzen sollte.

Zunächst sollte immer erst die Subdomain für ONLYOFFICE aufgerufen werden: onlyoffice.meinedomain.de

Erscheint hier nicht die Übersichtsseite von ONLYOFFICE, dann tritt das Problem wohl auf dem Verbindungsweg vom Internet zum Webserver auf. Dann sollten zunächst einmal die Logs des Webservers kontrolliert werden (auf der Maschine, wo der Gateway-Host zu finden ist und auch Nextcloud installiert ist).

nano /var/log/nginx/error.log

Hier sollten dann Fehlermeldungen zu finden sein, mit den man das Problem weiter eingrenzen kann.

Wenn die Seite erreichbar ist, aber ONLYOFFICE trotzdem nicht funktioniert, sollte in diesem Fall zunächst einmal das Nextcloud-Log überprüft werden (in der Admin-Oberfläche von Nextcloud unter Protokollierung).

Falls hier auch nichts auffälliges zu sehen ist, sollten die Logs des Docker-Containers überprüft werden:

docker logs ONLYOFFICEDOCKER

Hier sind dann u.U. Hinweise zu finden, dass ein benötigter Dienst nicht gestartet werden konnte. In diesem Fall hilft es meistens, den Rechner, auf dem ONLYOFFICE läuft, einfach mal neu zu starten.

Erst wenn dies auch zu keinen neuen Erkenntnissen führt, kann man sich auch auf die Kommandozeile des Containers selbst einloggen. Dazu einfach auf der Docker-Maschine folgenden Befehl ausführen:

sudo docker exec -it ONLYOFFICEDOCKER bash

Auf der Kommandozeile des Containers kann dann eine detaillierte Fehlersuche stattfinden. Mit folgendem Befehl kann man beispielsweise die Webserver-Logs einzusehen:

nano /var/log/nginx/error.log

Um die Kommandozeile des Containers wieder zu verlassen, reicht folgender Befehl:

exit

Fazit

Es sind schon einige Schritte notwendig, um ONLYOFFICE in Verbindung mit Nextcloud zum Laufen zu kriegen. Dennoch lohnt es sich, da man nun direkt in der eigenen Cloud ein Online-Office nutzen kann. Wer vorher beispielsweise Google Docs verwendet hat, wird sich auch bei ONLYOFFICE sehr schnell zurechtfinden – und das ohne die neugierigen Blicke von Google & Co, da alle Daten sicher in der eigenen Nextcloud gespeichert sind.

Weiterführende Artikel

Links

 

]]>
https://decatec.de/home-server/nextcloud-online-office-mit-onlyoffice-mit-eigener-subdomain/feed/ 21
Scanbot und Nextcloud zur Verwaltung digitaler Dokumente (mit OCR) https://decatec.de/home-server/scanbot-und-nextcloud-zur-verwaltung-digitaler-dokumente-mit-ocr/ https://decatec.de/home-server/scanbot-und-nextcloud-zur-verwaltung-digitaler-dokumente-mit-ocr/#comments Sun, 21 Oct 2018 11:57:30 +0000 https://decatec.de/?p=4719 Nextcloud Scanbot Logo

Wer eine persönliche Cloud mit Nextcloud betreibt, wird diese sicherlich schon für viele Dinge des digitalen Alltags nutzen: Das Speichern von Dateien, Kalendern und Kontakten sind sicherlich nur einige Anwendungsbeispiele.

Besonders interessant wird die Sache mit dem Verwalten (digitaler) Dokumente. In der heutigen Zeit hat man im Normalfall noch sehr viel „Papierkram“, den man meistens in Ordnern oder Schnellheftern ablegt. Diese verstauben dann meist in irgendeinem Schrank und wenn man die Dokumente dann doch mal braucht, muss man immer erst umständlich suchen.

Hier wäre es doch sicherlich eine Erleichterung, wenn man den ganzen Papierkram digitalisieren könnte und einfach in der eigenen Cloud speichern könnte – geschützt vor den neugierigen Blicken großer Cloud-Anbieter.

Scannen von Dokumenten mit dem Smartphone

Für den Prozess der Digitalisierung denkt man zunächst einmal an einen Scanner. Gute Erfahrungen konnte ich hier mit Multifunktionsgerät (MuFu) wie dem Brother MFC-9142 (Affiliate Link) sammeln: Hier können (auch mehrseitige) Dokumente gleich als PDF mit verschiedenen Optionen (z.B. Farbe/schwarz-weiß) gescannt werden. Es gibt hier auch eine Option zur automatischen Texterkennung (OCR), allerdings kann man als Zielformat dann kein PDF wählen. Wenn man also PDF-Dateien scannen will, muss die Texterkennung nachträglich erfolgen, wie beispielsweise im Artikel Linux: OCR-Texterkennung für PDF-Dateien und Bilder erklärt wird.

Aber es gibt noch eine andere Möglichkeit: Jedes Smartphone hat mittlerweile eine Kamera mit an Bord, mit der man natürlich auch Dokumente abfotografieren kann. Ein Foto ist für ein Dokument nicht unbedingt das richtige Format, daher sollte eine App diese Dokumente gleich als PDF speichern können. Als ich noch ein Windows-Phone hatte (ja, es gab mal Leute, die ein Windows-Phone gern genutzt haben!), fiel meine Wahl hier auf die App Office Lens. Damit bekam man schon recht beeindruckende Ergebnisse, was z.B. die automatische Perspektiven-Korrektur anging. OCR war auch möglich, allerdings gestaltete sich die Integration in ownCloud/Nextcloud etwas umständlich, da man alle Dokumente manuell hochladen musste.

Scanbot: App zum Scannen von Dokumenten

Unter Android bin ich dann auf Scanbot gestoßen: Eine App, die genau die Features bietet, die ich für meinen Workflow benötige:

  • Einfaches Scannen von Dokumenten mit der Smartphone-Kamera.
  • Automatische Korrektur (Perspektive/Farbwerte).
  • Speichern diese Dokumente als PDF.
  • Texterkennung (OCR) für gescannte Dokumente. Wichtig war mir hierbei, dass die Texterkennung nicht in „irgendeiner Cloud“ abläuft, sondern rein lokal auf dem Smartphone ausgeführt wird.
  • Automatisches Hochladen der gescannten Dokumente nach der Texterkennung.

Die App an sich kostet erst einmal nichts. Erst wenn man erweiterte Funktionen nutzen möchte (wie z.B. OCR), dann ist eine Lizenz für Scanbot Pro für ein paar Euro notwendig.

Mittlerweile nutze ich diese App recht häufig zum Scannen von Dokumenten mit anschließendem Upload in meine Nextcloud. Daher möchte ich euch hier zeigen, wie man Scanbot am besten einrichtet, um mit eurer persönlichen Cloud zusammen zu arbeiten.

Scanbot mit Nextcloud verbinden

Wenn ihr Scanbot in Verbindung mit eurer Nextcloud verwenden möchtet, dann muss in der App zunächst einmal die Verbindung zur eigenen Cloud hergestellt werden.

Dazu geht ihr zunächst in den Einstellungen. Hier findet ihr die Option für die Cloud Dienste.

Scanbot: Einstellungen

Scanbot: Einstellungen

Den prominenten Eintrag für Google Drive lassen wir hier natürlich erst einmal links liegen und konfigurieren uns unsere eigene Verbindung mittels Dienst hinzufügen:

Scanbot: Einstellungen - Cloud Dienste

Scanbot: Einstellungen – Cloud Dienste

Anschließend wählen wir WebDAV:

Scanbot: Einstellungen - Cloud Dienste - WebDAV

Scanbot: Einstellungen – Cloud Dienste – WebDAV

Hier werden nun die Zugangsdaten für Nextcloud eingegeben. Neben Benutzername und Passwort ist auch eine WebDAV-URL notwendig. Hier geben wir einfach die WebDAV-URL des Root-Verzeichnisses der Cloud mit folgendem Schema an:

https://meinedomain.de/nextcloud/remote.php/dav/files/<User>/

Wichtig an dieser Stelle ist der Slash (‚/‘) am Ende der URL.

Scanbot: WebDAV Einrichtung

Scanbot: WebDAV Einrichtung

Wenn die Verbindung mit Nextcloud hergestellt werden konnte, dann erscheint die neue Verbindung nun im unteren Bildschirmbereich unter Verfügbare Cloud Dienste.

Nun können gescannte Dokumente einfach über die Schaltfläche MEHR… an diesen Cloud Dienst übertragen werden. Vor dem Upload muss lediglich das Verzeichnis angegeben werden, in das die jeweiligen Dokumente hochgeladen werden sollen.

Automatischer Upload mit Scanbot

Richtig komfortabel wird die Sache nun durch einen automatischen Upload, so dass gescannte Dokumente automatisch in der eigenen Cloud landen.

Hierzu gehen wir wieder in die Einstellungen der App unter Cloud Dienste. Hier kann nun unter Automatischer Upload das automatische Hochladen aktiviert werden:

Scanbot: Automatischen Upload aktivieren

Scanbot: Automatischen Upload aktivieren

Im erscheinenden Popup-Menü wählen wir nun die soeben angelegte WebDAV-Verbindung (in diesem Beispiel Bob). Nun sollte eine Meldung erscheinen, dass die Verbindung mit WebDAV erfolgreich konfiguriert wurde. Durch Klick auf den Ordner kann nun ein Upload-Ordner gewählt werden, in den gescannte Dokumente automatisch hochgeladen werden sollen. in diesem Beispiel wähle ich den Ordner /AutoUpload/Scanbot (neue Ordner können auch einfach aus der App heraus angelegt werden).

Ebenso kann die Option aktiviert werden, dass bereits bestehende Scans hochgeladen werden sollen:

Scanbot: Upload-Optionen

Scanbot: Upload-Optionen

Mit dem konfigurierten automatischen Upload läuft nun direkt nach dem Scan die Texterkennung (nur Scanbot Pro) und das Dokument wird automatisch in das angegebene Nextcloud-Verzeichnis hochgeladen.

Verwaltung digitalisierter Dokumente in Nextcloud

OK, wir haben also ein (Papier-)Dokument digitalisiert und in die eigene Cloud hochgeladen. Dieses befindet sich nun in diesem Beispiel im Ordner AutoUpload/Scanbot und hat den Dateinamen, der in Scanbot vergeben wurde. Meist ist dies einfach Scan JJJJ-MM-TT hh.mm.ss.pdf. Die Vorlage für Dateinamen kann in Scanbot übrigens unter Einstellungen – Dateinamen Vorlage geändert werden – hier gibt es dann noch weitere Variablen wie z.B. Stadt, Straße, Postleitzahl, etc.

Gescanntes Dokument nach dem Upload zu Nextcloud

Gescanntes Dokument nach dem Upload zu Nextcloud

Dateinamen digitalisierter Dokumente

Als erstes sollte das Dokument nun umbenannt werden. Ich verwende hier folgendes Schema: JJJJMMTT – Inhalt. Wenn ich beispielsweise eine Rechnung für eine neu gekaufte Tastatur gescannt habe, bekommt das Dokument den Dateinamen 20181001 – Tastatur.pdf. Der Dateiname bezieht sich dabei nur auf den Inhalt des Dokuments und nicht auf den Dokumenttyp.

Ordnerstruktur für Dokumente

Den Dokumenttyp (z.B. Rechnung) verwalte ich dann über eine Ordnerstruktur. Bei vielen unterschiedlichen Dokumenten macht es hier Sinn, nicht alle Dokumente in nur einem Ordner zu speichern, sondern sich eine sinnvolle Ordnerstruktur zu überlegen. Damit kann dann eine gewisse Ordnung in die Dokumente gebracht werden. Diese Ordnerstruktur ist immer von den individuellen Bedürfnissen abhängig, daher kann hier keine konkrete Empfehlung gegeben werden.

Beispielhafte Ordnerstruktur für Dokumente in der Cloud

Beispielhafte Ordnerstruktur für Dokumente in der Cloud

Nach dem Umbenennen des Dokuments verschiebe ich es abschließend noch in den entsprechenden „Typ-Ordner“ im Dokumenten-Verzeichnis.

Dokumente mit Tags versehen

Eine Variante oder Erweiterung des Vorgehens wäre es nun noch, wenn man keine Ordnerstruktur verwendet, sondern alternativ (oder zusätzlich) die Dokumente mit den entsprechenden Tags (z.B. Rechnung) versieht. Nextcloud unterstützt das Taggen von Dateien (und Ordnern) mit dem Feature „Collaborative Tags“: Dazu einfach in den Details zu einer Datei unter Tags das gewünschte Tag eingeben.

Nextcloud: Zuweisen von Tags zu Dokumenten

Nextcloud: Zuweisen von Tags zu Dokumenten

Als Erweiterung dazu gibt es im Nextcloud App Store noch die App Files automated tagging: Hiermit können Tags automatisch nach bestimmten Regeln vergeben werden. Im Nextcloud Administration Manual findet man hierzu einige Beispiele.

Dokumente mit der Volltextsuche finden

Den größten Vorteil bei digitalisierten Dokumenten bietet allerdings die Volltextsuche. Da bei Scanbot Pro bereits auf dem Smartphone eine Texterkennung gelaufen ist, kann man nun das Dokument und die entsprechenden Inhalte ganz einfach in der Cloud wiederfinden. Alles was wir dafür benötigen, liefert die Nextcloud-App Full Text Search: Mit der Volltextsuche für Nextcloud kann man ganz einfach nach Dateien oder Datei-Inhalten suchen, wie im Artikel Volltextsuche in Nextcloud (mit OCR) beschrieben.

Dank Texterkennung können Dokumente und Inhalte mittels Volltextsuche gefunden werden

Dank Texterkennung können Dokumente und Inhalte mittels Volltextsuche gefunden werden

Tipps & Tricks für Scanbot

Abschließend noch ein paar allgemeine Tipps & Tricks für das Scannen von Dokumenten mit Scanbot.

In bestimmten Situationen kann es hilfreich sein, keinen automatischen Upload zu konfigurieren, sondern den Upload immer manuell vorzunehmen.

Zum einen kann man Dateien noch vor dem Upload direkt in Scanbot umbenennen. Einfach die Datei in Scanbot öffnen und oben auf den Dateinamen klicken. Auf den ersten Blick mag es keine große Rolle spielen, ob man die Dateien nun in der App oder in Nextcloud umbenennt. Allerdings unterstützt Scanbot das Umbenennen von Dokumenten z.B. durch Ortungsdienste: Hier kann dann mit wenigen Klicks die Datei so umbenannt werden, dass beispielsweise gleich der Ort oder eine Sehenswürdigkeit in den Dateinamen einfließen. Das geht u.U. dann schneller von der Hand als das manuelle Umbenennen in der Cloud.

Scanbot: Umbenennen von Dokumenten

Scanbot: Umbenennen von Dokumenten

Mit dem zweiten Tipp kann man durch Komprimierung die Größe des Dokuments beeinflussen. Scanbot nimmt die Dokumente immer mit der nativen Auflösung der Smartphone-Kamera auf. Für einige Dokumente ist diese Auflösung zu hoch und die Scans benötigen dann relativ viel Speicherplatz. Scanbot bietet hier eine hilfreiche Funktion, um die Dokumente zu komprimieren. Dabei wird einfach die Auflösung der gescannten Dokumente verringert, was für einfachere Dokumente (z.B. Visitenkarten) vollkommen ausreicht.
Hierzu wird das Dokument wieder in der App geöffnet. Über das erweiterte Menü – die drei Punkte (Mehr) – kann man dann Komprimieren wählen.

Nach dem Umbenennen und dem Komprimieren eines Dokuments kann dies dann manuell in die eigenen Nextcloud hochgeladen werden. Auf diese Weise hat man bereits direkt nach dem Upload einen „richtigen“ Dateinamen und spart sich darüber hinaus noch etwas Speicherplatz.

Fazit

Mit dem Scannen von Dokumenten und dem Speichern dieser Dokumente in digitaler Form in der eigenen Nextcloud kann man sich einiges an „Papierkram“ sparen. Spätestens, wenn man ein spezielles Dokument sucht, wird man die Vorteile der Dokumentenverwaltung in der eigenen Cloud zu schätzen wissen: Nie mehr in irgendwelchen verstaubten Ordnern nach Rechnungen oder Schreiben suchen! Einfach den entsprechenden Ordner in Nextcloud öffnen, schon hat man alle Dokumente bei der Hand. Noch schneller geht es dann mit der Volltextsuche in Nextcloud. Hier findet man dann meist in wenigen Augenblicken das gesuchte Dokument.

Wieder ein Schritt weiter in Richtung „Papierloses Büro“.

Gewinnt eine von vier Lizenzen von Scanbot Pro

Neugierig geworden? Dank des freundlichen Supports von Scanbot habe ich vier Lizenzen für Scanbot Pro zu vergeben (Android oder iOS).

Was ihr dafür tun müsst? Hinterlasst mir einfach einen Kommentar unter diesem Beitrag. Beschreibt dabei, wie ihr eure Nextcloud zur Verwaltung von digitalen Dokumenten nutzt. Scannt ihr eure Dokumente mittels Scanner oder einer mobilen App? Welche Rolle spielt die Texterkennung (OCR) für euch? Wie bringt ihr Ordnung in eure Dokumente (z.B. per Tags oder spezieller Ordnerstruktur in der Cloud)?

Unter allen bis zum 15.11.2018 eingereichten Kommentaren werden vier Gewinner nach dem Zufallsprinzip ausgewählt und per E-Mail benachrichtigt.

Update: Gewinnspiel beendet, die Gewinner werden per Mail informiert. Vielen Dank an alle Teilnehmer des Gewinnspiels!

Weiterführende Artikel

Links

]]>
https://decatec.de/home-server/scanbot-und-nextcloud-zur-verwaltung-digitaler-dokumente-mit-ocr/feed/ 17
Linux: OCR-Texterkennung für PDF-Dateien und Bilder https://decatec.de/it/linux-ocr-texterkennung-fuer-pdf-dateien-und-bilder/ https://decatec.de/it/linux-ocr-texterkennung-fuer-pdf-dateien-und-bilder/#comments Tue, 25 Sep 2018 07:55:08 +0000 https://decatec.de/?p=4656 Logo OCR

Die Texterkennung (sog. OCROptical Character Recognition) sorgt bei Dokumenten verschiedenster Art dafür, dass Datei-Inhalte maschinell lesbar sind. Dadurch lassen sich Datei-Inhalte zum einen leicht markieren/kopieren (z.B. bei PDF-Dateien). Zum anderen werden die Inhalte der Dateien leicht durchsuchbar.

Der folgende Artikel zeigt daher, wie PDF-Dateien mit einer Texterkennung verarbeitet werden können. Ebenso wird gezeigt, wie Bilder einfach in PDF-Dokumente umgewandelt werden können, so dass diese danach ebenfalls maschinenlesbar sind.

OCR kurz erklärt

Bei OCR handelt sich es um die sog. Optical Character Recognition, also die Texterkennung bei Dokumenten, die an sich erst einmal nicht maschinenlesbar sind. Als Beispiel soll hier ein PDF-Dokument genannt sein. Der PDF-Standard wurde mit dem Gedanken entwickelt, dass PDF-Dateien unabhängig vom Anwendungsprogramm, vom Betriebssystem oder von der Hardware-Plattform jederzeit originalgetreu wiedergegeben werden können.

Nun wird euch sicherlich schon aufgefallen sein, dass es bei manchen PDF-Dateien vorkommt, dass hier keine Inhalte markiert/kopiert werden können. Hier fehlt dann ein sog. Text-Layer, der die Inhalte der Datei nochmals in maschinenlesbarer Form enthält. Wenn ein solcher Text-Layer vorhanden ist, lassen sich Inhalte in der PDF-Datei markieren und somit auch kopieren.

PDF mit Text-Layer: Hier können Inhalte markiert und kopiert werden

PDF mit Text-Layer: Hier können Inhalte markiert und kopiert werden

Genau dieser Text-Layer kann nun mittels OCR „nachgerüstet“ werden. Anschließend können Datei-Inhalte markiert/kopiert werden und sind – da maschinenlesbar – auch durchsuchbar. Beispielsweise kann im Windows-Explorer nach Inhalten gesucht werden, indem dem Suchbegriff noch „inhalt: “ vorangestellt wird.

Suche nach Datei-Inhalten im Windows-Explorer

Suche nach Datei-Inhalten im Windows-Explorer

Einziger Nachteil: Durch den zusätzlichen Text-Layer werden die Dateien etwas größer. Angesichts der Vorteile, die ein Text-Layer bietet, ist dieser Nachteil allerdings zu vernachlässigen.

Auf der Suche nach Programmen, die PDF-Dateien mit einem OCR-Text-Layer versehen können, gibt es unter Windows leider nicht viele Programme: Diese sind zudem meist kostenpflichtig oder zwingen den Benutzer zu einem bestimmten Workflow bei der Bearbeitung von PDF-Dateien.

Unter Linux sieht die Sache allerdings anders aus…

OCR für PDF-Dateien: OCRmyPDF

OCRmyPDF ist ein Kommandozeilen-Programm für Linux, mit dem PDF-Dateien einfach mit einem Text-Layer versehen werden können. Tesseract kommt dabei als OCR-Engine zum Einsatz.

Installation OCRmyPDF

Bei Debian und Ubuntu ist es bereits in den Paketquellen enthalten, so dass es einfach mit einem Befehl installiert werden kann:

apt-get update
apt-get install ocrmypdf

Auch wenn das Programm bei manchen Distributionen nicht in den Paketquellen enthalten ist, kann es mit der Installationsanleitung auch hier installiert werden.

Bei der Installation werden alle automatisch alle Abhängigkeiten installiert, die für die Erkennung von englischen Texten benötigt werden. Damit auch Texte in anderen Sprachen erkannt werden können, müssen noch zusätzliche Sprach-Dateien für Tesseract installiert werden. Um beispielsweise auch deutsche Texte erkennen zu können, wird das deutsche Sprachpaket installiert:

apt-get install tesseract-ocr-deu

Eine Liste mit allen verfügbaren Sprach-Dateien findet man hier.

OCR mit OCRmyPDF

Um nun eine PDF-Datei mit einem Text-Layer zu versehen, reicht folgender Befehl:

ocrmypdf /mnt/temp/Dokument.pdf /mnt/temp/Dokument-OCR.pdf

Die originale PDF-Datei (/mnt/temp/Dokument.pdf) wird dabei nach der Verarbeitung als neue Datei (/mnt/temp/Dokument-OCR.pdf) gespeichert.

Der Aufruf kann noch mit Parametern versehen werden, um die Umwandlung besser kontrollieren zu können. Um beispielsweise einen Hinweis auf die enthaltenen Sprachen zu geben, erweitern wir den Befehl um den Parameter -l deu+eng. Damit wird der OCR-Engine mitgeteilt, dass im umzuwandelnden PDF vermutlich die Sprachen Deutsch und Englisch enthalten sind.

Eine Übersicht über alle möglichen Parameter findet man in der Dokumentation zu OCRmyPDF.

An dieser Stelle sei erwähnt, dass OCRmyPDF teilweise Warnungen ausgibt. Dies kann verschiedenste Ursachen haben, meistens ist dabei allerdings die Qualität des Ausgangs-Dokuments ausschlaggebend. Wenn dieses ein schlechter Scan ist, dann tut sich die Texterkennung hier schwer. Die Warnungen von OCRmyPDF können dabei allerdings ignoriert werden, es kann lediglich sein, dass die Texterkennung nicht sehr gut war und im Text-Layer des PDFs nicht alle Worte korrekt erkennt worden sind.

OCRmyPDF erzeugt standardmäßig PDF/A-Dateien. PDF/A ist dabei ein Dateiformat zur Langzeitarchivierung von PDF-Dateien. Alle Elemente, die zur Anzeige von PDF/A-Dokumenten benötigt werden, müssen dabei in der Datei selbst enthalten sein. Das sorgt dafür, dass PDF/A-Dateien immer etwas größer sind als normale PDF-Dateien. Es kann auch passieren, dass PDF/A-Dateien nicht alle Funktionen normaler PDF-Dateien bieten (da z.B. kein Javascript enthalten sein darf). Für den Privatgebrauch ist es daher eine Überlegung wert, für maximale Kompatibilität statt PDF/A-Dateien normale PDFs erzeugen zu lassen. Dies kann einfach mit dem Parameter –output-type pdf bewerkstelligt werden.

Ein vollständiger Aufruf von OCRmyPDF kann daher meist so aussehen:

ocrmypdf -l deu+eng --output-type pdf /mnt/temp/Dokument.pdf /mnt/temp/Dokument-OCR.pdf

OCR für Bilder: Umwandlung in (OCR-)PDF mittels Tesseract

Als ich vor etlichen Jahren angefangen habe, Dokumente (wie z.B. Rechnungen) zu Scannen, um diese auf dem Rechner archivieren zu können, habe ich diese noch nicht als PDF-Dateien, sondern als einfache Bild-Dateien (JPG) gespeichert. Dieses Dateiformat ist für diesen Zweck nicht gerade optimal, daher sollten diese Bild-Scans in PDF-Dateien konvertiert werden.

Hier kann OCRmyPDF auch zum Einsatz kommen, um diese Bilder in PDF-Dateien umzuwandeln. Allerdings habe ich hier mit Tesseract bessere Erfahrungen gemacht, so dass ich diese Dokument-Bilder eigentlich immer direkt über Tesseract in PDFs konvertieren lasse.

Die OCR-Engine Tesseract wurde ja bereits mit OCRmyPDF installiert. Falls dies noch nicht geschehen ist, reichen folgende Befehle, um Tesseract und die entsprechenden Sprach-Dateien zu installieren:

apt-get update
apt-get install tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu

Hier werden die Sprach-Dateien für Englisch und Deutsch mit installiert. Eine Übersicht über alle vorhandenen Sprach-Dateien findet man hier.

Die Umwandlung in PDFs mit Text-Layer erfolgt dann über folgenden Befehl:

tesseract /mnt/temp/Dokument.jpg /mnt/temp/Dokument-OCR -l deu+eng pdf

Der erste Parameter ist dabei das Input-Bild. Mit dem zweiten Parameter wird die Output-Datei angegeben (ohne Datei-Endung „.pdf“). Mit -l deu+eng wird der OCR-Engine wieder ein Hinweis auf die enthaltenen Sprachen gegeben. Der letzte Parameter (pdf) sorgt letzten Endes für die Umwandlung in eine PDF-Datei (und setzt die richtige Datei-Endung für die Output-Datei).

Automatisiert mit Skript

Jede PDF-/Bild-Datei nun einzeln mit einem Text-Layer zu versehen oder in eine (OCR-)PDF-Datei umzuwandeln, erfordert jedoch einiges an Aufwand. Das dachte ich mir auch, als ich die Vorgabe hatte, hunderte Dateien durch die Texterkennung zu jagen.

Aus diesem Grund habe ich ein Bash-Skript erstellt, welches die oben genannten Aufrufe automatisiert.

OCRmyFiles @ GitHub

Nach dem Download des Skripts sollten noch folgende Punkte im selbst Skript angepasst werden:

  • inputDirDefault/outputDirDefault: Standard-Verzeichnisse für Eingabe/Ausgabe.
  • ocrmypdfCmdArgs: Parameter für den Aufruf von OCRmyPDF.
  • imageConvertCmdArgs: Parameter für den Aufruf von Tesseract zur Umwandlung von Bildern in PDF-Dateien.

Bevor das Skript nun ausgeführt werden kann, muss dieses noch als auführbar markiert werden:

sudo chmod +x OCRmyFiles.sh

Nun erwartet das Skript beim Aufruf zwei Parameter:

  • Ein Eingangs-Verzeichnis, in dem sämtliche PDFs/Bilder enthalten sind, die mittels Texterkennung behandelt werden sollen.
  • Ein Ausgangs-Verzeichnis, in dem die Ergebnisse gespeichert sind

Ein typsicher Aufruf des Skripts sieht dann folgendermaßen aus:

ocrmyfiles.sh /mnt/OCR/Input /mnt/OCR/Output

Wenn diese Parameter weggelassen werden, werden die Standard-Verzeichnisse für Eingang/Ausgang genutzt (definiert in den Variablen inputDirDefault/outputDirDefault, siehe oben).

Das Skript führt nun folgendes aus:

  • Es scannt das Eingangs-Verzeichnis (rekursiv) auf PDF-Dateien und Bilder.
  • PDF-Dateien werden mittels OCRmyPDF mit einem Text-Layer versehen.
  • Bild-Dateien werden in (OCR-)PDFs umgewandelt.
  • Alle anderen Dateien werden ohne Änderung in das Ausgabe-Verzeichnis kopiert.

Nach dem Aufrufen des Skripts sollten sich im Ausgangs-Verzeichnis die gleiche Anzahl Dateien und dieselbe Verzeichnisstruktur befinden wie im Eingangs-Verzeichnis. Die (PDF-)Dateien werden jedoch etwas größer sein, da sie nun einen zusätzlichen Text-Layer beinhalten.

Das Skript ist unter MIT-Lizenz frei auf GitHub verfügbar, so dass jeder es an die eigenen Bedürfnisse anpassen und erweitern kann.

Aus der Praxis

Mit diesem Skript wurde die Texterkennung von PDFs und Dateien nun weitgehendst automatisiert. Dies kann nun beispielsweise genutzt werden, um Dokumente durchsuchbar in der Cloud abzuspeichern. Im vorherigen Artikel Volltextsuche in Nextcloud (mit OCR) wurde beschrieben, wie man eine Volltextsuche in Nextcloud installieren kann. Hat man nun seine PDF-Dateien mittels OCR mit einem Text-Layer versehen, können diese in der Cloud einfach durchsucht werden.

Wenn man nun z.B. Dokumente mittels Scanner als PDF scannt, landen diese zunächst einmal in einem speziellen Eingangs-Verzeichnis (z.B. /mnt/LinuxShare/OCR/Input – in meinem Fall ist dies eine Netzwerk-Freigabe unter Windows). Anschließend lässt man das Skript für die Texterkennung laufen. Dieses erzeugt in einem Ausgangs-Verzeichnis (z.B. /mnt/LinuxShare/OCR/Output) die mit einem Text-Layer versehenen PDF-Dateien. Nun können diese Dateien in die Cloud hochgeladen werden. Nach dem nächsten Durchlaufen des Cronjobs für Nextcloud werden die neuen Dateien von der Volltextsuche erfasst und können anschließend über die Suche in der Dateien-App gefunden werden (sowohl über den Datei-Namen, als auch über Datei-Inhalte).

Volltextsuche in Nextcloud: PDFs mit Text-Layer können hier einfach durchsucht werden

Volltextsuche in Nextcloud: PDFs mit Text-Layer können hier einfach durchsucht werden

Fazit

Nach dem OCR-Scan für PDFs und Bilder können Inhalte dieser Dateien leicht kopiert werden. Darüber hinaus sind die Datei-Inhalte durchsuchbar. Gerade zu Zwecken der Archivierung ist dies unabhängig vom verwendeten Speicherort (Cloud, lokales Dateisystem, etc.) eine äußerst sinnvolle Angelegenheit. Damit kommt man dem „papierlosen Büro“ schon einen großen Schritt näher.

Weiterführende Artikel

Links

]]>
https://decatec.de/it/linux-ocr-texterkennung-fuer-pdf-dateien-und-bilder/feed/ 2
Volltextsuche in Nextcloud (mit OCR) https://decatec.de/home-server/volltextsuche-in-nextcloud-mit-ocr/ https://decatec.de/home-server/volltextsuche-in-nextcloud-mit-ocr/#comments Sat, 15 Sep 2018 14:47:53 +0000 https://decatec.de/?p=4620 Nextcloud Logo

Nextcloud stellt mittlerweile eine echte Alternative zu kommerziellen Cloud-Anbietern dar. Wenn man sich erst einmal von Google, Microsoft, Dropbox, etc. losgesagt hat, wird man die eigene Nextcloud früher oder später vermehrt nutzen und so zu einem echten „Nextcloud-Power-User“.

Über die Zeit werden sich in der eigenen Cloud immer mehr Daten ansammeln, so dass man schnell mal den Überblick verlieren kann. Hier ist eine ordentliche Suchfunktion dann essentiell. Nextcloud hat bereits ab Werk eine Suchfunktion mit an Bord, diese ist allerdings eher rudimentär: Beispielsweise kann man in der Datei-Übersicht nur nach Dateinamen suchen, nicht jedoch nach Datei-Inhalten.

Update-Historie (letztes Update: 21.09.2018)
  • 21.08.2018:
    • Hinweise hinzugefügt, wenn der Elasticsearch-Dienst nach einem Update nicht mehr bei Systemstart gestartet wird.

Volltextsuche mit Full Text Search

Genau hier setzt die App Full Text Search an: Die komplette Cloud wird hier indiziert und kann danach auf einfache Art und Weise durchsucht werden. Dies beschränkt sich jedoch nicht nur auf Dateinamen, sondern auch die Inhalte von Dateien können gesucht werden.

Durch einfaches Aktivieren der App im Nextcloud App Store ist es allerdings nicht getan. Damit die App Full Text Search ihren Dienst verrichten kann, sind einige Voraussetzungen zu erfüllen. Die App ist auf eine Installation der Suchmaschine Elasticsearch angewiesen. Diese Anwendung ist wiederum in Java geschrieben, so dass ebenso eine Java-Laufzeitumgebung installiert sein muss. Der folgende Artikel beschreibt daher die Installation und Konfiguration aller benötigten Komponenten, um anschließend die Volltextsuche in Nextcloud aktivieren zu können.

Der Artikel basiert wie immer auf dem Tutorial Nextcloud auf Ubuntu Server 18.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban.

Voraussetzungen

Die im Rahmen dieses Artikels installierten Programme haben an sich keine besonderen Anforderungen. Allerdings wird der Speicherverbrauch durch Elasticsearch erheblich steigen. Aus der Praxis: Elasticsearch verbraucht auf meinem Testsystem (VM mit 6 GB dynamischen RAM) über 1 GB Speicher.

Daher wird die Volltextsuche sicher auch auf einem Raspberry Pi (Affiliate-Link) laufen, dennoch wird sich dies auf einem solchen Kleinst-Computer eher zäh anfühlen.

Installation Full Text Search

Bevor die App an sich aktiviert werden kann, sind einige andere Programme zu installieren.

Wir beginnen zunächst einmal mit der Aktualisierung des Systems:

apt-get update && apt-get upgrade -V

Installation der Java-Laufzeitumgebung

Zunächst überprüfen wir, ob bereits eine Java-Laufzeitumgebung installiert ist:

java -version

Wenn Java bereits installiert ist, wird die Java-Version angezeigt. Wenn dies Version 8 oder größer ist, ist hier nichts weiter zu installieren und die Installation von Java kann übersprungen werden.

Falls hier jedoch eine ältere Version oder folgende Meldung angezeigt wird, ist Java nicht aktuell oder gar nicht installiert:

Command ‚java‘ not found, but can be installed with:

apt install default-jre
apt install openjdk-11-jre-headless
apt install openjdk-8-jre-headless

In diesem Fall installieren wir die Laufzeitumgebung durch folgende Befehle:

apt-get install apt-transport-https ca-certificates
apt-get install openjdk-8-jre

Installation Elasticsearch

Als nächstes kann die Suchmaschine installiert werden. Dazu wird erst einmal der Key des Repositories im System bekannt gemacht, da es ansonsten später zu Warnungen während der Installation kommen wird:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Nun wird das entsprechende Repository den Paket-Sourcen hinzugefügt:

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

Danach wird Elasticsearch mit diesem Befehl installiert:

apt-get update && apt-get install elasticsearch

Konfiguration Elasticsearch

Nach der Installation muss die Suchmaschine noch fertig konfiguriert werden, bevor diese durch Nextcloud genutzt werden kann.

Elasticsearch wird nach der Installation nicht automatisch nach dem Start des Betriebssystems gestartet. Mit folgenden Befehlen wird der Dienst nach dem Systemstart automatisch mit gestartet:

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

Anschließend installieren wir ein Plugin für Elasticsearch, damit später auch PDF-Dateien durchsucht werden können:

/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment

Zu guter Letzt soll die Suchmaschine nur lokal angesprochen werden können. Dazu wird die Konfigurationsdatei geöffnet:

nano /etc/elasticsearch/elasticsearch.yml

Hier suchen wir nach network.host und ändern die entsprechende Zeile ab:

network.host: 127.0.0.1

Am Ende wird der Dienst neu gestartet, damit die Änderungen übernommen werden:

service elasticsearch restart

Installation Tesseract (für OCR)

Tesseract ist eine Software für die Texterkennung (OCR). Damit wird es möglich, Text aus Bildern zu extrahieren und damit durchsuchbar zu machen. Die Installation der OCR-Software ist optional, ist aber im Rahmen der Volltextsuche empfehlenswert, da so nicht nur in Text-Dokumenten, sondern auch in Bildern gesucht werden kann.

Was heißt das nun konkret? Man stelle ich ein Foto vor, welches mit dem Smartphone aufgenommen wurde und beispielsweise ein Ortsschild zeigt. Mittels OCR kann nun auch nach dem Namen des Ortes gesucht werden und dank Volltextsuche wird einem dieses Bild auch in den Ergebnissen angezeigt. Für mich ist das ein sehr hilfreiches Feature, daher empfehle ich die Installation von Tesseract.

Dies ist auch nicht weiter aufwändig, es reicht ein Befehl:

apt-get install tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng

Hier werden auch gleich die Dateien installiert, welche für die Texterkennung für deutsche und englische Texte benötigt werden. Soll die OCR-Engine auch weitere Sprachen erkennen, so müssen zusätzlich Pakete der Form tesseract-ocr-<language> installiert werden. Eine Übersicht über alle verfügbaren Sprachen findet man hier.

Ansonsten ist nicht weiter für die Texterkennung zu installieren bzw. zu konfigurieren.

Einrichtung der Volltextsuche in Nextcloud

Nachdem nun alle Voraussetzungen installiert wurden, starten wir Elasticsearch zunächst einmal neu:

service elasticsearch restart

Installation der Apps für die Volltextsuche

Anschließend werden die entsprechenden Apps über den Nextcloud App Store installiert. Diese findet man in der Kategorie Suche.

Nextcloud App Store: Apps für die Volltextsuche

Nextcloud App Store: Apps für die Volltextsuche

  • Full text search: Diese App bietet die Grundfunktionen zur Volltextsuche.
  • Full text search – Elasticsearch Platform: Dies stellt die Verbindung zur Suchmaschine her.
  • Full text search – Files: Erweitert die Dateien-App um die Volltextsuche.
  • Full text search – Files – Tesseract OCR: Wenn im vorherigen Schritt die OCR-Engine installiert wurde, ist dies die Verbindung zu Tesseract.

Es gibt in dieser Kategorie evtl. noch mehrere Apps, die die Volltextsuche erweitern. Momentan gibt es hier beispielsweise noch die App für Lesezeichen: Wenn man die App Bookmarks in Nextcloud aktiviert hat, können mit Full text search – Bookmarks auch diese Lesezeichen durchsucht werden.

Konfiguration der Volltextsuche

Bevor die Volltextsuche nun verwendet werden kann, muss diese noch innerhalb Nextcloud konfiguriert werden. Dies geschieht in den Admin-Einstellungen unter Volltextsuche.

Nextcloud-Einstellungen für die Volltextsuche

Nextcloud-Einstellungen für die Volltextsuche

  • Allgemein: Allgemeine Einstellungen zur Volltextsuche.
    • Search Platform: Da momentan nur Elasticsearch installiert ist, kann man hier auch nur diesen einen Eintrag wählen.
  • Elastic Search: Einstellungen für die Suchmaschine.
    • Address of the Servlet: Dies ist die URL, unter der Elasticsearch verfügbar ist. In unserem Fall ist dies http://localhost:9200
    • Index: Eine Elasticsearch-Installation kann mehrere Such-Indizes gleichzeitig verwalten. Im diese Indizes auseinanderzuhalten zu können, wird hier der Name des Such-Indexes angegeben. Dies kann eine beliebige Zeichenfolge sein, z.B. der Domain-Name der Cloud-Instanz.
  • Dateien: Einstellungen für die Datei-Suche.
    • Damit sowohl lokale Dateien, als auch Dateien indiziert werden, die auf externem Speicher liegen, aktivieren wir hier sowohl Local files, als auch External Files.
  • Types: Einstellungen für verschiedene Dateitypen.
    • Wir aktivieren hier Extract PDF, als auch Extract Office, damit auch PDF- und Office-Dateien durchsucht werden können. Dazu muss zuvor das Elasticsearch-Plugin ingestattachment installiert worden sein.
  • Files – Tesseract OCR: Einstellungen für die Texterkennung mit Tesseract.
    • Enable OCR: Muss aktiviert werden, damit die Volltextsuche OCR verwenden kann.
    • Languages: Hier sind alle Sprachen anzugeben, die zuvor im Rahmen der Installation von Tesseract mit installiert wurden. In unserem Fall: eng,deu

Die Einstellungen werden direkt nach der Eingabe übernommen.

Index anlegen

Nachdem die Volltextsuche nun einsatzbereit ist, muss der erste Index über das Kommandozeilentool occ angelegt werden. Dies geschieht über folgenden Befehl:

sudo -u www-data php /var/www/nextcloud/occ fulltextsearch:index

Achtung: Je nach Größe der Nextcloud-Instanz kann dieser Befehl sehr lange dauern. Wenn ihr also bereits viele Dateien in eurer Nextcloud gespeichert habt, rechnet mal mit ein paar Stunden, bevor der erste Index erzeugt wurde.

Nach dem ersten Erzeugen des Indexes muss der o.g. Befehl nicht mehr regelmäßig ausgeführt werden. Die Aktualisierung des Indexes erfolgt dann im Rahmen des Cronjobs von Nextcloud.

Wichtig dafür ist nur, dass Nextcloud auch so konfiguriert wurde, dass ein Cronjob genutzt wird. Bei einer Ausführung von Hintergrundaufgaben per AJAX wird der Suchindex nicht auf dem Laufenden gehalten.

Die Volltextsuche in Aktion

Nach dem Anlegen des Indexes kann die Volltextsuche nun ganz einfach in Nextcloud genutzt werden. In der Datei-Übersicht kann die Suche wie bisher verwendet werden, nur dass diese nun durch die Volltextsuche ersetzt wurde.

Nextcloud Volltextsuche: Suche nach Datei-Inhalten

Nextcloud Volltextsuche: Suche nach Datei-Inhalten

Bei der Neuanlage von Dokumenten dauert es übrigens ein wenig, bis diese durch die Volltextsuche gefunden werden können. Das liegt daran, dass ein neues Dokument erst mit dem nächsten Cronjob-Lauf in den Index mit aufgenommen wird. Das sollte allerdings maximal 15 Minuten dauern.

Wenn Tesseract als OCR-Engine installiert wurde, kann nun nicht nur nach dem Inhalt von Dokumenten, sondern auch nach Bild-Inhalten (Text in Bildern) gesucht werden.

Syntax für die Suche

Zum Schluss noch ein paar Hinweise für die Syntax beim Suchen über Full Text Search:

  • Nextcloud
    Findet Dateien, die „Nextcloud“ im Pfad/Dateinamen oder als Inhalt haben.
  • Nex*
    Findet Dateien, die „Nex“ und weitere Zeichen im Pfad/Dateinamen oder als Inhalt haben (also z.B. Nextcloud, Nexus, etc.).
  • Nextcloud Volltextsuche App
    Findet Dateien, die „Nextcloud“ oder „Volltextsuche“ oder „App“ im Pfad/Dateinamen oder als Inhalt haben.
  • „Nextcloud Volltextsuche“ App
    Findet Dateien, die „Nextcloud Volltextsuche“ oder „App“ im Pfad/Dateinamen oder als Inhalt haben (hier wird z.B. eine Datei mit „Nextcloud und Volltextsuche“ nicht gefunden).
  • +Nextcloud Volltextsuche App
    Findet Dateien, die auf jeden Fall „Nextcloud“ und vielleicht „Volltextsuche“ oder „App“ im Pfad/Dateinamen oder als Inhalt haben.
  • +“Nextcloud Volltextsuche“ -App
    Findet Dateien, die auf jeden Fall „Nextcloud Volltextsuche“, aber nicht „App“ im Pfad/Dateinamen oder als Inhalt haben.
  • Nextcloud in:filename
    Findet Dateien, die „Nextcloud“ im Pfad oder Dateinamen enthalten (funktioniert dann wie die Standard-Suche in Nextcloud, die nur nach Dateinamen/Pfaden suchen kann).
  • Nextcloud in:content
    Findet Dateien, die „Nextcloud“ als Inhalt haben.

Update Elasticsearch

Da wir Elasticsearch in die Paketquellen eingetragen haben, wird von Zeit zu Zeit ein Update von Elasticserarch installiert werden, wenn das System mit apt-get upgrade auf den neusten Stand gebracht wird.

Nach einem Update kann es passieren, dass die Volltextsuche in Nextcloud nicht mehr funktionsfähig ist und folgende Fehlermeldung ausgibt:

No alive nodes found in your cluster

In diesem Fall ist der Dienst für Elasticsearch vermutlich nicht gestartet. Überprüft werden kann dies mit:

service elasticsearch status

Falls hier angezeigt wird, dass der Dienst nicht gestartet werden konnte, sollten auf jeden Fall die Logs kontrolliert werden:

nano /var/log/elasticsearch/elasticsearch.log

In den meisten Fällen wird hier das Plugin „ingest-attachment“ verantwortlich sein, was man an folgender Fehlermeldung sehen kann.

org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: Plugin [ingest-attachment] was built for Elasticsearch version 6.4.0 but version 6.4.1 is running

Hier muss das Plugin aktualisiert werden. Zunächst wird die alte Version entfernt:

/usr/share/elasticsearch/bin/elasticsearch-plugin remove ingest-attachment

Anschließend kann die aktualisierte Version installiert werden:

 

/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment

Nach einem Neustart des Systems sollte der Dienst wieder gestartet sein und die Volltextsuche sollte in Nextcloud auch wieder funktionieren.

Falls nicht, sollte der Dienst nochmal so konfiguriert werden, dass dieser beim Systemstart mitgestartet wird:

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

Fazit

Eine Volltextsuche ist eine sinnvolle Erweiterung für jede Nextcloud-Installation. Gerade wenn in der Cloud nach einiger Zeit sehr viele Dateien gespeichert sind, wird man die Volltextsuche zu schätzen wissen. Ebenso kommt es vor, dass man zwar weiß, dass in irgendeinem Dokument bestimmte Inhalte zu finden sind, man sich aber nicht mehr erinnert, in welcher Datei diese Inhalte zu finden sind. Mit der Volltextsuche ist auch das kein Problem mehr.

Die OCR-Erweiterung durch Tesseract sorgt darüber hinaus, dass auch nach Inhalten in Bildern gesucht werden kann. Dies macht dann besonders Sinn, wenn man z.B. die Fotos vom Smartphone mit Hilfe der Nextcloud-App automatisch in die Cloud hochladen lässt.

Auch wenn die Einrichtung der Volltextsuche in Nextcloud etwas aufwändiger ist und zusätzliche System-Ressourcen benötigt werden, der Aufwand wird sich in den meisten Fällen allerdings wirklich lohnen.

Weiterführende Artikel

Links

]]>
https://decatec.de/home-server/volltextsuche-in-nextcloud-mit-ocr/feed/ 17
Nie mehr Werbung – Pi-hole auf Ubuntu Server 18.04 https://decatec.de/home-server/nie-mehr-werbung-pi-hole-auf-ubuntu-server-18-04/ https://decatec.de/home-server/nie-mehr-werbung-pi-hole-auf-ubuntu-server-18-04/#comments Sun, 02 Sep 2018 13:04:11 +0000 https://decatec.de/?p=4460 Pi-hole Logo

Wer kennt das nicht: Wenn man sich durch das Internet bewegt, wird man unweigerlich mit Werbung konfrontiert. Wenn diese Werbung eher dezent platziert ist, sollte dies nicht weiter stören. Leider gibt es immer mehr Webseiten, die den Bogen überspannt haben. Spätestens, wenn der Lesefluss durch übermäßige Werbung gestört wird, möchte man die Webseite am liebsten sofort wieder verlassen.

Werbebanner sind dabei allerdings noch das kleinere Übel: Bedenklich wird es spätestens beim sog. Malwaretising (Verteilung von Schadcode über Online-Werbung) oder dem Einsatz von Mining-Code auf Webseiten (Code, der im Hintergrund – und meist ohne Wissen der Website-Besucher – Mining für Kryptowährungen ausführt). Das Tracking von Benutzern ist ein weiteres Thema, welches den meisten Nutzern nicht recht sein dürfte.

Werbeblocker (Adblocker) wirken diesen Problemen entgegen: Meistens sind dies Erweiterungen für den Browser, die Werbung und Schadcode im Hintergrund blockieren. Die bekanntesten Vertreter sind hier wohl AdBlock Plus und uBlock Origin. Diese Erweiterungen wirken allerdings nur im Browser, für den sie installiert wurden.

Doch nicht nur Browser sind von der Problematik betroffen. Sämtliche Geräte, die mit dem Internet verbunden sind, wollen meist „nach Hause telefonieren“. So sendet ein Windows-PC regelmäßig Telemetrie-Daten zu Microsoft. Spätestens seit Windows 10 lässt sich dieses Verhalten nicht mehr komplett abschalten. Ich spreche hier absichtlich von Geräten (und eben nicht von Computern), da dies auch auf andere Geräte-Klassen zutrifft. Man denke hier z.B. an Streaming-Multimedia-Systeme oder auch LED-Lichterketten, die komfortabel mit dem Handy bedient werden können.
Irgendwie kommunizieren solche Geräte immer mit irgendwelchen Webdiensten, ohne dass dies dem Nutzer klar ist oder er dieses Verhalten abschalten könnte.

Pi-hole: Ein Adblocker für das gesamte Netzwerk

Pi-hole ist ein Projekt zum Blockieren von Werbung, Schadcode und Trackern. Im Unterscheid zu Browser-Addons wird Pi-hole nicht Client-seitig installiert (wie z.B. als Addon im Browser), sondern wirkt Netzwerk-weit. Dazu wird das Programm einfach auf einem Rechner im Netzwerk installiert .Ursprünglich war dafür ein Raspberry Pi (Affiliate Link), vorgesehen, was sich ja schon aus dem Namen des Projekts erahnen lässt. Pi-hole läuft mittlerweile allerdings auf den verschiedensten (Linux-)Plattformen.

Einmal installiert und eingerichtet, blockiert das Programm unerwünschte Werbung und Schadcode – und zwar im kompletten Netzwerk. Als praktisches Beispiel sei hier der Browser Chrome auf einem Android Smartphone erwähnt: In der mobilen Variante können keine Addons genutzt werden, die man von der Desktop-Version kennt. Daher wird man im mobilen Chrome immer Werbung angezeigt bekommen. Nicht jedoch, wenn Pi-hole im gleichen Netzwerk installiert ist, über das das Smartphone mit dem Internet verbunden ist. Dann wird Werbung ohne weiteres Zutun des Nutzers auch im mobilen Browser blockiert – quasi von Geisterhand.

Ein paar Anmerkungen vorweg

Wenn ihr dem Tutorial folgt, dann müsst ihr euch folgender Punkte bewusst sein:

  • Mit der Installation von Pi-hole als Netzwerk-weiten Adblocker greift ihr tief in die Netzwerk-Infrastruktur ein. Wenn hier irgendetwas nicht klappen sollte, dann ist das komplette Netzwerk offline, d.h. es kann nicht mehr gesurft werden, da keine Domains mehr aufgelöst werden können.
  • Dessen solltet ihr euch bewusst sein und auch einen „Plan B“ haben, mit dem ihr die Änderungen durch Pi-hole wieder rückgängig machen könnt. Dies hängt wiederum von der Variante ab, die ihr gewählt habt, um Pi-hole im Netzwerk als DNS-Server zu installieren (siehe Abschnitt Netzwerk-Konfiguration).
  • Die Maschine mit Pi-hole muss immer laufen. Sollte die Maschine mal nicht verfügbar sein (Absturz oder auch nur ein kurzer Reboot), dann ist das Netzwerk in dieser Zeit offline.
  • Ich versuche hier eine möglichst detaillierte Anleitung für die Installation von Pi-hole zu liefern. Trotzdem kann ich nicht garantieren, dass diese Konfiguration mit allen Netzwerk-Konstellationen läuft. Ich übernehme daher keinerlei Haftung für evtl. auftretende Probleme, die nach der Installation von Pi-hole auftreten könnten.
  • Das Thema Adblocker wird kontrovers diskutiert: Zum einen kann Werbung im Internet wirklich nervig sein, besonders wenn man Webseiten besucht und sofort von Werbung überhäuft wird. Dann macht die Suche nach Informationen und das Surfen im Allgemeinen wenig Spaß.
    Auf der anderen Seite muss man bedenken, dass sich viele Webseiten durch Werbung finanzieren. Gerade für viele kleinere Websites und Blogs sind die Einnahmen durch Werbebanner die einzige „Finanzspritze“, damit die Kosten für das Hosting (zumindest teilweise) gedeckt sind. Wenn hier die Einnahmen ausbleiben, darf man sich nicht wundern, wenn private Websites/Blogs irgendwann aus dem Netz verschwinden.
    Ich will hier gar nicht den Moral-Apostel spielen, aber dies sollte man immer im Hinterkopf behalten, wenn man sich mit einem aktiven Adblocker durch das Internet bewegt. Wenn eine Webseite hilfreich und informativ ist, dann gibt es in den meisten Fällen auch die Möglichkeit, den Betreiber direkt zu unterstützen (z.B. durch eine kleine Spende oder auch durch das Einkaufen über Affiliate-Links).

Voraussetzungen

Auch wenn man Pi-hole problemlos auf einem Raspberry Pi betreiben kann, möchte ich in diesem Artikel die Installation des Adblockers auf einem Ubuntu Server zeigen. Zum einen habe ich mit Ubuntu (Server) durch meine Blog-Artikel schon einiges an Erfahrung sammeln können, zum anderen lässt sich Ubuntu recht einfach über Hyper-V virtualisieren, d.h. man kann den Adblocker ohne viel Aufwand auf einer virtuellen Maschine betreiben.

Als Grundlage für die Installation des Betriebssystems dient wie schon so oft der Artikel Ubuntu Server 18.04 LTS als Hyper-V Gastsystem installieren und optimal einrichten. Meine Empfehlung dabei ist, Pi-hole auf einer extra VM zu installieren, auf der ansonsten nichts weiter läuft. In diesem Fall kann man die virtuelle Maschine auch recht klein bemessen: Pi-hole braucht nicht viele Hardware-Ressourcen. Auch die virtuelle Festplatte muss nicht viel Speicherplatz bieten: 10 GB reichen hier für Betriebssystem und Pi-hole aus.

Wichtig dabei ist nur, dass die Pi-hole-VM eine statische IP im Netzwerk hat. Am besten nimmt man die entsprechende Konfiguration gleich im Rahmen des Installations-Prozesses des Betriebssystems vor.

Funktionsweise Pi-hole

Bevor es in den praktischen Teil geht, soll kurz die Funktionsweise des Werbeblockers erklärt werden.

Alles beginnt mit einem der wichtigsten Dienste im Internet: Dem Domain Name System (DNS). Dieses funktioniert ähnlich wie eine Telefonauskunft. Wenn man z.B. in einem Browser eine Website aufrufen möchte, dann wird eine DNS-Abfrage gestartet, da für die URL (z.B. decatec.de) zuerst die tatsächliche IP-Adresse ermittelt werden muss (in diesem Beispiel 85.13.128.144). Erst über diese IP-Adresse ist die Website erreichbar und der Request kann ausgeführt werden.

Pi-hole arbeitet nun als DNS-Proxy, der sich zwischen den Geräten im Netzwerk und dem eigentlichen DNS-Server sitzt. Möchte ein Nutzer im Netzwerk eine Website aufrufen, wird dieser DNS-Request von Pi-hole einfach an den eigentlichen DNS-Server durchgeschleift und die Client-Anwendung bekommt die passende IP-Adresse geliefert.

Sind auf dieser Website dann allerdings Werbebanner zu finden, werden weitere DNS-Abfragen gestartet, da die Werbebanner ja nicht auf dem Webspace der Internet-Seite gehostet werden, sondern über ein Content-Delivery-System verteilt werden. Wenn sich nun die URL eines Werbebanners auf einer schwarzen Liste vom Pi-hole befindet, blockiert der Adblocker die Anfrage, indem er den eigentliche DNS-Server gar nicht befragt, sondern einfach nur seine eigene IP-Adresse zurück liefert. Da unter dieser IP-Adresse nichts gefunden werden kann, wird in der Client-Anwendung das entsprechende Werbebanner gar nicht angezeigt.

Zwei DNS-Abfragen mit Pi-hole: Die obere Abfrage wird an den DNS-Server weitergeleitet, die untere Abfrage beantwortet Pi-hole mit seiner eigenen LAN-IP und leitet diese nicht an den DNS-Server weiter

Zwei DNS-Abfragen mit Pi-hole: Die obere Abfrage wird an den DNS-Server weitergeleitet, die untere Abfrage beantwortet Pi-hole mit seiner eigenen LAN-IP und leitet diese nicht an den DNS-Server weiter

Als Nebeneffekt spart man sich dadurch auch etwas Bandbreite, da der Web-Request für das Werbebanner das lokale Netzwerk niemals verlässt.

Installation und Konfiguration Pi-hole

Die Installation von Pi-hole wird durch ein einfaches Skript erledigt. Anschließend muss die Netzwerk-Umgebung so konfiguriert werden, dass das Pi-hole als DNS-Proxy verwendet wird.

Vorbereitungen

Bevor das Installations-Skript ausgeführt werden kann, muss sichergestellt sein, dass das Ubuntu Universe-Repository in den Paketquellen eingerichtet ist. Gerade nach einer frischen Installation von Ubuntu Server 18.04.1 ist dies nicht der Fall, daher muss das Repository mit folgendem Befehl hinzugefügt werden:

sudo add-apt-repository universe

Installation Pi-hole

Die Installation erfolgt dann über den Aufruf eines Skripts:

curl -sSL https://install.pi-hole.net | bash

Nach der Überprüfung aller Abhängigkeiten wird das Setup von Pi-hole gestartet. Das System wird durch mehrere Installationsschritte konfiguriert.

Nach den einleitenden Worten wird darauf hingewiesen, dass das System eine statische IP-Adresse haben muss. Im Idealfall hat man dies gleich während der Installation des Betriebssystems so eingerichtet. Andernfalls wird der Setup-Assistent dazu auffordern, die Netzwerk-Konfiguration entsprechend anzupassen.

Pi-hole Setup: Hinweis auf statische IP-Adresse

Pi-hole Setup: Hinweis auf statische IP-Adresse

Anschließend wählt man den sog. Upstream DNS-Provider. Dies ist der DNS-Server, den Pi-hole befragen soll, wenn eine DNS-Abfrage nicht blockiert werden soll. Ich empfehle hier den DNS-Server von Cloudflare, besser bekannt als 1.1.1.1. Dies ist ein schneller DNS-Server, der Wert auf Privatsphäre legt.
Man kann den verwendeten Upstream-DNS-Server allerdings auch nachträglich in der Weboberfläche von Pi-hole jederzeit ändern.

Pi-hole Setup: Auswahl des Upstream-DNS-Servers

Pi-hole Setup: Auswahl des Upstream-DNS-Servers

Als nächstes werden die Block-Listen konfiguriert. Hier wird bereits ein Standard-Set an Block-Listen vorgeschlagen, die man alle aktiviert lassen sollte.
Auch hier können die Block-Listen nach dem Setup jederzeit in der Weboberfläche geändert werden.

Pi-hole Setup: Auswahl der Block-Listen

Pi-hole Setup: Auswahl der Block-Listen

Im nächsten Schritt wird festgelegt, ob Pi-hole sowohl IPv4, als auch IPv6-Verbindungen überwachen soll. Hier sollten beide Optionen aktiviert sein.

Pi-hole Setup: Auswahl Protokolle (IPv4/IPv6)

Pi-hole Setup: Auswahl Protokolle (IPv4/IPv6)

Es folgen ein paar informative Schritte im Assistenten, bis gefragt wird, ob man die Web-Oberfläche von Pi-hole installieren möchte. Dies sollte man auf jeden Fall aktivieren, da man ansonsten alle Einstellungen nur umständlich über die Kommandozeile ändern kann.

Pi-hole Setup: Die Web-Oberfläche sollte mit installiert werden

Pi-hole Setup: Die Web-Oberfläche sollte mit installiert werden

Da Pi-hole für die Web-Oberfläche einen Webserver benötigt, sollte dieser im folgenden Schritt ebenfalls mit installiert werden.

Pi-hole Setup: Der Webserver sollte ebenfalls installiert werden

Pi-hole Setup: Der Webserver sollte ebenfalls installiert werden

Im letzten Schritt wird man gefragt, ob man die Queries loggen möchte. Auch diese Option sollte aktiviert sein, da man sich ansonsten schwertut, fehlerhaft geblockte Inhalte zu identifizieren.

Pi-hole Setup: Auch die Queries sollten geloggt werden

Pi-hole Setup: Auch die Queries sollten geloggt werden

Nun startet der eigentliche Installations-Prozess.

Im Anschluss wird nochmals eine Zusammenfassung und das initiale Passwort für die Admin-Oberfläche angezeigt.

Pi-hole Setup: Installation abgeschlossen

Pi-hole Setup: Installation abgeschlossen

Wieder zurück in der Kommandozeile sollte man dieses Passwort am besten sofort ändern. Dies geschieht über folgenden Befehl:

pihole -a -p

Dann noch zwei Mal das gewünschte Passwort eingeben und das Setup ist endgültig abgeschlossen.

Nun kann die Weboberfläche über die URL http://192.168.178.64/admin/ erreichen (wenn die IP-Adresse der Maschine 192.168.178.64 ist). Im Menü kann man sich über Login mit dem soeben angelegten Passwort anmelden, damit man Zugriff auf sämtliche Optionen von Pi-hole erhält.

Pi-hole: Admin-Oberfläche

Pi-hole: Admin-Oberfläche

Pi-hole Einstellungen

Nun sollten als erstes die Einstellungen vom Pi-hole überprüft und ggf. angepasst werden. Dazu einfach (nach dem Login) in linken Menü auf Settings klicken. Über das obere Menü können nun verschiedene Optionen eingeblendet werden:

  • System: Dies ist eine einfache Übersicht des Systems. Von Interesse sind hier erst einmal nur die IP-Adressen (IPv4 und IPv6), über die Pi-hole erreichbar ist. Diese werden später noch für die Netzwerk-Konfiguration benötigt, daher sollten die Adressen am besten gleich notiert werden.
  • Blocklists: Die Übersicht der Block-Listen, die Pi-hole momentan verwendet (im Jargon von Pi-hole „Gravity“ genannt). Das Standard-Set an Block-Listen wurde bereits während der Installation angelegt. An dieser Stelle können Block-Listen hinzugefügt oder entfernt werden.
  • DNS: Hier sind alle Einstellungen bzgl. DNS zu finden. Zunächst einmal sind dies die DNS-Server, die Pi-hole als Upsteam-DNS verwendet. Wir haben im Rahmen des Setups die Cloudflare-DNS-Server angegeben, daher sollten hier die entsprechenden Optionen angehakt sein (sowohl für IPV4, als auch IPv6).
    Pi-hole Einstellungen: DNS

    Pi-hole Einstellungen: DNS

    Etwas weiter unten findet man die Option für DNSSEC, welche nach der Installation zunächst einmal deaktiviert ist. Dabei handelt es sich um die Domain Name System Security Extensions. Vereinfacht ausgedrückt kann man damit die Validierung der über DNS erhaltenen Daten einschalten. Unterstützt der verwendete DNS-Dienst DNSSEC (was bei Cloudflare der Fall ist), sollte diese Option gleich aktiviert werden.

Alle anderen Optionen können auf Standard-Werten belassen werden.

Netzwerk-Konfiguration

Pi-hole ist nun einsatzbereit, wird jedoch noch nicht genutzt. Um dies zu ändern, muss jeder Client im Netzwerk die IP-Adresse von Pi-hole als DNS-Server verwenden. Hier gibt es prinzipiell zwei Ansätze. Welche Variante die passende ist, hängt vom jeweiligen Einsatzzweck und Anforderungen ab.

Variante 1: Pi-hole als DNS-Server am Router

Wenn man nicht auf jedem Client einzeln einen den DNS-Server angeben möchte, dann sollte man den Pi-hole einmal zentral als DNS-Server festlegen. Dies passiert in der Weboberfläche des Routers.

Ich empfehle diese Vorgehensweise, da man ohne viel Aufwand zum gewünschten Ergebnis kommt und die Konfiguration für 99% der privaten Netzwerke passen sollte.

Pi-hole als DNS-Server am Router

Pi-hole als DNS-Server am Router

Leider unterscheidet sich die Vorgehensweise von Router zu Router. An dieser Stelle wird das Vorgehen exemplarisch an einer FritzBox gezeigt.

Die DNS-Einstellungen befinden sich hier unter Internet > Zugangsdaten > DNS-Server. Hier sind die IP-Adressen (jeweils IPv4 und IPv6) von Pi-hole einzutragen.

DNS-Einstellungen der FritzBox

DNS-Einstellungen der FritzBox

Wichtig: Wie im Screenshot zu erkennen, werden für den bevorzugten und alternativen DNS-Server jeweils die gleichen IP-Adressen angegeben. Hier sollten nur die Adressen des Pi-hole und keine anderen DNS-Server (wie z.B. 1.1.1.1) angegeben werden. Hintergrund ist, dass die FritzBox wahlweise mal den bevorzugten und den alternativen DNS-Server nutzt. Wenn hier nun noch ein zweiter DNS-Server eingetragen werden würde, hätte dies zur Folge, dass Werbung manchmal blockiert werden würde und manchmal jedoch nicht.

Wenn die Einstellungen übernommen wurden, nutzt die FritzBox Pi-hole als einzigen DNS-Server. Alle Clients (PCs, Tablets, Smartphones, etc.) die nun ihrerseits die FritzBox als DNS-Server verwenden sind dann automatisch und ohne weiteres Zutun durch Pi-hole „geschützt“.

Vorteile Variante 1:

  • Es sind keine Anpassungen auf den Clients notwendig, die den Router als DNS-Server verwenden.
  • Daher kann ein Client auch nicht falsch konfiguriert werden und kann die DNS-Abfrage über Pi-hole nicht „umgehen“.
  • Gilt sowohl für DHCP-Clients, als auch Geräte mit statischer IP (siehe Variante 2).

Nachteile Variante 1:

  • Um eine DNS-Abfrage durchzuführen wird hier ein zusätzlicher „Hop“ benötigt (Client -> Router -> Pi-hole -> Upstream-DNS-Server). Dies kostet etwas mehr Zeit pro DNS-Abfrage, allerdings sollte dies in der Praxis nicht spürbar sein.
  • Im Normalfall nutzen alle Clients den Router als DNS-Server (und damit nun auch Pi-hole). Soll ein Client nicht durch Pi-hole geschützt werden, so müssen die DNS-Einstellungen dieses Clients manuell angepasst werden.

Variante 2: Pi-Hole als DNS-Server im Router (DHCP)

Die meisten Heimnetzwerke sind so konfiguriert, dass alle Clients eine IP über DHCP vom Router zugewiesen bekommen. Da über DHCP auch der zu verwendende DNS-Server mitgegeben wird, kann man sich dies bei Variante 2 zu Nutze machen.

Pi-hole als DNS-Server am Router (per DHCP)

Pi-hole als DNS-Server am Router (per DHCP)

Hier wird nicht der DNS-Server für den ganzen Router geändert, sondern nur die DHCP-Einstellungen angepasst. Exemplarisch findet man bei einer FritzBox diese Einstellungen unter Heimnetz > Netzwerk > Netzwerkeinstellungen > IP-Adressen > IPv4-Adressen/IPv6-Adressen.

Unter Lokaler DNS-Server ist hier die IP der Maschine mit Pi-hole anzugeben.

DHCP-Einstellungen der FritzBox (IPv4)

DHCP-Einstellungen der FritzBox (IPv4)

Neben den DHCP-Einstellungen für IPv4 müssen dann ebenso die Einstellungen für IPv6 angepasst werden.

Wichtig: Dieses Vorgehen ist sehr praktisch, wenn alle Client im Netzwerk ihre IP per DHCP zugewiesen bekommen. Wenn Client allerdings eine statische IP haben, ist diese meist manuell konfiguriert. Hier ist dann kein DHCP im Spiel und somit müssen alle Clients mit statischer IP auf den neuen DNS-Server „umgehoben“ werden.

Vorteile Variante 2:

  • Es sind keine Anpassungen auf den Clients notwendig, wenn diese ihre IP über DHCP zugewiesen bekommen.
  • DHCP-Clients können Pi-hole nicht umgehen.
  • Man spart sich einen „Hop“ bei einer DNS-Abfrage (DHCP-Client -> Pi-hole -> Upstream-DNS-Server).

Nachteile Variante 2:

  • Clients mit statischer IP (ohne DHCP) müssen manuell konfiguriert werden, so dass Pi-hole als DNS-Server genutzt wird. Wird dies an einem Client vergessen, wird hier weiterhin Werbung angezeigt werden.
  • Wenn viele Clients mit statischer IP im Netzwerk vorhanden sind, ist Variante 2 u.U. sehr aufwendig, da wieder jeder Client einzeln konfiguriert werden muss.

Variante 3: Pi-hole als DNS-Server auf den Clients

Als Alternative kann können aber auch sämtliche Clients so konfiguriert werden, dass diese Pi-hole als DNS-Server verwenden (und nicht mehr den Router). In diesem Fall müssen alle Geräte, die von Werbung befreit werden sollen, einzeln konfiguriert werden.

Pi-hole als DNS-Server auf den Clients

Pi-hole als DNS-Server auf den Clients

Auch hier ist es schwierig eine detaillierte Anleitung zu liefern, da sich die Vorgehensweise von Gerät zu Gerät unterscheidet. Hier soll daher nur die Vorgehensweise unter Windows 10 exemplarisch demonstriert werden.

Dazu muss in den Netzwerk-Einstellungen von Windows ein eigener DNS-Server angegeben werden. Dazu einfach in der Windows-Suche nach „Netzwerk“ suchen und Netzwerk- und Freigabecenter wählen. Hier werden dann alle verfügbaren Netzwerk-Schnittstellen aufgelistet. Durch einen Klick auf die jeweilige Verbindung wird der Status der Verbindung gezeigt. Hier wählt man nun Eigenschaften und geht durch einen Doppelklick in die Einstellungen von Internetprotokoll, Version 4 (TCP/IPv4). In diesem Dialog kann dann ein eigener DNS-Server angegeben werden.

DNS-Einstellungen unter Windows 10 (IPv4)

DNS-Einstellungen unter Windows 10 (IPv4)

Wichtig: Auch hier sollte ausschließlich die IP-Adresse der Pi-hole Maschine sowohl als bevorzugter, als auch alternativer DNS-Server angegeben werden.

Vorteile Variante 3:

  • Hier können Clients selektiv konfiguriert werden. Soll auf einem Client keine Werbung blockiert werden, kann dieser so konfiguriert werden, dass dieser weiterhin den Router als DNS-Server verwendet und daher von der Filterung durch Pi-hole nicht betroffen ist.
  • Man spart sich einen „Hop“ bei einer DNS-Abfrage (Client -> Pi-hole -> Upstream-DNS-Server).

Nachteile Variante 2:

  • Man muss jeden Client einzeln so konfigurieren, so dass Pi-hole als DNS-Server verwendet wird. Vergisst man dies bei einem Client, wird dieser weiterhin Werbung angezeigt bekommen.
  • Da der zu verwendende DNS-Server auf jedem Betriebssystem/Gerät anders eingerichtet wird, ist diese Variante gerade bei großen Netzwerken sehr aufwändig.

Test der Funktionalität

Nachdem nun alle Clients Pi-hole als DNS-Server verwenden, wird es Zeit für einen ersten Test. Dazu einfach eine Website aufrufen, die normalerweise Werbung anzeigt. Wenn alles geklappt hat, dann sollte diese Werbung nun wie von Geisterhand verschwunden sein.

Darüber hinaus gibt es auf der Website von Pi-hole eine spezielle Testseite, mit der man die Funktion von Pi-hole testen kann.

Das Tolle ist nun, dass man nicht nur am PC/Browser nicht mehr von Werbung bombardiert wird, sondern dass alle netzwerkfähigen Geräte davon profitieren, egal ob Smartphones, Tablets oder gar Smart-TVs.

Pi-hole in Aktion auf dem Smartphone (hier am Beispiel der Google News App)

Pi-hole in Aktion auf dem Smartphone (hier am Beispiel der Google News App)

DNS over TLS mit Stubby

Viele Webseiten nutzen Verschlüsselung über HTTPS. Hier können die Website-Inhalte also nicht von einem Angreifer, der sich zwischen den Webserver und einen Client „einhängt“ (Man-in-the-Middle) mitgelesen werden. DNS-Abfragen werden in der Regel unverschlüsselt über UDP übertragen. D.h. der Kommunikationsweg zwischen Client und DNS-Server ist mehr oder weniger ungeschützt. Auch wenn ein Angreifer nicht an die (dank HTTPS verschlüsselten) Inhalte herankommt, so kann er jedoch die DNS-Abfragen eines Clients mitlesen und ggf. auch manipulieren.

Um diese Lücke zu schließen, wurde das Protokoll DNS over TLS (DoT) entwickelt. Dabei werden sämtliche DNS-Abfragen über TLS verschlüsselt. Mit dem zusätzlichen Programm Stubby kann man mit Pi-hole ebenfalls DNS over TLS nutzen, so dass sämtliche DNS-Abfragen nicht mehr unverschlüsselt über die Leitung gehen.

Pi-hole als DNS-Server am Router mit Stubby

Pi-hole als DNS-Server am Router mit Stubby

Wie man auf dem Bild erkennen kann, ist hier ein zusärtlicher „Hop“ erforderlich (Client -> Router -> Pi-hole -> Stubby -> Upstream-DNS-Server). Ebenso gibt es einen gewissen Overhead durch das verwendete Protokoll für DNS over TLS. Daher dauern bei dieser Variante DNS-Abfragen nochmals ein bisschen länger. Die Praxis zeigt allerdings, dass man auch hier im Alltag keinen Unterschied feststellen wird.

Voraussetzungen

Um dies umzusetzen sind zwei Voraussetzungen zu erfüllen:

  • Pi-hole ab Version 4.0.0
  • Der Upstream-DNS-Server muss DNS over TLS unterstützen. Bei den hier gezeigten Servern von Cloudflare ist aber auch diese Voraussetzung erfüllt.

Installation Stubby

Das kleine Programm Stubby ist ein DNS-Daemon: Das Tool beantwortet DNS-Anfragen lokal auf dem „traditionellen Weg“ (also unverschlüsselt über UDP), nach außen (zum Upstream-DNS-Server) kommt jedoch DNS over TLS zum Einsatz.

Stubby ist bereits in den Paketquellen von Ubuntu enthalten und kann durch folgenden Befehl installiert werden:

apt-get update && apt-get install stubby

Falls das Paket nicht gefunden werden kann, muss evtl. das Universe-Repository in die Paketquellen von Ubuntu mit aufgenommen werden (siehe Ubuntu Server 18.04 LTS als Hyper-V Gastsystem installieren und optimal einrichten).

Konfiguration Stubby

Nach der Installation von Stubby muss noch die Konfiguration des Tools angepasst werden, damit es mit Pi-hole zusammenarbeiten kann.

Die Konfiguration wird in der folgenden Datei vorgenommen:

nano /etc/stubby/stubby.yml

Hier sollten zwei Änderungen vorgenommen werden:

  • Ändern der verwendeten Ports: Da der DNS-Server von Pi-hole bereits auf Port 53 lauscht, muss Stubby auf einen anderen Port „ausweichen“. Dazu sucht man in der Konfiguration nach listen_addresses und ändert die folgenden Zeilen ab, damit Stubby auf Port 5353 läuft:
    listen_addresses:
      - 127.0.0.1@5353
      -  0::1@5353
  • Upstream-DNS-Server festlegen: Der von Stubby verwendete DNS-Server wird weiter unten in der Datei angegeben. Hier sind bereits mehrere DNS-Server hinterlegt, die Stubby verwenden kann. Diese sollten jedoch alle auskommentiert werden, da Stubby ja nur einen einzigen DNS-Server verwenden soll. In diesem Beispiel nehme ich wieder die DNS-Server von Cloudflare.
    upstream_recursive_servers:
    # IPv4
    # Cloudflare 1.1.1.1 and 1.0.0.1
      - address_data: 1.1.1.1
        tls_auth_name: "cloudflare-dns.com"
      - address_data: 1.0.0.1
        tls_auth_name: "cloudflare-dns.com"
    
    # IPv6
    # Cloudflare servers
      - address_data: 2606:4700:4700::1111
        tls_auth_name: "cloudflare-dns.com"
      - address_data: 2606:4700:4700::1001
        tls_auth_name: "cloudflare-dns.com"
    Alle anderen DNS-Server, die in der Datei vorhanden sind, müssen auskommentiert werden (einfach eine Raute ‚#‘ vor jede Zeile schreiben).

Stubby in Pi-hole als Upstream-DNS-Server einrichten

Der letzte Schritt zum funktionierenden DNS over TLS führt wieder in die Admin-Oberfläche von Pi-hole: Unter Settings > DNS wählt man dazu alle vorkonfigurierten DNS-Server ab. Nun wird Stubby als Custom DNS-Server eingetragen:

  • Custom 1 (IPv4): 127.0.0.1#5353
  • Custom 3 (IPv6): ::1#5353

Der Port wird hier nicht wie üblich durch einen Doppelpunkt, sondern durch eine Raute von der IP getrennt.

Pi-hole Einstellungen: DNS mit Stubby

Pi-hole Einstellungen: DNS mit Stubby

Nach dem Übernehmen der Einstellungen ist Stubby als Upstream-DNS-Server von Pi-hole eingerichtet und alle DNS-Abfragen werden über DNS over TLS verschlüsselt.

Der Alltag mit Pi-hole

Nach der Installation von Pi-hole sollte euer Netzwerk nun so gut wie werbefrei sein. Meine Erfahrung zeigt, dass man nach der Ersteinrichtung zunächst einmal ein paar Tage abwarten und beobachten sollte, die das System wirkt. Anschließend kann man Pi-hole auf seine eigenen Bedürfnisse anpassen.

Whitelisting

Evtl. wird man feststellen, dass einige Dienste nicht mehr wie gewohnt funktionieren. Hier kann Pi-hole die Ursache sein, indem zu viel geblockt wird. In diesem Fall kann man einige Domains wieder in eine Whitelist aufnehmen, so dass diese in Zukunft nicht mehr geblockt werden.

Dazu muss man zunächst einmal herausfinden, welche Domains fälschlicherweise geblockt werden. Hier kann das Log von Pi-hole helfen, welches man unter Tools Tail pihole.log findet. Wenn man das Log aufruft und anschließend den Dienst startet, der nicht mehr richtig funktioniert, dann wird man in diesem Log Einträge finden, die vom Dienst ausgehen und geblockt werden. Diese Domains kann man dann unter Whitelist eintragen, so dass diese zukünftig nicht mehr geblockt werden.

Da die fälschlicherweise geblockten Domains meist nicht so offensichtlich sind, muss man hier meistens etwas herumprobieren. Wenn eine Domain auf der Whitelist nicht die gewünschte Wirkung erzielt, dann probiert man eben weitere Domains aus, die beim Starten des entsprechenden Dienstes angesprochen werden. Das kann u.U. etwas Zeit in Anspruch nehmen, bis man die richtige(n) Domain(s) ausgemacht hat.

Hinzufügen weiterer Filterlisten

Beim Setup von Pi-hole wurden bereits einige Filterlisten hinzugefügt. Diese sind für den Anfang erst einmal ausreichend. Man kann jedoch jederzeit unter Settings > Blocklists weitere Listen hinzufügen. Welche Listen zum Einsatz kommen, ist natürlich von den eigenen Bedürfnissen abhängig. Hier sollte man es aber nicht übertreiben: Je mehr Block-Listen in Pi-hole geladen werden, desto höher ist auch die Wahrscheinlichkeit, dass bestimmte Dienste nicht mehr wie gewohnt funktionieren.

Folgende Seiten sind eine gute Quelle für weitere Block-Listen:

  • EasyList: Diese Listen sind bei den aus Browsern bekannten Adblockern Adblock Plus und uBlock Origin sehr beliebt.
  • EasyList Germany: Hier findet man Block-Listen, die auf bestimmte Länder „zugeschnitten“ sind.
  • Firebog: Eine Sammlung der unterschiedlichsten Block-Listen.
  • FilterLists: Eine weitere (sehr große) Sammlung an Block-Listen.
  • No Coin adblock list: Spezielle Liste für Bitcoin-Mining in Browsern.

Pi-hole + VPN

Pi-hole wirkt prinzipiell nur, wenn man sich im gleichen Netzwerk wie der Werbeblocker befindet. Sobald man beispielsweise mit dem Smartphone im Mobilfunknetz unterwegs ist, wird man wieder Werbung zu Gesicht bekommen.

Hier besteht jedoch die Möglichkeit, einen VPN-Tunnel ins Heimnetzwerk aufzubauen. Dies ist z.B. mit der App VpnCilla unter Android möglich. Hier befindet man sich dann dank VPN wieder im gleichen Netzwerk wie die Maschine, auf der Pi-hole läuft und als „Nebeneffekt“ wird dann wieder automatisch Werbung blockiert. Somit ist man dann auch im Mobilfunknetz wieder praktisch werbefrei unterwegs.

Der Vorteil, dass man durch Pi-hole etwas Bandbreite spart, ist im Heimnetzwerk eher weniger relevant. Bei den Mobilfunk-Volumen-Tarifen ist dies jedoch ein handfester Vorteil.

Pi-hole Admin-Oberfläche über das Internet erreichen

Pi-hole wurde in diesem Artikel auf einer separaten Maschine eingerichtet, so dass die Admin-Oberfläche nur im lokalen Netzwerk erreichbar ist. Dies sollte in den meisten Fällen ausreichend sein.

Wer jedoch aus dem Internet Zugriff auf die Pi-hole-Oberfläche benötigt, kann dies ebenfalls einrichten. Die genaue Vorgehensweise ist bereits im Artikel Zweite Web-Anwendung neben ownCloud/Nextcloud einrichten (am Beispiel WordPress) beschrieben, daher soll an dieser Stelle nur kurz auf diese Möglichkeit verwiesen werden.

Fazit

Sobald Pi-hole eingerichtet ist, ist man im Heimnetzwerk werbefrei unterwegs. Dies ist zunächst einmal eine Erleichterung, da man nicht mehr von Werbung überflutet wird, zusätzlich spart man auf diese Art und Weise auch etwas Bandbreite. Durch die zentrale Installation im Netzwerk wirkt dies auch ohne weiteres Zutun auf alle Geräte im Heimnetzwerk.

Dennoch muss man sich bewusst sein, dass man durch das Blockieren von Werbung Website-Betreibern schaden kann. Denn gerade kleinere Anbieter sind auf die Einnahmen durch Online-Werbung angewiesen. Hier sollte man sich Gedanken machen, ob man seine Lieblings-Webseiten nicht auf anderem Wege unterstützen oder zumindest eine Ausnahme in Pi-hole für diese Webseiten hinzufügen möchte.

Wie steht ihr zum Thema Adblocker? Habt ihr Pi-hole bereits im Einsatz und könnt weitere Block-Listen empfehlen, oder habt weitere Tipps und Tricks zum Netzwerk-weiten Werbeblocker? Hinterlasst mir dazu doch einfach einen Kommentar.

Weiterführende Artikel

Links

]]>
https://decatec.de/home-server/nie-mehr-werbung-pi-hole-auf-ubuntu-server-18-04/feed/ 10
Nextcloud App-Vorstellung: Lesbare Links mit ShareRenamer https://decatec.de/home-server/nextcloud-app-vorstellung-lesbare-links-mit-sharerenamer/ https://decatec.de/home-server/nextcloud-app-vorstellung-lesbare-links-mit-sharerenamer/#comments Sun, 26 Aug 2018 09:49:37 +0000 https://decatec.de/?p=4430 Nextcloud Logo

Heute möchte ich eine App für Nextcloud vorstellen: Mit der App ShareRenamer können geteilte Links einfach umbenannt werden.

Wenn man in Nextcloud einen Ordner oder eine Datei per Link teilt, dann erhält diese Freigabe automatisch einen öffentlichen Link zugewiesen. Leider sind diese Links immer eher kryptischer Natur, da diese aus einer zufälligen Zeichenfolge bestehen (z.B. https://meindomain.de/nextcloud/s/BMAASDej9BfdF2R). Diese Zeichenfolge kann sich natürlich niemand merken, so dass man die Freigabe-Links immer per Mail an Freunde, Verwandte oder auch Kunden verteilen.

Schön wäre es nun, wenn man diese Links umbenennen könnte, so dass aus https://meindomain.de/nextcloud/s/BMAASDej9BfdF2R beispielsweise https://meindomain.de/nextcloud/s/MeinGeteilterLink werden würde. Leider bietet Nextcloud dieses Feature nicht out-of-the-box…

ShareRenamer im Nextcloud App Store

Seit gestern gibt es genau dafür eine App im Nextcloud App Store: ShareRenamer

Damit ist es einfach möglich, einen geteilten Link umzubenennen. Dazu wird zunächst eine Datei oder ein Verzeichnis per Link geteilt. Dies kann in den Details zu einer Datei oder einem Verzeichnis im Reiter Teilen aktiviert werden (oder einfach auf das Teilen-Symbol in der Datei-Übersicht klicken).

ShareRenamer: Einfaches Umbenennen von geteilten Links

ShareRenamer: Einfaches Umbenennen von geteilten Links

Dank der App ShareRenamer erscheint nun unter dem Link selbst eine Schaltfläche zum Umbenennen. Hier wird dann einfach ein neuer Name für den Link angegeben. Nach einem Klick auf Umbenennen wird der Link umbenannt. Einzige Voraussetzung ist nur, dass der gewünschte Link-Name nicht schon vorher vergeben wurde.

Über das Menü („…“) des Links kann der Link auch gleich kopiert werden. Dieser kann dann einfach weitergegeben werden. Wenn die URL der eigenen Cloud soweit bekannt ist, dann muss dies dank des leicht zu merkenden Links nicht mehr zwingenderweise per Mail erfolgen.

Mein Weg zum Bereitstellen einer App im Nextcloud App Store

Die App ist sicherlich für den einen oder anderen ganz hilfreich. Eigentlich wäre der Artikel hier nun schon zu Ende.

Dennoch möchte ich hier etwas weiter ausholen und meine Erfahrungen schildern, wie die App letzten Endes im Store gelandet ist. Vielleicht kann dadurch der eine oder andere ermuntert werden, auch eine App bereit zu stellen und am Projekt Nextcloud mitzuwirken.

Da gibt’s doch bestimmt eine App dafür…

Ich hatte nämlich genau diese Anforderung für meine Nextcloud: Geteilte Links sollten umbenannt werden können, damit man sich die Links leichter merken kann.

Zunächst hatte ich einen Blick in den Nextcloud App Store geworfen. Hier sah es leider mau aus – eine entsprechende App war hier nicht zu finden. Die nächste Anlaufstelle war das Nextcloud Support Forum. Hier wurde bereits das eine oder andere Mal nach genau diesem Feature gefragt. Dazu gab es dann auch tatsächlich eine App, die jedoch nur auf GitHub verfügbar ist: Diese hört auf den Namen ShareRenamer.

…aber nicht im Nextcloud App Store

Die genannte App gab es schon länger, es gab allerdings ein Problem: Der Ersteller dieser App ist nicht mehr auf GitHub tätig – also hatte diese App momentan keinen Maintainer. Einige Leute hatten sich bereits das originale Repository geforked, um zumindest sicher zu stellen, dass diese App auch unter neueren Versionen von Nextcloud lauffähig ist (z.B. hier).

Es sah also nicht so aus, als ob diese App irgendwann einmal den Weg in den Nextcloud App Store finden würde. Ein weiteres Problem war, dass sich mit der nächsten Nextcloud-Version der Workflow zum Teilen von Ordnern und/oder Dateien ändern wird. Hier sind die Optionen zum Teilen nicht mehr direkt in der Seitenleiste verfügbar, sondern sind in einem Untermenü „verpackt“. Durch diese Änderungen wäre die App unter Nextcloud 14 nicht mehr lauffähig gewesen. Vermutlich wäre die App dann irgendwann einfach von der Bildfläche verschwunden.

Jeder kann mithelfen

Dennoch sind diese Apps meist als Open Source verfügbar, so dass jeder sich das entsprechende Repository forken und (unter bestimmten Voraussetzungen) Veränderungen durchführen kann. Auch eine veränderte Version kann dann einfach wieder veröffentlicht werden.

Ich komme zwar nicht aus der Ecke der Web-Entwicklung, aber die App nutzt im Prinzip nur etwas JavaScript, um das Umbenennen von Links zu ermöglichen. Dies sollte im Großen und Ganzen machbar sein und so war der Fahrplan eigentlich klar:

  • Die App brauchte noch etwas Feintuning, damit sich diese (qualitativ) gut in Nextcloud einfügt.
  • Die Lokalisierung der App war nicht vorhanden, so dass z.B. Fehlermeldungen immer in Englisch ausgegeben wurden. Hier mussten also einige Inhalte noch übersetzt werden.
  • Die App musste für Nextcloud 14 überarbeitet werden, damit sie auch noch mit der kommenden Nextcloud-Version lauffähig ist.

Das entsprechende Repository findet man hier: ShareRenamer@GitHub

Als ich mich an die Arbeit machte, war ich erstaunt über die Hilfsbereitschaft der Community. Ich brauchte beispielsweise Hilfe bei der Lokalisierung der App über Transifex. Morris Jobke hat nach einer kurzen Anfrage alles vorbereitet, so dass die App über die normalen Nextcloud-Lokalisierungs-Mechanismen übersetzt werden kann. Einen Tag später war die App dann bereits in verschiedene Sprachen übersetzt worden. Ein großer Dank geht daher an die Nextcloud-Community.

Hier möchte ich noch einmal darauf hinweisen, dass diese App nicht ursprünglich von mir erstellt wurde, sondern dass ich hier lediglich ein paar Anpassungen durchgeführt und die App im Nextcloud App Store veröffentlicht habe. Ich betrachte das daher nicht als „meine App“. Jeder kann hier mitwirken und neue Funktionen und/oder Bugfixes einbringen. Das ist ja das Tolle an Open Source Software.

Bei evtl. auftretenden Problemen mit der App sind dies zwei wichtige Anlaufstellen:

Weiterführende Artikel

Links

]]>
https://decatec.de/home-server/nextcloud-app-vorstellung-lesbare-links-mit-sharerenamer/feed/ 6
Auf dem Laufenden bleiben mit Twitter https://decatec.de/allgemein/auf-dem-laufenden-bleiben-mit-twitter/ https://decatec.de/allgemein/auf-dem-laufenden-bleiben-mit-twitter/#comments Sun, 29 Jul 2018 07:49:09 +0000 https://decatec.de/?p=4413 DecaTec Logo

Hier ein kurzer Hinweis für die Leser dieses Blogs. Die IT-Welt ist recht schnelllebig und dies merkt man besonders als Tech-Blogger. Ich versuche daher alle (auch ältere) Artikel auf einem aktuellen Stand zu halten. Wenn ich daher Änderungen an einem Artikel vornehme, pflege ich dabei immer eine Update-History, welche die vorgenommenen Änderungen an einem Artikel nachvollziehbar macht (z.B. bei neuen Programm-Versionen).

Für Leser ist dieses Vorgehen leider nicht sonderlich komfortabel. Man muss regelmäßig in meinem Blog vorbeischauen (das sehe ich natürlich gern) und dann aber noch sämtliche interessanten Artikel nach Updates durchforsten. Dies ist recht aufwändig und u.U. zeitintensiv.

Nun wurde ich schon von einigen Lesern abgesprochen, ob ich mich mal einen Newsletter einrichten könnte, mit dem ich aktiv informieren, wenn ein Artikel ein Update verpasst bekommen hat. Dank der DSGVO wäre dieses Unterfangen für mich aber leider recht aufwändig und schwer umzusetzen.

Update: Für alle, die Twitter nicht nutzen möchte, gibt es nun eine Übersichts-Seite mit allen Änderungen im Blog.

Twitter als Newsletter-Alternative

Aus diesem Grund will ich es ab nun mit Twitter als eine Art „Newsletter light“ ausprobieren. Wenn es nun ein Update gibt, werde ich dies kurz über Twitter kundtun. Dies sieht dann beispielsweise so aus:

Artikel-Update bei Twitter

Artikel-Update bei Twitter

Um nun aktiv über Änderungen in meinem Blog informiert zu werden, braucht ihr zunächst einen Twitter-Account (falls noch nicht vorhanden). Hier könnt ihr mir dann auf meinem Account @decatec_de folgen. Anschließend erscheinen Updates in regelmäßigen Abständen in eurem Twitter-Feed.

Was haltet ihr davon? Ist dies eine gute Alternative zu einem richtigen Newsletter? Hinterlasst mir dazu doch einfach einen Kommentar.

Update: Übersicht über alle Änderungen im Blog in der Update-Historie

Ich kann allerdings auch gut verstehen, wenn jemand Twitter aus verschiedenen Gründen nicht nutzen möchte.

Für diesen Fall habe ich nun eine Blog-weite Update-Historie hinzugefügt, in der zukünftig alle Änderungen und Updates des Blogs dokumentiert werden.

Die entsprechende Seite findet ihr entweder in der Header-Leiste oder unter den Direktlinks:

Update-Historie für decatec.de

Update-Historie für decatec.de

Die Leser haben nun die Wahl: Entwerder per Push-Prinzip über Twitter informiert werden, oder einfach im Pull-Prinzip regelmäßig über die Update-Seite auf dem Laufenden bleiben. So sollte für jeden etwas dabei sein.

Links

]]>
https://decatec.de/allgemein/auf-dem-laufenden-bleiben-mit-twitter/feed/ 3
Nextcloud: Online-Office mit ONLYOFFICE https://decatec.de/home-server/nextcloud-online-office-mit-onlyoffice/ https://decatec.de/home-server/nextcloud-online-office-mit-onlyoffice/#comments Fri, 29 Jun 2018 13:41:55 +0000 https://decatec.de/?p=4369 Nextcloud Logo

Ein klassisches Anwendungsgebiet für „die Cloud“ ist das Erstellen und die Bearbeitung von Office-Dokumenten. Diese können dann meistens direkt im Browser auch durch mehrere Benutzer gleichzeitig editiert werden. Nextcloud bietet dieses Feature nicht direkt out-of-the-box, allerdings kann die selbstgehostete Cloud leicht durch Apps erweitert werden. Genau hier setzt ONLYOFFICE an: Durch diese Erweiterung kann Nextcloud einfach um Online-Office-Funktionalitäten erweitert werden.

Dieser Artikel beschreibt daher die Installation und Konfiguration von ONLYOFFICE mittels Docker und das Zusammenspiel mit einer bestehenden Nextcloud-Instanz. Wie immer liegt das Augenmerk v.a. auf der Sicherheit aller beteiligten Systeme.

Achtung: Dieser Artikel ist nicht mehr aktuell. Das hier gezeigte Setup hat eine erhebliche Einschränkung: Der Zugriff auf Office-Dokumente ist hiermit nicht aus dem Internet, sondern nur aus dem lokalen Netzwerk (LAN) möglich.

In einem Folgeartikel wird ein verbessertes Setup gezeigt, bei dem diese Probleme nicht auftreten: Nextcloud: Online-Office mit ONLYOFFICE (mit eigener Subdomain)

Update-Historie (letztes Update 09.11.2018)
  • 09.11.2018:
    • Link auf den neuen Artikel über Nextcloud/ONLYOFFICE hinzugefügt.
  • 04.11.2018:
    • Hinweis auf die Einschränkungen des in diesem Artikel erwähnten Setups hinzugefügt.

 

ONLYOFFICE vs Collabora

Bevor es an die Installation geht, noch ein Hinweis: ONLYOFFICE ist nur eine Möglichkeit, Nextcloud um Online-Office-Funktionalitäten zu erweitern. Eine Alternative dazu ist Collabora. Die Installation und Einrichtung von Collabora habe ich bereits im Artikel Nextcloud: Online-Office mit Collabora beschrieben. Nun stellt sich natürlich die Frage, auf welche Lösung man setzen sollte. Hier gibt es keine eindeutige Empfehlung: Beide Lösungen integrieren sich gut in Nextcloud und bieten ähnliche Features.

Die Unterschiede zwischen den Office-Lösungen weden in diesem Artikel detailliert beschrieben. Aber Achtung: der Vergleich wurde von ONLYOFFICE veröffentlicht, daher ist es nicht auszuschließen, dass hier eine Lösung per se besser abschneidet. Der Artikel ist aber trotzdem interessant, da er auch die Unterschiede in der technischen Umsetzung beider Lösungen beleuchtet.

Was für den Endanwender sicherlich am wichtigsten ist: Collabora kommt aus der LibreOffice-Ecke und bietet daher die beste Unterstützung für die OpenDocument-Formate. Bei der Entwicklung von ONLYOFFICE wurde von Anfang an Wert auf die OOXML-Formate (Office Open XML – die von Microsoft Office bevorzugten Formate) gelegt. Nach eigenen Angaben unterstützt ONLYOFFICE die Microsoft Office Formate zu 100%.

Daher werden Anwender, die hauptsächlich mit Microsoft Office arbeiten, wohl eher die Lösung von ONLYOFFICE bevorzugen. Wer dagegen meist LibreOffice/OpenOffice nutzt, sollte sich Collabora mal näher anschauen.

Am besten einfach mal selbst beide Lösungen ausprobieren: ONLYOFFICE und Collabora können parallel installiert werden, so dass man sich nicht sofort auf eine Office-Variante festlegen muss.

Installation und Konfiguration von ONLYOFFICE

ONLYOFFICE hat einige Abhängigkeiten, so dass eine manuelle Installation durchaus aufwändig ist. Daher beschreibt der Artikel die Installation der Office-Lösung mittels Docker. Dadurch kann ONLYOFFICE in wenigen Schritten schnell und einfach installiert werden.

Voraussetzungen

Folgende Voraussetzungen sind für den Betrieb von ONLYOFFICE zu erfüllen:

  • Ein System, auf dem Docker installiert ist. Im Rahmen des Artikels setze ich Ubuntu Server ein, allerdings sollten die Schritte auch auf andere Distributionen übertragbar sein. Wie Docker selbst installiert wird, wurde bereits im Artikel Docker auf Ubuntu Server erklärt.
  • ONLYOFFICE ist recht speicherintensiv. Daher sollte auf dem entsprechenden PC/VM mindestens 4 GB RAM verfügbar sein (besser noch 6 GB). Aus genau diesem Grund wird ONLYOFFICE auch auf einem Raspberry Pi (Affiliate-Link) nicht optimal laufen. Auch wenn es prinzipiell möglich ist, ONLYOFFICE auf einem solchen Kleinst-Rechner zu betreiben, wird die Performance hier zu wünschen übriglassen.
  • Nextcloud muss über eine gesicherte SSL-Verbindung erreichbar sein. Wer die Cloud wie im Artikel Nextcloud auf Ubuntu Server 18.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban beschrieben installiert hat, ist bestens vorbereitet, da hier ein SSL-Zertifikat von Let’s Encrypt zum Einsatz kommt.

Häufig liest man, dass ONLYOFFICE nicht auf demselben Rechner wie Nextcloud installiert werden sollte, da es hier zu Problemen kommen könnte. Dies trifft allerdings nur dann zu, wenn ONLYOFFICE manuell installiert wird. Wenn die Office-Lösung wie hier beschrieben über Docker läuft, dann kann ONLYOFFICE problemlos auf der gleichen Maschine wie Nextcloud betrieben werden.

Es ist aber natürlich auch möglich, ONLYOFFICE auf einem anderen Rechner (z.B. eine zweite virtuelle Maschine) zu installieren. In diesem Fall müssen nur die IP-Adressen entsprechend angepasst werden.

Vorbereitung: Zertifikat erstellen

Die Kommunikation zwischen Nextcloud und ONLYOFFICE muss über eine gesicherte SSL-Verbindung erfolgen. Hier kann der Einfachheit halber ein selbst signiertes Zertifikat zum Einsatz kommen.
Es wäre auch möglich, ein eigenes Zertifikat von Let’s Encrypt speziell für die ONLYOFFICE-Verbindung zu nutzen. Der Aufwand wäre hier allerdings etwas höher, da sämtliche Requests dann durch den nginx Gateway-Host geleitet werden oder die Zertifikate immer manuell kopiert werden müssten (Let’s Encrypt Zertifikate haben nur eine Gültigkeitsdauer von 90 Tagen).
Ein selbst signiertes Zertifikat ist hier das Mittel der Wahl, da es einfach erzeugt werden kann und die Verbindung trotzdem verschlüsselt ist. Auch muss man hier keinerlei Anpassungen am Webserver vornehmen, was eine zusätzliche Fehlerquelle wäre.

Das Zertifikat wird durch die folgenden Befehle angelegt:

mkdir -p /app/onlyoffice/DocumentServer/data/certs
cd /app/onlyoffice/DocumentServer/data/certs
openssl genrsa -out onlyoffice.key 4096
openssl req -new -key onlyoffice.key -out onlyoffice.csr
openssl x509 -req -days 3650 -in onlyoffice.csr -signkey onlyoffice.key -out onlyoffice.crt
openssl dhparam -out dhparam.pem 4096
chmod 400 onlyoffice.key
chmod 400 onlyoffice.crt
chmod 400 onlyoffice.csr
chmod 400 dhparam.pem

  • Beim Befehl openssl req -new -key onlyoffice.key -out onlyoffice.csr wird man nach dem „Common Name“ gefragt (Common Name (e.g. server FQDN or YOUR name)). Hier ist einfach die IP des lokalen Systems anzugebnen (z.B. 192.168.178.60). Ebenso kann man ein „challenge password“ angeben. Dieses kann man einfach leer lassen (einfach mit Enter bestätigen).
  • Achtung: Die Erzeugung der sog. Diffie-Hellmann-Parameter mit einer Länge von 4096 Bit (openssl dhparam -out dhparam.pem 4096) kann u.U. sehr lange dauern. Auf schwacher Hardware kann das schon einmal mehrere Stunden in Anspruch nehmen. Wer nicht so lange warten möchte, kann die Schlüssel-Länge auf 2048 Bit reduzieren (openssl dhparam -out dhparam.pem 2048).
  • Das Zertifikat hat eine Gültigkeit von 3650 Tagen (10 Jahre). Hier kann bei Bedarf auch eine andere Gültigkeitsdauer angegeben werden.

Installation in einem Schritt

Die Installation von ONLYOFFICE erfolgt dann dank Docker mit nur einem einzigen Befehl:

docker run --name=ONLYOFFICEDOCKER -i -t -d -p 4433:443 -e JWT_ENABLED='true' -e JWT_SECRET='geheimes-secret' --restart=always -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver

Folgende Punkte gilt es hier zu beachten:

  • Da der Webserver bereits auf dem Port 443 (HTTPS) lauscht, kann der Docker-Container nicht den gleichen Port belegen. Der Parameter -p 4433:443 sorgt dafür, dass der Container selbst mit dem Port 443 (intern) arbeitet, nach außen wird jedoch der Port 4433 genutzt.
  • Die nächsten zwei Parameter (-e JWT_ENABLED=’true‘ -e JWT_SECRET=’geheimes-secret‘) sorgen dafür, dass zur Kommunikation mit dem Container ein sog. JSON Web Token benötigt wird. Im Grunde genommen handelt es sich dabei um ein Passwort („geheimes-secret“ – hier sollte man natürlich ein eigenes Passwort wählen), welches später in Nextcloud hinterlegt werden muss, damit die Verbindung zum ONLYOFFICE Container aufgebaut werden kann. Dies verhindert, dass der ONLYOFFICE-Container „unbemerkt“ von anderen Verbindungen genutzt werden kann.
  • Mit –restart=always wird angegeben, dass der Container bei jedem Systemstart hoch gefahren wird. Damit „überlebt“ der Docker-Container auch Neustarts des Systems.
  • Der letzte Parameter (-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver) definiert ein sog. Volume: Alle Dateien, die im Verzeichnis /app/onlyoffice/DocumentServer/data des Hosts liegen, werden innerhalb des Containers im Verzeichnis /var/www/onlyoffice/Data onlyoffice/documentserver bereit gestellt. Diese Funktion wird benötigt, damit der Container das zuvor erzeugte Zertifikat nutzen kann.

Nun wird der ONLYOFFICE-Container heruntergeladen (ca. 650 MB), was je nach Internetverbindung ein paar Minuten dauern kann.

Installation von ONLYOFFICE mittels Docker

Installation von ONLYOFFICE mittels Docker

Ob der Container ordnungsgemäß läuft, kann man testen, indem man über den Browser eine Verbindung aufbaut (die URL dazu ist in unserem Fall https://192.168.178.60:4433). Durch den Einsatz des selbst signierten Zertifikats wird der Browser eine Warnung ausgeben, das stört uns an dieser Stelle allerdings nicht.

ONLYOFFICE läuft

ONLYOFFICE läuft

Nextcloud: ONLYOFFICE App aktivieren

Damit ONLYOFFICE nun aus Nextcloud heraus angesprochen werden kann, braucht man noch die entsprechende App. Man findet diese im App-Store von Nextcloud in der Kategorie Büro & Text.

ONLYOFFICE im Nextcloud App-Store

ONLYOFFICE im Nextcloud App-Store

Nextcloud-Konfiguration anpassen

Bevor nun die Verbindung zu ONLYOFFICE in Nextcloud hinterlegt werden kann, muss noch eine kleine Anpassung an der Konfiguration von Nextcloud erfolgen. Dazu wird die Konfiguration mit folgendem Befehl auf der Konsole geöffnet:

nano /var/www/nextcloud/config/config.php

Hier wird nun am Ende der Datei (aber vor der letzten schließenden Klammer) ein Eintrag hinzugefügt:

'onlyoffice' =>
array (
    'verify_peer_off' => true,
),

Dieser Schritt ist zwingend erforderlich, da Nextcloud sonst die Verbindung zu ONLYOFFICE auf Grund des selbst signierten Zertifikats nicht zulässt.

Am Schluss sollte der ganze Rechner einmal neu gestartet werden:

reboot now

Verbindung zwischen Nextcloud und ONLYOFFICE herstellen

Der letzte Schritt zu einer Online-Office-Lösung mit Nextcloud ist nun nur noch das Hinterlegen der Verbindungs-Details zwischen der Cloud und ONLYOFFICE.

Dazu in Nextcloud einfach in die Einstellungen gehen. Unter Verwaltung > ONLYOFFICE findet man nun die entsprechenden Einstellungen:

  • Serviceadresse der Dokumentbearbeitung: Hier wird die IP-Adresse des Systems angegeben, auf dem der entsprechende Docker-Container läuft. In unserem Beispiel hat er PC die IP 192.168.178.60, daher wird hier https://192.168.178.60:4433 angegeben. Wichtig ist hier der Port, der auch beim Starten des Docker-Containers angegeben wurde (4433).
  • Geheimer Schlüssel (freilassen, um zu deaktivieren): Hier ist das JWT-Token anzugeben, welches beim Starten des Docker-Containers angegeben wurde.
  • Alle anderen Felder kann man leer lassen.
ONLYOFFICE Einstellungen in Nextcloud

ONLYOFFICE Einstellungen in Nextcloud

Nach einem Klick auf Speichern sollte eine Erfolgsmeldung kommen und die Verbindung zwischen Nextcloud und ONLYOFFICE wurde erfolgreich konfiguriert.

Online-Office im Browser

In der Datei-Ansicht von Nextcloud können nun einfach Office-Dokumente angelegt werden bzw. hochgeladen werden. Mit einem Klick werden diese nun mit ONLYOFFICE geöffnet und man kann mit der Bearbeitung beginnen.

Online-Office mit Nextcloud und ONLYOFFICE

Online-Office mit Nextcloud und ONLYOFFICE

Update von ONLYOFFICE

Von Zeit zu Zeit erscheinen nun neue Versionen des Docker-Containers von ONLYOFFICE. Um hier ein Update durchzuführen, sind nur wenige Schritte erforderlich.

Zunächst muss die ID des laufenden Containers mit folgendem Befehl ermittelt werden:

docker ps

Der Container wird gestoppt und entfernt:

docker stop <Container-ID>
docker rm <Container-ID>

Die neue Version des Containers wird über diesen Befehl herunter geladen:

docker pull onlyoffice/documentserver

Nun kann der aktualisierte Container wie gewohnt gestartet werden:

docker run --name=ONLYOFFICEDOCKER -i -t -d -p 4433:443 -e JWT_ENABLED='true' -e JWT_SECRET='geheimes-secret' --restart=always -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver

Troubleshooting

Manchmal kann es passieren, dass die Verbindung zum ONLYOFFICE-Server nicht auf Anhieb klappen will. Die Probleme können aber meist relativ schnell aus dem Weg geräumt werden.

Fehler beim Aufruf von ONLYOFFICE über den Browser

Um zu prüfen, ob ONLYOFFICE ordnungsgemäß läuft, kann man die IP der Maschine direkt im Browser aufrufen (in diesem Beispiel: https://192.168.178.60:4433). Wenn hier nur eine Fehlermeldung erscheint, dass die Website nicht erreichbar ist, sollte der laufende Docker-Container überprüft werden.

Zunächst wird die Container-ID ermittelt:

docker ps

Anschließend kann man sich die Logs des Containers anzeigen lassen:

docker logs <Container-ID>

Hier kann es vorkommen, dass ähnliche Meldungen wie diese angezeigt werden:

* Starting PostgreSQL 9.5 database server                               [ OK ]
* Starting RabbitMQ Messaging Server rabbitmq-server                    [ OK ]
Starting redis-server: redis-server.
Starting supervisor: supervisord.
* Starting nginx nginx                                                  [ OK ]
Generating AllFonts.js, please wait...Done
onlyoffice-documentserver:docservice: stopped
onlyoffice-documentserver:docservice: started
onlyoffice-documentserver:converter: stopped
onlyoffice-documentserver:converter: started
* Reloading nginx configuration nginx                                   [ OK ]
root@35b07178f48a:/#  * Starting PostgreSQL 9.5 database server          [ OK ]
* Starting RabbitMQ Messaging Server rabbitmq-server                            * FAILED - check /var/log/rabbitmq/startup_\{log, _err\}
                                                                         [fail]
Starting redis-server: redis-server.
Waiting for connection to the localhost host on port 5672
Waiting for connection to the localhost host on port 5672
Waiting for connection to the localhost host on port 5672
Waiting for connection to the localhost host on port 5672

Hier gibt es momentan wohl noch hin und wieder Probleme (siehe GitHub-Issues hier und hier). In diesem Fall hilft es meistens, den Docker-Container oder besser noch den ganzen PC neu zu starten (zur Not auch mehrmals).

Fehlermeldung beim Einbinden von ONLYOFFICE in Nextcloud

Wenn beim Konfigurieren der Verbindung zum ONLYOFFICE-Server eine Fehlermeldung auftritt (Fehler beim Anschließen (Bad Request oder Timeout Fehlermeldung)), sollte man zunächst mal das Log von Nextcloud überprüfen. Hier sollte meinst ein Hinweis auf das konkrete Problem zu finden sein.

Folgende Log-Meldung weist z.B. auf die fehlende Anpassung der config.php von Nextcloud in Bezug auf ONLYOFFICE hin (siehe hier):

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed at /var/www/nextcloud/apps/onlyoffice/lib/documentservice.php#351

Fazit

Dank des verfügbaren Docker-Container für ONLYOFFICE kann Nextcloud schnell und einfach um Online-Office-Funktionen ergänzt werden. Da prinzipiell auch kein zweiter PC/VM zum Einsatz kommen muss, ist dies eine sinnvolle Erweiterung jeder Nextcloud-Installation.

Ihr konntet ONLYOFFICE mit diesem Tutorial erfolgreich installieren oder hattet mit der Vorgehensweise noch Probleme? Oder bevorzugt ihr Collabora als Online-Office-Lösung für Nextcloud? Dann hinterlasst doch einfach einen Kommentar.

Weiterführende Artikel

Links

]]>
https://decatec.de/home-server/nextcloud-online-office-mit-onlyoffice/feed/ 37
Nextcloud: Web-Mail mit RainLoop https://decatec.de/home-server/nextcloud-web-mail-mit-rainloop/ https://decatec.de/home-server/nextcloud-web-mail-mit-rainloop/#comments Wed, 13 Jun 2018 14:03:42 +0000 https://decatec.de/?p=4341 Nextcloud LogoDie Cloud ist heutzutage ja der zentrale Dreh- und Angelpunkt in der digitalen Welt. Wer es mit Nextcloud geschafft hat, sich aus den Fängen der großen Cloud-Anbieter zu befreien, der möchte sicherlich möglichst viele Features auch über die eigene Cloud nutzen. Neben der Verwaltung von Dateien, Kontakten, Kalendern, u.v.m., ist es mit der App RainLoop auch möglich, die komplette E-Mail-Kommunikation in die selbstgehostete Cloud zu verlegen.

 

 

Update-Historie (letztes Update: 29.09.2018)
  • 29.09.2018:
    • Die RainLoop App für Nextcloud wird nun doch wieder weiterentwickelt und ist somit auch für Nextcloud 14 verfügbar.
  • 23.07.2018:
    • Hinweis mit aufgenommen, dass die RainLoop App für Nextcloud vermutlich nicht mehr weiterentwickelt werden wird.

Web-Mail mit Nextcloud: RainLoop oder Mail-App

Für das Senden und Empfangen von E-Mails stehen im Nextcloud App Store zwei unterschiedliche Apps bereit: RainLoop und die Nextcloud-eigene App Mail.

„Mail“ ist dabei (im Moment noch) ein ziemlich rudimentärer Webmailer mit einem recht geringen Funktionsumfang (beispielsweise ist es damit nicht möglich, E-Mail-Signaturen zu verwenden). Evtl. werden fehlende Funktionen in Zukunft noch nachgereicht. Im Moment taugt die App (meiner Meinung nach) allerdings noch nicht dazu, einen „richtigen“ E-Mail-Client zu ersetzen.

Einen sehr viel größeren Funktionsumfang bietet RainLoop. Dieser Webmailer ist schon seit einiger Zeit auf dem Markt und ist ursprünglich eine eigenständige Webanwendung, die (wie Nextcloud) im Normalfall selbst gehostet wird. Mit der Nextcloud-App gibt es aber nun die Möglichkeit, RainLoop innerhalb von Nextcloud zu nutzen, so dass „alles aus einem Guss wirkt“.

Welche der beiden Webmailer nun der bessere ist, kann man pauschal nicht sagen. Am besten einfach mal beide Apps ausprobieren.

In diesem Artikel soll es nun um die Installation und Konfiguration von RainLoop in Nextcloud gehen. Die Einrichtung ist zwar relativ einfach, dennoch gilt es, einige Schritte zu beachten.

Installation

RainLoop muss nicht separat installiert werden, sondern kann einfach über den Nextcloud App Store bezogen werden. Dazu einfach im App Store unter der Kategorie Kommunikation nach RainLoop suchen und aktivieren.

Nach ein paar Augenblicken sollte die App installiert worden sein und man findet in der Nextcloud-Menüleiste einen zusätzlichen Eintrag für Mail.

Konfiguration

Bevor man RainLoop nun nutzen kann, muss die Anwendung zunächst einmal konfiguriert werden. Dazu findet man in Nextcloud in den Admin-Einstellungen unter Zusätzliche Einstellungen den Punkt Go to RainLoop Webmail admin panel.

Nach einem Klick meldet man sich nun an:

  • Benutzername: admin
  • Passwort: 12345

Ja, dies ist ein Standard-Passwort, dass immer gleich ist und sofort geändert werden sollte. Dazu in das Menü Security wechseln und ein neues Passwort unter Admin Panel Access Credentials vergeben.

Nach diesem vielleicht wichtigsten Schritt können sämtliche anderen Optionen nach Bedarf gesetzt werden. Beispielsweise empfiehlt es sich, unter General Deutsch als Sprache zu wählen, damit die Benutzer eine Deutsche Oberfläche präsentiert bekommen.

Einen Punkt sollte man noch gleich mit anpassen: RainLoop präsentiert auf der Admin-Seite eine Warnung:

Warnung!

RainLoop data folder is accessible. Please configure your web server to hide the data folder from external access. Read more here: https://www.rainloop.net/docs/installation

Hintergrund ist, dass das Datenverzeichnis von RainLoop aus Sicherheitsgründen nicht direkt aus dem Internet erreichbar sein sollte, sondern nur über die Anwendung selbst.

Hier ist es notwendig, eine kleine Anpassung an der Webserver-Konfiguration vorzunehmen. Ich gehe im Folgenden davon aus, dass der Webserver wie im Artikel Nextcloud auf Ubuntu Server 18.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban eingerichtet wurde. Wenn ein anderer Webserver oder eine andere Konfiguration zum Einsatz kommt, müssen die folgenden Schritte evtl. noch ein wenig angepasst werden.

Die Änderung muss im vHost für Nextcloud vorgenommen werden:

nano /etc/nginx/conf.d/meinedomain.de_nextcloud.conf

Hier fügen wir unter dem letzten location-Block (aber noch vor der schließenden Klammer des server-Blocks) folgenden Inhalt ein:

location ^~ /nextcloud/apps/rainloop/app/data {
    deny all;
}

Durch die Änderungen am vHost muss der Webserver noch neu gestartet werden:

service nginx restart

Nun kann man wieder zu RainLoop wechseln und nach einem Refresh der Seite (STRG + F5) sollte die Warnung verschwunden sein.

Einrichtung von E-Mail-Konten

Die Einrichtung von E-Mail-Konten unterscheidet RainLoop von vielen anderen Mail-Clients. Um dem Benutzer möglichst viel Arbeit beim Hinzufügen von Accounts abzunehmen, muss der Administrator Mail-Domains vordefinieren. Die Benutzer können sich daraufhin ganz einfach mit ihrer Mail-Adresse anmelden, ohne die üblichen (technischen) Details wie IMAP/SMTP-Server-Adressen, Ports, etc. kennen zu müssen.

Dazu einfach in der Admin-Oberfläche von RainLoop den Punkt Domains wählen. Hier ist Google Mail bereits aktiv, so dass @gmail.com Adressen ohne weiteres Zutun funktionieren sollten. Wenn man nun E-Mail-Adressen von anderen Anbietern (z.B. GMX, Web.de, etc.) nutzen möchte, dann muss man diese hier als Domain konfigurieren.

Dazu einfach den Button Domain hinzufügen klicken. Wichtig ist nun, dass die komplette Domain als Name eingetragen wird. Bei GMX wäre dies also „gmx.de“ und eben nicht „gmx“, ansonsten ist eine Anmeldung an RainLoop mit einer@gmx.de Adresse nachher nicht möglich. An dieser Stelle können übrigens auch Wildcards verwendet werden: Möchte man daher sowohl Anmeldungen mit @gmx.de und @gmx.net zulassen, kann als Domain einfach „gmx.*“ eingetragen werden.
Die weitere Konfiguration (IMAP- und SMTP-Server, sowie die dazugehörigen Ports, etc.) ist abhängig vom Mail-Provider. Diese Informationen findet man häufig auf den Hilfeseiten der jeweiligen Anbieter (z.B. Serverdaten für IMAP und SMTP bei GMX).

RainLoop: Domain für GMX hinzufügen

RainLoop: Domain für GMX hinzufügen

Webmail-Oberfläche

Die Anmeldung an RainLoop ist für Benutzer dank der „Admin-Vorarbeit“ nun besonders einfach: Im Nextcloud-Menü einfach das Mail-Symbol wählen und sich mit der entsprechenden Mail-Adresse und dem Passwort des Mail-Accounts (nicht das Passwort des Nextcloud-Accounts) einloggen. Nun können sofort Mail geschrieben und empfangen werden.

Bessere Integration in Nextcloud

Leider ist RainLoop als eigenständige Webanwendung (noch) nicht so gut in Nextcloud integriert. Dies merkt man z.B., wenn man eine Mail verfassen möchte: Hier kann man nicht aus den bestehenden Kontakten aus Nextcloud wählen.

Die Integration mit Nextcloud kann daher nicht etwas verbessert werden. RainLoop kann dabei nicht direkt auf die Nextcloud-Kontakte zugreifen, sondern verwaltet diese in einer eigenen Datenbank. Diese muss dazu erst einmal auf der Kommandozeile angelegt werden:

mysql -u root -p

Nach der Eingabe des Root-Passworts kann die Datenbank für RainLoop angelegt werden:

create database rainloop_db;
create user rainloop_db_user@localhost identified by 'MeInPasSw0rT';
grant all privileges on rainloop_db.* to rainloop_db_user@localhost;
flush privileges;
exit;

Zurück in der Admin Oberfläche findet man unter dem Punkt Kontakte die Einstellungen zur Verwaltung der Kontakte.

Hier konfiguriert man zunächst einmal die Datenbank-Verbindung:

  • Typ: MySQL
  • DSN: mysql:host=localhost;port=3306;dbname=rainloop_db
  • Benutzer: rainloop_db_user
  • Passwort: Das oben vergebene Passwort

Nun sollte bei einem Klick auf Testen der Button nach ein paar Augenblicken grün werden. Das ist das Zeichen, dass die Datenbank-Verbindung erfolgreich aufgebaut werden konnte.

Zu guter Letzt aktiviert man nun weiter oben noch die Optionen Kontakte aktivieren (damit RainLoop überhaupt Kontakte unterstützt) und Kontakte-Synchronisierung erlauben (mit externem CardDAV-Server). Letzteres wird benötigt, damit die Synchronisierung mit Nextcloud funktioniert.

Nun loggt man sich wieder über Nextcloud auf einen Mail-Account bei RainLoop ein. In den Optionen des Benutzers (Zahnrad unten links) findet man nun den Menüpunkt Kontakte. Hier kann man zunächst einmal die Synchronisierung mit Nextcloud ermöglichen (Remote-Synchronisierung aktivieren).

Die CardDAV-URL findet man in der Kontakte-App von Nextcloud: Einfach beim gewünschten Adressbuch auf das Menü klicken (die drei Punkte) und den Eintrag Link kopieren wählen.

CardDAV-URL in Nextcloud ermitteln

CardDAV-URL in Nextcloud ermitteln

Diese URL kann man dann nebst Benutzername und Passwort (von Nextcloud) in den RainLoop-Kontakte-Einstellungen hinterlegen.

RainLoop: Kontakte (Einstellungen)

RainLoop: Kontakte (Einstellungen)

Die obere Option (Empfänger automatisch zu Ihrem Adressbuch hinzuzufügen) ist ein zweischneidiges Schwert: Auf der einen Seite ist es sicher praktisch, wenn Mail-Adressen automatisch nach Nextcloud synchronisiert werden, auf der anderen Seite werden kann sämtliche Empfänger-Adressen ungefragt zu Nextcloud übernommen. Wer oftmals Mails an die unterschiedlichsten Empfänger versendet, will diese Option wohl deaktivieren, da ansonsten die Kontakte-App von Nextcloud regelrecht „zugemüllt“ wird.

Nun können die Kontakte zwischen RainLoop und Nextcloud einfach über den Kontakte-Button und das erweiterte Menü (drei Balken) in RainLoop synchronisiert werden.

RainLoop: Kontakte synchronisieren

RainLoop: Kontakte synchronisieren

Fazit

RainLoop ist ein fortschrittlicher Webmailer mit einem gut durchdachten Konzept und einfacher Bedienung. Zwar merkt man hier und da, dass RainLoop als eigenständige Web-Anwendung neben Nextcloud läuft, dennoch klinkt sich der Webmailer nahtlos in die eigene Nextcloud ein.

Wer seine Mails direkt über Nextcloud verwalten möchte und keinen „schwergewichtigen“ E-Mail-Client wie Outlook oder Thunderbird nutzen möchte, der wird mit RainLoop auf jeden Fall auf seine Kosten kommen.

Weiterführende Artikel

Links

]]>
https://decatec.de/home-server/nextcloud-web-mail-mit-rainloop/feed/ 7