frahost.de – Website & Mini-CMS
Die Seite, auf der Sie sich gerade befinden: ein selbst entwickeltes, containerisiertes Web-Backend mit eigenem CMS, Markdown-Pipeline und automatisiertem TLS.
Worum es geht
Diese Website ist kein fertiges Baukasten-System, sondern von Grund auf selbst entwickelt – Backend, Datenmodell, Content-Verwaltung und Deployment. Sie dient zugleich als praktisches Anschauungsobjekt: Der Stack, der hier beschrieben wird, ist exakt der, auf dem diese Seite läuft.
Das Ziel war eine schlanke, schnelle und vollständig selbst kontrollierte Lösung – ohne fremde Plattform, ohne unnötigen Ballast, dafür mit nachvollziehbarer Architektur und sauberen Sicherheitsgrundlagen.
Architektur im Überblick
Die Anwendung folgt einem klassischen, serverseitig gerenderten Aufbau, bewusst schlank gehalten:
- Reverse Proxy (Nginx): der einzige Eingang von außen. Er übernimmt die TLS-Verschlüsselung, liefert statische Dateien direkt aus und reicht alle übrigen Anfragen an die Anwendung weiter.
- Anwendungsserver (Uvicorn + FastAPI): die eigentliche Web-Anwendung, asynchron und typgestützt. Sie ist nicht direkt nach außen erreichbar, sondern ausschließlich über den Reverse Proxy.
- Datenbank (MySQL): hält Inhalte und Kontaktanfragen. Der Zugriff erfolgt asynchron über SQLAlchemy, sodass Datenbankoperationen die Anwendung nicht blockieren.
- Darstellung (Jinja2): alle Seiten werden serverseitig zu fertigem HTML gerendert – gut für Ladezeit und Suchmaschinen.
Alle Komponenten laufen als Container und werden als ein Verbund definiert. Die Anwendung und die Datenbank liegen dabei in einem internen Netz, das von außen nicht erreichbar ist; nur der Reverse Proxy ist öffentlich. So bleibt die Angriffsfläche klein und klar umrissen.
Eigenes Content-Management
Statt ein schwergewichtiges CMS einzubinden, entstand eine schlanke, maßgeschneiderte Verwaltung:
- Inhalte als Markdown: Tech-Artikel und Projekte werden in Markdown gepflegt und serverseitig zu HTML gerendert. Eine eigene Kurzsyntax bindet zusätzlich Videos als Embed ein.
- Strukturierte Beziehungen: Projekte und Technologien sind über eine Viele-zu-viele-Beziehung verknüpft. Dadurch zeigt jeder Tech-Artikel automatisch die Projekte, in denen er zum Einsatz kommt – und umgekehrt.
- Geschützter Admin-Bereich: ein eigener Verwaltungsbereich zum Anlegen und Bearbeiten von Inhalten, getrennt vom öffentlichen Teil der Seite.
Sicherheit von Anfang an
Sicherheit wurde nicht nachträglich aufgesetzt, sondern in die Architektur eingebaut:
- Verschlüsselte Übertragung (TLS): Zertifikate werden automatisiert ausgestellt und erneuert, sodass die Verschlüsselung dauerhaft und ohne manuelles Eingreifen gültig bleibt.
- Sichere Passwortspeicherung (Argon2): Zugangsdaten werden ausschließlich als gesalzener, rechenintensiver Hash gespeichert – niemals im Klartext.
- Schutz vor Missbrauch: Formulare sind gegen Cross-Site-Request-Forgery abgesichert, automatisierte Spam-Einsendungen werden über stille Mechanismen abgewehrt, und wiederholte Anmelde- oder Anfrageversuche werden begrenzt.
- Isolierte Dienste: durch die Trennung in ein internes und ein externes Netz ist die Anwendung nur über den kontrollierten Eingang des Reverse Proxy erreichbar.
Praxistest: ein Bot im Kontaktformular
Kurz nach dem Start kam die erste Anfrage über das Kontaktformular – auf Griechisch,
sinngemäß „Was kostet das bei Ihnen?”.
Ungewöhnlich, aber eine Anfrage ist eine
Anfrage, also habe ich höflich per Mail geantwortet. Erst als kurz darauf im
Minutentakt derselbe Text in wechselnden Sprachen nachkam, war klar: Hier tippt kein
Mensch, hier läuft ein Spam-Skript.
Der naheliegende Reflex wäre ein Captcha gewesen – diese „Klicken Sie alle Ampeln
an”-Rätsel. Das hält Bots auf, nervt aber genau die echten Interessenten, die mit
einer kurzen Nachricht erreichen wollen. Stattdessen entstand eine mehrschichtige,
unsichtbare Abwehr:
- Ein Feld, das nur ein echter Browser ausfüllt: automatisierte Tools, die direkt auf die Adresse des Formulars feuern, lassen es leer – und werden lautlos verworfen. Wer ohne JavaScript unterwegs ist, bekommt einen sichtbaren Hinweis mit Mail-Alternative.
- Eine Drosselung schon am Eingang: noch vor der eigentlichen Anwendung wird das Absenden pro Absender begrenzt. Die Seite normal ansehen bleibt jederzeit frei. Diese Schicht greift über alle Prozesse hinweg und übersteht jedes neue Deployment.
- Keine Rückmeldung an den Angreifer: wer aussortiert wird, sieht trotzdem eine „Danke”-Seite. Der Bot erfährt nie, dass er ins Leere läuft – und kann daraus auch nichts lernen.
Das Ergebnis: echte Besucher merken von alldem nichts, kein Captcha steht im Weg, der Posteingang bleibt sauber – ganz ohne manuelles Aussortieren. Genau das ist die Idee hinter dieser Seite: Sicherheit, die wirkt, ohne dass die richtigen Leute sie spüren.
Suchmaschinen & Auffindbarkeit
Die Seite ist von Beginn an auf gute Auffindbarkeit ausgelegt: serverseitig gerendertes HTML, sauber gepflegte Meta-Angaben pro Seite, strukturierte Daten (JSON-LD) für Artikel und Projekte, Open-Graph-Informationen für Vorschauen in sozialen Netzwerken sowie eine automatisch erzeugte Sitemap.
Ergebnis
Eine eigenständige, wartbare Web-Plattform mit klarer Architektur, durchgängiger Containerisierung und solider Sicherheitsbasis. Inhalte lassen sich jederzeit über den eigenen Admin-Bereich pflegen, Deployment und Zertifikatsverwaltung laufen automatisiert – die Seite ist damit ebenso Referenz wie Werkzeug.
MySQL
Python
FastAPI
SQLAlchemy
Jinja2
Uvicorn
Docker
Nginx
TLS / Let's Encrypt
Linux