% ============================================
% STEP 04: DOMAIN KAUFEN & DNS KONFIGURIEREN
% ============================================

\section{Domain kaufen und DNS konfigurieren}
\label{sec:step04}

In diesem Schritt kaufen wir eine eigene Domain und verknüpfen sie mit unserem Server, damit die Fitness-App unter einem eigenen Namen (nicht nur der IP-Adresse) weltweit erreichbar ist. Wir machen das direkt bei unserem Server-Anbieter Contabo – das spart Verwaltungsaufwand, weil alles unter einem Dach bleibt.

\subsection{Warum eine eigene Domain?}

Bisher ist unsere App unter \texttt{http://185.209.229.167} erreichbar. Das hat mehrere Nachteile:

\begin{itemize}
    \item \textbf{Schwer zu merken:} Niemand kann sich IP-Adressen merken.
    \item \textbf{Kein HTTPS:} Für ein SSL-Zertifikat braucht man eine Domain. Ohne HTTPS keine PWA-Installation!
    \item \textbf{Unprofessionell:} Eine eigene Domain wirkt seriös und vertrauenswürdig.
    \item \textbf{Flexibel:} Wenn du später den Server wechselst, änderst du einfach den DNS-Eintrag. Die Domain bleibt gleich.
\end{itemize}

\subsection{Grundlagen: Wie funktioniert das DNS?}

DNS steht für \textbf{Domain Name System}. Es ist das "Telefonbuch des Internets" und übersetzt menschenlesbare Domain-Namen in maschinenlesbare IP-Adressen.

\textbf{Die wichtigsten Record-Typen:}

\begin{table}[h]
\centering
\caption{DNS-Record-Typen und ihre Funktion}
\begin{tabular}{@{}clp{6cm}@{}}
\toprule
\textbf{Typ} & \textbf{Name} & \textbf{Funktion} \\
\midrule
A & Address Record & Verbindet eine Domain mit einer IPv4-Adresse. "robre.de $\rightarrow$ 185.209.229.167" \\
AAAA & IPv6 Address Record & Wie A-Record, aber für IPv6-Adressen \\
CNAME & Canonical Name & Verweist eine Domain auf eine andere Domain (Alias) \\
MX & Mail Exchange & Legt fest, welcher Server E-Mails für die Domain empfängt \\
NS & Name Server & Definiert, welche Nameserver für die Domain zuständig sind \\
TXT & Text Record & Enthält beliebige Textinformationen (z. B. für SPF, DKIM) \\
\bottomrule
\end{tabular}
\end{table}

\textbf{Wie eine DNS-Auflösung abläuft:}
\begin{enumerate}
    \item Du gibst \texttt{robre.de} in den Browser ein.
    \item Dein Rechner fragt seinen DNS-Resolver (meist bei deinem Internet-Provider): "Welche IP hat \texttt{robre.de}?"
    \item Der Resolver fragt die Root-Nameserver, dann die .de-Nameserver, dann Contabos Nameserver.
    \item Contabo antwortet: \texttt{robre.de = 185.209.229.167}
    \item Der Browser stellt eine HTTP-Verbindung zu dieser IP her.
    \item Deine App erscheint!
\end{enumerate}

\subsection{Was ist DNS-Propagation?}

Wenn du DNS-Einträge änderst, dauert es eine Weile, bis alle DNS-Server weltweit die neuen Informationen haben. Das nennt man \textbf{Propagation} (Verbreitung).

\begin{itemize}
    \item \textbf{Dauer:} Meist 15 Minuten bis 2 Stunden, in seltenen Fällen bis zu 48 Stunden.
    \item \textbf{Grund:} Jeder DNS-Resolver hat einen Cache (Zwischenspeicher) mit alten Einträgen. Erst wenn der Cache abläuft (TTL = Time To Live), wird der aktuelle Wert abgefragt.
    \item \textbf{TTL-Wert:} Unsere Einträge haben TTL 86400 = 24 Stunden. Deshalb kann es länger dauern, bis alte Caches verfallen sind.
\end{itemize}

\textbf{Tipp:} Mit dem Befehl \texttt{nslookup robre.de ns1.contabo.net} fragst du \textbf{direkt} bei Contabos Nameserver an – ohne Cache. So siehst du sofort, ob die Konfiguration stimmt, auch wenn dein lokaler DNS die Domain noch nicht kennt.

\subsection{Domain-Kauf bei Contabo}

\subsubsection{Schritt 1: Einloggen ins Kundencenter}
Unter \texttt{https://contabo.com} mit deinen Zugangsdaten anmelden.

\subsubsection{Schritt 2: Domain bestellen}
\begin{enumerate}
    \item In der linken Seitenleiste auf \textbf{"Domains"} klicken.
    \item Auf den blauen Button \textbf{"Domain bestellen"} klicken.
    \item Wunschname eingeben (z. B. "robre") und Endung auswählen (.de, .com, .net, etc.).
    \item Auf "Weiter" klicken.
\end{enumerate}

\subsubsection{Schritt 3: Domain-Handles konfigurieren}
Auf der nächsten Seite werden die sogenannten \textbf{Domain-Handles} (Kontaktdaten) abgefragt:

\begin{itemize}
    \item \textbf{Owner / Besitzer:} Der rechtmäßige Eigentümer der Domain. Das sollte immer eine Privatperson oder Firma sein – NIEMALS der Provider!
    \item \textbf{Admin:} Der administrative Ansprechpartner. Meist dieselbe Person wie der Owner.
    \item \textbf{Tech:} Der technische Ansprechpartner. Hier kann der Provider stehen (Contabo GmbH).
    \item \textbf{Zone:} Zonenverwaltung. Ebenfalls Contabo GmbH.
\end{itemize}

\textbf{Standardwerte übernehmen:} Für Tech und Zone einfach die vorausgefüllte Contabo GmbH lassen. Das vereinfacht die technische Verwaltung.

\subsubsection{Schritt 4: Nameserver festlegen}
Auf der nächsten Seite wählst du die Nameserver:

\begin{itemize}
    \item \textbf{Contabo Standard-Nameserver} auswählen (ns1.contabo.net, ns2.contabo.net, ns3.contabo.net).
    \item Das bedeutet: Contabo verwaltet die DNS-Einträge für dich. Du kannst sie jederzeit im Kundencenter ändern.
\end{itemize}

\subsubsection{Schritt 5: IP-Adresse auswählen}
Hier wählst du aus, auf welchen deiner Server die Domain zeigen soll. In unserem Fall:

\begin{itemize}
    \item Server \textbf{"test"} mit IP \texttt{185.209.229.167}
    \item Server \textbf{"prod"} mit IP \texttt{185.209.230.235}
\end{itemize}

\textbf{Empfehlung:} Nur die erste IP (\texttt{185.209.229.167}) auswählen, da dort unsere App läuft. Man kann später weitere Einträge hinzufügen.

\subsubsection{Schritt 6: Bestellung abschließen}
Die Zusammenfassung prüfen und auf \textbf{"Bestellen \& Bezahlen"} klicken.

\subsection{DNS-Einträge für die Domain einrichten}

Nach dem Kauf muss die Domain noch mit unserer Server-IP verknüpft werden. Das machen wir im \textbf{DNS Zone Management}.

\subsubsection{Schritt 1: DNS Zone Management öffnen}
Im Contabo Control Panel: \textbf{Netzwerkdienste $\rightarrow$ DNS-Verwaltung} oder direkter: \textbf{Netzwerkdienste $\rightarrow$ "DNS-Zone für [deine Domain] bearbeiten"}.

\subsubsection{Schritt 2: Notwendige A-Records anlegen}
Wir brauchen drei A-Records:

\begin{enumerate}
    \item \textbf{Hauptdomain ohne Subdomain:}
    \begin{itemize}
        \item Name: \texttt{robre.de}
        \item Typ: A
        \item Data: \texttt{185.209.229.167}
        \item TTL: \texttt{86400}
    \end{itemize}
    
    \item \textbf{www-Subdomain:}
    \begin{itemize}
        \item Name: \texttt{www.robre.de}
        \item Typ: A
        \item Data: \texttt{185.209.229.167}
        \item TTL: \texttt{86400}
    \end{itemize}
    
    \item \textbf{Wildcard für alle anderen Subdomains (optional, aber nützlich):}
    \begin{itemize}
        \item Name: \texttt{*.robre.de}
        \item Typ: A
        \item Data: \texttt{185.209.229.167}
        \item TTL: \texttt{86400}
    \end{itemize}
\end{enumerate}

\textbf{Warum alle drei?}
\begin{itemize}
    \item \texttt{robre.de} – die Hauptdomain, die die meisten Nutzer eingeben.
    \item \texttt{www.robre.de} – viele Nutzer geben aus Gewohnheit "www." ein.
    \item \texttt{*.robre.de} – fängt alle zukünftigen Subdomains ab (z. B. \texttt{app.robre.de}, \texttt{api.robre.de}), ohne dass wir jedes Mal einen neuen Eintrag anlegen müssen.
\end{itemize}

\subsection{DNS-Propagation prüfen und beschleunigen}

\subsubsection{Direkt beim Nameserver prüfen}
Dieser Befehl fragt \textbf{direkt} Contabos Nameserver an – ohne Cache. Wenn hier die richtige IP erscheint, ist die Konfiguration korrekt und wir müssen nur auf die weltweite Verbreitung warten.

\begin{lstlisting}[language=Bash, caption={DNS direkt bei Contabo abfragen}]
nslookup robre.de ns1.contabo.net
\end{lstlisting}

\textbf{Ausgabe bei korrekter Konfiguration:}
\begin{lstlisting}[language=Bash, caption={Erwartete Ausgabe}]
Server:  ns1.contabo.net
Address: 2a02:c207:ff00:1200::1#53

Name:    robre.de
Address: 185.209.229.167
\end{lstlisting}

\subsubsection{Lokalen DNS-Cache leeren}
Manchmal hat dein Rechner noch alte DNS-Einträge im Cache. So löschst du ihn:

\begin{lstlisting}[language=Bash, caption={DNS-Cache leeren unter Linux mit systemd-resolved}]
sudo resolvectl flush-caches
\end{lstlisting}

\subsubsection{Server direkt über IP prüfen}
Um sicherzugehen, dass der Server selbst erreichbar ist (unabhängig von DNS), testen wir mit curl:

\begin{lstlisting}[language=Bash, caption={Server direkt über IP testen}]
curl -I http://185.209.229.167
\end{lstlisting}

\textbf{Erwartete Ausgabe:}
\begin{lstlisting}[language=Bash, caption={Server antwortet korrekt}]
HTTP/1.1 200 OK
Server: nginx/1.30.0
Content-Type: text/html
...
\end{lstlisting}

\texttt{HTTP/1.1 200 OK} bedeutet: Der Server läuft, die App ist erreichbar. Das Problem liegt ausschließlich an der DNS-Verbreitung.

\subsubsection{Online DNS-Checker verwenden}
Websites wie \texttt{https://dnschecker.org} oder \texttt{https://whatsmydns.net} zeigen an, von welchen Standorten weltweit die Domain bereits aufgelöst wird. Praktisches Werkzeug, um den Fortschritt der Propagation zu verfolgen!

\subsection{Zusammenfassung}
Nach diesem Schritt haben wir:

\begin{itemize}
    \item Eine eigene Domain \texttt{robre.de} für 11,88 \texteuro\ / Jahr
    \item DNS-Einträge, die auf unsere Server-IP \texttt{185.209.229.167} zeigen
    \item Geprüft, dass Contabo die Domain korrekt registriert hat
    \item Geprüft, dass der Server direkt über die IP erreichbar ist
    \item DNS-Propagation abwarten, bis die Domain weltweit funktioniert
\end{itemize}

Als nächstes folgt die Einrichtung von HTTPS mit einem kostenlosen SSL-Zertifikat – das ist die Voraussetzung für die PWA-Installation!