Elasticsearch: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
(Link zu aktuellem Release. Anleitung für die Installation des Plugins ingest-attachment)
(monit => systemd, Elasticsearch Version 8)
 
(14 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:


Elasticsearch ist ein weit verbreiteter Suchserver für die Indizierung von Volltext oder von Log-Dateien.
Elasticsearch ist ein weit verbreiteter Suchserver für die Indizierung von Volltext oder von Log-Dateien.
Nach einer Lizenzänderung ist Elasticsearch leider keine freie Software im Sinne der Opensource Initiative (OSI) mehr.


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.
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 [https://www.elastic.co/de/blog/elasticsearch-is-open-source-again].
 
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 ==
== Installation ==
Zeile 12: Zeile 16:
Im ersten Schritt wird die Software (als ''tar.gz''-Archiv) heruntergeladen und entpackt.
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.
Die neueste Version kann auf https://www.elastic.co/de/downloads/elasticsearch in Erfahrung gebracht werden.  
 
<syntaxhighlight lang=shell>
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
</syntaxhighlight>
 
Für zukünftige Updates ist zu empfehlen, die Verzeichnisse config, data und logs separat anzulegen:
 
<syntaxhighlight lang=shell>
mkdir ~/elastic/
mv elasticsearch-8.15.2/config elastic
mkdir ~/elastic/logs
mkdir ~/elastic/data
</syntaxhighlight>


  wget "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.0-linux-x86_64.tar.gz"
Wir setzen einen symbolischen Link, um bei Updates nicht alle Skripte ändern zu müssen:
  tar xzf elasticsearch-7.13.0-linux-x86_64.tar.gz
  rm elasticsearch-7.13.0-linux-x86_64.tar.gz


In der Konfigurationdatei ''~/elasticsearch-7.13.0/config/elasticsearch.yml'' werden vier Optionen gesetzt. die beiden Ports, auf denen das System erreichbar ist und die ''security''-Option für das Passwort-Login.
<syntaxhighlight lang=shell>
ln -s elasticsearch-8.15.2 elasticsearch
</syntaxhighlight>


  http.port: 39200
In der Konfigurationdatei ''~/elastic/config/elasticsearch.yml'' werden folgende Optionen gesetzt:
  transport.tcp.port: 39202
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.
  xpack.security.enabled: true
 
  discovery.type: single-node
<syntaxhighlight lang=yaml line>
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
</syntaxhighlight>


Dann wird der Dienst provisorisch gestartet.  
Dann wird der Dienst provisorisch gestartet.  


  cd elasticsearch-7.13.0/
<syntaxhighlight lang=shell>
  ES_JAVA_OPTS="-Xms1g -Xmx1g" ./bin/elasticsearch
cd ~/elasticsearch
export ES_PATH_CONF=$HOME/elastic/config
ES_JAVA_OPTS="-Xms1g -Xmx1g" ./bin/elasticsearch
</syntaxhighlight>


In einer zweiten Shell erzeuge ich mit dem Kommando ''elasticsearch-setup-passwords'' zufällige Passworte für die vordefinierten Account in 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-7.13.0/
<syntaxhighlight lang=shell>
  ./bin/elasticsearch-setup-passwords auto
cd ~/elasticsearch
export ES_PATH_CONF=$HOME/elastic/config
./bin/elasticsearch-setup-passwords auto
</syntaxhighlight>


Die Ausgabe mit den generierten Passwörtern sichern!
Die Ausgabe mit den generierten Passwörtern sichern!
Zeile 39: Zeile 71:
Für Nextcloud ist noch das Plugin ingest-attachment Plugin erforderlich:
Für Nextcloud ist noch das Plugin ingest-attachment Plugin erforderlich:


  cd elasticsearch-7.13.0/
<syntaxhighlight lang=shell>
  ./bin/elasticsearch-plugin install ingest-attachment
export ES_PATH_CONF=$HOME/elastic/config
  -> Installing ingest-attachment
cd elasticsearch/
  -> Downloading ingest-attachment from elastic
./bin/elasticsearch-plugin install ingest-attachment
  [=================================================] 100%    
-> Installing ingest-attachment
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-> Downloading ingest-attachment from elastic
  @    WARNING: plugin requires additional permissions    @
[=================================================] 100%    
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  * java.lang.RuntimePermission accessClassInPackage.sun.java2d.cmm.kcms
@    WARNING: plugin requires additional permissions    @
  * java.lang.RuntimePermission accessDeclaredMembers
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  * java.lang.RuntimePermission getClassLoader
* java.lang.RuntimePermission accessClassInPackage.sun.java2d.cmm.kcms
  * java.lang.reflect.ReflectPermission suppressAccessChecks
* java.lang.RuntimePermission accessDeclaredMembers
  * java.security.SecurityPermission createAccessControlContext
* java.lang.RuntimePermission getClassLoader
  See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
* java.lang.reflect.ReflectPermission suppressAccessChecks
  for descriptions of what these permissions allow and the associated risks.
* java.security.SecurityPermission createAccessControlContext
 
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
  Continue with installation? [y/N]y
for descriptions of what these permissions allow and the associated risks.
  -> Installed ingest-attachment
 
  -> Please restart Elasticsearch to activate any plugins installed
Continue with installation? [y/N]y
-> Installed ingest-attachment
-> Please restart Elasticsearch to activate any plugins installed
</syntaxhighlight>


Danach sollte Elasticsearch neugestartet werden.
Danach sollte Elasticsearch neugestartet werden.


== Monitoring ==
== Systemd Service ==
 
Wir konfigurieren ElasticSearch als Systemd Dienst, um bei Neustarts des Servers automatisch gestartet zu werden:
 
''~/.config/systemd/user/elasticsearch.service''
 
<syntaxhighlight lang=shell line>
[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
</syntaxhighlight>


Ein Start- und ein Stop-Skript und eine Monit-Konfiguration sorgen für den automatischen Start des Dienstes nach einem Reboot.
Diese Schritte werden durchgeführt, um den Dienst zu aktivieren:


''~/bin/start-elastic''
<syntaxhighlight lang=shell line>
mkdir -p ~/var/log
systemctl --user enable elasticsearch --now
</syntaxhighlight>


  #!/bin/bash
== Update durchführen ==
  export HOME=/home/pacs/xyz00/users/elastic
  export ES_JAVA_OPTS="-Xms1g -Xmx1g"
  cd $HOME
  mkdir -p $HOME/var
  cd $HOME/elasticsearch-7.13.0
  exec ./bin/elasticsearch &
  echo $! >$HOME/var/elasticsearch.pid


''~/bin/stop-elastic''
Siehe auch die Anleitungen:
* https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-upgrade.html
* https://www.elastic.co/guide/en/elasticsearch/reference/current/rolling-upgrades.html


  #!/bin/bash
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!
  export HOME=/home/pacs/xyz00/users/elastic
  kill $( cat $HOME/var/elasticsearch.pid )


''~/.monitrc''
als Benutzer xyz00-elastic:


  set daemon 60 with start delay 10
<syntaxhighlight lang=shell line>
  set logfile /home/pacs/xyz00/users/elastic/var/monit.log
# TODO: neue tar.gz Datei herunterladen und entpacken, siehe oben.  
  set idfile /home/pacs/xyz00/users/elastic/var/monit.id
#      Es gibt ein neues Verzeichnis $HOME/elasticsearch-8.15.2
  set statefile /home/pacs/xyz00/users/elastic/var/monit.state
systemctl --user stop elasticsearch
  set mailserver localhost
  set mail-format { from: monit@xyz00.hostsharing.net }
  set httpd port 39008 address localhost
      allow elasticadmin:ein-monit-passwort
  check process elasticsearch with pidfile /home/pacs/xyz00/users/elastic/var/elasticsearch.pid
      start program "/home/pacs/xyz00/users/elastic/bin/start-elastic"
      stop program "/home/pacs/xyz00/users/elastic/bin/stop-elastic"


''crontab -l''
# 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


  # m h  dom mon dow  command
# TODO: Falls Plugins verwendet werden, müssen diese wieder
  HOME=/home/pacs/xyz00/users/elastic
#      installiert werden. Siehe oben.
  @reboot  /usr/bin/monit -c $HOME/.monitrc


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


#  Elasticsearch wieder starten
systemctl --user start elasticsearch
</syntaxhighlight>


----
----
Zeile 108: Zeile 168:
[[Kategorie:Installationsanleitungen]]
[[Kategorie:Installationsanleitungen]]
[[Kategorie:Software]]
[[Kategorie:Software]]
[[Kategorie:Java]]
[[Kategorie:Nextcloud]]

Aktuelle Version vom 8. Oktober 2024, 15:05 Uhr

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