Backend & Infrastructure

Von nächtlichen Server-Abstürzen zu automatisierten Deployments, von chaotischen API-Controllern zu sauberer Clean Architecture. Hier erzähle ich ehrlich, wie ich mir Server-Administration und Backend-Entwicklung beigebracht habe - mit allen Umwegen, Fehlern und Aha-Momenten.

Ansible Docker Spring Boot SystemD Kubernetes (learning)
Backend & Infrastructure Journey

Server Infrastructure & Administration

"Warum fällt der Server schon wieder aus?" war der Moment, in dem mir klar wurde: Ich brauche eine richtige Infrastructure. Was folgte, war eine intensive Lernreise durch Linux-Administration, Container-Security und Monitoring-Stacks.

Das habe ich aufgebaut

Infrastructure as Code mit Ansible

Nach dem dritten Mal, dass ich einen Server komplett neu aufsetzen musste, war mir klar: Das muss automatisiert werden! Was als einfaches Backup-Script begann, wurde zu einem 800-Zeilen Ansible Playbook, das heute komplette Production-Umgebungen mit Security-Hardening, SIEM-Stack und allen Services in unter 20 Minuten deployed.

Der Durchbruch kam, als ich verstanden habe, dass Infrastructure wirklich wie Code behandelt werden kann. Variablen, Schleifen, Bedingungen - plötzlich konnte ich Server genauso programmieren wie APIs. Heute starte ich mit einem frischen Ubuntu-Server und einem einzigen Befehl, und eine Stunde später läuft eine vollständige Produktionsumgebung mit Monitoring, Security und automatischen Backups.

8 Services automatisch
PostgreSQL, Redis, Grafana, Traefik, Wazuh, Wiki, Nextcloud, Tickets
Security by Design
Non-root Container, User Namespaces, AppArmor, Fail2Ban
Zero-Touch Setup
Secrets generiert, SSL automatisch, Services konfiguriert

Docker Production Setup - Security First

Container sind praktisch, aber per Default alles andere als sicher. Meine erste Docker-Installation war ein Sicherheits-Albtraum: Root-Container, privilegierte Mounts, keine Isolation. Das musste besser werden!

Wochen später, nach dem Studium von Security-Best-Practices, war mein Set-up komplett anders: Jeder Service läuft mit eigenem User, User-Namespaces isolieren Container vom Host, AppArmor schränkt Syscalls ein, und keine Container haben mehr Capabilities als nötig. Ein Schritt näher zur eigenen Serverinfrastruktur.

Multi-Container Orchestration
Docker Compose mit Health Checks, Dependencies, Networks
Traefik Reverse Proxy
Automatisches SSL, Service Discovery, Load Balancing

Wazuh SIEM - Wenn Sicherheit ernst wird

Meinem Ziel, die Backends für die Apps nicht nur nach höchsten DSGVO Standards umzusetzen, sondern auch möglichst sicher zu gestalten, kam ich die Tage ein ganzes Stück näher. Wazuh – einem Open-Source-SIEM-System, das eigentlich für große Unternehmen gedacht ist, ist ein Puzzlestück in dieser Lösung.

Das Set-up war kein Spaziergang: OpenSearch als Backend, Wazuh Manager für die Regel-Engine, Dashboard für die Visualisierung, und überall Custom-Konfigurationen. All das Gefrickel und wofür? Ich sehe alles: Failed Logins, File-Changes, verdächtige Prozesse, Container-Events. Es ist wie ein Röntgenblick auf die Sicherheit meiner Infrastruktur. Wunderschön, anders kann man es nicht sagen.

File Integrity Monitoring
Jede Änderung an kritischen Dateien wird geloggt
Vulnerability Assessment
Automatische Scans auf bekannte Sicherheitslücken
Intrusion Detection
Real-time Alerts bei verdächtigen Aktivitäten

Prometheus + Grafana - Daten, die eine Geschichte erzählen

Monitoring begann für mich mit dem panischen SSH-Einloggen: "Läuft noch alles?" Das wurde schnell alt. Prometheus + Grafana sollten mir diese nächtlichen Sorgen nehmen. Und es funktioniert fantastisch!

Was mich am meisten überrascht hat: Monitoring ist nicht nur Troubleshooting, sondern erzählt richtige Geschichten. Wann sind die User online? Welche APIs werden am meisten genutzt? Wie entwickelt sich die Performance über Zeit? Diese Daten sind Gold wert für Optimierungen.

Was ich dabei gelernt habe

Server-Administration ist viel mehr als "apt update && apt upgrade". Es ist ein Mindset: Alles sollte automatisiert, reproduzierbar und sicher sein. Diese Lektionen habe ich oft schmerzhaft gelernt.

Infrastructure as Code

