devops — 48 Artikel

Traefik vs Nginx - welcher Reverse Proxy fuer was

Nginx ist der Standard. Traefik ist die Docker-native Alternative. Caddy ist der einfachste Einstieg. Alle drei können als Reverse Proxy vor PHP-Anwendungen stehen — aber sie haben verschiedene Stärken. Nginx Der Klassiker. Maximal performant, extrem flexibel, überall dokumentiert. Konfiguration ist…

Pi-hole auf einem VPS als DNS-Blocker

Pi-hole blockiert Werbung und Tracker auf DNS-Ebene. Läuft nicht nur auf einem Raspberry Pi sondern auf jedem Linux-Server. Installation Das Installationsskript führt durch die Konfiguration. Als Upstream-DNS 1.1.1.1 oder 8.8.8.8 wählen. Zugriff absichern Pi-hole öffnet standardmäßig Port 80 für das…

Ticketsysteme selbst hosten - Zammad und Alternativen

Support-Anfragen per E-Mail zu verwalten funktioniert bis drei Personen gleichzeitig antworten und niemand weiß wer was gesagt hat. Ein Ticketsystem löst das — und muss nicht teuer sein. Warum ein Ticketsystem Jede Anfrage hat: einen Verantwortlichen einen Status (offen, in Bearbeitung, gelöst) eine…

Gitea Actions - CI fuer den eigenen Git-Server

Wer Gitea selbst hostet hat damit einen vollständigen Git-Server. Mit Gitea Actions kommt CI/CD dazu — GitHub Actions-kompatible Pipelines auf der eigenen Infrastruktur. Gitea Actions aktivieren Runner einrichten Der Runner führt die Pipeline-Jobs aus. Er kann auf demselben Server oder auf einem sep…

VPS-Auswahl - worauf man achten sollte

Es gibt Dutzende VPS-Anbieter. Hier was ich nach Jahren Erfahrung für relevant halte. Was wirklich zählt Netzwerk-Performance und -Stabilität ist wichtiger als rohe CPU-Leistung. Ein VPS mit 1 Gbps Uplink und guter Peering-Anbindung ist für die meisten Webprojekte besser als mehr RAM bei einem Anbie…

Bare Git Repository als Deploy-Mechanismus

Ein Bare Git Repository auf dem Server ist der einfachste Weg für automatisches Deployment ohne externe Dienste. Git push — fertig, der Code ist live. Bare Repository auf dem Server anlegen Ein Bare Repository hat keine Working Copy — nur die Git-Objekte. Das ist gewollt. post-receive Hook Der Hook …

Cloud-Migration - was man beachten sollte

Cloud-Migration ist kein Selbstzweck. Aber wenn der eigene Server-Stack wächst oder man Skalierbarkeit, Redundanz oder Managed Services will stellt sich irgendwann die Frage: was davon in die Cloud? Migration-Strategien Das 6R-Modell beschreibt verschiedene Herangehensweisen: Rehost (Lift & Shift): …

Cloud-Grundlagen fuer Entwickler - IaaS PaaS SaaS

Cloud-Begriffe werden oft als Marketing verwendet ohne klare Definition. Für technische Entscheidungen ist die Unterscheidung aber relevant — sie bestimmt was man selbst verwaltet und wofür man zahlt. Das Spektrum Auf dem einen Ende: alles selbst machen (eigene Server im Keller). Auf dem anderen End…

Traefik als Reverse Proxy mit automatischen Zertifikaten

Træfik ist ein Reverse Proxy der sich besonders gut mit Docker verträgt. Neue Container werden automatisch erkannt und bekommen ohne manuelle Konfiguration ein HTTPS-Zertifikat. docker-compose.yml Anwendung registrieren Jeder Container bekommt Labels die Træfik sagen wie er zu erreichen ist. Sobald …

MySQL Volltextsuche mit FULLTEXT Index

Suche über ist langsam und unflexibel. Kein Index wird genutzt, keine Relevanz-Sortierung, kein Stemming. MySQL's eingebaute Volltextsuche ist für viele Anwendungsfälle eine bessere Wahl ohne externen Dienst. Index anlegen Suche ausführen Der gibt die Relevanz an — höherer Wert bedeutet bessere Über…

Capacity Planning - wann ein VPS zu klein wird

Der Server läuft gut — bis er es nicht mehr tut. Wer erst merkt dass ein System zu klein ist wenn es unter Last kollabiert hat zu lange gewartet. Die wichtigsten Metriken beobachten Trends erkennen Einmalwerte sagen wenig. Trend über Zeit sagt alles. Mit Prometheus und Grafana automatisch: Predictio…

Miniflux - RSS-Reader selbst hosten

