Elasticsearch

0 70

Dauer: 15 Minuten
Schwierigkeit: Anfänger
Ziel: Elasticsearch läuft und antwortet auf http://localhost:9200


Was du am Ende dieses Tutorials erreicht hast

✅ Docker ist installiert und läuft
✅ Elasticsearch Container läuft
✅ Du kannst auf http://localhost:9200 zugreifen
✅ Du siehst die Antwort „You Know, for Search“


Schritt 1: Docker installieren (falls noch nicht vorhanden)

Prüfe ob Docker bereits installiert ist

Öffne dein Terminal (Mac/Linux) oder PowerShell (Windows) und tippe:

bash

docker --version
```

**✅ Wenn du eine Ausgabe wie diese siehst:**
```
Docker version 24.0.7, build afdd53b
```
→ **Spring zu Schritt 2!**

**❌ Wenn du einen Fehler siehst:**
```
docker: command not found

Installiere Docker jetzt:


Docker installieren

Windows & Mac:

  1. Gehe zu: https://www.docker.com/products/docker-desktop
  2. Klicke auf „Download for Windows“ oder „Download for Mac“
  3. Führe die heruntergeladene Datei aus
  4. Folge dem Installationsassistenten (Standard-Einstellungen sind OK)
  5. Starte deinen Computer neu (wichtig!)
  6. Starte „Docker Desktop“ aus dem Startmenü/Applications

Linux (Ubuntu/Debian):

bash

<em># Docker installieren</em>
sudo apt-get update
sudo apt-get install docker.io docker-compose

<em># Deinen User zur Docker-Gruppe hinzufügen (damit du kein sudo brauchst)</em>
sudo usermod -aG docker $USER

<em># Neu anmelden (oder Computer neu starten)</em>

Docker testen

Nach der Installation, teste erneut:

bash

docker --version

Sollte jetzt funktionieren!

Teste auch ob Docker läuft:

bash

docker ps
```

**Erwartete Ausgabe:**
```
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Wenn die Liste leer ist → Perfekt! Docker läuft.

Wenn Fehler „Cannot connect to the Docker daemon“:

  • Windows/Mac: Starte Docker Desktop aus dem Startmenü
  • Linux: sudo systemctl start docker

Schritt 2: Docker-Netzwerk erstellen

Warum brauchen wir ein Netzwerk?

Elasticsearch und Kibana (kommt später) müssen miteinander sprechen können.
Ein Docker-Netzwerk ist wie ein virtuelles LAN-Kabel zwischen den Containern.

Netzwerk erstellen

bash

docker network create elastic
```

**Erwartete Ausgabe:**
```
f3d6b7c8e9a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6

(Eine lange ID → Das ist normal!)

Überprüfen

bash

docker network ls
```

**Du solltest jetzt "elastic" in der Liste sehen:**
```
NETWORK ID     NAME      DRIVER    SCOPE
abc123def456   bridge    bridge    local
def456ghi789   host      host      local
xyz789abc123   elastic   bridge    local  ← HIER!

Schritt 3: Elasticsearch Container starten

Der wichtige Befehl

Kopiere diesen kompletten Befehl (alle Zeilen!) und füge ihn in dein Terminal ein:

Mac/Linux:

bash

docker run -d \
  --name elasticsearch \
  --net elastic \
  -p 9200:9200 \
  -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "xpack.security.enabled=false" \
  -e "xpack.security.http.ssl.enabled=false" \
  -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
  docker.elastic.co/elasticsearch/elasticsearch:8.11.0

Windows PowerShell:

powershell

docker run -d --name elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "xpack.security.enabled=false" -e "xpack.security.http.ssl.enabled=false" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" docker.elastic.co/elasticsearch/elasticsearch:8.11.0
```

<em>### Was passiert jetzt?</em>

1. Docker lädt das Elasticsearch-Image herunter (ca. 500 MB)
2. Das kann 2-5 Minuten dauern beim ersten Mal
3. Du siehst verschiedene Download-Fortschrittsbalken

**Während des Downloads siehst du so etwas:**
```
Unable to find image 'docker.elastic.co/elasticsearch/elasticsearch:8.11.0' locally
8.11.0: Pulling from elasticsearch/elasticsearch
a2abf6c4d29d: Pull complete
dcc4698797c8: Pull complete
...
Status: Downloaded newer image for docker.elastic.co/elasticsearch/elasticsearch:8.11.0
```

**Am Ende kommt eine lange ID:**
```
f8a3d7e2c1b9a4f5e6d7c8b9a0f1e2d3c4b5a6f7e8d9c0b1a2f3e4d5c6b7a8f9

Das ist die Container-ID. Alles gut!


Schritt 4: Warten bis Elasticsearch bereit ist

Elasticsearch braucht 30-90 Sekunden zum Starten.

Container läuft?

bash

docker ps
```

**Du solltest sehen:**
```
CONTAINER ID   IMAGE                                                  STATUS         PORTS                              NAMES
f8a3d7e2c1b9   docker.elastic.co/elasticsearch/elasticsearch:8.11.0   Up 30 seconds  0.0.0.0:9200->9200/tcp, 9300/tcp   elasticsearch

Wichtig:

  • STATUS sollte Up X seconds sein
  • NICHT Restarting oder Exited

Wenn Status „Restarting“: → Spring zu „Troubleshooting“ am Ende!


Logs anschauen (Optional aber lehrreich)

bash

