larpaso-website/DEPLOYMENT_CLAUDE.md
Pascal Scholz 50e08c65b6 DEPLOYMENT_CLAUDE: überzählige Zeile entfernt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 22:18:12 +00:00

123 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DEPLOYMENT_CLAUDE.md – Claude-Remote-Server auf dem VPS
Auf dem VPS laufen für Pascal und Lara je ein Claude-Code-Container im
Remote-Control-Server-Modus. Sitzungen startet ihr über
[claude.ai/code](https://claude.ai/code) oder die Claude-App (auch vom
Tablet). Die Sitzungen von Pascal und Lara reden über ein gemeinsames
MCP-Postfach miteinander.
Quellcode: Ordner `claude-remote/` in diesem Repo. Auf dem Server liegt eine
Kopie unter `~/claude-stack` (Compose-Projekt `claude`).
## Aufbau
| Container | Aufgabe |
| --- | --- |
| `claude-pascal` | Claude Code mit Pascals Login, je ein Remote-Control-Server für `larpaso` und `youtube` |
| `claude-lara` | dasselbe mit Laras Login |
| `claude-postfach-1` | MCP-Postfach (Nachrichten zwischen den beiden) |
- Eigenes Docker-Netz `claude_claude`. **Kein** Zugang zum Netz `web`, keine
Host-Ports, kein Caddy-Eintrag, **kein Docker-Socket**. Remote Control
baut nur ausgehende Verbindungen zu Anthropic auf.
- Projekte im Container: `~/projekte/larpaso`, `~/projekte/youtube`.
Neue Sitzungen bekommen je einen eigenen Git-Worktree (`--spawn worktree`).
- `/shared` ist ein gemeinsamer Ordner beider Container für große Dateien
(Videos, Audio).
- Limits: je Claude-Container 1,5 CPU / 2,5 GB RAM, Postfach 128 MB.
- Deployment der Website bleibt bei Pascal per SSH. Die Claude-Container
können nichts deployen.
## Einmalige Einrichtung (noch offen)
### 1. Repo `youtube` in Forgejo anlegen (Pascal)
Forgejo → Neues Repository → Besitzer `pascal`, Name `youtube`, **leer**
(keine README, keine .gitignore). Lara bei Bedarf als Mitarbeiterin
eintragen.
Danach die vorbereitete Grundstruktur pushen (Claude erledigt das auf
Zuruf).
### 2. SSH-Keys der Container in Forgejo eintragen
Die Keys stehen im Log der Container:
```
docker logs claude-pascal 2>&1 | grep -A1 "Forgejo-SSH-Key"
docker logs claude-lara 2>&1 | grep -A1 "Forgejo-SSH-Key"
```
- Pascals Key → in Pascals Forgejo-Profil (Einstellungen → SSH-Schlüssel).
- Laras Key → in Laras Forgejo-Profil.
Der Container klont die Repos danach von selbst (Versuch jede Minute).
### 3. Claude-Login und Freigaben (jede Person für ihren Container)
Per SSH auf den Server, dann:
```
docker exec -it claude-pascal claude
```
(Lara: `claude-lara`.) Dort `/login` ausführen, den angezeigten Link im
Browser öffnen, **mit dem eigenen Claude-Account** anmelden, Code
zurückkopieren. Mit `/exit` beenden.
Danach einmalig die Rückfragen von Remote Control beantworten:
```
docker exec -it claude-pascal tmux attach -t larpaso
```
- `Trust …? [y/N]` → `y`
- `Enable Remote Control? (y/n)` → `y`
- ggf. Spawn-Modus → `2` (worktree)
Mit **Strg+b, dann d** lösen (nicht Strg+C, das beendet den Server). Dasselbe
für `-t youtube`.
Lara hat keinen SSH-Zugang – den Login-Schritt für sie macht Pascal per
`docker exec` und schickt Lara den Login-Link. Sie meldet sich an und gibt
ihm den Code zurück.
### 4. Testen
claude.ai/code bzw. Claude-App öffnen → die Umgebungen `larpaso` und
`youtube` auf `claude-pascal` erscheinen → neue Sitzung starten.
## Postfach
MCP-Server `postfach` mit den Tools `send_message`, `read_messages` und
`list_messages`. Ungelesene Nachrichten meldet ein Hook automatisch beim
Start einer Sitzung und bei jedem Prompt. Die Nachrichten liegen im Volume
`claude_postfach-data` (`messages.json`).
Ihr könnt Claude auch direkt bitten, z. B.: „Schreib Lara ins Postfach,
dass die Startseite überarbeitet ist."
## Gemeinsamer Ordner auf dem Host (`/srv/shared`)
Das Volume `claude_shared` (in den Containern `/shared`) ist auf dem Host
unter `/srv/shared` eingehängt, damit Pascal und Lara per `scp` ohne `sudo`
Dateien hochladen und holen können (Anleitung: `ONBOARDING_LARA.md`,
Abschnitt 9). Ordner darin sind gruppen-schreibbar mit gesetztem
Gruppen-Bit (Gruppe gid 1000 = Container-Nutzer `node`).
Einmalig einrichten:
```
sudo mkdir -p /srv/shared
echo '/var/lib/docker/volumes/claude_shared/_data /srv/shared none bind 0 0' | sudo tee -a /etc/fstab
sudo systemctl daemon-reload
sudo mount /srv/shared
```
Hochgeladen wird als `deploy` (uid/gid 1000, also schon in der richtigen
Gruppe). Ein anderer Nutzer bräuchte
`sudo usermod -aG deploy <user>` und eine neue Anmeldung.
## Betrieb
```
cd ~/claude-stack
docker compose -p claude ps # Status
docker compose -p claude logs -f claude-pascal # Logs
docker compose -p claude restart claude-lara # Neustart
docker compose -p claude build --pull && docker compose -p claude up -d # Claude Code aktualisieren
```
Nach Änderungen an `claude-remote/` im Repo den Ordner nach `~/claude-stack`
kopieren und neu bauen. Logins, SSH-Keys und Projekte bleiben erhalten (sie
liegen in den Volumes `claude_home-pascal` / `claude_home-lara`).
**Nicht** `docker compose -p claude down -v` – das löscht die Volumes mit
Logins, Keys, nicht gepushter Arbeit und dem Postfach.