"Pets vs. Cattle" - ein Server sollte kein Haustier sein, das man liebevoll pflegt, sondern Vieh, das man bei Bedarf austauscht. Ansible hat mir diese Philosophie beigebracht.

  • Idempotenz: Ein Script sollte 10x ausführbar sein ohne Probleme
  • Variables & Templates: Kein Hardcoding von IPs oder Passwörtern
  • Error Handling: Was kann schiefgehen, wird schiefgehen, immer!

Security Defense in Depth

Eine Sicherheitsmaßnahme ist keine Sicherheit. Zehn Sicherheitsmaßnahmen sind ein Anfang. Jede Schicht sollte unabhängig funktionieren.

  • Firewall: UFW blockt alles, was nicht explizit erlaubt ist
  • Container Isolation: User Namespaces + AppArmor + No-New-Privileges
  • Monitoring: Was ich nicht sehe, kann ich nicht schützen

Observability über Monitoring

Monitoring sagt dir, dass etwas kaputt ist. Observability sagt dir warum und hilft dir, es zu verstehen, bevor es kaputt geht.

  • Metriken: Nicht nur "läuft", sondern "wie gut läuft es"
  • Logs: Strukturiert, searchbar, korrelierbar
  • Traces: Der Weg einer Request durch das System

Automation vs. Manual Work

"Wenn du es zweimal machst, automatisiere es beim dritten Mal." Diese Regel hat mir unzählige Stunden gespart und Fehler verhindert.

  • Backups: Automatisch, getestet, offsite
  • Updates: Unattended upgrades für Security Patches
  • Health Checks: Services überwachen sich selbst

Application Development

"Funktioniert bei mir" war lange meine Definition von guter Software. Bis ich gelernt habe, dass echte Backend-Entwicklung bedeutet: saubere Architektur, testbarer Code und APIs, die auch andere verstehen können.

Das habe ich aufgebaut

Lehrbericht REST API - Mein Backend-Durchbruch

"Wieso muss ich Ausbildungsberichte noch mit Papier und Stift schreiben?" Diese Frage führte zu meiner ersten ernsthaften Backend-API. Was als simpler CRUD-Service begann, wurde zu einem kompletten Lehrbericht-Management-System mit Multi-User-Support, Rollen-Management und PDF-Export.

Das Projekt war mein Deep-Dive in Spring Boot und Kotlin. Von chaotischen Controller-Klassen mit allem drin bis zur sauberen Clean Architecture mit Repository Pattern, Use Cases und ordentlicher Fehlerbehandlung. Jeder Refactoring-Schritt hat mich mehr über Backend-Design gelehrt als jedes Tutorial.

Spring Boot 3 + Kotlin
Modern, type-safe, concise - Kotlin war die richtige Wahl
JWT Authentication & Authorization
Stateless Security mit Rollen-basiertem Zugriff

Azurrow Lernkarten-API - Algorithmen zum Leben erwecken

Normale Lernkarten sind langweilig. Aber was, wenn das System lernt, welche Karten du schwierig findest, und diese öfter zeigt? Spaced Repetition heißt das Zauberwort, und ich wollte es selbst implementieren.

Diese API war mein Experiment mit komplexeren Algorithmen im Backend. Wie trackst du Lernfortschritt? Wie berechnest du optimale Wiederholungsintervalle? Wie stellst du sicher, dass das System fair bleibt? Das war weniger CRUD und mehr echte Logik - und deutlich interessanter zu entwickeln.

Clean Architecture
Domain, Use Cases, Infrastructure - sauber getrennt
100% Unit Test Coverage
JUnit 5 + Mockito - kein Code ohne Test

Portfolio-Website APIs - Klein aber fein

Nicht jede API muss eine Enterprise-Anwendung sein. Manchmal braucht man einfach ein sauberes Backend für ein Contact-Form oder ein Content-Management-System. Einfach, aber richtig gemacht.

Diese kleineren APIs haben mir beigebracht, dass gutes Design nicht von der Größe abhängt. Auch eine 3-Endpoint-API kann saubere Validation, ordentliche Error-Responses und vernünftige Dokumentation haben. Oft sind die kleinen Projekte die besten Lehrmeister.

Was ich dabei gelernt habe

Backend-Entwicklung ist mehr als nur "Daten in Database rein, Daten aus Database raus". Es geht um Architektur, Testbarkeit und Wartbarkeit. Diese Lektionen habe ich Schritt für Schritt gelernt.

Clean Architecture & Domain Design

"Wo gehört diese Logik hin?" war lange meine größte Frage. Clean Architecture gab mir endlich ein Framework für Entscheidungen: Business Logic in die Domain, Infrastructure bleibt außen.

  • Domain First: Was ist das Problem, das ich löse?
  • Use Cases: Was soll das System tun können?
  • Infrastructure Last: Wie setze ich es technisch um?

API Design als Conversation

