From aa8c3e48472759cc89bf1cb4b360e7999dcee4ea Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 13 Oct 2026 20:19:26 +0000 Subject: [PATCH] Host-Agent Installation (agent/) Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_016h8oztcj2AdAUDyAKeXf6W --- agent/docker-compose.yml | 38 ++++++++++++++++++++++++++++++++++++++ agent/join-agent.sh | 21 +++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 agent/docker-compose.yml create mode 100755 agent/join-agent.sh diff --git a/agent/docker-compose.yml b/agent/docker-compose.yml new file mode 100644 index 0000000..8da160c --- /dev/null +++ b/agent/docker-compose.yml @@ -0,0 +1,38 @@ +# Host-Agent fuer weitere Standorte (ADR GC-030, Stufe 1: nur lesende Telemetrie). +# Eigenes Compose-Projekt, beruehrt nichts anderes auf dem Server. +# Der Agent baut die Verbindung zum Hub selbst auf (ausgehend); es werden keine Ports geoeffnet. +# Docker-Zugriff nur ueber einen Socket-Proxy mit ausschliesslich lesendem CONTAINERS-Endpunkt. +name: ${GC_PROJECT:-gc-agent} +services: + socket-proxy: + image: tecnativa/docker-socket-proxy:0.2.0 + container_name: ${GC_PROJECT:-gc-agent}-socket-proxy + restart: unless-stopped + environment: + CONTAINERS: "1" + POST: "0" + INFO: "0" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + networks: [agent] + agent: + image: git1.mrmoe.de/mscadm/gc-hostagent:latest + container_name: ${GC_PROJECT:-gc-agent} + restart: unless-stopped + depends_on: [socket-proxy] + environment: + GC_HUB_URL: "${GC_HUB_URL:?GC_HUB_URL setzen}" + GC_AGENT_TOKEN: "${GC_AGENT_TOKEN:-}" + GC_AGENT_ALLOW_PLAIN: "${GC_AGENT_ALLOW_PLAIN:-0}" + GC_DOCKER_URL: "http://socket-proxy:2375" + GC_AGENT_DATA: "/data" + volumes: + - agent-data:/data + read_only: true + cap_drop: [ALL] + security_opt: ["no-new-privileges:true"] + networks: [agent] +networks: + agent: +volumes: + agent-data: diff --git a/agent/join-agent.sh b/agent/join-agent.sh new file mode 100755 index 0000000..14b2061 --- /dev/null +++ b/agent/join-agent.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# Host-Agent an einem weiteren Standort installieren (ein Aufruf, idempotent). +# GC_HUB_URL=https://dashboard.beispiel.de GC_AGENT_TOKEN= sh join-agent.sh +# Das Token gilt 15 Minuten und nur einmal; danach nutzt der Agent seinen eigenen Schluessel (Volume). +# Projekt: gc-agent (GC_PROJECT aenderbar). Beruehrt keine anderen Container, Netze oder Systemeinstellungen. +set -eu +: "${GC_HUB_URL:?GC_HUB_URL setzen}" +P="${GC_PROJECT:-gc-agent}" +D="${GC_DIR:-$HOME/$P}" +mkdir -p "$D" && cd "$D" +curl -fsSL https://git1.mrmoe.de/mscadm/ground-control-install/raw/branch/main/agent/docker-compose.yml -o docker-compose.yml +umask 077 +printf 'GC_PROJECT=%s\nGC_HUB_URL=%s\nGC_AGENT_TOKEN=%s\nGC_AGENT_ALLOW_PLAIN=%s\n' "$P" "$GC_HUB_URL" "${GC_AGENT_TOKEN:-}" "${GC_AGENT_ALLOW_PLAIN:-0}" > .env +export DOCKER_CONFIG="$D/.docker"; mkdir -p "$DOCKER_CONFIG" +docker compose pull -q +docker compose up -d +# Das Token wird nach der Anmeldung nicht mehr benoetigt und aus der Konfiguration entfernt. +sleep 8 +sed -i 's/^GC_AGENT_TOKEN=.*/GC_AGENT_TOKEN=/' .env +docker compose logs --tail 5 agent +echo "Fertig: Der Standort erscheint im Dashboard unter Standorte."