[~] BACK



~~ HIY (II) ~~

** SPEZIFIKATION **

[HOW] | [20221129] | [0] | [0x17]




Im ersten Teil hab ich euch ja meine Idee gezeigt, welchen Unterbau und vorallem welche Struktur die NERDBUDE zukünftig bekommen soll. Der nächste Schritt in der Reihe ist die Auswahl der Hard- und Software. Genauer gesagt welcher Server, welches Operating System und welche Tools. Die auswahl erfolgt natürlich gemäß der bisher bekannten Vorgehensweise alles so schmal und leicht wie möglich zu halten. Fangen wir beim Server an.

SERVER

Die Wahl des Servers ist natürlich der erste Schritt den es zu gehen gilt. Nerdgerecht geht's natürlich zu Hetzner. Hetzner macht den Infrastruktur-Kram seit 1997 und ich gehe davon aus, dass die wissen was sie tun. Hetzner hat eine enorme Auswahl an Möglichkeiten und ich musste mich erstmal durchgraben um rauszufinden was ich überhaupt brauche. Irgendwann hat mensch dann alles durchforstet und merkt, dass ein Cloud Server vollkommen für die NERDBUDE ausreicht. Ich hab nicht vor Webanwendungen oder anderen Kram über den Server laufen zu lassen. Sollte sowas irgendwann noch vorkommen, gibt's nen neuen Server. Hier reicht jetzt erstmal der Cloud Server. Folgende Konfiguration ist es geworden:

SERVER
  CPX31
  4x VCPU
  8GB RAM
  160GB NVMe SSD
  20TB Traffic
  Standort: DE

Nicht zu wenig und nicht zu viel. Zusätzlich hab ich noch 20GB Block-Storage zusätzlich. Der Block-Storage hat den Vorteil, dass der dynamisch mitwachsen kann. Da Podcast und später Mails über den Server laufen, will ich natürlich einen mitwachsenden Speicher, damit den Server nicht komplett neu aufsetzen muss, wenn der Storage vollläuft.

OPERATING SYSTEM

Die Frage aller Fragen - wobei das ist bei dem Projekt irgendwie jede Frage - welches OS kommt auf den Server. Hetzner bietet eine große Anzahl an Betriebssystemen an die als Default installiert werden können. Ubuntu, Debian, RockyLinux, CentOS usw. Mit Debian hab ich im Serverbereich schon rumgespielt. Debian ist irgendwie im Gedächtnis und performt. Nun wäre aber die Lernkurve relativ flach, wenn wir Debian nehmen. Also bind ich mir NixOS als Server-OS ans Bein und probier es damit. Alles andere fühlt sich irgendwie falsch an.

Leider bietet Hetzner NixOS als default-OS (noch) nicht an. Aber es gibt die Möglichkeit NixOS auf den Cloud-Server zu packen. Das Tool/Script nennt sich nixos-infect. Ziemlich geiler und passender Name, denn als erstes wird der "Wirt" installiert, in meinem Fall Debian 10 und innerhalb von Debian wird nixos-infect gestartet und installiert NixOS über Debian.

Die Installation von NixOS via nixos-infect ist recht simpel und mit einer Hand voll Handgriffen erledigt. Das wichtigste ist, dass ihr euch einen SSH Key auf dem Server hinterlegt, da ihr euch sonst wie ich aus dem System aussperrt. Also erstellen wir uns einen SSH-Key (Das passiert auf dem Rechner mit dem ihr euch auf dem Server connecten wollt.) Das geht auf zwei Wegen:

TERMINAL (LOKAL)
  ssh-keygen
  ssh-keygen -b 4096

Das erste Command erzeugt den Standard 2048-bit RSA Key und die zweite Variante erzeugt einen 4096-bit RSA Key. Ihr wisst schon mehr Security. In dem Prozess werdet Ihr nach dem Pfad gefragt, unter dem der Key gespeichert werden soll. Sinnvoll ist natürlich ~/.ssh/id_rsa. Außerdem werdet ihr nach einem Passwort gefragt. Hier also Passwort eingeben, bestätigen und natürlich merken.
Sicherheitshalber checken wir auf dem Debian Server ob andere SSH-Keys vorhanden sind:

TERMINAL (SERVER)
  ls -l ~/.ssh/id*

Wenn keine Keys vorhanden sind bekommt ihr das obligatorische "No such file or directory". Wenn welche vorhanden sind, löscht sie. Jetzt schieben wir unseren Key auf den Debian-Server.

TERMINAL (LOKAL)
  scp ~/.ssh/id_rsa.pub root@serverip:/root/.ssh/authorized_keys

Nun haben wir den SSH Key auf dem Server. Die Configs auf dem Debian Server werden nicht angefasst von der NixOS Installation. So können wir uns nach der Installation per SSH auch am Server connecten. Weiter geht's mit der eigentlichen NixOS Installation.
Wie vorhin schon angerissen, bietet HETZNER NixOS nicht als Default OS an. So müssen wir das ganze irgendwie anders auf den Server schmeißen. Ein klein wenig Recherche bringt ein Tool namens "NixOS Infect" von elitak. Das ist ein Script, dass die aktuellste NixOS Version über das vorhanden Debian drüberbügelt aber Configs wie die SSH Keys z.B. beibehält. Das Script wird auf dem Server mit folgendem 1-Liner ausgeführt:

TERMINAL (SERVER)
  curl https://raw.githubusercontent.com/elitak/nixos-infect/master/nixos-master | NIX_CHANNEL=nixos-22.05 bash -x

Ab jetzt gibt's kein Zurück mehr. Wenn alles durchgerattert ist, werdet ihr ausgeloggt und vom Server getrennt. Ich musste mich kurz auf der Hetzner Web Console anmelden, da meine NixOS Installation Schluckauf hatte und kurz neu gebootet werden wollte. Nach dem das erfolgt ist, lief es ohne Probleme durch. Also kurz warten und dann per SSH auf dem Server anmelden und per nixos-version checken ob alles funktioniert hat.



TOOLS

Das gute an NixOS. ist die einfache Installation und Konfiguration von Tools. Die werden bekanntermaßen über die configuration.nix installiert. Aber welche Tools braucht es auf dem Server?

NGINX - Uhrsprünglich wollte ich Apache nehmen. Apache ist allerdings recht umfangreich und bei weitem nicht so schnell wie NGINX. Also kommt NGINX aufs NixOS als Webserver.

VIM - Muss ich noch irgendwas dazu sagen - ich denke nicht. Vim gehört einfach dazu.

GIT - Da die NERDBUDE einen neuen Connector bekommen soll, braucht es natürlich git. Ich hatte im Vorfeld schon mit GITEA rumgespielt, allerdings brauch ich nicht die komplette Nutzerverwaltung und Webinterface. Ich will ja hier nicht NerdHub aufbauen. Aus dem Grund wird ein einfaches git laufen. So kann jede*r sich den Code ziehen und wenn bedarf besteht auch daran mitarbeiten.

Damit sollte vorerst das wichtigste abegdeckt sein um die NERDBUDE auf den Hetzner-Cloud Server zu packen. Wenn es noch andere Tools braucht, dann werd ich die in den einzelnen Parts aufführen. Wir haben NixOS, Vim und Git. Was brauchts mehr.

PARTS:
[01] - Intro
[02] - Vorraussetzungen
[03] - Webserver
[04] - Mailserver


EDIT:
[2022-11-30] - change from Apache to NGINX
[~] BACK