Elasticsearch

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen

Elasticsearch

Elasticsearch ist ein weit verbreiteter Suchserver für die Indizierung von Volltext oder von Log-Dateien.

Nach einer Lizenzänderung im Jahr 2021 war Elasticsearch leider keine freie Software im Sinne der Opensource Initiative (OSI) mehr. Im Jahr 2024 wurde die Lizenz nun aber wieder geändert, auf AGPL [1].

Dieses Dokument leitet zur Installation eines Elasticsearch-Server an, der am Localhost-Interface erreichbar ist und für Anwendungen auf dem Server (zum Beispiel Nextcloud mit Volltextsuche) genutzt werden kann. Durch eine Proxy-Konfiguration in einer .htaccess-Datei kann der Server über das Internet erreichbar gemacht werden.

Installation

Für den Dienst wird in HSAdmin ein eigener Shell-User xyz00-elastic mit der Shell /bin/bash angelegt.

Im ersten Schritt wird die Software (als tar.gz-Archiv) heruntergeladen und entpackt.

Die neueste Version kann auf https://www.elastic.co/de/downloads/elasticsearch in Erfahrung gebracht werden.

wget "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.2-linux-x86_64.tar.gz"
tar xzf elasticsearch-8.15.2-linux-x86_64.tar.gz
rm elasticsearch-8.15.2-linux-x86_64.tar.gz

Für zukünftige Updates ist zu empfehlen, die Verzeichnisse config, data und logs separat anzulegen:

mkdir ~/elastic/
mv elasticsearch-8.15.2/config elastic
mkdir ~/elastic/logs
mkdir ~/elastic/data

Wir setzen einen symbolischen Link, um bei Updates nicht alle Skripte ändern zu müssen:

ln -s elasticsearch-8.15.2 elasticsearch

In der Konfigurationdatei ~/elastic/config/elasticsearch.yml werden folgende Optionen gesetzt: Die beiden Ports, auf denen das System erreichbar ist und die security-Option für das Passwort-Login. Außerdem die Pfade für logs und data.

http.port: 39200
transport.tcp.port: 39202
xpack.security.enabled: true
discovery.type: single-node
path.data: /home/pacs/xyz00/users/elastic/elastic/data
path.logs: /home/pacs/xyz00/users/elastic/elastic/logs

Dann wird der Dienst provisorisch gestartet.

cd ~/elasticsearch
export ES_PATH_CONF=$HOME/elastic/config
ES_JAVA_OPTS="-Xms1g -Xmx1g" ./bin/elasticsearch

In einer zweiten Shell erzeuge ich mit dem Kommando elasticsearch-setup-passwords zufällige Passworte für die vordefinierten Account in Elasticsearch:

cd ~/elasticsearch
export ES_PATH_CONF=$HOME/elastic/config
./bin/elasticsearch-setup-passwords auto

Die Ausgabe mit den generierten Passwörtern sichern!

Für Nextcloud ist noch das Plugin ingest-attachment Plugin erforderlich:

export ES_PATH_CONF=$HOME/elastic/config
cd elasticsearch/
./bin/elasticsearch-plugin install ingest-attachment
-> Installing ingest-attachment
-> Downloading ingest-attachment from elastic
[=================================================] 100%   
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessClassInPackage.sun.java2d.cmm.kcms
* java.lang.RuntimePermission accessDeclaredMembers
* java.lang.RuntimePermission getClassLoader
* java.lang.reflect.ReflectPermission suppressAccessChecks
* java.security.SecurityPermission createAccessControlContext
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.

Continue with installation? [y/N]y
-> Installed ingest-attachment
-> Please restart Elasticsearch to activate any plugins installed

Danach sollte Elasticsearch neugestartet werden.

Systemd Service

Wir konfigurieren ElasticSearch als Systemd Dienst, um bei Neustarts des Servers automatisch gestartet zu werden:

~/.config/systemd/user/elasticsearch.service

[Unit]
Description=ElasticSearch
After=network.target

[Service]
WorkingDirectory=%h/elasticsearch
Environment="ES_JAVA_OPTS=-Xms512m -Xmx512m"
Environment="ES_PATH_CONF=%h/elastic/config"
ExecStart=%h/elasticsearch/bin/elasticsearch
StandardOutput=append:%h/var/log/elasticsearch.log
StandardError=inherit
Restart=always
PrivateTmp=true
NoNewPrivileges=true

[Install]
WantedBy=default.target

Diese Schritte werden durchgeführt, um den Dienst zu aktivieren:

mkdir -p ~/var/log
systemctl --user enable elasticsearch --now

Update durchführen

Siehe auch die Anleitungen:

Dieses Vorgehensweise hat bei mir für das Upgrade von 8.15.0 auf 8.15.2 funktioniert. Bitte am besten erst auf einer Testinstallation testen!

als Benutzer xyz00-elastic:

# TODO: neue tar.gz Datei herunterladen und entpacken, siehe oben. 
#      Es gibt ein neues Verzeichnis $HOME/elasticsearch-8.15.2
systemctl --user stop elasticsearch

# TODO: Falls nicht mit separaten Verzeichnissen gearbeitet wird, 
#       muss jetzt config und data und logs vom alten elasticsearch
#       in das neue elasticsearch Verzeichnis verschoben werden.
export OLD=elasticsearch-8.15.0
export NEW=elasticsearch-8.15.2
cp -R $OLD/config $NEW
mv $OLD/data $NEW
mv $OLD/logs $NEW

# TODO: Falls Plugins verwendet werden, müssen diese wieder
#       installiert werden. Siehe oben.

# symbolischen Link umbiegen
rm elasticsearch
ln -s $NEW elasticsearch

#  Elasticsearch wieder starten
systemctl --user start elasticsearch