RalfJoos IT-Systemadministrator
Projekt · seit August 2026

Diese Website

Die Seite, die Sie gerade lesen, läuft auf einem kleinen Server bei mir zu Hause, unter meiner eigenen Domain. Sie kommt ohne Cookies und ohne Tracking aus, Schriften und Bilder liegen auf demselben Server, nachgeladen wird nichts. Damit gehört der Server selbst zur Arbeitsprobe.

nginx DynDNS Let's Encrypt Node.js
0Cookies und Abrufe bei Fremden
10 Seitenaus einem Baukasten
5Prüfungen vor jeder Veröffentlichung

Eine Domain, die nicht auf eine Parkseite zeigt

Die Domain lag lange bei einer Parkseite des Anbieters: „Diese Domain wurde soeben freigeschaltet.“ Wer die Adresse aus meinem Lebenslauf eintippte, sah etwas Angefangenes, das liegengeblieben war. Deshalb ist die Profilseite die Hauptdomain selbst geworden und keine Unteradresse.

Mein Anschluss hat keine feste IP-Adresse. Die FRITZ!Box meldet jede neue Adresse per DynDNS an den Anbieter. Der erlaubt in meinem Paket aber nur einen nachgeführten Namen. Das Einschalten für die Hauptdomain hatte den Vokabeltrainer still abgeschaltet, sichtbar nur an Fehlermeldungen im Protokoll der FRITZ!Box. Die Lösung ist sauberer als zwei nachgeführte Namen: Nur die Hauptdomain wird nachgeführt, alle anderen Namen zeigen per CNAME auf sie.

Prüfen, ob die Nachführung arbeitet

Ob DynDNS wirklich funktioniert, zeigt sich erst beim nächsten Wechsel der Adresse, und der kommt oft erst nach Wochen. Bis dahin sehen ein fester und ein nachgeführter Eintrag von außen gleich aus. Ein kleines Skript vergleicht deshalb die tatsächliche öffentliche Adresse mit dem DNS-Eintrag.

  • Die öffentliche Adresse fragt es bei zwei unabhängigen Diensten ab und meldet nur, wenn beide dasselbe sagen. Sonst löst ein hakelnder Dienst einen Fehlalarm aus.
  • Fällt die Internetverbindung aus, meldet es „unklar“ statt „Abweichung“, denn das ist ein anderes Problem.
  • Gegengeprüft mit einer fremden Domain: Das Skript meldete die Abweichung. Ein Prüfwerkzeug, das immer „OK“ sagt, sieht im Normalbetrieb genauso aus wie ein funktionierendes.

Ein Baukasten mit eingebauter Prüfung

Gestaltung und Baukasten stammen aus einem zweiten Webprojekt von mir. Kopf- und Fußzeile stehen genau einmal im Quelltext, ein Node.js-Skript setzt daraus die Seiten zusammen und prüft das Ergebnis, bevor etwas hochgeladen wird:

PrüfungWas sie verhindert
Iconsein Symbol, das auf der Seite fehlt
Links und Sprungmarkeneinen Link ins Leere, auch auf Abschnitte anderer Seiten
VorlagenrestePlatzhaltertexte und Reste aus der ursprünglichen Vorlage
Fremde Serveralles, was der Browser beim Laden von einer anderen Domain holen würde
Zahlen ohne Belegjede Zahl ab zwei Stellen, die nicht mit Quelle in einer Belegliste steht

Die letzte Prüfung gibt es, weil eine frühere Vorlage Zahlen wie „85 Prozent aller Störungen“ enthielt, ohne jede Quelle. Dass eine Zahl eine Quelle hat, heißt noch nicht, dass die Aussage stimmt. Deshalb habe ich für diese Fassung zusätzlich jede Projektseite gegen meine Projektnotizen gelesen und dabei zwei Fehler auf der alten Seite gefunden und korrigiert. Bevor das Skript prüft, prüft es sich selbst an einem absichtlich kaputten Beispiel. Schlägt diese Kontrolle nicht an, bricht es ab. Sonst wäre „keine Befunde“ wertlos.

Am Handy gemessen, nicht nur angesehen

Jede Seite wird bei fünf Breiten von 320 bis 1280 Pixeln gemessen: Ragt etwas über den Rand, sind Schaltflächen groß genug, wird die richtige Schrift gezeichnet. Gemessen wird in einem Rahmen fester Breite, nicht per Bildschirmfoto.

Was ich gelernt habe

Der erste Handy-Screenshot zeigte rechts abgeschnittenen Text. Die Ursache war nicht die Seite: Der Browser im Hintergrundbetrieb rendert bei schmalen Fenstern in Wahrheit breiter und beschneidet nur das Bild. Nachgewiesen habe ich das mit einer Testseite, die ihre eigene Breite ausgibt. Seitdem messe ich schmale Breiten nur noch so.

Technik

TeilWomit
Servernginx auf dem Raspberry Pi 5, Let's Encrypt, HTTP leitet auf HTTPS um
DomainDynDNS über die FRITZ!Box, weitere Namen als CNAME, eigenes Prüfskript
SeitenHTML und CSS, Schriften Fraunces und Public Sans vom eigenen Server, wenig JavaScript für das Menü
BauNode.js-Skript ohne Pakete: zusammensetzen und prüfen
StatistikAuswertung der Serverprotokolle, keine Cookies, kein Skript im Browser

Fragen zur Seite?

Den Baukasten und die Prüfskripte zeige ich gern im Gespräch.