Mein VPS und Docker Setup
In diesem Beitrag zeige ich dir, wie mein aktuelles Server-Setup aussieht. Ich setze auf einen schlanken Virtual Private Server (VPS), Docker-Container und viel Automatisierung.
Mein VPS
Mein Server wird bei Strato gehostet. Ich habe mich bewusst für ein kleineres Paket entschieden, da es für meine Zwecke völlig ausreicht. Alle Anwendungen laufen isoliert als Docker-Container, orchestriert via Docker Compose.
Der Server hat folgende Spezifikationen:
- CPU: 2 Cores
- RAM: 4 GB
- Speicher: 120 GB
- OS: Ubuntu
Infrastruktur & Sicherheit
nginx
Der wichtigste Service in meinem Setup ist der nginx. Er läuft in einem extrem leichtgewichtigen Alpine Linux Container und verbraucht kaum Ressourcen.
Der nginx fungiert als Reverse Proxy und ist das einzige “Eingangstor”, das öffentlich im Internet steht. Er nimmt Anfragen entgegen und leitet sie intern an den passenden Container weiter. Das erhöht die Sicherheit enorm, da kein anderer Service direkt dem Internet ausgesetzt ist.
Certbot
Für die Sicherheit der Verbindungen (SSL/TLS) nutze ich Certbot. Dieser Container läuft nicht dauerhaft, sondern ist ressourcensparend konfiguriert: Eine GitHub Action weckt den Certbot jede Nacht auf. Er prüft, ob Zertifikate ablaufen, erneuert sie bei Bedarf automatisch und beendet sich danach wieder.
Meine Website: Astro
Astro ist das Framework hinter domzei.dev. Ich habe mich gegen Schwergewichte wie WordPress oder Contentful entschieden. Astro erlaubt mir, Blogbeiträge einfach als Markdown-Dateien zu schreiben.
Das System rendert beim Bauen statisches HTML, das dann von einem dedizierten Webserver ausgeliefert wird. Das Ergebnis: Maximale Performance und keine Ladezeiten.
Datenschutz-Hinweis: Meine Seite verwendet keine Cookies und benötigt daher keinen nervigen Cookie-Banner. Das macht die Seite vollständig DSGVO-konform. Ich speichere keinerlei personenbezogene Daten von dir.
Self-Hosted Tools
Trilium
Trilium ist mein modernes “Gehirn”. Ich hoste dieses Notizbuch selbst und greife per Mac-App oder Browser darauf zu. Jede Nacht sichert eine GitHub Action meine Notizen, legt sie in einem privaten GitHub Repository ab und hält die Versionen für 7 Tage vor.
Portainer
Mit Portainer verwalte ich meine Docker-Umgebung bequem über eine grafische Oberfläche im Browser. Das erspart mir für alltägliche Aufgaben (wie Container Neustarts oder Log-Checks) den Weg über das SSH-Terminal.
Monitoring & Analytics
Uptime Kuma
Uptime Kuma überwacht rund um die Uhr, ob meine Services erreichbar sind. Sollte ein Container ausfallen, werde ich sofort per E-Mail alarmiert. Den aktuellen Status kannst du jederzeit hier einsehen.
Dozzle
Dozzle ist mein zentraler Log-Viewer. Er aggregiert die Logs aller laufenden Docker-Container in einer Echtzeit-Weboberfläche. Das macht die Fehlersuche extrem einfach, ohne dass ich mich auf den Server einwählen muss.
Umami
Umami ist meine datenschutzfreundliche Alternative zu Google Analytics. Dafür laufen zwei Container: Einer für die App und einer für die PostgreSQL-Datenbank. Ein kleines Skript im Head der Website sammelt anonyme Nutzungsdaten (z.B. welche Seiten beliebt sind).
Wichtig: Umami trackt ohne Cookies und speichert keine IP-Adressen.
Automatisierung
Ich bin ein Fan von “Infrastructure as Code”. Ich konfiguriere nichts manuell per Hand, sondern lasse GitHub Actions die Arbeit erledigen.
Meine Workflows:
- Deploy to VPS: Startet automatisch bei Änderungen am Main-Branch. Die Action verbindet sich mit dem Server und aktualisiert die Docker-Container.
- Deploy Astro Blog: Baut meine Website aus den Markdown-Files, erstellt ein Package und stößt das Deployment auf dem VPS an.
- Renew SSL Certificates: Startet Certbot und prüft nachts (03:15 Uhr), ob Zertifikate aktualisiert werden müssen.
- Create Backup: Sichert nachts (04:15 Uhr) meine Trilium-Notizen in ein privates Repo.
Die Repositories
Alles, was ich hier beschrieben habe, ist in zwei GitHub-Repositories organisiert:
- Config-Repo: Enthält das docker-compose.yml (die Bauanleitung für alle Services), Nginx-Konfigurationen und die GitHub Actions Workflows.
- Website-Repo: Enthält den Quellcode und die Markdown-Inhalte für diesen Blog.