05 März, 2019Docker-compose | elasticsearch

[Nextcloud] Installation von Fulltextsearch

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.1.1.deb sudo dpkg -i elasticsearch-7.1.1.deb sudo /etc/init.d/elasticsearch start

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 71.1)
Den Link aus der Email nun kopieren und folgendes Kommando ausführen.

cd /usr/share/elasticsearch bin/elasticsearch-plugin install file:///<download_path>/readonlyrest-7.1.1.zip

oder

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

Konfigurationsdatei erstellen

Schaut das bei der Installation des Plugins immer der komplette Pfad angegeben wird! Also bin/elasticsearch-plugin install file:///usr/elasticsearch/readonlyrest-71.1.zip
Nach der Installation muss eine Datei erstellt werden, damit Fulltextsearch mit Elasticsearch kommunizieren kann.

vim /etc/elasticsearch/readonlyrest.yml
readonlyrest:   
  access_control_rules:   
  - name: Accept requests from cloud1 on my_index     
    groups: ["cloud1"]     
    indices: ["my_index"]   
  - name: Accept requests from cloud2 on another_index     
    groups: ["cloud2"]     
    indices: ["another_index"]   
  users:   
  - username: username      
    auth_key: username:password     
    groups: ["cloud1"]   
  - username: test     
    auth_key_sha1: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3     
    groups: ["cloud2"]

X Pack Security einrichten

Nach einem Update auf Elasticsearch 6.3.1 musste ich in der Datei 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

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.
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

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://username:[email protected]: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:

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.1.1 
RUN bin/elasticsearch-plugin install --batch ingest-attachment

Das sorgt dafür, dass das Image immer basierend auf elasticsearch:7.1.1 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

Gib der Anleitungn eine Bewertung!

[ratings]