Miniflux ist ein schlanker RSS-Reader der sich selbst hosten lässt. Kein JavaScript-Framework, keine Bloat — nur lesen. Installation mit Docker Miniflux braucht PostgreSQL. Am einfachsten mit Docker Compose. Nginx Reverse Proxy Fever API für externe Apps Miniflux unterstützt die Fever-API damit mobi…

Datenbankmodellierung - Normalisierung in der Praxis

Normalisierung ist kein akademisches Konzept. Sie verhindert konkrete Probleme: doppelte Daten, Update-Anomalien, Konsistenzprobleme. Man muss die Normalformen nicht auswendig kennen um sie richtig anzuwenden. Das Problem ohne Normalisierung Wenn ein Kunde seinen Namen ändert muss man alle Zeilen mi…

Eigenen Git-Server mit Gitea aufsetzen

Wer seinen Code nicht bei GitHub oder GitLab lassen will kann Gitea auf dem eigenen Server betreiben. Gitea ist schlank, braucht wenig Ressourcen und fühlt sich trotzdem wie ein vollwertiges Git-Portal an. Installation mit Docker Der einfachste Weg ist Docker Compose. Gitea ist jetzt unter erreichba…

Nextcloud auf einem VPS einrichten

Nextcloud ist die praktischste Alternative zu Google Drive und Dropbox für alle die ihre Daten selbst kontrollieren wollen. Eine saubere Installation auf einem eigenen Server dauert etwa eine Stunde. Voraussetzungen VPS mit mindestens 2 GB RAM, Nginx, PHP 8.3-FPM, MariaDB, Let's Encrypt. Datenbank a…

Disaster Recovery fuer kleine Projekte

Disaster Recovery klingt nach Enterprise-Thema. Für kleine Projekte ist es einfacher als man denkt und wichtiger als man hofft. Was DR bedeutet Der Server brennt ab. Die Daten sind weg. Wie lange bis alles wieder läuft und wie viel geht dabei verloren? RTO (Recovery Time Objective): Wie lange darf d…

Webhook-Deployment - automatisch deployen nach Git Push

Mit einem Webhook kann ein automatisch das Deployment auf dem Server auslösen. GitHub, Gitea und GitLab unterstützen alle Webhooks. Empfänger-Script auf dem Server Nginx-Konfiguration Webhook in GitHub einrichten Repository → Settings → Webhooks → Add webhook. Payload URL: Content type: Secret: dass…

Monitoring mit Netdata

Netdata ist ein Monitoring-Tool das sich in einer Minute installieren lässt und sofort loslegt. Kein stundenlanges Konfigurieren, keine Datenbank einrichten, einfach laufen lassen. Installation Danach ist Netdata unter erreichbar. Was es von Haus aus überwacht CPU, RAM, Disk I/O, Netzwerk, laufende …

Vaultwarden - Passwort-Manager im Team

Passwörter in einer geteilten Textdatei, per Slack verschickt oder im Browser-Passwortmanager der nicht synchronisiert — das sind die Alternativen die Teams ohne einen richtigen Passwort-Manager nutzen. Alle sind schlechter als Vaultwarden. Was Vaultwarden ist Vaultwarden ist eine inoffizielle Bitwa…

Microservices vs Monolith - eine ehrliche Einschaetzung

Microservices sind seit Jahren der heiße Hype. Jedes neue System soll sofort in Services aufgeteilt werden. Die meisten Projekte brauchen das nicht — und zahlen trotzdem den Preis. Was Microservices kosten Netzwerk-Overhead. Jeder Service-Aufruf ist ein HTTP-Request mit Latenz, Retry-Logik und mögli…

Container Security - Docker haerten

Docker-Container mit Standardeinstellungen sind nicht sicher konfiguriert. Root-Prozesse, beschreibbare Dateisysteme, übermäßige Capabilities — alles Default. Das lässt sich mit wenig Aufwand deutlich verbessern. Non-root User Wenn der Container kompromittiert wird hat der Angreifer keinen Root-Zuga…

Business Continuity - Betrieb aufrechterhalten wenn es kriselt

Disaster Recovery beschreibt wie man nach einem Ausfall wiederherstellt. Business Continuity beschreibt wie man den Betrieb während eines Ausfalls aufrechterhalten kann. Der Unterschied ist die Frage: wie lang darf es ausfallenoder: wie viel Ausfall ist inakzeptabel? BCP und DRP — Abgrenzung Busines…

Sichere Datenbankmigrationen

Datenbankmigrationen auf einer Produktionsdatenbank mit laufendem Traffic sind die häufigste Ursache für ungeplante Downtimes. Die meisten Probleme sind vermeidbar. Was gefährlich ist MySQL/MariaDB sperrt bei manchen ALTERs die Tabelle für die gesamte Dauer. Bei 50 Millionen Zeilen dauert das. Onlin…

SQLite fuer kleine Tools und Prototypen

