Den Self-hosted Runner betreiben
Führen Sie kanmans Codearbeit auf Ihrer eigenen Infrastruktur aus, mit einem Docker-Image, das nur ausgehende Verbindungen aufbaut, ohne offene Ports und ohne Datenbank-Zugangsdaten.
Standardmäßig führt kanman jede Story auf einer isolierten Maschine in Frankfurt aus. Darf Ihr Code Ihr Netz nicht verlassen, führen Sie die Codearbeit mit dem Self-hosted Runner auf Ihrer eigenen Infrastruktur aus.
So funktioniert es
Der Runner ist derselbe Executor-Host, den kanman in seiner Cloud nutzt, verpackt als Docker-Image kanman/executor-host:
- Er holt sich Arbeit. Er baut eine ausgehende HTTPS-Verbindung zu kanman auf, meldet sich an, fragt nach dem nächsten wartenden Run Ihres Workspaces und meldet die Ergebnisse zurück. Keine eingehenden Ports, kein VPN, keine Firewall-Ausnahmen für kanman.
- Er authentifiziert sich mit einem Workspace-API-Token (
km_...). Er erhält nie Datenbank-Zugangsdaten. Jeder Run, den er übernimmt, bekommt ein eigenes Run-Token, das mit dem Ende des Runs ungültig wird. - Für jeden Run klont er das Repository, legt den Run-Branch an, startet den Coding-Agenten mit dem Auftrag des Runs und dem kanman-MCP und meldet Fortschritt, die Diff-Zusammenfassung, die Commits und ein Protokoll der Arbeit des Agenten.
- Der Checkout des Repositorys bleibt auf Ihrer Maschine.
Was der Modellanbieter erhält, beschreibt Was Modellanbieter sehen. Der Coding-Agent ruft den Anbieter vom Runner aus auf, mit dem Schlüssel, den Sie dem Runner mitgeben, oder bei Teams mit eigenem Schlüssel mit diesem Schlüssel.
Kommt in einem späteren Release
Akzeptanzprüfungen auf Ihrem Runner. Heute laufen die Ausführungen der Akzeptanz-Spec (rot vor der Arbeit, grün in einer frischen Umgebung und auf einem sauberen Checkout) nur in der kanman Cloud. In einem Workspace, der seine Runs an Self-hosted Runner schickt, können diese Prüfungen deshalb nicht laufen: kanman wiederholt sie und fragt Sie dann unter Entscheidungen. Teams mit dem Preset Testphase ohne Akzeptanz-Manifest, die CI und der Reviewer sind nicht betroffen.
Voraussetzungen
- Ein Linux-Host oder eine VM mit Docker. Der Runner braucht CPU und Speicher wie ein CI-Job für Ihr Repository.
- Ausgehendes HTTPS zu kanman, zu Ihrem Git-Host und zu Ihrem Modellanbieter.
- Ein Schlüssel beim Modellanbieter für die Executors, die der Runner anbietet:
ANTHROPIC_API_KEYfür Claude Code,OPENAI_API_KEYfür Codex. Für Teams, die in kanman einen eigenen Schlüssel nutzen, nicht nötig; ihr Schlüssel kommt mit dem Run.
Schritt 1: Ein Token anlegen
- Öffnen Sie Einstellungen > API und klicken Sie auf Token erstellen.
- Benennen Sie es nach dem Runner, zum Beispiel
runner-fra-1. - Wählen Sie eine Laufzeit (30 Tage, 90 Tage oder 1 Jahr), die zu Ihrer Rotationsrichtlinie passt. Der Runner braucht keine bestimmte Berechtigung; jedes aktive Token des Workspaces funktioniert.
- Kopieren Sie das Token. Es wird nur einmal angezeigt.
Schritt 2: Den Runner starten
Einstellungen > Runner zeigt den Befehl zum Kopieren. Mit Namen und beiden Executors sieht er so aus:
docker run -d --name kanman-runner \
--restart unless-stopped \
-e KANMAN_API_KEY=km_ihr_runner_token \
-e ANTHROPIC_API_KEY=ihr_anthropic_schluessel \
-e RUNNER_NAME=runner-fra-1 \
-e RUNNER_EXECUTORS=claude-code,codex \
-e OPENAI_API_KEY=ihr_openai_schluessel \
kanman/executor-host
| Variable | Pflicht | Bedeutung |
|---|---|---|
KANMAN_API_KEY |
Ja | Das Workspace-API-Token aus Schritt 1 |
ANTHROPIC_API_KEY, OPENAI_API_KEY |
Für Teams, die über kanman abrechnen | Schlüssel für Claude Code oder Codex |
RUNNER_NAME |
Nein | Name in Einstellungen > Runner. Standard: der Hostname des Containers |
RUNNER_EXECUTORS |
Nein | Kommagetrennte Executors, die dieser Runner anbietet: claude-code, codex. Standard claude-code |
RUNNER_CONCURRENCY |
Nein | Wie viele Runs dieser Runner gleichzeitig bearbeitet. Standard 1 |
LOG_LEVEL |
Nein | debug, info, warn oder error. Standard info |
Pinnen Sie das Image in Produktion auf eine Versionsnummer und aktualisieren Sie bewusst.
Schritt 3: Den Status prüfen
Öffnen Sie Einstellungen > Runner. Der Runner erscheint mit Name, Executors, Version, dem Zeitpunkt, zu dem er zuletzt gesehen wurde, und seinem Status. Die Liste aktualisiert sich alle 30 Sekunden:
| Status | Bedeutung |
|---|---|
| Online | Verbunden und nimmt Runs an. Der Runner meldet sich alle 30 Sekunden. |
| Beendet laufende Arbeit | Der Runner soll stoppen. Er beendet seine Runs und nimmt keine neuen an. |
| Offline | Nicht verbunden, oder seit zwei Minuten keine Meldung. Runs warten in der Warteschlange, bis ein Runner online ist. |
Schritt 4: Arbeit an Ihre Runner schicken
Die Wahl gilt für den ganzen Workspace. Öffnen Sie Einstellungen > KI-Anbieter, klappen Sie Advanced auf und schalten Sie Kanman Cloud aus. Ab dann gehen wartende Runs aller Teams an Ihre Runner und werden der Reihe nach übernommen. Einstellungen > Runner bestätigt, wo Runs ausgeführt werden. Die Parallelität richtet sich weiter nach der Richtlinie jedes Teams und seinem Tarif.
Skalieren und aktualisieren
- Mehr Kapazität: Starten Sie weitere Runner mit anderen Namen, oder erhöhen Sie
RUNNER_CONCURRENCYauf einem größeren Host. - Aktualisieren: Stoppen Sie den Container mit genug Zeit für seine Runs, zum Beispiel
docker stop --time 1800 kanman-runner. Beim Stoppen zeigt der Runner Beendet laufende Arbeit, schließt seine Runs ab und geht offline. Starten Sie dann die neue Version. - Token rotieren: Legen Sie ein neues Token an, starten Sie den Runner damit neu und widerrufen Sie dann das alte. Ein widerrufenes oder abgelaufenes Token nimmt den Runner offline.
Fehlerbehebung
| Symptom | Wahrscheinliche Ursache |
|---|---|
| Der Runner startet nicht | KANMAN_API_KEY fehlt oder beginnt nicht mit km_. Prüfen Sie die Container-Logs mit docker logs kanman-runner. |
| Der Runner bleibt offline | Das Token ist falsch, abgelaufen oder widerrufen, oder ausgehendes HTTPS zu kanman ist gesperrt. Prüfen Sie die Container-Logs. |
| Runs bleiben in der Warteschlange | Kein Runner ist online, oder kein Runner online bietet den Executor des Teams an. Prüfen Sie RUNNER_EXECUTORS. |
| Runs scheitern direkt nach dem Start | Dem Runner fehlt der Schlüssel für den Executor, oder der Runner-Host erreicht Ihren Git-Host oder Modellanbieter nicht. |
Zuletzt aktualisiert: January 1, 0001
kanman öffnen