[Nextcloud] Installation von Fulltextsearch

letztes Update: 26.03.2021

Heute möchte ich Euch erklären, wie ich bei meiner Nextcloud-Installation die neue Suche „Fulltextsearch“ eingerichtet habe. Fulltextsearch ersetzt damit die bisherige erweiterte Suche Nextant. Mit beiden Plugins ist es möglich, PDF Dateien Bilddateien zu durchsuchen und daraus Index Dateien zu erstellen.
Damit das ganze läuft sind ein paar Schritte in der SSH Konsole notwendig und die ganze Prozedur ist in ca. 20 Minuten abgeschlossen.
Auf geht’s!

Packetquellen aktualisieren und ELS herunterladen

Als erstes müssen die Packetquellen angepasst und ein paar Dateien installiert werden.
Schritt 1:

sudo apt-get install openjdk-8-jre
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.0.deb
sudo dpkg -i elasticsearch-7.12.0.deb sudo /etc/init.d/elasticsearch start

oder

apt install elasticsearch

Jetzt wird ein Plugin für Elasticsearch heruntergeladen und installiert.
Dazu diesen Downloadlink besuchen und den Link zur letzten Version per Email zukommen lassen. (aktuell Version 7.12.0)
Den Link aus der Email nun kopieren und folgendes Kommando ausführen.

cd /usr/share/elasticsearch
bin/elasticsearch-plugin install file:///pfad/zur/readonlyrest-7.12.0.zip

oder

bin/elasticsearch-plugin install file:///httplink/zur/datei/readonylrest-7.12.0.zip

Hinweis: Nach jedem Update muss dieser Schritt wiederholt werden. Erst das Elasticsearch Update machen, dann readonlyrest deinstallieren, installieren. Das gleiche mit ingest-attachment.

bin/elasticsearch-plugin remove ingest-attachment
bin/elasticsearch-plugin remove readonlyrest

Konfigurationsdatei erstellen

Nach der Installation muss eine Datei erstelltHinweis: Nach jedem Update muss dieser Schritt wiederholt werden. Erst das Elasticsearch Update machen, dann readonlyrest deinstallieren, installieren. Das gleiche mit ingest-attachment. werden, damit Fulltextsearch mit Elasticsearch kommunizieren kann.

vim /etc/elasticsearch/readonlyrest.yml

readonlyrest:
  access_control_rules:
  - name: erlaubt nur der Cloud zugriff auf cloud_index
    groups: ["cloud"]
    indices: ["cloud_index"]
  users:
  - username: cloudIndex
    auth_key: cloudIndex:SuperPassword   #dieser Eintrag kommt in die Cloud
    groups: ["cloud"] 

X Pack Security einrichten

Nach einem Update auf Elasticsearch 6.3.1 musste ich in der Datei /etc/elasticsearch/elasticsearch.yml

xpack.security.enabled: false

einfügen, damit das ganze wieder starten konnte.
Zuvor war der Log damit gefüllt und Nextcloud gab mir die Meldung aus „no Alive Clusters“

[2018-07-10T07:55:43,681][INFO ][t.b.r.c.s.SettingsPoller ] [CLUSTERWIDE SETTINGS] Cluster not ready... [2018-07-10T07:55:44,682][INFO ][t.b.r.c.s.SettingsPoller ] [CLUSTERWIDE SETTINGS] Cluster not ready...

Quelle:forum.readonlyrest.com

Maximale RAM Nutzung einstellen

Damit nicht Java mehr RAM als nötig blockiert kann man die Default Einstellungen überschreiben. Hier gilt die Regel nicht mehr als 50% des maximal verfügbaren RAM auf dem System. Bei sind es 32 GB gesamt, also 16 Gb RAM im Maximum. Da aber noch andere Prozesse laufen auf dem Server habe ich diesen Wert runter gesetzt auf 8GB.

nano /etc/elasticsearch/jvm.options.d/jvm.options

Darin folgendes eintragen, und Elasticsearch neu starten.

-Xms8g
-Xmx8g

Sollte dann so aus sehen im Terminal

Nach der Änderung

Notiz:
Denkt hier auch einen Nutzernamen aus und ersetzt „username“ mit diesem. Das gleiche gilt für das Passwort. Generiert euch eins (am besten mit pwgen -a -y 12) und setzt dieses für password ein.
In diesem Beispiel oben wird eine Cloud konnektiert mit Elasticsearch.

