Volltextsuche für Nextcloud mit Elasicsearch im Docker-Container

Hallo zusammen,

Mathias @rettich hat mich gebeten, mein Setup hier reinzupacken… deshalb: Here you are :wink:

Ich verwende grundsätzlich die Standard-Images, aber weil ein paar Anpassungen sein müssen, erweitere ich die.

Meine Nextcloud-Umgebung besteht aus

  • Datenbank (mariadb)
  • redis
  • elasticsearch für die Volltextsuche
  • nextcloud
  • (onlyoffice)

z.B. der Nextclout-Container wird mit folgendem Dockerfile gebaut:

FROM nextcloud:26.0.3
RUN apt update && apt install -y libmagickcore-6.q16-6-extra libreoffice
COPY ./opcache-recommended.ini /usr/local/etc/php/conf.d/opcache-recommended.ini

wie man sieht, installiere ich zwei Pakete nach, die ich gerne haben möchte:

  • libmagickcore weil sonst die Nextcloud mosert, dass irgendwelche Vorschauen nicht gezeigt werden können (vielleicht ist das mittlerweile auch schon im Standardimage…)
  • libreoffice, weil ich gerne in Workflows automatisch doc, docx und odt Dateien nach PDF konvertieren lassen möchte

Außerdem kopiere ich beim Bau noch die angepasste Config für den opcache in das Image, damit ich da die Parameter erhöhen kann, falls ich wieder mal angemault werde, weil sie zu klein angesetzt sind.

Für die Volltextsuche brauche ich eine elasticsearch-Instanz, die ich mit folgendem Dockerfile aus dem offiziellen Image baue:

FROM docker.elastic.co/elasticsearch/elasticsearch:7.15.0
RUN yes | /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment

Ich weiß nicht mehr genau, wofür dieses Plugin notwendig war, aber wenn ich mich nicht schwer irre, hat die Indizierung des Datenbestandes ohne dieses nicht funktioniert.

Die Konfiguration an sich ist danach ganz einfach:

  • Container bauen und starten
  • in Nextcloud die drei Apps „Full text search“, „Full text search - Files“ und „Full text search - Elasticsearch Platform“ installieren
  • in den Verwaltungseinstellungen von „Volltextsuche“ die eigene Konfiguration eintragen:
    • Suchplattform: Elasticsearch
    • Adresse des Servlets: http://nameDesElasticSearchServers:9200
    • Index: ist wohl beliebig, bei mir steht drin „morz_index“ - ‚MORZ‘ ist meine Schule…
    • Analyzer tokenizer: standard
  • Außerdem nach eigenem Gusto, was alles berücksichtigt werden soll. Bei mir z.B.:
    • Lokale Dateien: Ja
    • Externe Dateien: „weder Pfad noch Inhalt indexieren“
    • Gruppenordner: Ja
    • Maximale Dateigröße: 30MB
    • PDF indizieren: Ja
    • Office-Dateien indizieren: Ja

möglicherweise muss für „Office-Dateien indizieren“ libreoffice installiert sein. Da das bei mir für andere Zwecke ohnehin schon der Fall ist, kann ich das weder sicher sagen noch ausschließen.

Joa… das wars eigenltich schon.
Wenn alles installiert ist, muss man einmalig den Index erstellen lassen (das dauert SEHR lange und läuft wohl am Besten ab Freitag mittag, wenn nicht mehr so viele Leute eine performante Nextcloud benötigen :wink:

Angestoßen wird der Vorgang mit „occ fulltextsearch:index“

Bei der erstinbetriebnahme hat mir Carstens Artikel geholfen… hier: Volltextsuche mit Nextcloud - Carsten Rieger IT-Services

Soweit mal :slight_smile: Have fun!
LG Jesko

5 „Gefällt mir“

Hallo Jesko,
klasse :+1: Vielen Dank schon mal!!!
Gruß,
Mathias

Hallo zusammen,
bei mir läuft jetzt elasticsearch in der Netxtcloud. Tolle Sache :champagne:

unsere Nextcloud läuft auf unserem Schulserver und spiegelt die Benutzerhomes in der Nextcloud. Dateien die in der Nextcloud abgelegt werden liegen also auf dem Server im Homeverzeichnis des Benutzers. Es liegen also so gut wie keine Daten im Dockercontainer der Nextcloud.
Wie ich gesehen habe, hat das auch den ein oder anderen Nachteil. Manche Benutzer speichern ganze Klett-, Schroedel-, …, -CDs in ihren Home-Verzeichnissen. Und das wird alles indexiert, was ziemlich lange dauert. Wenn man solche Verzeichniees nicht indexieren möchte, muss man lediglich die leere Datei .noindex in diesem Verzeichnis anlegen. Danach wird das Verzeichnis mit allen Unterverzeichnissen nicht mehr indexiert.

In meinem Fall habe ich einen kleinen cron-Job eingerichtet, der von Zeit zu Zeit das kleine Skript ausführt:

#!/bin/bash
find /srv/samba/schools/default-school/ -type d -name ".*" -exec touch {}/.noindex \;
find /srv/samba/schools/default-school/ -type d -name "Einstellungen" -exec touch {}/.noindex \;
find /srv/samba/schools/default-school/ -type d -name "Arduino" -exec touch {}/.noindex \;
find /srv/samba/schools/default-school/ -type d -name "Green Line*" -exec touch {}/.noindex \;
find /srv/samba/schools/default-school/ -type d -name "LS CD*" -exec touch {}/.noindex \;

Gruß,
Mathias

Hi Matthias,
wie ist das denn dann mit dem Teilen / kollaborativ Arbeiten? Mir war in Erinnerung, dass das bei externem Speicher nicht klappt?
LG
Max

Hallo Max,
da hat’s tatsächlich Probleme gegeben. Die konnten dadurch gelöst werden, dass nur die Lehrer die Tauschverzeichniesse in der Nextcloud bekamen. Will man, dass die Schüler auf ein Tauschverzeichnis zugreifen können, muss man als Lehrer das entsprechende Verzeichnis in der Nextcloud mit den Schülern teilen. Das klappt dann (siehe hier).
Gruß,
Mathias

1 „Gefällt mir“