Eine gute API ist eine Unterhaltung zwischen Client und Server. RESTful Design ist nicht nur ein Standard, sondern eine Sprache, die beide Seiten verstehen müssen.

  • HTTP Status Codes: Die Antwort sollte selbsterklärend sein
  • Resource-based URLs: /users/123/orders, nicht /getUserOrders
  • Consistent Error Format: Errors sollten vorhersagbar sein

Testing als Design-Tool

Tests schreiben ist nicht nur Qualitätssicherung, sondern hilft beim API-Design. Wenn ein Test schwer zu schreiben ist, ist der Code vermutlich schlecht designt.

  • Unit Tests: Logik isoliert testen, schnell und zuverlässig
  • Integration Tests: Komponenten zusammen testen
  • TestContainers: Echte Database für realistische Tests

Performance & Observability

"Es funktioniert" ist nicht genug. Wie schnell funktioniert es? Wie zuverlässig? Wie findest du Probleme, bevor User sie bemerken?

  • Database Optimization: Indexes, Query-Tuning, Connection Pooling
  • Spring Actuator: Health Checks, Metrics, Info Endpoints
  • Structured Logging: JSON Logs für bessere Searchability

Mein täglicher Tech-Stack

Nach Jahren des Experimentierens hat sich ein Core-Stack herauskristallisiert, mit dem ich produktiv und glücklich arbeite. Nicht weil es hip ist, sondern weil es funktioniert.

Täglich im Einsatz

Spring Boot 3 Framework

Mature, gut dokumentiert, riesiges Ecosystem

Kotlin Language

Concise, type-safe, null-safe, Java interop

PostgreSQL Database

Robust, ACID, JSON support, performant

Development Workflow

IntelliJ IDEA IDE

Unschlagbar für Kotlin + Spring Boot

Postman API Test

Collections, Environments, automatisierte Tests

DBeaver DB Tool

Universeller Database Client, top für PostgreSQL

Testing & Quality

JUnit 5 Testing

Modern, parameterized tests, nested tests

Mockito Mocking

Behavior verification, stubbing, spy objects

TestContainers Integration

Echte PostgreSQL Container für realistische Tests

Das ist noch geplant

Technologie steht nie still, und ich auch nicht. Hier sind die nächsten großen Lernprojekte auf meiner Liste - sortiert nach "kann ich kaum erwarten" bis "sollte ich mal machen".

Q1

HashiCorp Vault - Secrets richtig machen

Aktuell liegen meine Database-Passwörter und API-Keys in Config-Files. Das ist... nicht optimal. Vault soll mir dynamische Secrets, automatische Rotation und ordentliche Encryption bringen. Plus: Ich will endlich verstehen, wie Enterprise-Secrets-Management funktioniert.

Warum jetzt: Mit mehr Services wird Secret-Management immer wichtiger. Außerdem will ich Vault in mein Ansible Playbook integrieren für Zero-Touch-Deployments.

Q2

Kubernetes - Der nächste Container-Level

Docker Compose ist großartig für Single-Node Deployments. Aber was, wenn ich mehrere Server habe? Was wenn ich Auto-Scaling brauche? Kubernetes ist der logische nächste Schritt. Das wird ein großes Lernprojekt, aber ich freue mich drauf.

Learning Plan: Erst minikube lokal, dann managed K8s Cluster, schließlich Migration der bestehenden Docker Compose Services. Helm Charts für Package Management.

Q3

Event Sourcing & CQRS - Beyond CRUD

Normale CRUD-APIs sind OK, aber was ist mit Audit-Trails? Rollbacks? Komplexen Business-Workflows? Event Sourcing könnte die Antwort sein. Statt Daten zu überschreiben, sammle ich Events. Das wäre perfekt für Lehrbericht-Workflows oder Lernfortschritt-Tracking.

Use Case: Azurrow könnte von Event Sourcing profitieren - jeder Lernschritt als Event, Replay für Analyse, unterschiedliche Read-Models für verschiedene Views.

Q4

Microservices & GraphQL - Modern APIs

Meine Spring Boot Monolithe werden langsam groß. Zeit, sie in kleinere, fokussierte Services aufzuteilen. Gleichzeitig will ich GraphQL ausprobieren - weniger API-Calls, bessere Performance für die Flutter Apps, type-safe queries.

Architecture Vision: User Service, Learning Service, Content Service - jeder mit eigener Database, kommuniziert über Events, GraphQL Gateway als einheitlicher API-Layer.

Weitere Ideen für die Zukunft

Infrastructure

  • GitOps mit ArgoCD: Push-to-Deploy Workflow
  • Service Mesh (Istio): Traffic Management, Security
  • Chaos Engineering: Wie robust ist meine Infrastructure wirklich?

Development

  • Kotlin Multiplatform: Shared Code zwischen Backend und Mobile
  • WebAssembly: Kotlin im Browser?
  • Machine Learning: Bessere Lern-Algorithmen für Azurrow