Ingest Attachment installieren

Zum Schluss wird noch ein Plugin zum indexieren von PDF Dateien installiert:

sudo bin/elasticsearch-plugin install ingest-attachment

Editiert in der /etc/elasticsearch/elasticsearch.yml den Host und ändert diesen in eure IP Adresse des Servers.
abschliessend noch die Logdatei beschreibbar machen sonst startet Elasticsearch nicht.

chown -R elasticsearch:elasticsearch /var/log/elasticsearch

Startet anschließend Elasticsearch neu damit die Änderungen übernommen werden.

service elasticsearch restart

Kontrolliert abschließend ob Elasticsearch auf den Port 9200 und Java auf Port 9300 lauscht.

netstat - tulpn | grep 9200
netstat - tulpn | grep 9300

Zurück in der Cloud müssen alle 3 Plugins installiert und aktiviert werden.
Im Appstore zu finden unter Werkzeuge

[!][](/content/images/wordpress/2018/01/Bildschirmfoto-vom-2018-01-23-12-35-11.png)

In der Nextcloud FTS konfigurieren

In den Einstellungen von FullTextSearch im Feld „Adress of Servlet:“ dies eintragen: (Hier brauchen wir den Nutzernamen und das Passwort aus der readonlyrest.yml Datei)

http://cloudIndex:SuperPassword@localhost:9200/

unter Index tragen wir folgendes ein:

my_index

Damit wäre die Installation fertig und es lässt sich nun der Index starten mit: (Hinweis: php8.0 wird nicht unterstützt beim Index. Index mit php7.4 -f starten)

sudo - u www-data php occ fulltextsearch:index

Nach dem ersten kompletten Index werden alle neuen Dateien automatisch indexiert.
Wenn euch was auffällt was nicht passt, oder hier irgendwo hängen bleibt, schreibt es in die Kommentare, würde mich freuen ?

Installation via Docker-compose und Docker

Alternativ ist auch ein Setup in Docker Containern möglich. Erstellt zuerst ein Verzeichnis, bei mir ist es /opt/docker-ncsearch

sudo mkdir -p /opt/docker-ncsearch

Danach wird in diesem Ordner eine YML und ein Dockerfile erstellt. mit folgendem Inhalt.

sudo vi /opt/docker-ncsearch/Dockerfile

FROM docker.elastic.co/elasticsearch/elasticsearch:7.12.0
RUN bin/elasticsearch-plugin install --batch ingest-attachment

alternativ:

Das sorgt dafür, dass das Image immer basierend auf elasticsearch:7.11.0 ist und ein Plugin (ingest-Attachment) installiert wird.

Als nächstes wird das File docker-compose.yml erstellt.

echo "vm.max_map_count=262144" & & /etc/sysctl.conf & & sysctl -p curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose & & chmod +x /usr/local/bin/docker-compose mkdir -p /opt/docker-ncsearch & & cd /opt/docker-ncsearch

Docker-compose.yml anpassen

Damit Daten erhalten bleiben sollten ein paar Pfade angepasst werden in der docker-comose.yml.
Unter enviroment „ES_JAVA_OPTS=-Xms750m -Xmx750m“ hinzufügen und unter volumes den Pfad anpassen wo die Daten gespeichert werden sollen.

version: '2.2'
    services:
      elasticsearch1:
        build: ./elasticsearch
        container_name: esnode1
        restart: always
        environment:
          - cluster.name=ncsearch
          - bootstrap.memory_lock=true
          - discovery.type=single-node
          - "ES_JAVA_OPTS=-Xms750m -Xmx750m"
          - "network.host=0.0.0.0"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        # location for persistent data
        volumes:
          - /opt/docker-ncsearch/nc-data/:/usr/share/elasticsearch/data
        ports: # make elasticsearch reachable on the host itself, when Nextcloud running on the host
          - "127.0.0.1:9200:9200"
        expose:  # make elasticsearch reachable in the internal docker network
          - "9200" # direct elasticsearch connection
        networks:
          ncsearch-network:
            ipv4_address: 172.22.2.235
            aliases:
              - elasticsearch1
[...]

Quelle: Telegram Nextcloud Gruppe

Nun das File mit docker-compose up -d asuführen.
Achließend müsste Fulltextsearch mit allem drum und dran laufen und auf den Port lauschen.

Ihr könnt nun mein Setup bei github herunterladen!

Quelle: Github