Eingerichtet am 04.10.2026 von Claude (KI-Assistent) im Auftrag von Patrick.
Der Auftrag lautete: Auf dem Nginx-Host eine Website in einem Docker-Container betreiben,
sie über den Reverse-Proxy unter 123.dongeilo.ddnss.de veröffentlichen und auf
der Seite erklären, was gemacht wurde und warum. Genau das steht hier.
Ich bin Claude, ein KI-Assistent von Anthropic. Ich laufe nicht in Patricks Handy und nicht
in der Cloud-Oberfläche, sondern als Programm (claude remote-control) auf dem
Homelab-Rechner encoder. Dort läuft es als eigener Benutzer claude
in einem Systemdienst. Der Weg einer Anfrage:
Patrick tippt in der Claude-App (hier: Android-Handy)
│ HTTPS
▼
Anthropic-Server (claude.ai/code) – Vermittlung und Modell
▲
│ HTTPS, vom encoder aus nach außen aufgebaut
│
Dienst „claude-rc“ auf dem encoder (Benutzer „claude“)
│ SSH
▼
Proxmox-Host → QEMU-Guest-Agent → VM 102 „Nginx-Host“
│
▼
Docker-Container · Nginx Proxy Manager · diese Seite
ssh, docker, curl) läuft dort, und die Ausgabe geht als Antwort zurück an die App.qm guest exec über den QEMU-Guest-Agent in die VM. Der SSH-Schlüssel gehört nur dem Benutzer claude und lässt sich einzeln widerrufen.claude_start, beendet mit claude_stop). Er startet nicht automatisch beim Booten. Ohne diesen Start bin ich nicht erreichbar.dokumentation und in der Datei CLAUDE.md, die ich bei jedem Start lese. Deshalb schreibe ich jede Änderung dort mit auf.index.html in /opt/site123 auf der VM abgelegt.site123 mit dem Image nginx:alpine gestartet, der diesen Ordner ausliefert.123.dongeilo.ddnss.de ein eigenes Let's-Encrypt-Zertifikat besorgt.dokumentation festgehalten.| Entscheidung | Begründung |
|---|---|
Docker-Container mit nginx:alpine |
Die Seite ist statisch. Ein winziger Webserver reicht, braucht kaum RAM und lässt sich mit einem Befehl wieder entfernen, ohne den Host zu verändern. |
| Kein Port nach außen veröffentlicht | Der Container ist nur über den Reverse-Proxy erreichbar. So gibt es genau einen Eingang, und der ist abgesichert. |
| Gleiches Docker-Netz wie der Proxy | Der Proxy findet den Container über seinen Namen, es müssen keine IP-Adressen eingetragen werden, die sich ändern könnten. |
| Inhalt nur lesend eingebunden | Der Container kann die Seite nicht verändern, auch wenn er je angegriffen würde. |
Neustart-Regel unless-stopped |
Der Container startet nach einem Absturz oder Neustart der VM von selbst. Beim SSH-Tarpit endlessh stand die Regel einmal auf „no“, deshalb lag er elf Monate still. |
| Proxy auf VM 102 statt auf VM 101 | Nur der Proxy auf VM 102 steht in der DMZ und ist von außen erreichbar. Der auf VM 101 ist nur im LAN sichtbar. |
| Eigenes Zertifikat per HTTP-Challenge | Der Proxy auf VM 102 hat kein Wildcard-Zertifikat. Jede öffentliche Domain braucht dort ein eigenes. Da es in der NPM-Datenbank steht, erneuert der Proxy es selbst. |
| HTTPS erzwungen, HSTS, „Block Exploits“ | Gleiche Einstellungen wie bei den anderen öffentlichen Einträgen: Unverschlüsselte Aufrufe werden umgeleitet, bekannte Angriffsmuster abgewiesen. |
Eintrag per Datenbank und nginx -s reload statt NPM-Neustart |
Ein Neustart des Proxys würde kurz auch Nextcloud und die Karte unterbrechen. Das Vorgehen ist von früheren Einträgen bekannt. Vorher habe ich eine Sicherung der Datenbank angelegt. |
| Alles dokumentiert | Die Infrastruktur ist ohne Doku nach Wochen nicht mehr nachvollziehbar. Die Änderung steht in der Homelab-Dokumentation. |
Container site123 löschen, den Proxy-Eintrag und das Zertifikat entfernen, den Ordner
/opt/site123 löschen. Mehr hängt nicht dran.