From 036e5d63f84d779313831fde2c847911671ccb34 Mon Sep 17 00:00:00 2001 From: Christian Mueller Date: Fri, 20 Mar 2026 22:35:43 +0100 Subject: [PATCH] feat: auto-detect LXC IP and pass to ssh-deploy - proxmox-lxc: new section to read LXC IP via API or pct exec - ssh-deploy: SSH_HOST auto-populated from LXC IP, no manual config needed - workflow: provision flow explicitly includes IP detection step - project.env: SSH_HOST marked as optional when using Proxmox LXC Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/skills/proxmox-lxc.md | 32 ++++++++++++++++++++++++++++++++ .claude/skills/ssh-deploy.md | 12 +++++++----- .claude/skills/workflow.md | 9 +++++---- config/project.env.template | 2 ++ 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/.claude/skills/proxmox-lxc.md b/.claude/skills/proxmox-lxc.md index 72bcc2e..1856b44 100644 --- a/.claude/skills/proxmox-lxc.md +++ b/.claude/skills/proxmox-lxc.md @@ -70,6 +70,38 @@ ssh root@$PVE_HOST << 'EOF' EOF ``` +## LXC-IP ERMITTELN + +Nach dem Erstellen und Starten des Containers die IP auslesen. Diese IP wird für alle weiteren Schritte und für `/ssh-deploy` verwendet. + +### Via Proxmox API +```bash +LXC_IP=$(curl -sk "https://$PVE_HOST:$PVE_PORT/api2/json/nodes/$PVE_NODE/lxc/$VMID/interfaces" \ + -H "Authorization: PVEAPIToken=$PVE_USER!$PVE_TOKEN_ID=$PVE_TOKEN_SECRET" \ + | jq -r '.data[] | select(.name=="eth0") | .["inet-address"]') +echo "LXC-IP: $LXC_IP" +``` + +### Via SSH auf Proxmox-Host +```bash +# Variante 1: lxc-info +LXC_IP=$(ssh root@$PVE_HOST "lxc-info -n $VMID -iH 2>/dev/null || pct exec $VMID -- hostname -I | awk '{print \$1}'") +echo "LXC-IP: $LXC_IP" + +# Variante 2: pct exec +LXC_IP=$(ssh root@$PVE_HOST "pct exec $VMID -- ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'") +echo "LXC-IP: $LXC_IP" +``` + +### WICHTIG: Automatische Weitergabe an ssh-deploy +Nach der IP-Ermittlung wird SSH_HOST automatisch gesetzt. Kein manueller Eintrag in `project.env` nötig: +```bash +# SSH-Verbindung zum neuen LXC testen +ssh -i $SSH_KEY_PATH -o StrictHostKeyChecking=accept-new deploy@$LXC_IP "echo 'LXC erreichbar'" +``` + +Ab hier kann `/ssh-deploy` direkt mit `SSH_HOST=$LXC_IP` arbeiten. + ## LXC FÜR WEBPROJEKT EINRICHTEN ### Basis-Setup (Node.js + Docker) diff --git a/.claude/skills/ssh-deploy.md b/.claude/skills/ssh-deploy.md index 5480f5c..1c579e4 100644 --- a/.claude/skills/ssh-deploy.md +++ b/.claude/skills/ssh-deploy.md @@ -8,13 +8,15 @@ Du bist ein SSH-Deploy-Agent für Remote-Testing und Deployment auf Linux-Server ## KONFIGURATION ``` -SSH_HOST=$SSH_HOST -SSH_PORT=$SSH_PORT (default: 22) -SSH_USER=$SSH_USER -SSH_KEY_PATH=$SSH_KEY_PATH (default: ~/.ssh/id_rsa) -DEPLOY_PATH=$DEPLOY_PATH (default: /var/www/app) +SSH_HOST=$SSH_HOST # IP oder Hostname - wird automatisch von /proxmox-lxc gesetzt wenn LXC erstellt wurde +SSH_PORT=$SSH_PORT # default: 22 +SSH_USER=$SSH_USER # default: deploy +SSH_KEY_PATH=$SSH_KEY_PATH # default: ~/.ssh/id_rsa +DEPLOY_PATH=$DEPLOY_PATH # default: /var/www/app ``` +**Hinweis:** Wenn vorher `/proxmox-lxc` ausgeführt wurde, ist `SSH_HOST` bereits mit der LXC-IP belegt. Kein manueller Eintrag in `project.env` nötig. + ## DEPLOYMENT-PROZESS 1. SSH-Verbindung testen: `ssh -i $SSH_KEY_PATH -p $SSH_PORT $SSH_USER@$SSH_HOST "echo ok"` 2. Backup erstellen: `tar -czf backup_$(date +%Y%m%d_%H%M%S).tar.gz $DEPLOY_PATH` diff --git a/.claude/skills/workflow.md b/.claude/skills/workflow.md index b754b5c..1d93004 100644 --- a/.claude/skills/workflow.md +++ b/.claude/skills/workflow.md @@ -67,10 +67,11 @@ Du bist der Workflow-Orchestrator. Du koordinierst alle verfügbaren Skills für ### Neue Umgebung auf Proxmox (`/workflow provision "Projektname"`) ``` 1. [proxmox-lxc] → LXC-Container erstellen -2. [proxmox-lxc] → Basis-Setup (Node.js/Docker, Firewall, Nginx) -3. [docker-build] → Docker-Compose für die App -4. [ssh-deploy] → App in den LXC deployen -5. [log-analyzer] → Health-Check & Logs prüfen +2. [proxmox-lxc] → LXC-IP automatisch ermitteln → SSH_HOST setzen +3. [proxmox-lxc] → Basis-Setup (Node.js/Docker, Firewall, Nginx) +4. [docker-build] → Docker-Compose für die App +5. [ssh-deploy] → App in den LXC deployen (nutzt LXC-IP als SSH_HOST) +6. [log-analyzer] → Health-Check & Logs prüfen ``` ## QUALITÄTS-GATES diff --git a/config/project.env.template b/config/project.env.template index 15439cf..4243ce0 100644 --- a/config/project.env.template +++ b/config/project.env.template @@ -22,6 +22,8 @@ GITEA_TOKEN= # ------------------------------------------- # SSH DEPLOYMENT # ------------------------------------------- +# SSH_HOST wird automatisch aus LXC-IP gesetzt wenn /proxmox-lxc genutzt wird +# Nur manuell setzen wenn KEIN Proxmox-LXC verwendet wird SSH_HOST= SSH_PORT=22 SSH_USER=deploy