Ich soll eine Möglichkeit finden, eine Art Nifi Barebone AWS Image zu erstellen.
Erster Schritt, wenn man Irgendwas für einen Persönlich neues machen soll: erst einmal raus bekommen wie man den Mist überhaupt installiert.
Ein Kunde verwendet Apache Nifi um Daten aufzubereiten und an Splunk und andere stellen weiterzuleiten. Ich hatte mich noch nicht groß mit Nifi und was zum Betrieb nötig ist, beschäftigt. Durch neue Sicherheitsbestimmungen die umgesetzt werden wollen muss das System das bisher die Images in ähnlicher Form erstellt hat überarbeitet oder sogar ausgetauscht werden.
Da ich mich noch in einer relativ frühen Phase befinde und überhaupt erst einmal schauen musste, wie man Nifi installiert. Erst einmal nur allgemein, also eigene VM und kein RedHat kompatibles Linux verwendet.
Auf meinem Proxmox eine Debian 12 VM mit 4 Cores, 8GB RAM und 128GB Disk erstellt. Das Debian wurde als ssh-server mit einem zusätzlichen Benutzer (nifiadmin) installiert.
Nifi benötigt ein Java 8 oder Java 11 für den Betrieb (halte mich jetzt mal mit meiner Meinung dazu etwas zurück).
Im Grunde habe ich mich an ein 3 Jahre altes Indien-englisches YT Tutorial gehalten, das ich hier auf das wesentliche eindampfe.
Einen Oracle Account habe ich schon: Bei Oracle eingeloggt nach Java SE (Java Standard Edition) gesucht. Am Ende der Seite "Java downloads" findet sich ein Bereich "Java SE subscribers have more choices" in dem man zwischen Java 8 und Java 11 wählen kann.
Für meine Umgebung gibt es nur Linux x64 als Möglichkeit. Um beim Tutorial zu bleiben, das x64 Compressed Archive heruntergeladen. Ich hab mir den Upload von meinem Rechner gespart, indem ich wie vorgeschlagen, auf dem Server wget mit dem Downloadlink aus meiner Browser Download Historie verwendet habe. Der Link hält mutmaßlich nur ein paar Minuten.
Das Archiv (bei mir war es jdk-11.0.20_linux-x64_bin.tar.gz) lies sich einfach mit dem Befehl
tar xvzf jdk-11.0.20_linux-x64_bin.tar.gz
tar xvzf jdk-11.0.20_linux-x64_bin.tar.gzentpacken. Für das erste mal ist die Position mit /home/nifiadmin/jdk-11.0.20 absolut ok. Für eine professioneller Anwendung sollte ich das allerdings entsprechend anpassen.
In der ~/.profile folgende Zeilen angefügt:
export JAVA_HOME=/home/nifiadmin/jdk-11.0.20 export PATH=$PATH:/home/nifiadmin/jdk-11.0.20/bin
export JAVA_HOME=/home/nifiadmin/jdk-11.0.20
export PATH=$PATH:/home/nifiadmin/jdk-11.0.20/binund mit . ./.profile diese neu ausgeführt. Folgendes Ergebnis beim Aufruf von Java wurde erwartet:
~$ java -version java version "11.0.20" 2023-07-18 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.20+9-LTS-256) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.20+9-LTS-256, mixed mode)
~$ java -version
java version "11.0.20" 2023-07-18 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.20+9-LTS-256)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.20+9-LTS-256, mixed mode)Anders als im 3 Jahre alten Video scheint Apache jetzt nur noch zip files zu verbreiten.
Deshalb sollte man zip bzw. unzip auf dem System installiert haben.
Da Opensource mit Apache Lizenz braucht man diese nicht zu erbetteln wie etwa bei Oracle.
Auf der Projekt Seite gibt es entsprechende Download links, die man auch wieder mit wget direkt vom Server herunterladen kann.
Bei meiner ersten Installation war der Befehl:
wget -4 https://dlcdn.apache.org/nifi/1.23.2/nifi-1.23.2-bin.zip
wget -4 https://dlcdn.apache.org/nifi/1.23.2/nifi-1.23.2-bin.zipdie -4 ist zum Erzwingen von IPv4 ... irgendwie klemmt das bei mir immer, wenn er es sich zwischen IPv6 und IPv4 selbst entscheiden muss.
Installation fürs erste Mal einfach wieder im /home/nifiadmin/ Verzeichnis folgenden Befehl verwendet:
unzip nifi-1.23.2-bin.zip
unzip nifi-1.23.2-bin.zipAuch hier wieder für die Anfänge ok, später eher in etwas wie /opt/nifi entpacken.
Der Pfad lautet jetzt /home/nifiadmin/nifi-1.23.2 .
Somit befindet sich praktisch alles was man braucht um nifi zu betreiben im user-space
Es gilt zu beachten, dass man zwar jetzt einfach mit /home/nifiadmin/nifi-1.23.2/bin/nifi.sh start Nifi starten kann... und das sollte auch funktionieren.
Allerdings lässt sich so, der https Port der Instanz (:8443) nur von localhost aus erreichen. Wenn man auf so Stunts wie ssh -L 0.0.0.0:8443:localhost:8443 nifiadmin@<ip oder hostname> vermeiden möchte, z.B. weil man den Port lokal schon anderweitig braucht, sollte man das in der Datei /home/nifiadmin/nifi-1.23.2/conf/nifi.properties entsprechend ändern.
Der betroffene Eintrag lautet nifi.web.https.host=127.0.0.1 und muss in nifi.web.https.host=0.0.0.0 geändert werden.
Es kann beim o.a. Startbefehl ein Benutzername und ein Passwort angegeben werden. Lässt man das weg generiert nifi selbst eines und speichert dies im /home/nifiadmin/nifi-1.23.2/logs/nifi-app.log als
Generated Username [<Username>] Generated Password [<Password>]
Generated Username [<Username>]
Generated Password [<Password>]ab.
Auf der Server Seite ist so weit jetzt alles abgeschlossen.
Versucht man jetzt ohne weiter Arbeiten auf dem Rechner mit dem Browser die Seite https://<ip>:8443/nifi aufzurufen, erhält man ein System Error Seite, die wie unten dargestellt aussieht.
System Error
The request contained an invalid host header [<ip>:8443] in the request [/nifi]. Check for request manipulation or third-party intercept.
Valid host headers are [empty] or:
127.0.0.1
127.0.0.1:8443
localhost
localhost:8443
[::1]
[::1]:8443
nifi-debian
nifi-debian:8443
127.0.1.1
127.0.1.1:8443
0.0.0.0
0.0.0.0:8443System Error
The request contained an invalid host header [<ip>:8443] in the request [/nifi]. Check for request manipulation or third-party intercept.
Valid host headers are [empty] or:
127.0.0.1
127.0.0.1:8443
localhost
localhost:8443
[::1]
[::1]:8443
nifi-debian
nifi-debian:8443
127.0.1.1
127.0.1.1:8443
0.0.0.0
0.0.0.0:8443Da sich in der Liste auch der Hostname (leider nicht fqdn) befindet, lässt sich das durch eine Änderung der, bei meinen Rechnern, /etc/hosts umgehen.