Add steps for domain purchase and DNS configuration, set up HTTPS with nginx-proxy and Let's Encrypt, and install Gitea as a self-hosted Git server. Remove temporary database files and update assembly info for API project.

This commit is contained in:
2026-05-08 14:53:33 +02:00
parent 0e9377739e
commit b8cfa1689f
15 changed files with 1285 additions and 141 deletions
+211
View File
@@ -0,0 +1,211 @@
% ============================================
% 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!