Ich entwickle Infrastruktur

Infrastruktur ist die Umgebung, in der deine Software läuft. Dazu gehören Server, Hosting, Deployments, Netzwerke, Speicher und die Werkzeuge, die den Betrieb am Laufen halten.

Egal, ob du die Infrastruktur für ein neues Projekt aufsetzt oder mit einer bestehenden Umgebung arbeitest, ich kann dich dabei unterstützen. Das kann eine zuverlässige Umgebung, bessere Deployments, eine verständliche Dokumentation oder eine einfacher zu wartende bestehende Lösung bedeuten.

Ich setze Infrastructure as Code und Automatisierung dort ein, wo sie einen echten Mehrwert bieten. Das Ziel ist eine Umgebung, die verständlich, reproduzierbar und passend für die darauf laufende Software ist.


Konfigurations-management

Infrastruktur lässt sich einfacher verwalten, wenn ihre Konfiguration gemeinsam mit der davon abhängigen Software definiert wird. Configuration as Code macht Änderungen nachvollziehbar, wiederholbar und über verschiedene Umgebungen hinweg reproduzierbar.

Ich setze diesen Ansatz dort ein, wo er sinnvoll ist, von der Serverkonfiguration über Anwendungsumgebungen bis zu Einstellungen für Deployments.

  1. Ansible

    Ansible automatisiert die Konfiguration von Servern mit einfachen, verständlichen Dateien. Ich nutze es, um Server einheitlich zu konfigurieren und Änderungen, Updates und Deployments wiederholbar zu machen.

    • Playbook
    • Roles
    • Inventory
    • Vault
  2. Bastille

    Bastille verwaltet FreeBSD Jails und erleichtert das Erstellen und Pflegen isolierter Umgebungen. Damit lassen sich Dienste voneinander trennen, ohne das zugrunde liegende System unnötig kompliziert zu machen.

    • FreeBSD
    • Jails
    • Templates

Gutes Konfigurationsmanagement reduziert Wissen, das sonst nur im Kopf einzelner Personen steckt. Dadurch lassen sich Systeme einfacher verstehen, wiederherstellen und verändern, wenn sich Menschen, Software oder Anforderungen ändern.

Ich entwickle auch Backends

Infrastruktur und Anwendungscode müssen zusammenspielen. Ich kann das Backend entwickeln oder verbessern, das auf deiner Infrastruktur läuft, egal ob es um ein neues System, eine Integration oder Änderungen an bestehender Software geht.

So entwickle ich Backends

Komplexere Setups

Manche Anwendungen brauchen mehr als einen Server und ein Deployment-Skript. Container, Jails und Orchestrierungswerkzeuge können sinnvolle Isolation und Flexibilität bieten, wenn die Software oder Umgebung das erfordert.

Ich wähle diese Werkzeuge nach den tatsächlichen Anforderungen der Anwendung aus. Eine kompliziertere Umgebung ist nur dann sinnvoll, wenn sie ein konkretes Problem löst.

  1. FreeBSD Jails

    FreeBSD Jails isolieren Anwendungen und Dienste innerhalb eines gemeinsamen Hostsystems. Sie benötigen weniger Ressourcen als vollständige virtuelle Maschinen und eignen sich gut, wenn mehrere unabhängige Umgebungen auf einem Server laufen sollen.

    • bhyve
    • ZFS
    • Bastille
  2. Docker

    Docker verpackt Anwendungen zusammen mit ihren Abhängigkeiten in Containern. Dadurch lassen sich Umgebungen in Entwicklung, Tests und Produktion einfacher reproduzieren.

    • Dockerfile
    • Docker Compose
    • Podman
  3. Kubernetes

    Kubernetes verwaltet containerisierte Anwendungen über mehrere Rechner hinweg. Es kann Deployments, Skalierung, Service Discovery und Wiederherstellung automatisieren und eignet sich damit für Systeme, deren Komplexität den zusätzlichen Aufwand rechtfertigt.

    • Helm
    • Prometheus
    • minikube

Docker, Kubernetes, Jails und ähnliche Werkzeuge haben jeweils ihren Platz. Die richtige Wahl hängt von der Anwendung, ihrer Bereitstellung und davon ab, wie das System langfristig betrieben werden soll.

Ich entwickle auch Websites

Infrastruktur ist nur dann nützlich, wenn die darauf laufende Software gut funktioniert. Ich kann die Website entwickeln oder verbessern, die auf deinen bestehenden Systemen aufbaut, von einer einfachen Website bis zu einer umfangreicheren Webanwendung.

So entwickle ich Websites

Automatisierung und Zuverlässigkeit

Zuverlässige Infrastruktur profitiert davon, wiederkehrende manuelle Arbeit zu reduzieren. Automatisierte Deployments, Tests, Backups und Monitoring machen es einfacher zu erkennen, was gerade passiert, und Probleme zu beheben, wenn etwas schiefgeht.

Ich automatisiere die Teile, bei denen es sich lohnt, und halte den Rest verständlich.

  1. Continuous Integration

    Continuous Integration automatisiert Aufgaben wie das Bauen und Testen von Software, sobald Änderungen vorgenommen werden. Deployment-Pipelines können zusätzlich Veröffentlichungen automatisieren und den Weg von einer Codeänderung bis in die Produktion nachvollziehbarer machen.

    • Forgejo
    • GitHub Actions
    • GitLab CI
  2. Metriken

    Metriken zeigen, wie sich Systeme und Anwendungen über die Zeit verhalten. Ich nutze sie, um Ressourcenverbrauch zu verstehen, ungewöhnliches Verhalten zu erkennen und die Fehlersuche zu erleichtern.

    • Grafana
    • Prometheus
    • Consul
  3. Alarmierung

    Alarme machen wichtige Veränderungen im Verhalten eines Systems sichtbar und geben dir die Möglichkeit, darauf zu reagieren. Gute Alarmierung konzentriert sich auf Probleme, die tatsächlich eine Reaktion erfordern, statt jede kleine Schwankung zum Vorfall zu machen.

    • Alertmanager
    • Prometheus
    • Zabbix

Automatisierung sollte den Betrieb einfacher machen und keine zusätzliche Ebene unnötiger Komplexität schaffen. Das Ziel ist eine Umgebung, in der Deployments wiederholbar sind, Probleme schneller auffallen und Routineaufgaben weniger Aufwand verursachen.

Bau deine Infrastruktur

Du setzt die Infrastruktur für ein neues Projekt auf, möchtest eine bestehende Umgebung verbessern oder deine Deployments zuverlässiger machen? Erzähl mir, was dir vorschwebt.

Du brauchst dafür kein technisches Konzept. Eine Beschreibung deiner aktuellen Umgebung, einer gewünschten Änderung oder der Stelle, an der es gerade Probleme gibt, reicht für den Anfang.

Erzähl mir von deiner Infrastruktur

Photo of Tobias Tom