RFC-0006: Gemeinschaftlich getragene Server-Infrastruktur#7
Open
antontranelis wants to merge 7 commits into
Open
RFC-0006: Gemeinschaftlich getragene Server-Infrastruktur#7antontranelis wants to merge 7 commits into
antontranelis wants to merge 7 commits into
Conversation
…frastruktur Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Schutz vor Key-Extraktion durch AI-Tools und kompromittierte Dependencies. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…icht auf NixOS - Titel: "Gemeinschaftlich getragene Server-Infrastruktur" - NixOS als Werkzeug, nicht als Überschrift - Getrennte Repos entfernt (nicht mehr relevant) - Hardware-Keys nur für privilegierte Zugänge - Code-Beispiele entfernt (Implementierungsdetail) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
RFC-0006: Gemeinschaftlich getragene Server-Infrastruktur
Zusammenfassung
Wir bauen eine Server-Infrastruktur auf, die gemeinschaftlich getragen, vollständig dokumentiert und reproduzierbar ist. Jede Server-Konfiguration liegt als Code in Git — transparent, versioniert, von mehreren Personen wartbar. Neue Server oder Community-Nodes lassen sich aus diesem Code aufsetzen. Es wird kein Web-basiertes Management-Panel eingesetzt — der Zugang erfolgt über SSH und Git.
Motivation
Busfaktor
Aktuell laufen alle kritischen Services (WoT Relay, Vault, Profiles, Eli) auf einem einzelnen Server. Die Konfiguration ist nicht systematisch dokumentiert — sie ist über die Zeit gewachsen. Wenn die verantwortliche Person ausfällt, kann niemand die Infrastruktur nachvollziehen oder warten.
Wachsende Infrastruktur
Mit IPFS-Nodes, weiteren Relay-Instanzen und zukünftigen Community-Nodes wächst die Anzahl der Server. Ohne ein einheitliches System wird jeder Server zum Snowflake, den nur die Person versteht, die ihn eingerichtet hat.
Community Self-Hosting
Langfristig sollen Communities eigene Nodes betreiben können. Dafür brauchen wir eine reproduzierbare, dokumentierte Server-Konfiguration, die andere klonen und anpassen können.
Security
Web-basierte Management-Panels stellen eine zusätzliche Angriffsfläche dar. Für eine Infrastruktur, die Vertrauen tragen soll, ist ein Ansatz ohne Web-Panel vorzuziehen — der Zugang läuft über SSH und Git, beides etabliert und gut absicherbar.
Vorschlag
1. Infrastructure as Code
Jede Server-Konfiguration — von Firewall und Users bis zu den Services — ist deklarativ als Code beschrieben und in Git versioniert. Als Werkzeug setzen wir NixOS ein, weil es den gesamten Server-Zustand deklarativ beschreibt und atomare Rollbacks ermöglicht.
2. Zentrales Infrastructure-Repository
Alle Server-Konfigurationen und wiederverwendbare Module leben in einem gemeinsamen Repository:
real-life-org/infrastructureJeder Host importiert die Module, die er braucht. Neuer Server? Neuen Ordner unter
hosts/, Module auswählen, deployen.3. Secrets Management
Secrets (API-Keys, Passwörter, Zertifikate) werden verschlüsselt im Repository gespeichert (sops-nix). Jeder Maintainer und jeder Server hat einen eigenen Schlüssel. So ist steuerbar, wer welche Secrets entschlüsseln kann.
4. Deployment
Kern-Infrastruktur (kontrolliert):
Eigenständige Server:
Eli schreibt und pflegt die Server-Konfigurationen. Das Team reviewed die Änderungen in Git-Diffs, ohne die Details der Konfigurationssprache kennen zu müssen.
5. Traefik als Reverse Proxy
Traefik als Reverse Proxy mit automatischem SSL via Let's Encrypt. Neue Docker-Container registrieren sich über Labels — kein manuelles Routing nötig.
6. App-Deployment via GitHub Actions + Watchtower
Docker bleibt auf allen Servern für Application-Deployments. Der Workflow:
Komplett pull-basiert, kein SSH-Zugang für CI nötig.
7. Hardware-Keys für privilegierte Zugänge
Root-Zugriff auf Server erfordert einen Hardware-Security-Key (z.B. Nitrokey 3, YubiKey). Der private Schlüssel existiert nur auf dem physischen Gerät und kann nicht extrahiert werden. Jede Verbindung erfordert physische Berührung des Sticks.
Hintergrund: Jeder im Team arbeitet mit AI-Tools, die als lokaler User laufen und grundsätzlich Zugriff auf alle Dateien haben — inklusive SSH Private Keys. Ein Hardware-Key schützt das Schlüsselmaterial für privilegierte Zugänge. Für eingeschränkte User (z.B. nur Docker-Rechte, kein sudo) ist ein Software-Key ausreichend.
8. Monitoring & Alerting
Uptime-Checks für alle kritischen Services. Benachrichtigung an mehrere Team-Mitglieder bei Ausfall.
Alternativen
Ansible + Debian/Ubuntu
Playbooks in YAML, idempotent, Git-versionierbar. Ansible beschreibt jedoch Schritte statt Zustand — Server können driften, kein atomisches Rollback, keine vollständige Reproduzierbarkeit.
Web-basierte PaaS-Panels (Coolify, Dokploy, CapRover)
Einfach zu bedienen, Web-UI. Aber: zusätzliche Angriffsfläche, lösen nur Application-Deployment statt OS-Level-Konfiguration.
Docker Compose + Git (Status Quo)
Pragmatisch, aber: nur Services sind beschrieben, das Host-OS bleibt undokumentiert. Kein Rollback auf OS-Ebene, keine Reproduzierbarkeit für neue Server.
Stand
Dieses Setup wurde bereits beispielhaft für Timos Server umgesetzt. Der Server läuft mit NixOS, Traefik und Watchtower, die Konfiguration liegt im
real-life-org/infrastructureRepo, und der End-to-End-Deploy-Workflow (git push → GitHub Action → ghcr.io → Watchtower → live) funktioniert.Offene Fragen