Nicht jedes Projekt braucht einen MySQL-Server. SQLite ist eine Datei, braucht keinen Daemon, keine Konfiguration, keine Credentials — und ist für viele Anwendungsfälle vollkommen ausreichend. Wann SQLite CLI-Tools die Daten persistieren müssen Interne Admin-Tools mit wenig gleichzeitigen Schreibzug…

Hetzner Cloud API mit cURL

Hetzner hat eine saubere REST-API mit der man Server, Firewalls, DNS und mehr per Script verwalten kann. Praktisch für automatisierte Setups oder wenn man mal schnell einen Server hochziehen will. API-Token erstellen In der Hetzner Cloud Console unter Security → API Tokens einen neuen Token mit Read…

Git Hooks - pre-commit und post-receive

Git Hooks sind Scripts die automatisch bei bestimmten Git-Aktionen ausgeführt werden. Damit lassen sich Code-Checks vor dem Commit erzwingen oder Deployments automatisieren. Wo die Hooks liegen Alle -Dateien sind Beispiele. Um einen Hook zu aktivieren die Endung entfernen und ausführbar machen. pre-…

Vaultwarden - Bitwarden selbst hosten

Vaultwarden ist eine inoffizielle aber vollständig kompatible Implementierung des Bitwarden-Servers. Läuft auf einem kleinen VPS mit kaum Ressourcen und ist mit allen Bitwarden-Clients kompatibel. Installation mit Docker verhindert dass sich Fremde registrieren können. Port nur auf localhost binden …

3-2-1 Backup-Strategie

Backups die nicht getestet wurden sind keine Backups. Das klingt nach Klischee bis man ein Backup zurückspielen muss und feststellt dass es seit zwei Monaten leer ist. Die 3-2-1-Regel 3 Kopien der Daten auf 2 verschiedenen Medien/Systemen davon 1 Off-Site Konkret: Produktivdatenbank, Backup auf dems…

MariaDB Replikation einrichten

Replikation trennt Lese- und Schreib-Last auf verschiedene Server. Der Primary nimmt alle Writes, ein oder mehrere Replicas beantworten SELECT-Anfragen. Außerdem ein gutes Fundament für Hochverfügbarkeit. Konzept Primary schreibt alle Änderungen in das Binlog. Replica verbindet sich, liest das Binlo…

Cronjob-Monitoring - fehlgeschlagene Jobs erkennen

Cronjobs scheitern lautlos. Kein Alert, keine E-Mail, nichts. Die Datenbank wird seit drei Wochen nicht gesichert und niemand weiß es. Das Grundproblem macht keinen Unterschied zwischen erfolgreich und fehlgeschlagen. Der Job läuft, exit code 1, fertig — bis jemand manuell nachschaut. Output per E-M…

Alerting richtig aufsetzen

Monitoring ohne Alerting ist wie ein Rauchmelder ohne Alarm — man sieht den Brand in Grafana, aber nur wenn man gerade draufschaut. Was alarmiert werden sollte Nicht jede Anomalie braucht einen Alert. Zu viele Alerts führen zu Alert-Fatigue — man gewöhnt sich dran und ignoriert sie. Gute Alerts: Feh…

Prometheus und Grafana - Metriken verstehen

Logs sagen was passiert ist. Metriken sagen wie es der Anwendung geht. Beides braucht man. Prometheus sammelt Metriken, Grafana zeigt sie an. Das Duo ist zum Standard für selbstgehostetes Monitoring geworden. Wie Prometheus funktioniert Prometheus pullt Metriken von Endpunkten ab — standardmäßig auf…

KVM Snapshots erstellen und wiederherstellen

Wer virtuelle Maschinen mit KVM betreibt sollte vor größeren Änderungen einen Snapshot machen. Geht schnell und erspart im Zweifelsfall eine Menge Arbeit. Voraussetzung: VM im qcow2-Format Snapshots funktionieren nur mit qcow2-Images, nicht mit raw. Das Format einer laufenden VM prüfen. Dann die Dat…

Git Grundlagen die man taeglich braucht

Git kann viel. Im Alltag braucht man aber immer wieder dieselben Befehle. Hier die Grundlagen ohne Ballast. Repository einrichten Status und Änderungen Commit erstellen Branches Remote History Rückgängig machen Letzte Änderungen einer Datei verwerfen. Letzten Commit rückgängig machen aber Änderungen…

MinIO - S3-kompatibler Object Storage selbst hosten

