Jobsuche: Agent pro Benutzer in isoliertem Docker-Container
Jeder Suchlauf läuft nun in einem frischen Container pro Benutzer, dessen pro-Benutzer-Home als ~/.claude gemountet ist — Memories und Session-Contexte liegen damit strikt getrennt pro Benutzer. Die Such-Skills sind Shared-Code aus dem Image und werden im Container nur nach ~/.claude/skills verlinkt. Der Host-Runner startet pro Lauf `docker run --rm` und führt bis zu JOBSUCHE_MAX_PARALLEL (Default 4) Läufe parallel über verschiedene Benutzer aus (jeder hat eigenen Ollama-Key = getrennte Rate-Limits). Der alte gemeinsame ~/.claude-Pfad wird vom Runner nicht mehr beschrieben. - source/agent/: neues Agent-Image (Dockerfile + entrypoint + drei Skills) - scripts/jobsuche-runner.js: agentStarten als docker run, ensureAgentDir, runPool - scripts/jobsuche-runner.sh + bin/-Kopie: Image-Guard - package.json: docker:build-agent (lokal, ohne Registry-Push) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -9,7 +9,8 @@
|
||||
# Jetzt: Jeder Benutzer pflegt sein Suchprofil und seinen Zeitplan in der App
|
||||
# (/jobsuche). Dieses Skript ruft nur noch den Runner auf, der fällige und manuell
|
||||
# angeforderte Läufe abarbeitet — je Benutzer mit dessen eigenem Ollama- und
|
||||
# API-Schlüssel.
|
||||
# API-Schlüssel. Jeder Suchlauf läuft isoliert im eigenen Docker-Container pro
|
||||
# Benutzer; der Runner selbst bleibt auf dem Host (Docker-CLI + DB-Zugriff).
|
||||
#
|
||||
# Cron (alle 5 Minuten — die Uhrzeit steuert der Benutzer, nicht der Cron):
|
||||
# */5 * * * * /opt/jobbi-bewerbung/bin/jobsuche-runner.sh
|
||||
@@ -26,13 +27,13 @@ export PATH="/root/.local/bin:/usr/local/bin:/usr/bin:/bin:$PATH"
|
||||
# wartenden Suchläufe blieben ewig im Status 'angefordert' hängen.
|
||||
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
||||
# Claude Code verweigert --dangerously-skip-permissions als root; in dieser
|
||||
# Container-/Sandbox-Umgebung mit IS_SANDBOX=1 erlaubt.
|
||||
export IS_SANDBOX=1
|
||||
|
||||
PROJECT_DIR="/opt/jobbi-bewerbung"
|
||||
LOG_DIR="$PROJECT_DIR/logs"
|
||||
RUNNER="$PROJECT_DIR/source/scripts/jobsuche-runner.js"
|
||||
# Agent-Image (pro Suchlauf ein frischer Container). Wird lokal gebaut:
|
||||
# npm --prefix "$PROJECT_DIR/source" run docker:build-agent
|
||||
AGENT_IMAGE="${JOBSUCHE_AGENT_IMAGE:-jobbi-bewerbung-agent:latest}"
|
||||
|
||||
mkdir -p "$LOG_DIR"
|
||||
LOG="$LOG_DIR/jobsuche-runner.log"
|
||||
@@ -52,6 +53,12 @@ if ! curl -fsS --max-time 10 http://localhost:4327/api/v1/health >/dev/null 2>&1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Agent-Image muss vorhanden sein, sonst stapeln sich fehlgeschlagene Läufe.
|
||||
if ! docker image inspect "$AGENT_IMAGE" >/dev/null 2>&1; then
|
||||
echo "$(date -Is) FEHLER: Agent-Image '$AGENT_IMAGE' fehlt – bitte bauen: npm --prefix $PROJECT_DIR/source run docker:build-agent" >> "$LOG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
node "$RUNNER" >> "$LOG" 2>&1
|
||||
STATUS=$?
|
||||
|
||||
|
||||
Reference in New Issue
Block a user