docker logs -f elasticsearch
```

**Was du siehst:**
```
{"@timestamp":"2024-11-11T10:30:45.123Z", "log.level": "INFO", ...}
{"@timestamp":"2024-11-11T10:30:46.234Z", "log.level": "INFO", ...}
...
```

Viele Log-Zeilen scrollen vorbei!

**Warte auf diese wichtige Zeile:**
```
[INFO ][o.e.n.Node] [f8a3d7e2c1b9] started
```

**Wenn du "started" siehst → FERTIG!**

Drücke `Ctrl+C` um die Logs zu verlassen (der Container läuft weiter).

---

<em>## Schritt 5: Erste Verbindung zu Elasticsearch</em>

Jetzt testen wir ob Elasticsearch wirklich antwortet!

<em>### Methode 1: Browser (Am einfachsten!)</em>

Öffne deinen Browser und gehe zu:
```
http://localhost:9200

Wenn du das siehst → ERFOLG!

json

{
  "name" : "f8a3d7e2c1b9",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "Xy7R3zN4TDev8-abc123xyz",
  "version" : {
    "number" : "8.11.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    ...
  },
  "tagline" : "You Know, for Search"
}

„You Know, for Search“ → Elasticsearch läuft perfekt!


Methode 2: curl (Kommandozeile)

Mac/Linux:

bash

curl http://localhost:9200

Windows PowerShell:

powershell

Invoke-RestMethod -Uri http://localhost:9200

Sollte dieselbe JSON-Antwort wie im Browser zeigen.


Schritt 6: Wichtige Informationen verstehen

Schauen wir uns die Antwort genauer an:

json

{
  "name" : "f8a3d7e2c1b9",           
  <em>// ↑ Container-ID als Node-Name</em>
  
  "cluster_name" : "docker-cluster",   
  <em>// ↑ Standard-Cluster-Name</em>
  
  "version" : {
    "number" : "8.11.0",              
    <em>// ↑ Elasticsearch Version</em>
    
    "build_type" : "docker",          
    <em>// ↑ Läuft in Docker</em>
    
    "lucene_version" : "9.8.0"        
    <em>// ↑ Apache Lucene Version (Suchmaschinen-Core)</em>
  },
  
  "tagline" : "You Know, for Search"  
  <em>// ↑ Elasticsearch Motto :)</em>
}

Erfolgskriterien

Überprüfe ob alle Punkte erfüllt sind:

  • docker ps zeigt elasticsearch Container mit Status „Up“
  • http://localhost:9200 im Browser zeigt JSON
  • Du siehst „You Know, for Search“
  • Version-Nummer ist 8.11.0

Alle Punkte ✅? Perfekt! Weiter zu Tutorial 2.2!


Troubleshooting

Problem: Container startet nicht (Status „Restarting“)

bash

docker logs elasticsearch
```

**Häufige Fehlerursachen:**

**1. Zu wenig RAM**
```
ERROR: bootstrap checks failed
max virtual memory areas vm.max_map_count [65530] is too low

Lösung (Linux):

bash

sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
```

**Lösung (Mac/Windows):**
- Docker Desktop öffnen
- Settings → Resources → Advanced
- Memory auf mindestens 4 GB erhöhen
- Apply & Restart

**2. Port 9200 bereits belegt**
```
Address already in use

Lösung:

bash

<em># Benutze anderen Port</em>
docker run -d --name elasticsearch --net elastic -p 9201:9200 ...
<em># Dann: http://localhost:9201</em>
```

---

<em>### Problem: "Cannot connect to Docker daemon"</em>

**Lösung:**
- **Windows/Mac:** Starte Docker Desktop
- **Linux:** `sudo systemctl start docker`

---

<em>### Problem: Download schlägt fehl</em>
```
Error pulling image

Lösung:

bash

<em># Netzwerk-Probleme? Andere Registry versuchen:</em>
docker pull elasticsearch:8.11.0

<em># Oder ältere, kleinere Version:</em>
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.10.0

Problem: Browser zeigt „This site can’t be reached“

Checkliste:

  1. Läuft Container? docker ps
  2. Port richtig gemappt? Sollte 0.0.0.0:9200->9200/tcp zeigen
  3. Elasticsearch fertig gestartet? docker logs elasticsearch | grep started
  4. Warte 30 Sekunden länger und versuche erneut

Notfall: Alles neu starten

bash

<em># Container stoppen und löschen</em>
docker stop elasticsearch
docker rm elasticsearch

<em># Neu starten</em>
docker run -d --name elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "xpack.security.enabled=false" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" docker.elastic.co/elasticsearch/elasticsearch:8.11.0

Zusammenfassung

Was du geschafft hast:

✅ Docker installiert und getestet
✅ Docker-Netzwerk „elastic“ erstellt
✅ Elasticsearch Container heruntergeladen und gestartet
✅ Elasticsearch antwortet auf Port 9200
✅ Erste REST-API Anfrage erfolgreich

Wichtige Befehle die du gelernt hast:

bash

docker network create elastic        <em># Netzwerk erstellen</em>
docker run ...                       <em># Container starten</em>
docker ps                            <em># Laufende Container anzeigen</em>
docker logs elasticsearch            <em># Logs anschauen</em>
docker stop elasticsearch            <em># Container stoppen</em>
docker start elasticsearch           <em># Container wieder starten</em>
```

**Elasticsearch-Endpunkt:**
```
http://localhost:9200

Author: Andreas Lang

Sphinx-Flashdesign.de

Andreas Lang konzentriert sich seit zwei Jahrzehnten auf die Webentwicklung und Webdesign mit dem Schwerpunkt PHP, Laravel und Javascript und betreut seine Kunden mit Herz und Seele in allen Bereichen von Entwicklung, Design, Suchmaschinenoptimierung, IT-Recht, IT-Sicherheit etc.