Datei-Uploads in auf dem Webserver ablegen funktioniert. Bis der Server voll ist, man skalieren will, oder man denselben Storage aus mehreren Diensten braucht. MinIO ist S3-kompatibel, Open Source und läuft auf einem normalen VPS. Installation MinIO läuft jetzt auf Port 9000 (API) und 9001 (Web-Cons…

Docker Compose fuer lokale Entwicklung

Lokale Entwicklungsumgebungen sind meistens chaotisch. Verschiedene PHP-Versionen für verschiedene Projekte, MySQL-Versionen die nicht passen, Konflikte zwischen Services. Docker Compose löst das sauber. Grundstruktur Dockerfile für PHP Wichtige Befehle Volumes vs. Bind Mounts Bind Mounts für Code —…

Uptime Kuma - eigenes Monitoring einrichten

Uptime Kuma ist ein selbst gehostetes Monitoring-Tool mit einer übersichtlichen Oberfläche. Prüft ob Websites, Server und Dienste erreichbar sind und verschickt Benachrichtigungen wenn nicht. Installation mit Docker Danach unter erreichbar. Beim ersten Aufruf Benutzer anlegen. Was man überwachen kan…

Terraform - Infrastruktur als Code

Server per Klick in einem Web-Interface anlegen funktioniert. Bis man es das zweite Mal tun muss, vergessen hat was man beim ersten Mal geklickt hat, oder fünf Server mit denselben Einstellungen braucht. Terraform beschreibt Infrastruktur in Text-Dateien. macht daraus echte Ressourcen. Grundkonzept …

GitHub Actions - CI-Pipeline in einer YAML-Datei

GitHub Actions hat CI/CD für kleine Projekte drastisch vereinfacht. Keine externe CI-Instanz, keine Konfiguration in einem separaten System — alles liegt im Repository. Grundstruktur Commit, push — fertig. Der erste Run läuft automatisch. Security-Checks einbauen Deploy-Job nach erfolgreichem Test S…

Docker auf einem VPS - wann es sich lohnt und wann nicht

Docker wird gerne als Lösung für alles verkauft. Auf einem kleinen VPS ist das aber nicht immer die richtige Wahl. Wann Docker auf einem VPS Sinn macht Wenn man mehrere Dienste isoliert betreiben will ohne eine vollständige VM pro Dienst aufzusetzen. Oder wenn man Software deployen will die viele Ab…

Ansible - Server-Konfiguration reproduzierbar machen

Wer Server manuell konfiguriert hat irgendwann das Problem: der zweite Server sieht anders aus als der erste. Drei Monate später weiß niemand mehr warum. Ansible löst das. Was Ansible macht Ansible verbindet sich per SSH zu Servern und führt Tasks aus. Kein Agent, kein Daemon. Nur SSH und Python auf…

Structured Logging - Logs die man auswerten kann

Freitext-Logs sind gut zum Lesen. Schlecht zum Auswerten. Wenn man nach einem Fehler sucht und nicht funktioniert weil das Logging-Format nicht konsistent ist verschwendet man Zeit. Structured Logging Jeder Log-Eintrag ist ein JSON-Objekt mit definierten Feldern. Ugly in der Konsole, perfekt für Log…

Docker Multi-Stage Builds

Docker-Images werden schnell riesig wenn man nicht aufpasst. Build-Tools, Dev-Dependencies, temporäre Dateien landen alle im finalen Image. Multi-Stage Builds lösen das sauber. Das Problem Composer, Git, alle Dev-Dependencies — alles landet im Produktions-Image. Ergebnis: 500+ MB statt 50 MB. Multi-…

rsync - Dateien effizient sichern und synchronisieren

rsync ist eines der nützlichsten Werkzeuge auf einem Linux-System. Es überträgt nur was sich geändert hat, kann verschlüsselt über SSH arbeiten und eignet sich sowohl für lokale Backups als auch für die Synchronisierung zwischen Servern. Einfaches lokales Backup Der Slash am Ende von ist wichtig. Mi…

MySQL Datenbank automatisch sichern und rotieren

Ein einfaches Bash-Script das täglich eine MySQL-Datenbank sichert, komprimiert und alte Backups automatisch löscht. Läuft bei mir seit Jahren ohne Probleme auf mehreren Servern. Das Script Das Script speichern wir zum Beispiel unter und machen es ausführbar. Cronjob einrichten Täglich um 3 Uhr nach…

MySQL EXPLAIN lesen und Indizes setzen

Eine langsame Query zu finden ist einfach. Zu verstehen warum sie langsam ist und wie man sie schnell macht braucht . EXPLAIN ausführen Output (vereinfacht): Die wichtigsten Spalten: type — wie die Tabelle gescannt wird, von gut nach schlecht: / — perfekt, einzelne Zeile per Primary Key — Index-Look…

Virsh check and restart Script

Wir erstellen ein Bash Script um beendete Virtuelle Maschinen automatisch neuzustarten. Dazu gehen wir wie folgt vor und da sganze dauert auch keine 5Minuten um es einzurichten. platzhalter platzhalter platzhalter Cronjob eintragen