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 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…
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…
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…
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…
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 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-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…
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 …
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…
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 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…
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…
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 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 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…
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…
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 …
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 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…
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…
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…
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…
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 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 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 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 …
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…
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…
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…
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…
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…
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 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…
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…
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 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…
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 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 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…
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…
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-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 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…
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…
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…
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
In diesen kleinen Tutorial legen wir uns ein dreifaches und automatisiertes Backup auf 3 verschiednen Instanzen an. Verschüsselt wird da sganze vor dem Upload mit EncFS da sich dies für Linux einfach anbietet und auch den benötigten wenn auch nicht ultimativen Schutz anbietet. Wir installieren EncFS