docs: refresh README and add multilingual guides
This commit is contained in:
+123
-139
@@ -5,7 +5,7 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
Eine Kubernetes-first-Kontrollplattform zur zentralen Verwaltung von OpenClaw- und Linux-Desktop-Runtimes fuer Teams und Cluster im grossen Massstab.
|
||||
ClawManager ist eine Kubernetes-native Control Plane fuer die Verwaltung von AI-Agent-Instanzen mit kontrolliertem AI-Zugriff, Runtime-Orchestrierung und wiederverwendbaren Ressourcen ueber mehrere Agent-Runtimes hinweg.
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -18,203 +18,187 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/ClawManager-Virtual%20Desktop%20Platform-e25544?style=for-the-badge" alt="ClawManager Platform" />
|
||||
<img src="https://img.shields.io/badge/ClawManager-Control%20Plane-e25544?style=for-the-badge" alt="ClawManager Control Plane" />
|
||||
<img src="https://img.shields.io/badge/Go-1.21%2B-00ADD8?style=for-the-badge&logo=go&logoColor=white" alt="Go 1.21+" />
|
||||
<img src="https://img.shields.io/badge/React-19-20232A?style=for-the-badge&logo=react&logoColor=61DAFB" alt="React 19" />
|
||||
<img src="https://img.shields.io/badge/Kubernetes-Native-326CE5?style=for-the-badge&logo=kubernetes&logoColor=white" alt="Kubernetes Native" />
|
||||
<img src="https://img.shields.io/badge/License-MIT-2ea44f?style=for-the-badge" alt="MIT License" />
|
||||
</p>
|
||||
|
||||
## News
|
||||
|
||||
- [2026-03-26]: 🚀🚀 Die AI-Gateway-Dokumentation und Uebersicht wurden aktualisiert, inklusive Modell-Governance, Audit-Trace, Kostenrechnung und Risikokontrolle. Siehe [AI Gateway](#ai-gateway).
|
||||
- [2026-03-20]: 🎉🎉 ClawManager Release — ClawManager ist jetzt eine Plattform zur Verwaltung virtueller Desktops und bietet Funktionen wie Batch-Bereitstellung, Webtop-Unterstützung, Zugriff über ein Desktop-Portal, Laufzeit-Image-Konfiguration, Markdown-Backup und Migration von OpenClaw-Speicher/Einstellungen, Cluster-Ressourcenübersicht sowie mehrsprachige Dokumentation.
|
||||
|
||||
<p align="center">
|
||||
<img src="./docs/main/admin.png" alt="ClawManager Admin" width="32%" />
|
||||
<img src="./docs/main/portal.png" alt="ClawManager Portal" width="32%" />
|
||||
<img src="./docs/main/aigateway.png" alt="ClawManager AI Gateway" width="32%" />
|
||||
<a href="#product-tour">Produktueberblick</a> |
|
||||
<a href="#ai-gateway">AI Gateway</a> |
|
||||
<a href="#agent-control-plane">Agent Control Plane</a> |
|
||||
<a href="#resource-management">Ressourcenverwaltung</a> |
|
||||
<a href="#get-started">Erste Schritte</a>
|
||||
</p>
|
||||
|
||||
## Was Es Ist
|
||||
<p align="center">
|
||||
<a href="https://github.com/Yuan-lab-LLM/ClawManager/stargazers">
|
||||
<img src="https://img.shields.io/github/stars/Yuan-lab-LLM/ClawManager?style=for-the-badge&logo=github&label=Star%20ClawManager" alt="Star ClawManager on GitHub" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
ClawManager hilft Teams dabei, Desktop-Runtimes auf Kubernetes zentral zu deployen, zu betreiben und darauf zuzugreifen.
|
||||
<h2 align="center">ClawManager in 60 Sekunden</h2>
|
||||
|
||||
Es ist fuer Umgebungen gedacht, in denen:
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/Yuan-lab-LLM/ClawManager-Assets/main/gif/clawmanager-launch-60s-hd.gif" alt="ClawManager Produktdemo" width="100%" />
|
||||
</p>
|
||||
|
||||
- Desktop-Instanzen fuer mehrere Benutzer erstellt werden muessen
|
||||
- Quotas, Images und Lebenszyklen zentral verwaltet werden sollen
|
||||
- Desktop-Dienste innerhalb des Clusters bleiben sollen
|
||||
- sicherer Browser-Zugriff ohne direkte Pod-Freigabe gebraucht wird
|
||||
<p align="center">
|
||||
Ein schneller Blick auf Agent-Provisionierung, Skill-Verwaltung und -Scanning sowie AI-Gateway-Governance.
|
||||
</p>
|
||||
|
||||
## Warum Nutzer Es Waehlen
|
||||
## Neuigkeiten
|
||||
|
||||
- Ein Admin-Panel fuer Benutzer, Quotas, Instanzen und Runtime-Images
|
||||
- OpenClaw-Unterstuetzung mit Import und Export von Speicher und Einstellungen
|
||||
- Sicherer Desktop-Zugriff ueber die Plattform statt direkter Service-Freigabe
|
||||
- AI Gateway fuer kontrollierten Modellzugriff, Audit-Trails, Kostenanalyse und Risikokontrolle
|
||||
- Kubernetes-naher Deployment- und Betriebsablauf
|
||||
- Geeignet sowohl fuer zentral gesteuerte Rollouts als auch fuer Self-Service-Erstellung
|
||||
Wichtige aktuelle Produkt- und Dokumentations-Updates.
|
||||
|
||||
## Schnellstart
|
||||
- [2026-04-08] Skill-Verwaltung und Skill-Scanning wurden der Plattform hinzugefuegt. Details siehe [Merged PR #52](https://github.com/Yuan-lab-LLM/ClawManager/pull/52).
|
||||
- [2026-03-26] Die AI-Gateway-Dokumentation wurde erweitert und deckt nun Modell-Governance, Audit und Trace, Kostenrechnung sowie Risikokontrolle genauer ab. Siehe [AI Gateway Guide](./docs/aigateway.md).
|
||||
- [2026-03-20] ClawManager hat sich zu einer breiteren Control Plane fuer AI-Agent-Workspaces entwickelt, mit staerkerer Runtime-Steuerung, wiederverwendbaren Ressourcen und Security-Scanning-Workflows.
|
||||
|
||||
### Voraussetzungen
|
||||
> Wenn ClawManager fuer dein Team nuetzlich ist, gib dem Projekt gerne einen Star, damit mehr Nutzer und Entwickler es entdecken.
|
||||
|
||||
- Ein funktionierender Kubernetes-Cluster
|
||||
- `kubectl get nodes` funktioniert
|
||||
<p align="center">
|
||||
<a href="https://github.com/Yuan-lab-LLM/ClawManager/stargazers">
|
||||
<img src="https://raw.githubusercontent.com/Yuan-lab-LLM/ClawManager-Assets/main/gif/clawmanager-star.gif" alt="Star ClawManager on GitHub" width="100%" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
### Deployment
|
||||
<a id="product-tour"></a>
|
||||
## Produktueberblick
|
||||
|
||||
Das mitgelieferte Manifest direkt anwenden:
|
||||
ClawManager bringt den Betrieb von AI-Agent-Instanzen auf Kubernetes und legt darauf drei hoeherwertige Control Planes. Teams koennen damit AI-Zugriff steuern, Runtime-Verhalten ueber Agents orchestrieren und Workspace-Faehigkeiten ueber scanbare und wiederverwendbare channel- und skill-Ressourcen bereitstellen.
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
kubectl get pods -A
|
||||
kubectl get svc -A
|
||||
```
|
||||
Es eignet sich besonders fuer:
|
||||
|
||||
## Aus Dem Quellcode Bauen
|
||||
- Plattformteams, die AI-Agent-Instanzen fuer mehrere Nutzer betreiben
|
||||
- Betriebsteams, die Runtime-Sichtbarkeit, Command-Dispatch und Desired-State-Kontrolle benoetigen
|
||||
- Entwicklungsteams, die Agent-Workspaces ueber wiederverwendbare Ressourcen statt ueber manuelle Konfiguration bereitstellen wollen
|
||||
|
||||
Wenn du ClawManager aus dem Quellcode starten oder paketieren moechtest, statt das mitgelieferte Kubernetes-Manifest zu verwenden:
|
||||
<a id="get-started"></a>
|
||||
## Erste Schritte
|
||||
|
||||
### Frontend
|
||||
ClawManager bietet jetzt klarere Einstiegspfade sowohl fuer Standard-Kubernetes als auch fuer leichtere Cluster-Setups. Zum Evaluieren der Plattform ist es am sinnvollsten, zuerst den passenden Deployment-Pfad fuer die eigene Umgebung zu waehlen und danach dem First-Use-Flow zu folgen.
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
- Standard-Kubernetes-Deployment: [deployments/k8s/clawmanager.yaml](./deployments/k8s/clawmanager.yaml)
|
||||
- K3s / leichtgewichtiges Deployment: [deployments/k3s/clawmanager.yaml](./deployments/k3s/clawmanager.yaml)
|
||||
- First-Login- und Schnellstart-Ablauf: [Benutzerhandbuch](./docs/use_guide_de.md)
|
||||
- Deployment-Hinweise und Architekturkontext: [Deployment Guide (English)](./docs/deployment.md)
|
||||
|
||||
### Backend
|
||||
## Drei Control Planes
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
go mod tidy
|
||||
go build -o bin/clawreef cmd/server/main.go
|
||||
```
|
||||
<a id="ai-gateway"></a>
|
||||
### AI Gateway
|
||||
|
||||
### Docker-Image
|
||||
AI Gateway ist die Governance-Ebene fuer Modellzugriffe in ClawManager. Es stellt verwalteten Agent-Runtimes einen einheitlichen OpenAI-kompatiblen Einstiegspunkt bereit und legt Richtlinien-, Audit- und Kostenkontrollen ueber die Upstream-Provider.
|
||||
|
||||
Das komplette Applikations-Image im Repository-Root bauen:
|
||||
- Einheitlicher Einstiegspunkt fuer Modell-Traffic
|
||||
- Sichere Modell-Routing-Logik und policy-gesteuerte Modellauswahl
|
||||
- End-to-End-Audit- und Trace-Aufzeichnungen
|
||||
- Integrierte Kostenrechnung und Nutzungsanalyse
|
||||
- Regeln fuer Risikokontrolle mit Block- oder Umleitungslogik
|
||||
|
||||
```bash
|
||||
docker build -t clawmanager:latest .
|
||||
```
|
||||
Siehe [AI Gateway Guide (English)](./docs/aigateway.md).
|
||||
|
||||
### Standardkonten
|
||||
<a id="agent-control-plane"></a>
|
||||
### Agent Control Plane
|
||||
|
||||
- Standard-Admin-Konto: `admin / admin123`
|
||||
- Standardpasswort fuer importierte Admin-Benutzer: `admin123`
|
||||
- Standardpasswort fuer importierte regulaere Benutzer: `user123`
|
||||
Agent Control Plane ist die Runtime-Orchestrierungsschicht fuer verwaltete AI-Agent-Instanzen. Jede Instanz wird damit zu einer verwalteten Runtime, die sich registrieren, Status melden, Commands empfangen und sich am Desired State der Plattform ausrichten kann.
|
||||
|
||||
### Erste Schritte
|
||||
- Agent-Registrierung mit sicherem Bootstrap und Session-Lifecycle
|
||||
- Heartbeat-basierte Runtime-Status- und Health-Reports
|
||||
- Desired-State-Synchronisierung zwischen Control Plane und Instanz
|
||||
- Command-Dispatch fuer Start, Stop, Konfigurationsanwendung, Health Checks und Skill-Operationen
|
||||
- Sichtbarkeit pro Instanz fuer Agent-Status, channel, skill und Command-Historie
|
||||
|
||||
1. Als Administrator anmelden.
|
||||
2. Benutzer erstellen oder importieren und Quotas vergeben.
|
||||
3. Runtime-Image-Karten in den Systemeinstellungen pruefen oder aktualisieren.
|
||||
4. Als normaler Benutzer anmelden und eine Instanz erstellen.
|
||||
5. Ueber Portal View oder Desktop Access auf den Desktop zugreifen.
|
||||
Siehe [Agent Control Plane Guide (English)](./docs/agent-control-plane.md).
|
||||
|
||||
## Hauptfunktionen
|
||||
<a id="resource-management"></a>
|
||||
### Ressourcenverwaltung
|
||||
|
||||
- Instanz-Lifecycle-Management: erstellen, starten, stoppen, neu starten, loeschen, anzeigen und synchronisieren
|
||||
- Unterstuetzte Runtimes: `openclaw`, `webtop`, `ubuntu`, `debian`, `centos`, `custom`
|
||||
- Runtime-Image-Kartenverwaltung im Admin-Panel
|
||||
- Benutzerbezogene Quota-Kontrolle fuer CPU, Speicher, Storage, GPU und Instanzanzahl
|
||||
- Cluster-Ressourcenuebersicht fuer Nodes, CPU, Speicher und Storage
|
||||
- Tokenbasierter Desktop-Zugriff mit WebSocket-Weiterleitung
|
||||
- AI Gateway fuer Modellverwaltung, nachvollziehbare Audit-Logs, Kostenrechnung und Risikokontrolle
|
||||
- CSV-basierter Massenimport von Benutzern
|
||||
- Mehrsprachige Oberflaeche
|
||||
Ressourcenverwaltung ist die wiederverwendbare Asset-Schicht fuer AI-Agent-Workspaces. Teams koennen channel und skill vorbereiten, zu bundles zusammensetzen, in Instanzen injizieren und Security-Reviews direkt in diesen Ablauf integrieren.
|
||||
|
||||
## AI Gateway
|
||||
### Unterstuetzte Modellservice-Plattformen
|
||||
- `Channel`-Verwaltung fuer Workspace-Konnektivitaet und Integrationsvorlagen
|
||||
- `Skill`-Verwaltung fuer wiederverwendbare Faehigkeitspakete
|
||||
- `Skill Scanner`-Workflows fuer Risikoanalyse und Scan-Jobs
|
||||
- Bundle-basierte Ressourcenzusammenstellung fuer reproduzierbare Setups
|
||||
- Injection-Snapshots zur Nachverfolgung der tatsaechlich angewendeten Inhalte
|
||||
|
||||
ClawManager bringt integrierte Anbieter-Templates fuer folgende Plattformen mit:
|
||||
Siehe [Resource Management Guide (English)](./docs/resource-management.md) und [Security / Skill Scanner Guide (English)](./docs/security-skill-scanner.md).
|
||||
|
||||
- OpenAI
|
||||
- OpenRouter
|
||||
- DeepSeek
|
||||
- SiliconFlow
|
||||
- Moonshot AI
|
||||
- Zhipu AI
|
||||
- Alibaba DashScope
|
||||
- Volcengine Ark
|
||||
- Groq
|
||||
- Together AI
|
||||
- Fireworks AI
|
||||
- xAI
|
||||
- Perplexity
|
||||
- 01.AI
|
||||
- MiniMax
|
||||
- Local / Internal Endpunkte
|
||||
## Produktgalerie
|
||||
|
||||
`Local / Internal` kann auch fuer selbst gehostete OpenAI-kompatible Gateways, Ollama, One API und andere private Modell-Endpunkte verwendet werden.
|
||||
ClawManager ist so gestaltet, dass Administration, Zugriff und AI-Governance nicht wie getrennte Werkzeuge wirken, sondern wie eine zusammenhaengende Produkterfahrung.
|
||||
|
||||
### Admin Console
|
||||
|
||||
AI Gateway ist die Governance-Ebene fuer den Modellzugriff in ClawManager. Es bietet OpenClaw-Instanzen einen einheitlichen OpenAI-kompatiblen Einstiegspunkt und ergaenzt Upstream-Provider um Richtlinien, Audit und Kostenkontrolle.
|
||||
Die Admin-Konsole vereint Nutzer, Quotas, Runtime-Operationen, Security-Kontrollen und plattformweite Richtlinien in einer Oberflaeche. Sie ist die zentrale Arbeitsflaeche fuer Teams, die AI-Agent-Infrastruktur im grossen Massstab betreiben.
|
||||
|
||||
- Modellverwaltung fuer regulaere und sichere Modelle sowie Provider-Anbindung, Aktivierung, Endpoint-Konfiguration und Preisrichtlinien
|
||||
- End-to-End-Audit- und Trace-Aufzeichnungen fuer Requests, Responses, Routing-Entscheidungen und Risiko-Treffer
|
||||
- Eingebaute Kostenrechnung mit Token-Erfassung und Nutzungsschaetzung
|
||||
- Risikokontrolle ueber konfigurierbare Regeln mit automatischen Aktionen wie `block` und `route_secure_model`
|
||||
<p align="center">
|
||||
<img src="./docs/main/admin.png" alt="ClawManager Admin Console" width="100%" />
|
||||
</p>
|
||||
|
||||
Screenshots, die komplette Funktionsaufstellung und den Ablauf der Modellwahl und des Routings findest du in [docs/aigateway.md](./docs/aigateway.md).
|
||||
### Portal Access
|
||||
|
||||
## Produktablauf
|
||||
Das Portal bietet Nutzern einen klaren Einstiegspunkt in ihre Workspaces. Der Zugriff erfolgt browserbasiert, waehrend Runtime-Zustand und Plattformsicht erhalten bleiben, ohne dass Infrastrukturdetails direkt exponiert werden.
|
||||
|
||||
1. Ein Administrator definiert Benutzer, Quotas und Runtime-Image-Richtlinien.
|
||||
2. Ein Benutzer erstellt eine OpenClaw- oder Linux-Desktop-Instanz.
|
||||
3. ClawManager erstellt und verfolgt die Kubernetes-Ressourcen.
|
||||
4. Der Benutzer greift ueber die Plattform auf den Desktop zu.
|
||||
5. Administratoren ueberwachen Zustand und Kapazitaet ueber das Dashboard.
|
||||
<p align="center">
|
||||
<img src="./docs/main/portal.png" alt="ClawManager Portal Access" width="100%" />
|
||||
</p>
|
||||
|
||||
## Architektur
|
||||
### AI Gateway
|
||||
|
||||
```text
|
||||
Browser
|
||||
-> ClawManager Frontend
|
||||
-> ClawManager Backend
|
||||
-> MySQL
|
||||
-> Kubernetes API
|
||||
-> Pod / PVC / Service
|
||||
-> OpenClaw / Webtop / Linux Desktop Runtime
|
||||
```
|
||||
AI Gateway integriert Modell-Governance direkt in die Workspace-Erfahrung. Audit-Trails, Kostentransparenz und risikobasiertes Routing machen AI-Nutzung zu einem Teil der Plattform statt zu einer losen Einzelintegration.
|
||||
|
||||
## Konfigurationshinweise
|
||||
<p align="center">
|
||||
<img src="./docs/main/aigateway.png" alt="ClawManager AI Gateway" width="100%" />
|
||||
</p>
|
||||
|
||||
- Instanz-Services laufen im internen Kubernetes-Netzwerk
|
||||
- Desktop-Zugriff geht ueber den authentifizierten Backend-Proxy
|
||||
- Runtime-Images koennen in den Systemeinstellungen ueberschrieben werden
|
||||
- Das Backend sollte idealerweise innerhalb des Clusters deployt werden
|
||||
## So funktioniert es
|
||||
|
||||
Wichtige Backend-Umgebungsvariablen:
|
||||
1. Administratoren definieren Governance-Richtlinien und wiederverwendbare Ressourcen.
|
||||
2. Nutzer erstellen oder betreten verwaltete AI-Agent-Workspaces auf Kubernetes.
|
||||
3. Agents verbinden sich mit der Control Plane und melden Runtime-Zustaende.
|
||||
4. Channel, skill und bundle werden kompiliert und auf Instanzen angewendet.
|
||||
5. AI-Traffic fliesst ueber das AI Gateway und erhaelt Audit-, Risiko- und Kostenkontrollen.
|
||||
|
||||
- `SERVER_ADDRESS`
|
||||
- `SERVER_MODE`
|
||||
- `DB_HOST`
|
||||
- `DB_PORT`
|
||||
- `DB_USER`
|
||||
- `DB_PASSWORD`
|
||||
- `DB_NAME`
|
||||
- `JWT_SECRET`
|
||||
## Entwicklerueberblick
|
||||
|
||||
### CSV-Importvorlage
|
||||
ClawManager ist eine Kubernetes-native Plattform mit React-Frontend, Go-Backend, MySQL fuer Zustandsdaten sowie Integrationen wie `skill-scanner` und Object Storage. Die Codebasis ist nach Produktsubsystemen organisiert, daher ist der schnellste Einstieg, mit dem passenden Guide zu beginnen und danach in den Code zu gehen.
|
||||
|
||||
```csv
|
||||
Username,Email,Role,Max Instances,Max CPU Cores,Max Memory (GB),Max Storage (GB),Max GPU Count (optional)
|
||||
```
|
||||
- Frontend fuer Admin- und Nutzeroberflaechen unter `frontend/`
|
||||
- Backend-Services, Handler, Repositorys und Migrationen unter `backend/`
|
||||
- Deployment-Assets unter `deployments/`
|
||||
- Produktdokumentation und Medien unter `docs/`
|
||||
|
||||
Hinweise:
|
||||
Siehe [Developer Guide (English)](./docs/developer-guide.md).
|
||||
|
||||
- `Email` ist optional
|
||||
- `Max GPU Count (optional)` ist optional
|
||||
- alle anderen Spalten sind erforderlich
|
||||
## Dokumentation
|
||||
|
||||
- [Benutzerhandbuch](./docs/use_guide_de.md)
|
||||
- [Deployment Guide (English)](./docs/deployment.md)
|
||||
- [Admin and User Guide (English)](./docs/admin-user-guide.md)
|
||||
- [Agent Control Plane Guide (English)](./docs/agent-control-plane.md)
|
||||
- [AI Gateway Guide (English)](./docs/aigateway.md)
|
||||
- [Security / Skill Scanner Guide (English)](./docs/security-skill-scanner.md)
|
||||
- [Resource Management Guide (English)](./docs/resource-management.md)
|
||||
- [Developer Guide (English)](./docs/developer-guide.md)
|
||||
|
||||
## Lizenz
|
||||
|
||||
Dieses Projekt ist unter der MIT License veroeffentlicht.
|
||||
Dieses Projekt steht unter der MIT License.
|
||||
|
||||
## Open Source
|
||||
|
||||
Issues und Pull Requests sind willkommen.
|
||||
|
||||
## Star History
|
||||
|
||||
<a href="https://www.star-history.com/?repos=Yuan-lab-LLM%2FClawManager&type=date&legend=top-left">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=Yuan-lab-LLM/ClawManager&type=date&theme=dark&legend=top-left" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=Yuan-lab-LLM/ClawManager&type=date&legend=top-left" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=Yuan-lab-LLM/ClawManager&type=date&legend=top-left" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
+126
-142
@@ -5,7 +5,7 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
チーム規模からクラスター規模まで、OpenClaw と Linux デスクトップランタイムを一元管理するための Kubernetes-first コントロールプレーンです。
|
||||
ClawManager は、AI エージェントインスタンス管理のための Kubernetes ネイティブなコントロールプレーンです。ガバナンス付きの AI アクセス、ランタイムオーケストレーション、そして複数の Agent Runtime にまたがる再利用可能なリソース管理を提供します。
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -18,203 +18,187 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/ClawManager-Virtual%20Desktop%20Platform-e25544?style=for-the-badge" alt="ClawManager Platform" />
|
||||
<img src="https://img.shields.io/badge/ClawManager-Control%20Plane-e25544?style=for-the-badge" alt="ClawManager Control Plane" />
|
||||
<img src="https://img.shields.io/badge/Go-1.21%2B-00ADD8?style=for-the-badge&logo=go&logoColor=white" alt="Go 1.21+" />
|
||||
<img src="https://img.shields.io/badge/React-19-20232A?style=for-the-badge&logo=react&logoColor=61DAFB" alt="React 19" />
|
||||
<img src="https://img.shields.io/badge/Kubernetes-Native-326CE5?style=for-the-badge&logo=kubernetes&logoColor=white" alt="Kubernetes Native" />
|
||||
<img src="https://img.shields.io/badge/License-MIT-2ea44f?style=for-the-badge" alt="MIT License" />
|
||||
</p>
|
||||
|
||||
## News
|
||||
|
||||
- [2026-03-26]: 🚀🚀 AI Gateway のドキュメントと概要を更新し、モデルガバナンス、監査トレース、コスト計算、リスク制御を整理しました。詳しくは [AI Gateway](#ai-gateway) を参照してください。
|
||||
- [2026-03-20]: 🎉🎉 ClawManager リリース —— ClawManager は現在、仮想デスクトップ管理プラットフォームとして提供されており、バッチデプロイ、Webtop サポート、デスクトップポータルアクセス、ランタイムイメージ設定、OpenClaw のメモリ/設定の Markdown バックアップおよび移行、クラスタリソースの概要、多言語ドキュメントに対応しています。
|
||||
|
||||
## これは何か
|
||||
|
||||
ClawManager は、Kubernetes 上でデスクトップランタイムのデプロイ、運用、アクセスを一元化します。
|
||||
|
||||
<p align="center">
|
||||
<img src="./docs/main/admin.png" alt="ClawManager Admin" width="32%" />
|
||||
<img src="./docs/main/portal.png" alt="ClawManager Portal" width="32%" />
|
||||
<img src="./docs/main/aigateway.png" alt="ClawManager AI Gateway" width="32%" />
|
||||
<a href="#product-tour">製品紹介</a> |
|
||||
<a href="#ai-gateway">AI Gateway</a> |
|
||||
<a href="#agent-control-plane">Agent Control Plane</a> |
|
||||
<a href="#resource-management">リソース管理</a> |
|
||||
<a href="#get-started">はじめに</a>
|
||||
</p>
|
||||
|
||||
次のような環境に向いています。
|
||||
<p align="center">
|
||||
<a href="https://github.com/Yuan-lab-LLM/ClawManager/stargazers">
|
||||
<img src="https://img.shields.io/github/stars/Yuan-lab-LLM/ClawManager?style=for-the-badge&logo=github&label=Star%20ClawManager" alt="Star ClawManager on GitHub" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
- 複数ユーザー向けにデスクトップインスタンスを作成したい
|
||||
- quota、イメージ、ライフサイクルを集中管理したい
|
||||
- デスクトップサービスをクラスター内部に閉じ込めたい
|
||||
- Pod を直接公開せず、安全なブラウザーアクセスを提供したい
|
||||
<h2 align="center">60 秒でわかる ClawManager</h2>
|
||||
|
||||
## 選ばれる理由
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/Yuan-lab-LLM/ClawManager-Assets/main/gif/clawmanager-launch-60s-hd.gif" alt="ClawManager 製品デモ" width="100%" />
|
||||
</p>
|
||||
|
||||
- ユーザー、quota、インスタンス、ランタイムイメージをまとめて管理できる単一の管理画面
|
||||
- OpenClaw のメモリや設定のインポート/エクスポートをサポート
|
||||
- サービスを直接公開せず、プラットフォーム経由で安全にデスクトップへアクセス
|
||||
- AI Gateway による制御されたモデルアクセス、監査トレース、コスト分析、リスク制御
|
||||
- Kubernetes に自然に馴染むデプロイと運用フロー
|
||||
- 管理者主導の展開にもセルフサービス型の利用にも対応
|
||||
<p align="center">
|
||||
エージェントの高速プロビジョニング、Skill 管理とスキャン、AI Gateway ガバナンスを短時間で確認できます。
|
||||
</p>
|
||||
|
||||
## クイックスタート
|
||||
## 最新情報
|
||||
|
||||
### 前提条件
|
||||
最近の重要な製品アップデートとドキュメント更新です。
|
||||
|
||||
- 利用可能な Kubernetes クラスター
|
||||
- `kubectl get nodes` が正常に動作すること
|
||||
- [2026-04-08] プラットフォームに Skill 管理と Skill スキャンのワークフローを追加しました。詳細は [Merged PR #52](https://github.com/Yuan-lab-LLM/ClawManager/pull/52) を参照してください。
|
||||
- [2026-03-26] AI Gateway ドキュメントを更新し、モデルガバナンス、監査とトレース、コスト計算、リスク制御の説明を強化しました。詳しくは [AI Gateway Guide](./docs/aigateway.md) を参照してください。
|
||||
- [2026-03-20] ClawManager は、AI エージェントワークスペース向けのより広いコントロールプレーンへと進化し、ランタイム制御、再利用可能なリソース、安全スキャンのワークフローを強化しました。
|
||||
|
||||
### デプロイ
|
||||
> ClawManager があなたのチームに役立つなら、ぜひ Star を付けて、より多くのユーザーや開発者に届くよう応援してください。
|
||||
|
||||
同梱のマニフェストをそのまま適用します。
|
||||
<p align="center">
|
||||
<a href="https://github.com/Yuan-lab-LLM/ClawManager/stargazers">
|
||||
<img src="https://raw.githubusercontent.com/Yuan-lab-LLM/ClawManager-Assets/main/gif/clawmanager-star.gif" alt="Star ClawManager on GitHub" width="100%" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
kubectl get pods -A
|
||||
kubectl get svc -A
|
||||
```
|
||||
<a id="product-tour"></a>
|
||||
## 製品紹介
|
||||
|
||||
## ソースコードからビルド
|
||||
ClawManager は、AI エージェントインスタンスの運用を Kubernetes に持ち込み、そのランタイム基盤の上に 3 つの高次なコントロールプレーンを重ねます。チームはこれを使って AI アクセスを統制し、Agent を通じてランタイム動作を編成し、スキャン可能で再利用可能な channel と skill を用いてワークスペース機能を提供できます。
|
||||
|
||||
同梱の Kubernetes マニフェストではなく、ソースコードから ClawManager を実行またはパッケージ化したい場合:
|
||||
次のようなチームに向いています。
|
||||
|
||||
### フロントエンド
|
||||
- 複数ユーザー向けに AI エージェントインスタンスを運用するプラットフォームチーム
|
||||
- ランタイムの可観測性、コマンド配布、 desired state 管理が必要な運用チーム
|
||||
- 手作業の設定ではなく、再利用可能なリソースで Agent ワークスペースを届けたい開発チーム
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
<a id="get-started"></a>
|
||||
## はじめに
|
||||
|
||||
### バックエンド
|
||||
ClawManager は、標準 Kubernetes と軽量クラスタの両方に対して、より明確な導入入口を提供します。まずは自分の環境に合うデプロイパスを選び、その後に初回ログインと基本操作のフローへ進むのがおすすめです。
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
go mod tidy
|
||||
go build -o bin/clawreef cmd/server/main.go
|
||||
```
|
||||
- 標準 Kubernetes デプロイ: [deployments/k8s/clawmanager.yaml](./deployments/k8s/clawmanager.yaml)
|
||||
- K3s / 軽量クラスタ向けデプロイ: [deployments/k3s/clawmanager.yaml](./deployments/k3s/clawmanager.yaml)
|
||||
- 初回ログインと基本操作フロー: [ユーザーガイド](./docs/use_guide_ja.md)
|
||||
- デプロイ説明とアーキテクチャ背景: [Deployment Guide (English)](./docs/deployment.md)
|
||||
|
||||
### Docker イメージ
|
||||
## 3 つのコントロールプレーン
|
||||
|
||||
リポジトリルートでアプリ全体のイメージをビルドします。
|
||||
<a id="ai-gateway"></a>
|
||||
### AI Gateway
|
||||
|
||||
```bash
|
||||
docker build -t clawmanager:latest .
|
||||
```
|
||||
AI Gateway は、ClawManager におけるモデルアクセスのガバナンスプレーンです。管理対象の Agent Runtime に統一された OpenAI 互換エントリポイントを提供し、上流プロバイダの上にポリシー、監査、コスト制御を追加します。
|
||||
|
||||
### デフォルトアカウント
|
||||
- モデルトラフィックの統一エントリポイント
|
||||
- セキュアモデルのルーティングとポリシー駆動のモデル選択
|
||||
- エンドツーエンドの監査・トレース記録
|
||||
- 組み込みのコスト計算と利用分析
|
||||
- ブロックやルート変更を行えるリスク制御ルール
|
||||
|
||||
- デフォルト管理者アカウント: `admin / admin123`
|
||||
- インポートした管理者ユーザーのデフォルトパスワード: `admin123`
|
||||
- インポートした一般ユーザーのデフォルトパスワード: `user123`
|
||||
[AI Gateway Guide (English)](./docs/aigateway.md) を参照してください。
|
||||
|
||||
### 最初の使い方
|
||||
<a id="agent-control-plane"></a>
|
||||
### Agent Control Plane
|
||||
|
||||
1. 管理者としてログインします。
|
||||
2. ユーザーを作成またはインポートし、quota を割り当てます。
|
||||
3. システム設定でランタイムイメージカードを確認または更新します。
|
||||
4. 一般ユーザーとしてログインし、インスタンスを作成します。
|
||||
5. Portal View または Desktop Access からデスクトップにアクセスします。
|
||||
Agent Control Plane は、管理対象 AI エージェントインスタンスのランタイム編成レイヤーです。各インスタンスを、登録・状態報告・コマンド受信・プラットフォーム側 desired state への整合が可能な管理対象ランタイムへと変えます。
|
||||
|
||||
## 主な機能
|
||||
- セキュアなブートストラップとセッションライフサイクルによる Agent 登録
|
||||
- ハートビートベースのランタイム状態とヘルス報告
|
||||
- コントロールプレーンとインスタンス間の desired state 同期
|
||||
- 起動、停止、設定適用、ヘルスチェック、Skill 操作のコマンド配布
|
||||
- インスタンス単位での Agent 状態、channel、skill、コマンド履歴の可視化
|
||||
|
||||
- インスタンスのライフサイクル管理: 作成、起動、停止、再起動、削除、参照、同期
|
||||
- 対応ランタイム: `openclaw`、`webtop`、`ubuntu`、`debian`、`centos`、`custom`
|
||||
- 管理画面からのランタイムイメージカード管理
|
||||
- CPU、メモリ、ストレージ、GPU、インスタンス数に対するユーザー単位の quota 制御
|
||||
- ノード、CPU、メモリ、ストレージを対象にしたクラスターリソース概要
|
||||
- トークンベースのデスクトップアクセスと WebSocket 転送
|
||||
- AI Gateway によるモデル管理、追跡可能な監査ログ、コスト計算、リスク制御
|
||||
- CSV ベースの一括ユーザーインポート
|
||||
- 多言語インターフェース
|
||||
[Agent Control Plane Guide (English)](./docs/agent-control-plane.md) を参照してください。
|
||||
|
||||
## AI Gateway
|
||||
### 対応しているモデルサービスプラットフォーム
|
||||
<a id="resource-management"></a>
|
||||
### リソース管理
|
||||
|
||||
ClawManager には以下のモデルサービスプラットフォーム用テンプレートが組み込まれています。
|
||||
リソース管理は、AI エージェントワークスペース向けの再利用可能な資産レイヤーです。チームは channel や skill を準備し、bundle として組み合わせ、インスタンスへ注入し、安全レビューをその流れに組み込むことができます。
|
||||
|
||||
- OpenAI
|
||||
- OpenRouter
|
||||
- DeepSeek
|
||||
- SiliconFlow
|
||||
- Moonshot AI
|
||||
- Zhipu AI
|
||||
- Alibaba DashScope
|
||||
- Volcengine Ark
|
||||
- Groq
|
||||
- Together AI
|
||||
- Fireworks AI
|
||||
- xAI
|
||||
- Perplexity
|
||||
- 01.AI
|
||||
- MiniMax
|
||||
- Local / Internal エンドポイント
|
||||
- `Channel` 管理: ワークスペース接続と統合テンプレート
|
||||
- `Skill` 管理: 再利用可能な機能パッケージ
|
||||
- `Skill Scanner` ワークフロー: リスク確認とスキャンジョブ
|
||||
- bundle ベースのリソース構成: 再現性の高いセットアップ
|
||||
- 注入スナップショットによる実適用内容の追跡
|
||||
|
||||
`Local / Internal` は、自前の OpenAI-compatible ゲートウェイ、Ollama、One API、その他の社内モデルエンドポイントの接続にも利用できます。
|
||||
[Resource Management Guide (English)](./docs/resource-management.md) と [Security / Skill Scanner Guide (English)](./docs/security-skill-scanner.md) を参照してください。
|
||||
|
||||
## 製品ギャラリー
|
||||
|
||||
AI Gateway は、ClawManager におけるモデルアクセスのガバナンスプレーンです。OpenClaw インスタンスに単一の OpenAI 互換エントリーポイントを提供し、上流 Provider の上にポリシー、監査、コスト制御を追加します。
|
||||
ClawManager は、管理、アクセス、AI ガバナンスを別々のツールとして扱うのではなく、ひとつの製品体験としてまとめるよう設計されています。
|
||||
|
||||
- 通常モデルとセキュアモデルの管理、Provider 接続、有効化、エンドポイント設定、価格ポリシー
|
||||
- リクエスト、レスポンス、ルーティング判断、リスクヒットを対象にしたエンドツーエンドの監査/トレース記録
|
||||
- トークン集計と利用見積もりを含む組み込みのコスト計算
|
||||
- 設定可能なルールに基づくリスク制御と、`block` や `route_secure_model` などの自動アクション
|
||||
### 管理コンソール
|
||||
|
||||
スクリーンショット、詳細な機能説明、モデル選択とルーティングの流れについては [docs/aigateway.md](./docs/aigateway.md) を参照してください。
|
||||
管理コンソールでは、ユーザー、クォータ、ランタイム操作、セキュリティ制御、プラットフォームレベルのポリシーをひとつの画面に集約します。大規模な AI エージェント基盤を運用するチームの中心となる作業面です。
|
||||
|
||||
## 利用の流れ
|
||||
<p align="center">
|
||||
<img src="./docs/main/admin.png" alt="ClawManager 管理コンソール" width="100%" />
|
||||
</p>
|
||||
|
||||
1. 管理者がユーザー、quota、ランタイムイメージ方針を定義します。
|
||||
2. ユーザーが OpenClaw または Linux デスクトップインスタンスを作成します。
|
||||
3. ClawManager が Kubernetes リソースを作成し、状態を追跡します。
|
||||
4. ユーザーがプラットフォーム経由でデスクトップにアクセスします。
|
||||
5. 管理者がダッシュボードから健全性と容量を監視します。
|
||||
### Portal Access
|
||||
|
||||
## アーキテクチャ
|
||||
Portal は、ユーザーに一貫したワークスペース入口を提供します。ブラウザベースでアクセスしながら、コントロールプレーンと同期したランタイム状態を確認でき、インフラの細部を直接意識する必要はありません。
|
||||
|
||||
```text
|
||||
Browser
|
||||
-> ClawManager Frontend
|
||||
-> ClawManager Backend
|
||||
-> MySQL
|
||||
-> Kubernetes API
|
||||
-> Pod / PVC / Service
|
||||
-> OpenClaw / Webtop / Linux Desktop Runtime
|
||||
```
|
||||
<p align="center">
|
||||
<img src="./docs/main/portal.png" alt="ClawManager Portal Access" width="100%" />
|
||||
</p>
|
||||
|
||||
## 設定メモ
|
||||
### AI Gateway
|
||||
|
||||
- インスタンスサービスは Kubernetes の内部ネットワーク上で動作します
|
||||
- デスクトップアクセスは認証済みバックエンドプロキシを経由します
|
||||
- ランタイムイメージはシステム設定から上書きできます
|
||||
- バックエンドはクラスター内部に配置するのが理想です
|
||||
AI Gateway は、モデル利用のガバナンスをワークスペース体験そのものに統合します。監査ログ、コスト可視化、リスクルーティングを通じて、AI 利用を単発の統合ではなく、プラットフォーム機能として扱えるようにします。
|
||||
|
||||
主なバックエンド環境変数:
|
||||
<p align="center">
|
||||
<img src="./docs/main/aigateway.png" alt="ClawManager AI Gateway" width="100%" />
|
||||
</p>
|
||||
|
||||
- `SERVER_ADDRESS`
|
||||
- `SERVER_MODE`
|
||||
- `DB_HOST`
|
||||
- `DB_PORT`
|
||||
- `DB_USER`
|
||||
- `DB_PASSWORD`
|
||||
- `DB_NAME`
|
||||
- `JWT_SECRET`
|
||||
## 動作の流れ
|
||||
|
||||
### CSV インポートテンプレート
|
||||
1. 管理者がガバナンスポリシーと再利用可能なリソースを定義します。
|
||||
2. ユーザーが Kubernetes 上で管理対象の AI エージェントワークスペースを作成または利用します。
|
||||
3. Agent がコントロールプレーンへ接続し、ランタイム状態を報告します。
|
||||
4. Channel、skill、bundle がコンパイルされ、インスタンスへ適用されます。
|
||||
5. AI トラフィックは AI Gateway を経由し、監査、リスク、コスト制御が付与されます。
|
||||
|
||||
```csv
|
||||
Username,Email,Role,Max Instances,Max CPU Cores,Max Memory (GB),Max Storage (GB),Max GPU Count (optional)
|
||||
```
|
||||
## 開発者向け概要
|
||||
|
||||
メモ:
|
||||
ClawManager は、React フロントエンド、Go バックエンド、状態管理用 MySQL、そして `skill-scanner` やオブジェクトストレージ統合を含む Kubernetes ネイティブなプラットフォームです。コードベースは製品サブシステムごとに整理されているため、該当ガイドから入り、その後コードへ進むのが最も効率的です。
|
||||
|
||||
- `Email` は任意です
|
||||
- `Max GPU Count (optional)` は任意です
|
||||
- それ以外の列は必須です
|
||||
- フロントエンドの管理画面とユーザー画面は `frontend/`
|
||||
- バックエンドのサービス、handler、repository、migration は `backend/`
|
||||
- デプロイ資産は `deployments/`
|
||||
- 製品ドキュメントと素材は `docs/`
|
||||
|
||||
[Developer Guide (English)](./docs/developer-guide.md) を参照してください。
|
||||
|
||||
## ドキュメント
|
||||
|
||||
- [ユーザーガイド](./docs/use_guide_ja.md)
|
||||
- [Deployment Guide (English)](./docs/deployment.md)
|
||||
- [Admin and User Guide (English)](./docs/admin-user-guide.md)
|
||||
- [Agent Control Plane Guide (English)](./docs/agent-control-plane.md)
|
||||
- [AI Gateway Guide (English)](./docs/aigateway.md)
|
||||
- [Security / Skill Scanner Guide (English)](./docs/security-skill-scanner.md)
|
||||
- [Resource Management Guide (English)](./docs/resource-management.md)
|
||||
- [Developer Guide (English)](./docs/developer-guide.md)
|
||||
|
||||
## ライセンス
|
||||
|
||||
このプロジェクトは MIT License の下で公開されています。
|
||||
このプロジェクトは MIT License のもとで公開されています。
|
||||
|
||||
## オープンソース
|
||||
|
||||
issue と pull request を歓迎します。
|
||||
Issue と Pull Request を歓迎します。
|
||||
|
||||
## Star History
|
||||
|
||||
<a href="https://www.star-history.com/?repos=Yuan-lab-LLM%2FClawManager&type=date&legend=top-left">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=Yuan-lab-LLM/ClawManager&type=date&theme=dark&legend=top-left" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=Yuan-lab-LLM/ClawManager&type=date&legend=top-left" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=Yuan-lab-LLM/ClawManager&type=date&legend=top-left" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
+125
-141
@@ -5,7 +5,7 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
팀 규모부터 클러스터 규모까지 OpenClaw와 Linux 데스크톱 런타임을 통합 관리하기 위한 Kubernetes-first 제어 평면입니다.
|
||||
ClawManager는 AI Agent 인스턴스 관리를 위한 Kubernetes 네이티브 컨트롤 플레인으로, 거버넌스가 적용된 AI 접근, 런타임 오케스트레이션, 그리고 여러 Agent Runtime 전반에 걸친 재사용 가능한 리소스 관리를 제공합니다.
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -18,203 +18,187 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/ClawManager-Virtual%20Desktop%20Platform-e25544?style=for-the-badge" alt="ClawManager Platform" />
|
||||
<img src="https://img.shields.io/badge/ClawManager-Control%20Plane-e25544?style=for-the-badge" alt="ClawManager Control Plane" />
|
||||
<img src="https://img.shields.io/badge/Go-1.21%2B-00ADD8?style=for-the-badge&logo=go&logoColor=white" alt="Go 1.21+" />
|
||||
<img src="https://img.shields.io/badge/React-19-20232A?style=for-the-badge&logo=react&logoColor=61DAFB" alt="React 19" />
|
||||
<img src="https://img.shields.io/badge/Kubernetes-Native-326CE5?style=for-the-badge&logo=kubernetes&logoColor=white" alt="Kubernetes Native" />
|
||||
<img src="https://img.shields.io/badge/License-MIT-2ea44f?style=for-the-badge" alt="MIT License" />
|
||||
</p>
|
||||
|
||||
## News
|
||||
|
||||
- [2026-03-26]: 🚀🚀 AI Gateway 문서와 개요를 업데이트했습니다. 모델 거버넌스, 감사 추적, 비용 정산, 위험 제어를 정리했습니다. 자세한 내용은 [AI Gateway](#ai-gateway)를 참고하세요.
|
||||
- [2026-03-20]: 🎉🎉 ClawManager 릴리스 —— ClawManager는 현재 가상 데스크톱 관리 플랫폼으로 제공되며, 일괄 배포, Webtop 지원, 데스크톱 포털 접근, 런타임 이미지 설정, OpenClaw 메모리/환경설정 Markdown 백업 및 마이그레이션, 클러스터 리소스 개요, 다국어 문서를 지원합니다.
|
||||
|
||||
<p align="center">
|
||||
<img src="./docs/main/admin.png" alt="ClawManager Admin" width="32%" />
|
||||
<img src="./docs/main/portal.png" alt="ClawManager Portal" width="32%" />
|
||||
<img src="./docs/main/aigateway.png" alt="ClawManager AI Gateway" width="32%" />
|
||||
<a href="#product-tour">제품 소개</a> |
|
||||
<a href="#ai-gateway">AI Gateway</a> |
|
||||
<a href="#agent-control-plane">Agent Control Plane</a> |
|
||||
<a href="#resource-management">리소스 관리</a> |
|
||||
<a href="#get-started">시작하기</a>
|
||||
</p>
|
||||
|
||||
## 무엇인가
|
||||
<p align="center">
|
||||
<a href="https://github.com/Yuan-lab-LLM/ClawManager/stargazers">
|
||||
<img src="https://img.shields.io/github/stars/Yuan-lab-LLM/ClawManager?style=for-the-badge&logo=github&label=Star%20ClawManager" alt="Star ClawManager on GitHub" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
ClawManager는 Kubernetes 위에서 데스크톱 런타임의 배포, 운영, 접근을 한곳에서 관리할 수 있게 해줍니다.
|
||||
<h2 align="center">60초 안에 보는 ClawManager</h2>
|
||||
|
||||
다음과 같은 환경에 적합합니다.
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/Yuan-lab-LLM/ClawManager-Assets/main/gif/clawmanager-launch-60s-hd.gif" alt="ClawManager 제품 데모" width="100%" />
|
||||
</p>
|
||||
|
||||
- 여러 사용자를 위한 데스크톱 인스턴스를 만들어야 하는 경우
|
||||
- quota, 이미지, 라이프사이클을 중앙에서 관리해야 하는 경우
|
||||
- 데스크톱 서비스를 클러스터 내부에 유지하고 싶은 경우
|
||||
- Pod를 직접 노출하지 않고 안전한 브라우저 접근을 제공하고 싶은 경우
|
||||
<p align="center">
|
||||
빠른 Agent 프로비저닝, Skill 관리와 스캔, AI Gateway 거버넌스를 짧게 확인할 수 있습니다.
|
||||
</p>
|
||||
|
||||
## 선택하는 이유
|
||||
## 최신 업데이트
|
||||
|
||||
- 사용자, quota, 인스턴스, 런타임 이미지를 하나의 관리 화면에서 운영
|
||||
- OpenClaw 메모리와 설정의 가져오기/내보내기 지원
|
||||
- 서비스를 직접 노출하지 않고 플랫폼을 통한 안전한 데스크톱 접근
|
||||
- AI Gateway를 통한 통제된 모델 접근, 감사 추적, 비용 분석, 위험 제어
|
||||
- Kubernetes에 자연스럽게 맞는 배포 및 운영 흐름
|
||||
- 관리자 주도 배포와 셀프서비스 생성 모두 지원
|
||||
최근의 중요한 제품 및 문서 업데이트입니다.
|
||||
|
||||
## 빠른 시작
|
||||
- [2026-04-08] 플랫폼에 Skill 관리와 Skill 스캔 워크플로우가 추가되었습니다. 자세한 내용은 [Merged PR #52](https://github.com/Yuan-lab-LLM/ClawManager/pull/52)를 참고하세요.
|
||||
- [2026-03-26] AI Gateway 문서를 업데이트하여 모델 거버넌스, 감사와 추적, 비용 계산, 리스크 제어 설명을 강화했습니다. 자세한 내용은 [AI Gateway Guide](./docs/aigateway.md)를 참고하세요.
|
||||
- [2026-03-20] ClawManager는 AI Agent 워크스페이스를 위한 더 넓은 컨트롤 플레인으로 발전했으며, 런타임 제어, 재사용 가능한 리소스, 보안 스캔 워크플로우가 강화되었습니다.
|
||||
|
||||
### 사전 조건
|
||||
> ClawManager가 여러분의 팀에 도움이 된다면, 프로젝트에 Star를 남겨 더 많은 사용자와 개발자가 발견할 수 있도록 도와주세요.
|
||||
|
||||
- 사용 가능한 Kubernetes 클러스터
|
||||
- `kubectl get nodes` 가 정상 동작해야 함
|
||||
<p align="center">
|
||||
<a href="https://github.com/Yuan-lab-LLM/ClawManager/stargazers">
|
||||
<img src="https://raw.githubusercontent.com/Yuan-lab-LLM/ClawManager-Assets/main/gif/clawmanager-star.gif" alt="Star ClawManager on GitHub" width="100%" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
### 배포
|
||||
<a id="product-tour"></a>
|
||||
## 제품 소개
|
||||
|
||||
저장소에 포함된 매니페스트를 그대로 적용합니다.
|
||||
ClawManager는 AI Agent 인스턴스 운영을 Kubernetes 위로 확장하고, 그 런타임 기반 위에 3개의 상위 컨트롤 플레인을 제공합니다. 팀은 이를 통해 AI 접근을 통제하고, Agent를 통해 런타임 동작을 오케스트레이션하며, 스캔 가능하고 재사용 가능한 channel 및 skill 리소스로 워크스페이스 기능을 제공할 수 있습니다.
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
kubectl get pods -A
|
||||
kubectl get svc -A
|
||||
```
|
||||
다음과 같은 팀에 적합합니다.
|
||||
|
||||
## 소스 코드에서 빌드
|
||||
- 여러 사용자를 대상으로 AI Agent 인스턴스를 운영하는 플랫폼 팀
|
||||
- 런타임 가시성, 명령 배포, desired state 제어가 필요한 운영 팀
|
||||
- 수동 설정 대신 재사용 가능한 리소스로 Agent 워크스페이스를 제공하고 싶은 개발 팀
|
||||
|
||||
저장소에 포함된 Kubernetes 매니페스트 대신 소스 코드에서 ClawManager를 실행하거나 패키징하려면:
|
||||
<a id="get-started"></a>
|
||||
## 시작하기
|
||||
|
||||
### 프런트엔드
|
||||
ClawManager는 이제 표준 Kubernetes 환경과 경량 클러스터 환경 모두에 대해 더 명확한 진입 경로를 제공합니다. 먼저 자신의 환경에 맞는 배포 경로를 선택한 뒤, 첫 로그인 및 기본 사용 흐름으로 이어가면 됩니다.
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
- 표준 Kubernetes 배포: [deployments/k8s/clawmanager.yaml](./deployments/k8s/clawmanager.yaml)
|
||||
- K3s / 경량 클러스터 배포: [deployments/k3s/clawmanager.yaml](./deployments/k3s/clawmanager.yaml)
|
||||
- 첫 로그인 및 기본 사용 흐름: [사용자 가이드](./docs/use_guide_ko.md)
|
||||
- 배포 설명 및 아키텍처 배경: [Deployment Guide (English)](./docs/deployment.md)
|
||||
|
||||
### 백엔드
|
||||
## 세 가지 컨트롤 플레인
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
go mod tidy
|
||||
go build -o bin/clawreef cmd/server/main.go
|
||||
```
|
||||
<a id="ai-gateway"></a>
|
||||
### AI Gateway
|
||||
|
||||
### Docker 이미지
|
||||
AI Gateway는 ClawManager에서 모델 접근을 거버넌스하는 컨트롤 플레인입니다. 관리되는 Agent Runtime에 통합된 OpenAI 호환 진입점을 제공하고, 상위 모델 제공자 위에 정책, 감사, 비용 제어를 추가합니다.
|
||||
|
||||
저장소 루트에서 전체 애플리케이션 이미지를 빌드합니다.
|
||||
- 모델 트래픽을 위한 통합 진입점
|
||||
- 보안 모델 라우팅과 정책 기반 모델 선택
|
||||
- 엔드투엔드 감사 및 추적 기록
|
||||
- 내장된 비용 계산과 사용량 분석
|
||||
- 차단 또는 라우팅 전환이 가능한 리스크 제어 규칙
|
||||
|
||||
```bash
|
||||
docker build -t clawmanager:latest .
|
||||
```
|
||||
[AI Gateway Guide (English)](./docs/aigateway.md)를 참고하세요.
|
||||
|
||||
### 기본 계정
|
||||
<a id="agent-control-plane"></a>
|
||||
### Agent Control Plane
|
||||
|
||||
- 기본 관리자 계정: `admin / admin123`
|
||||
- 가져온 관리자 사용자의 기본 비밀번호: `admin123`
|
||||
- 가져온 일반 사용자의 기본 비밀번호: `user123`
|
||||
Agent Control Plane은 관리되는 AI Agent 인스턴스를 위한 런타임 오케스트레이션 계층입니다. 각 인스턴스를 등록, 상태 보고, 명령 수신, 그리고 플랫폼 측 desired state와의 정렬이 가능한 관리형 런타임으로 만듭니다.
|
||||
|
||||
### 첫 사용 순서
|
||||
- 보안 부트스트랩과 세션 라이프사이클 기반 Agent 등록
|
||||
- 하트비트 기반 런타임 상태 및 헬스 리포팅
|
||||
- 컨트롤 플레인과 인스턴스 간 desired state 동기화
|
||||
- 시작, 중지, 설정 적용, 헬스체크, Skill 작업을 위한 명령 배포
|
||||
- 인스턴스 단위의 Agent 상태, channel, skill, 명령 이력 가시화
|
||||
|
||||
1. 관리자 계정으로 로그인합니다.
|
||||
2. 사용자를 생성하거나 가져오고 quota를 할당합니다.
|
||||
3. 시스템 설정에서 런타임 이미지 카드를 검토하거나 업데이트합니다.
|
||||
4. 일반 사용자로 로그인해 인스턴스를 생성합니다.
|
||||
5. Portal View 또는 Desktop Access를 통해 데스크톱에 접근합니다.
|
||||
[Agent Control Plane Guide (English)](./docs/agent-control-plane.md)를 참고하세요.
|
||||
|
||||
## 주요 기능
|
||||
<a id="resource-management"></a>
|
||||
### 리소스 관리
|
||||
|
||||
- 인스턴스 라이프사이클 관리: 생성, 시작, 중지, 재시작, 삭제, 조회, 동기화
|
||||
- 지원 런타임: `openclaw`, `webtop`, `ubuntu`, `debian`, `centos`, `custom`
|
||||
- 관리자 화면에서의 런타임 이미지 카드 관리
|
||||
- CPU, 메모리, 스토리지, GPU, 인스턴스 수에 대한 사용자 단위 quota 제어
|
||||
- 노드, CPU, 메모리, 스토리지를 위한 클러스터 리소스 개요
|
||||
- 토큰 기반 데스크톱 접근과 WebSocket 포워딩
|
||||
- AI Gateway를 통한 모델 관리, 추적 가능한 감사 로그, 비용 정산, 위험 제어
|
||||
- CSV 기반 대량 사용자 가져오기
|
||||
- 다국어 인터페이스
|
||||
리소스 관리는 AI Agent 워크스페이스를 위한 재사용 가능한 자산 계층입니다. 팀은 channel과 skill을 준비하고, bundle로 조합하고, 인스턴스에 주입하며, 그 과정에 보안 검토를 자연스럽게 포함시킬 수 있습니다.
|
||||
|
||||
## AI Gateway
|
||||
### 지원되는 모델 서비스 플랫폼
|
||||
- `Channel` 관리: 워크스페이스 연결과 통합 템플릿
|
||||
- `Skill` 관리: 재사용 가능한 기능 패키지
|
||||
- `Skill Scanner` 워크플로우: 리스크 검토와 스캔 작업
|
||||
- bundle 기반 리소스 조합: 반복 가능한 워크스페이스 구성
|
||||
- 주입 스냅샷을 통한 실제 적용 결과 추적
|
||||
|
||||
ClawManager에는 다음 모델 서비스 플랫폼용 템플릿이 내장되어 있습니다.
|
||||
[Resource Management Guide (English)](./docs/resource-management.md)와 [Security / Skill Scanner Guide (English)](./docs/security-skill-scanner.md)를 참고하세요.
|
||||
|
||||
- OpenAI
|
||||
- OpenRouter
|
||||
- DeepSeek
|
||||
- SiliconFlow
|
||||
- Moonshot AI
|
||||
- Zhipu AI
|
||||
- Alibaba DashScope
|
||||
- Volcengine Ark
|
||||
- Groq
|
||||
- Together AI
|
||||
- Fireworks AI
|
||||
- xAI
|
||||
- Perplexity
|
||||
- 01.AI
|
||||
- MiniMax
|
||||
- Local / Internal 엔드포인트
|
||||
## 제품 갤러리
|
||||
|
||||
`Local / Internal` 모드는 자체 호스팅 OpenAI-compatible 게이트웨이, Ollama, One API, 기타 내부 모델 엔드포인트 연결에도 사용할 수 있습니다.
|
||||
ClawManager는 관리, 접근, AI 거버넌스를 서로 분리된 도구로 다루지 않고, 하나의 일관된 제품 경험으로 묶도록 설계되었습니다.
|
||||
|
||||
### 관리 콘솔
|
||||
|
||||
AI Gateway는 ClawManager에서 모델 접근을 다루는 거버넌스 평면입니다. OpenClaw 인스턴스에 단일 OpenAI 호환 진입점을 제공하고, 상위 Provider 위에 정책, 감사, 비용 제어를 추가합니다.
|
||||
관리 콘솔은 사용자, 쿼터, 런타임 작업, 보안 제어, 플랫폼 수준 정책을 하나의 화면으로 묶습니다. 대규모 AI Agent 인프라를 운영하는 팀의 핵심 작업 공간입니다.
|
||||
|
||||
- 일반 모델과 보안 모델 관리, Provider 연결, 활성화, 엔드포인트 설정, 가격 정책
|
||||
- 요청, 응답, 라우팅 결정, 위험 히트를 포함한 엔드 투 엔드 감사 및 추적 기록
|
||||
- 토큰 집계와 사용량 추정을 포함한 내장 비용 정산
|
||||
- 설정 가능한 규칙 기반 위험 제어와 `block`, `route_secure_model` 같은 자동 동작
|
||||
<p align="center">
|
||||
<img src="./docs/main/admin.png" alt="ClawManager 관리 콘솔" width="100%" />
|
||||
</p>
|
||||
|
||||
스크린샷, 전체 기능 설명, 모델 선택 및 라우팅 흐름은 [docs/aigateway.md](./docs/aigateway.md)를 참고하세요.
|
||||
### Portal Access
|
||||
|
||||
## 사용 흐름
|
||||
Portal은 사용자에게 일관된 워크스페이스 진입점을 제공합니다. 브라우저 기반으로 접근하면서도 컨트롤 플레인과 동기화된 런타임 상태를 확인할 수 있어, 사용자가 인프라 세부 사항을 직접 다루지 않아도 됩니다.
|
||||
|
||||
1. 관리자가 사용자, quota, 런타임 이미지 정책을 정의합니다.
|
||||
2. 사용자가 OpenClaw 또는 Linux 데스크톱 인스턴스를 생성합니다.
|
||||
3. ClawManager가 Kubernetes 리소스를 생성하고 상태를 추적합니다.
|
||||
4. 사용자가 플랫폼을 통해 데스크톱에 접근합니다.
|
||||
5. 관리자가 대시보드에서 상태와 용량을 모니터링합니다.
|
||||
<p align="center">
|
||||
<img src="./docs/main/portal.png" alt="ClawManager Portal Access" width="100%" />
|
||||
</p>
|
||||
|
||||
## 아키텍처
|
||||
### AI Gateway
|
||||
|
||||
```text
|
||||
Browser
|
||||
-> ClawManager Frontend
|
||||
-> ClawManager Backend
|
||||
-> MySQL
|
||||
-> Kubernetes API
|
||||
-> Pod / PVC / Service
|
||||
-> OpenClaw / Webtop / Linux Desktop Runtime
|
||||
```
|
||||
AI Gateway는 모델 사용 거버넌스를 워크스페이스 경험 자체에 통합합니다. 감사 로그, 비용 가시성, 리스크 라우팅을 제공하여 AI 사용을 개별 통합이 아닌 플랫폼 기능으로 다룰 수 있게 합니다.
|
||||
|
||||
## 설정 메모
|
||||
<p align="center">
|
||||
<img src="./docs/main/aigateway.png" alt="ClawManager AI Gateway" width="100%" />
|
||||
</p>
|
||||
|
||||
- 인스턴스 서비스는 Kubernetes 내부 네트워크에 유지됩니다
|
||||
- 데스크톱 접근은 인증된 백엔드 프록시를 통해 전달됩니다
|
||||
- 런타임 이미지는 시스템 설정에서 덮어쓸 수 있습니다
|
||||
- 백엔드는 가능하면 클러스터 내부에 배치하는 것이 좋습니다
|
||||
## 동작 방식
|
||||
|
||||
주요 백엔드 환경 변수:
|
||||
1. 관리자가 거버넌스 정책과 재사용 가능한 리소스를 정의합니다.
|
||||
2. 사용자가 Kubernetes에서 관리되는 AI Agent 워크스페이스를 생성하거나 진입합니다.
|
||||
3. Agent가 컨트롤 플레인에 연결해 런타임 상태를 보고합니다.
|
||||
4. Channel, skill, bundle이 컴파일되어 인스턴스에 적용됩니다.
|
||||
5. AI 트래픽은 AI Gateway를 통해 전달되며, 감사, 리스크, 비용 제어가 함께 적용됩니다.
|
||||
|
||||
- `SERVER_ADDRESS`
|
||||
- `SERVER_MODE`
|
||||
- `DB_HOST`
|
||||
- `DB_PORT`
|
||||
- `DB_USER`
|
||||
- `DB_PASSWORD`
|
||||
- `DB_NAME`
|
||||
- `JWT_SECRET`
|
||||
## 개발자 개요
|
||||
|
||||
### CSV 가져오기 템플릿
|
||||
ClawManager는 React 프런트엔드, Go 백엔드, 상태 저장용 MySQL, 그리고 `skill-scanner` 및 오브젝트 스토리지 통합을 포함한 Kubernetes 네이티브 플랫폼입니다. 코드베이스는 제품 서브시스템 단위로 구성되어 있으므로, 관련 가이드에서 시작한 뒤 코드로 들어가는 방식이 가장 효율적입니다.
|
||||
|
||||
```csv
|
||||
Username,Email,Role,Max Instances,Max CPU Cores,Max Memory (GB),Max Storage (GB),Max GPU Count (optional)
|
||||
```
|
||||
- 프런트엔드의 관리자 및 사용자 화면은 `frontend/`
|
||||
- 백엔드 서비스, handler, repository, migration은 `backend/`
|
||||
- 배포 자산은 `deployments/`
|
||||
- 제품 문서와 이미지 자산은 `docs/`
|
||||
|
||||
메모:
|
||||
[Developer Guide (English)](./docs/developer-guide.md)를 참고하세요.
|
||||
|
||||
- `Email` 은 선택 사항입니다
|
||||
- `Max GPU Count (optional)` 은 선택 사항입니다
|
||||
- 나머지 열은 모두 필수입니다
|
||||
## 문서
|
||||
|
||||
- [사용자 가이드](./docs/use_guide_ko.md)
|
||||
- [Deployment Guide (English)](./docs/deployment.md)
|
||||
- [Admin and User Guide (English)](./docs/admin-user-guide.md)
|
||||
- [Agent Control Plane Guide (English)](./docs/agent-control-plane.md)
|
||||
- [AI Gateway Guide (English)](./docs/aigateway.md)
|
||||
- [Security / Skill Scanner Guide (English)](./docs/security-skill-scanner.md)
|
||||
- [Resource Management Guide (English)](./docs/resource-management.md)
|
||||
- [Developer Guide (English)](./docs/developer-guide.md)
|
||||
|
||||
## 라이선스
|
||||
|
||||
이 프로젝트는 MIT License로 배포됩니다.
|
||||
이 프로젝트는 MIT License로 공개됩니다.
|
||||
|
||||
## 오픈 소스
|
||||
## 오픈소스
|
||||
|
||||
issue와 pull request를 환영합니다.
|
||||
Issue와 Pull Request를 환영합니다.
|
||||
|
||||
## Star History
|
||||
|
||||
<a href="https://www.star-history.com/?repos=Yuan-lab-LLM%2FClawManager&type=date&legend=top-left">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=Yuan-lab-LLM/ClawManager&type=date&theme=dark&legend=top-left" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=Yuan-lab-LLM/ClawManager&type=date&legend=top-left" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=Yuan-lab-LLM/ClawManager&type=date&legend=top-left" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
@@ -5,20 +5,20 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
A Kubernetes-first control plane for managing OpenClaw and Linux desktop runtimes at team and cluster scale.
|
||||
A Kubernetes-native control plane for AI agent instance management, with governed AI access, runtime orchestration, and reusable resources across multiple agent runtimes.
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<strong>Languages:</strong>
|
||||
English |
|
||||
<a href="./README.zh-CN.md">中文</a> |
|
||||
<a href="./README.ja.md">日本語</a> |
|
||||
<a href="./README.ko.md">한국어</a> |
|
||||
<a href="./README.zh-CN.md">Chinese</a> |
|
||||
<a href="./README.ja.md">Japanese</a> |
|
||||
<a href="./README.ko.md">Korean</a> |
|
||||
<a href="./README.de.md">Deutsch</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/ClawManager-Virtual%20Desktop%20Platform-e25544?style=for-the-badge" alt="ClawManager Platform" />
|
||||
<img src="https://img.shields.io/badge/ClawManager-Control%20Plane-e25544?style=for-the-badge" alt="ClawManager Control Plane" />
|
||||
<img src="https://img.shields.io/badge/Go-1.21%2B-00ADD8?style=for-the-badge&logo=go&logoColor=white" alt="Go 1.21+" />
|
||||
<img src="https://img.shields.io/badge/React-19-20232A?style=for-the-badge&logo=react&logoColor=61DAFB" alt="React 19" />
|
||||
<img src="https://img.shields.io/badge/Kubernetes-Native-326CE5?style=for-the-badge&logo=kubernetes&logoColor=white" alt="Kubernetes Native" />
|
||||
@@ -26,195 +26,160 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="./docs/main/clawmanager_features.jpg" alt="ClawManager Admin" width="100%" />
|
||||
<a href="#product-tour">Explore the Product</a> |
|
||||
<a href="#ai-gateway">AI Gateway</a> |
|
||||
<a href="#agent-control-plane">Agent Control Plane</a> |
|
||||
<a href="#resource-management">Resource Management</a> |
|
||||
<a href="#get-started">Get Started</a>
|
||||
</p>
|
||||
|
||||
## News
|
||||
|
||||
- [2026-03-26]: 🚀🚀 AI Gateway documentation and overview were refreshed, including model governance, audit and trace, cost accounting, and risk control. See [AI Gateway](#ai-gateway).
|
||||
- [2026-03-20]: 🎉🎉 ClawManager Release — ClawManager is now a virtual desktop management platform featuring batch deployment, Webtop support, desktop portal access, runtime image settings, OpenClaw memory/preferences Markdown backup and migration, cluster resource overview, and multilingual documentation.
|
||||
|
||||
<p align="center">
|
||||
<img src="./docs/main/admin.png" alt="ClawManager Admin" width="32%" />
|
||||
<img src="./docs/main/portal.png" alt="ClawManager Portal" width="32%" />
|
||||
<img src="./docs/main/aigateway.png" alt="ClawManager AI Gateway" width="32%" />
|
||||
<a href="https://github.com/Yuan-lab-LLM/ClawManager/stargazers">
|
||||
<img src="https://img.shields.io/github/stars/Yuan-lab-LLM/ClawManager?style=for-the-badge&logo=github&label=Star%20ClawManager" alt="Star ClawManager on GitHub" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
## What It Is
|
||||
<h2 align="center">See ClawManager in 60 Seconds</h2>
|
||||
|
||||
ClawManager helps teams deploy, operate, and access desktop runtimes on Kubernetes from one place.
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/Yuan-lab-LLM/ClawManager-Assets/main/gif/clawmanager-launch-60s-hd.gif" alt="ClawManager product launch demo" width="100%" />
|
||||
</p>
|
||||
|
||||
It is built for environments where you need to:
|
||||
<p align="center">
|
||||
A quick look at fast agent provisioning, skill management and scanning, and AI Gateway governance.
|
||||
</p>
|
||||
|
||||
- create desktop instances for multiple users
|
||||
- control quotas, runtime images, and lifecycle centrally
|
||||
- keep desktop services inside the cluster
|
||||
- give users secure browser access without exposing pods directly
|
||||
## What's New
|
||||
|
||||
## Why Users Pick It
|
||||
Recent highlights from the latest product and documentation updates.
|
||||
|
||||
- One admin panel for users, quotas, instances, and runtime images
|
||||
- OpenClaw support with import/export for memory and preferences
|
||||
- Secure desktop access through the platform instead of direct pod exposure
|
||||
- AI Gateway governance for controlled model access, audit trails, cost analysis, and risk controls
|
||||
- Kubernetes-native deployment and operations flow
|
||||
- Works for both admin-managed rollout and self-service instance creation
|
||||
- [2026-04-08] Added skill management and skill scanning workflows to the platform, via [Merged PR #52](https://github.com/Yuan-lab-LLM/ClawManager/pull/52).
|
||||
- [2026-03-26] AI Gateway documentation was refreshed with stronger coverage for model governance, audit and trace, cost accounting, and risk control. See the [AI Gateway Guide](./docs/aigateway.md).
|
||||
- [2026-03-20] ClawManager evolved into a broader control plane for AI agent workspaces, with stronger runtime control, reusable resources, and security scanning workflows.
|
||||
|
||||
> If ClawManager is useful to your team, please star the project to help more users and contributors discover it.
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/Yuan-lab-LLM/ClawManager/stargazers">
|
||||
<img src="https://raw.githubusercontent.com/Yuan-lab-LLM/ClawManager-Assets/main/gif/clawmanager-star.gif" alt="Star ClawManager on GitHub" width="100%" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
|
||||
## Quick Start
|
||||
## Product Tour
|
||||
|
||||
### Prerequisites
|
||||
ClawManager brings AI agent instance operations to Kubernetes and layers three higher-level control planes on top of that runtime foundation. Teams use it to govern AI access, orchestrate runtime behavior through agents, and manage reusable channels and skills with scanning and bundle-based delivery.
|
||||
|
||||
- A working Kubernetes cluster
|
||||
- `kubectl get nodes` works
|
||||
It is designed for:
|
||||
|
||||
### Deploy
|
||||
- platform teams running AI agent instances for multiple users
|
||||
- operators who need runtime visibility, command dispatch, and desired-state control
|
||||
- builders who want governed AI access and reusable resource injection instead of manual per-instance setup
|
||||
|
||||
Apply the bundled manifest:
|
||||
## Get Started
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
kubectl get pods -A
|
||||
kubectl get svc -A
|
||||
```
|
||||
ClawManager now has clearer entry points for both full Kubernetes deployments and lightweight cluster setups. If you want to evaluate the product quickly, start with the guide that matches your environment and then follow the first-use walkthrough.
|
||||
|
||||
## Build From Source
|
||||
- Standard Kubernetes deployment: [deployments/k8s/clawmanager.yaml](./deployments/k8s/clawmanager.yaml)
|
||||
- K3s or lightweight deployment: [deployments/k3s/clawmanager.yaml](./deployments/k3s/clawmanager.yaml)
|
||||
- Operations-oriented quick start and first login flow: [User Guide](./docs/use_guide_en.md)
|
||||
- Deployment notes and architecture-level context: [Deployment Guide](./docs/deployment.md)
|
||||
|
||||
If you want to run or package ClawManager from source instead of using the bundled Kubernetes manifest:
|
||||
## Three Control Planes
|
||||
|
||||
### Frontend
|
||||
### AI Gateway
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
AI Gateway is the governance plane for model access inside ClawManager. It gives managed agent runtimes a unified OpenAI-compatible entry point while adding policy and audit controls on top of upstream providers.
|
||||
|
||||
### Backend
|
||||
- Unified gateway entry for model traffic
|
||||
- Secure model routing and policy-aware model selection
|
||||
- End-to-end audit and trace records
|
||||
- Built-in cost accounting and usage analysis
|
||||
- Risk control rules that can block or reroute requests
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
go mod tidy
|
||||
go build -o bin/clawreef cmd/server/main.go
|
||||
```
|
||||
See the [AI Gateway Guide](./docs/aigateway.md).
|
||||
|
||||
### Docker Image
|
||||
### Agent Control Plane
|
||||
|
||||
Build the full application image from the repository root:
|
||||
Agent Control Plane is the runtime orchestration layer for managed AI agent instances. It turns each instance into a managed runtime that can register, report status, receive commands, and stay aligned with platform-side desired state.
|
||||
|
||||
```bash
|
||||
docker build -t clawmanager:latest .
|
||||
```
|
||||
- Agent registration with secure bootstrap and session lifecycle
|
||||
- Heartbeat-driven runtime status and health reporting
|
||||
- Desired-state synchronization between the control plane and the instance
|
||||
- Runtime command dispatch for start, stop, config apply, health checks, and skill operations
|
||||
- Instance-level visibility into agent status, channels, skills, and command history
|
||||
|
||||
### Default Accounts
|
||||
See the [Agent Control Plane Guide](./docs/agent-control-plane.md).
|
||||
|
||||
- Default admin account: `admin / admin123`
|
||||
- Default password for imported admin users: `admin123`
|
||||
- Default password for imported regular users: `user123`
|
||||
### Resource Management
|
||||
|
||||
### First Use
|
||||
Resource Management is the reusable asset layer for AI agent workspaces. It helps teams prepare channels and skills once, organize them into bundles, inject them into instances, and keep security review in the loop.
|
||||
|
||||
1. Log in as admin.
|
||||
2. Create or import users and assign quotas.
|
||||
3. Review or update runtime image cards in system settings.
|
||||
4. Log in as a user and create an instance.
|
||||
5. Access the desktop through Portal View or Desktop Access.
|
||||
- Channel management for workspace connectivity and integration templates
|
||||
- Skill management for reusable packaged capabilities
|
||||
- Skill Scanner workflows for risk review and scan operations
|
||||
- Bundle-based resource composition for repeatable workspace setup
|
||||
- Injection snapshots and runtime-level visibility into what was applied
|
||||
|
||||
## Main Capabilities
|
||||
See the [Resource Management Guide](./docs/resource-management.md) and the [Security / Skill Scanner Guide](./docs/security-skill-scanner.md).
|
||||
|
||||
- Instance lifecycle management: create, start, stop, restart, delete, inspect, and sync
|
||||
- Runtime types: `openclaw`, `webtop`, `ubuntu`, `debian`, `centos`, `custom`
|
||||
- Runtime image card management from the admin panel
|
||||
- User quota control for CPU, memory, storage, GPU, and instance count
|
||||
- Cluster resource overview for nodes, CPU, memory, and storage
|
||||
- Token-based desktop access with WebSocket forwarding
|
||||
- AI Gateway for model management, traceable audit logs, cost accounting, and risk control
|
||||
- CSV-based bulk user import
|
||||
- Multilingual interface
|
||||
## Product Gallery
|
||||
|
||||
## AI Gateway
|
||||
The product is designed to feel coherent across administration, workspace access, and AI governance. Instead of treating these as separate tools, ClawManager brings them into one control surface.
|
||||
|
||||
AI Gateway is the governance plane for model access inside ClawManager. It gives OpenClaw instances a single OpenAI-compatible entry point while adding policy, audit, and cost controls on top of upstream providers.
|
||||
### Admin Console
|
||||
|
||||
- Model management for regular and secure models, provider onboarding, activation, endpoint configuration, and pricing policy
|
||||
- End-to-end audit and trace records for requests, responses, routing decisions, and risk hits
|
||||
- Built-in cost accounting with token tracking and estimated usage analysis
|
||||
- Risk control with configurable rules and automated actions such as `block` and `route_secure_model`
|
||||
The admin console brings together users, quotas, runtime operations, security controls, and platform-level policies in one place. It is the operational center for teams running AI agent infrastructure at scale.
|
||||
|
||||
### Supported Model Service Platforms
|
||||
<p align="center">
|
||||
<img src="./docs/main/admin.png" alt="ClawManager admin console" width="100%" />
|
||||
</p>
|
||||
|
||||
ClawManager includes built-in vendor templates for:
|
||||
### Portal Access
|
||||
|
||||
- OpenAI
|
||||
- OpenRouter
|
||||
- DeepSeek
|
||||
- SiliconFlow
|
||||
- Moonshot AI
|
||||
- Zhipu AI
|
||||
- Alibaba DashScope
|
||||
- Volcengine Ark
|
||||
- xAI
|
||||
- Together AI
|
||||
- Fireworks AI
|
||||
- Perplexity
|
||||
- 01.AI
|
||||
- MiniMax
|
||||
- Local / Internal endpoints
|
||||
The portal experience gives users a clean entry point into their workspaces, with browser-based access and runtime visibility that stays connected to the control plane instead of exposing infrastructure details directly.
|
||||
|
||||
`Local / Internal` can also be used for self-hosted OpenAI-compatible gateways, Ollama, One API, and other private model endpoints.
|
||||
<p align="center">
|
||||
<img src="./docs/main/portal.png" alt="ClawManager portal access" width="100%" />
|
||||
</p>
|
||||
|
||||
For screenshots, the full feature breakdown, and the model selection and routing flow, see [docs/aigateway.md](./docs/aigateway.md).
|
||||
### AI Gateway
|
||||
|
||||
## Product Flow
|
||||
AI Gateway extends the workspace experience with governed model access, audit trails, cost visibility, and risk-aware routing, making AI usage manageable as part of the platform rather than an isolated integration.
|
||||
|
||||
1. An admin defines users, quotas, and runtime image policies.
|
||||
2. A user creates an OpenClaw or Linux desktop instance.
|
||||
3. ClawManager creates and tracks the Kubernetes resources.
|
||||
4. The user accesses the desktop through the platform.
|
||||
5. Admins monitor health and capacity from the dashboard.
|
||||
<p align="center">
|
||||
<img src="./docs/main/aigateway.png" alt="ClawManager AI Gateway" width="100%" />
|
||||
</p>
|
||||
|
||||
## Architecture
|
||||
## How It Works
|
||||
|
||||
```text
|
||||
Browser
|
||||
-> ClawManager Frontend
|
||||
-> ClawManager Backend
|
||||
-> MySQL
|
||||
-> Kubernetes API
|
||||
-> Pod / PVC / Service
|
||||
-> OpenClaw / Webtop / Linux Desktop Runtime
|
||||
```
|
||||
1. Admins define governance policies and reusable resources.
|
||||
2. Users create or enter managed AI agent workspaces on Kubernetes.
|
||||
3. Agents connect back to the control plane and report runtime state.
|
||||
4. Channels, skills, and bundles are compiled and applied to instances.
|
||||
5. AI traffic flows through AI Gateway with audit, risk, and cost controls.
|
||||
|
||||
## Configuration Notes
|
||||
## Developer Snapshot
|
||||
|
||||
- Instance services stay on Kubernetes internal networking
|
||||
- Desktop access goes through the authenticated backend proxy
|
||||
- Runtime images can be overridden from system settings
|
||||
- Backend deployment is best kept inside the cluster
|
||||
ClawManager is built as a Kubernetes-native platform with a React frontend, a Go backend, MySQL for state, and supporting services such as skill-scanner and object storage integrations. The repository is organized around product subsystems rather than a single monolith page, so the best developer experience is to start from the relevant guide and then move into the code.
|
||||
|
||||
Common backend environment variables:
|
||||
- Frontend app and admin/user surfaces live under `frontend/`
|
||||
- Backend services, handlers, repositories, and migrations live under `backend/`
|
||||
- Deployment assets live under `deployments/`
|
||||
- Supporting product docs live under `docs/`
|
||||
|
||||
- `SERVER_ADDRESS`
|
||||
- `SERVER_MODE`
|
||||
- `DB_HOST`
|
||||
- `DB_PORT`
|
||||
- `DB_USER`
|
||||
- `DB_PASSWORD`
|
||||
- `DB_NAME`
|
||||
- `JWT_SECRET`
|
||||
See the [Developer Guide](./docs/developer-guide.md).
|
||||
|
||||
### CSV Import Template
|
||||
|
||||
```csv
|
||||
Username,Email,Role,Max Instances,Max CPU Cores,Max Memory (GB),Max Storage (GB),Max GPU Count (optional)
|
||||
```
|
||||
|
||||
Notes:
|
||||
|
||||
- `Email` is optional
|
||||
- `Max GPU Count (optional)` is optional
|
||||
- all other columns are required
|
||||
## Documentation
|
||||
|
||||
- [User Guide](./docs/use_guide_en.md)
|
||||
- [Deployment Guide](./docs/deployment.md)
|
||||
- [Admin and User Guide](./docs/admin-user-guide.md)
|
||||
- [Agent Control Plane Guide](./docs/agent-control-plane.md)
|
||||
- [AI Gateway Guide](./docs/aigateway.md)
|
||||
- [Security / Skill Scanner Guide](./docs/security-skill-scanner.md)
|
||||
- [Resource Management Guide](./docs/resource-management.md)
|
||||
- [Developer Guide](./docs/developer-guide.md)
|
||||
|
||||
## License
|
||||
|
||||
@@ -224,7 +189,6 @@ This project is licensed under the MIT License.
|
||||
|
||||
Issues and pull requests are welcome.
|
||||
|
||||
|
||||
## Star History
|
||||
|
||||
<a href="https://www.star-history.com/?repos=Yuan-lab-LLM%2FClawManager&type=date&legend=top-left">
|
||||
|
||||
+116
-149
@@ -5,7 +5,7 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
一个面向团队与集群规模场景的 Kubernetes-first 控制平面,用于统一管理 OpenClaw 和 Linux 桌面运行时。
|
||||
一个面向 AI Agent 实例管理的 Kubernetes 原生控制平面,提供受治理的 AI 访问、运行时编排,以及适用于多种 Agent Runtime 的可复用资源管理能力。
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -18,7 +18,7 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/ClawManager-Virtual%20Desktop%20Platform-e25544?style=for-the-badge" alt="ClawManager Platform" />
|
||||
<img src="https://img.shields.io/badge/ClawManager-Control%20Plane-e25544?style=for-the-badge" alt="ClawManager Control Plane" />
|
||||
<img src="https://img.shields.io/badge/Go-1.21%2B-00ADD8?style=for-the-badge&logo=go&logoColor=white" alt="Go 1.21+" />
|
||||
<img src="https://img.shields.io/badge/React-19-20232A?style=for-the-badge&logo=react&logoColor=61DAFB" alt="React 19" />
|
||||
<img src="https://img.shields.io/badge/Kubernetes-Native-326CE5?style=for-the-badge&logo=kubernetes&logoColor=white" alt="Kubernetes Native" />
|
||||
@@ -26,205 +26,172 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="./docs/main/clawmanager_features.jpg" alt="ClawManager Admin" width="100%" />
|
||||
<a href="#product-tour">了解产品</a> |
|
||||
<a href="#ai-gateway">AI Gateway</a> |
|
||||
<a href="#agent-control-plane">Agent Control Plane</a> |
|
||||
<a href="#resource-management">资源管理</a> |
|
||||
<a href="#get-started">快速开始</a>
|
||||
</p>
|
||||
|
||||
|
||||
## 新闻
|
||||
|
||||
- [2026-03-26]: 🚀🚀 AI Gateway 文档与总览已更新,涵盖模型治理、审计追踪、成本核算和风险控制。参见 [AI Gateway](#ai-gateway)。
|
||||
- [2026-03-20]: 🎉🎉 ClawManager 发布 —— ClawManager 现已成为一款虚拟桌面管理平台,支持批量部署、Webtop 支持、桌面门户访问、运行时镜像配置、OpenClaw 记忆/偏好 Markdown 备份与迁移、集群资源总览以及多语言文档。
|
||||
|
||||
|
||||
<p align="center">
|
||||
<img src="./docs/main/admin.png" alt="ClawManager Admin" width="32%" />
|
||||
<img src="./docs/main/portal.png" alt="ClawManager Portal" width="32%" />
|
||||
<img src="./docs/main/aigateway.png" alt="ClawManager AI Gateway" width="32%" />
|
||||
<a href="https://github.com/Yuan-lab-LLM/ClawManager/stargazers">
|
||||
<img src="https://img.shields.io/github/stars/Yuan-lab-LLM/ClawManager?style=for-the-badge&logo=github&label=Star%20ClawManager" alt="Star ClawManager on GitHub" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
## 它是什么
|
||||
<h2 align="center">60 秒认识 ClawManager</h2>
|
||||
|
||||
ClawManager 帮助团队在 Kubernetes 上统一部署、运维并访问桌面运行时。
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/Yuan-lab-LLM/ClawManager-Assets/main/gif/clawmanager-launch-60s-hd.gif" alt="ClawManager 产品演示" width="100%" />
|
||||
</p>
|
||||
|
||||
它适合这些场景:
|
||||
<p align="center">
|
||||
快速了解 Agent 实例创建、Skill 管理与扫描,以及 AI Gateway 治理能力。
|
||||
</p>
|
||||
|
||||
- 需要为多个用户创建桌面实例
|
||||
- 需要集中管理配额、镜像和生命周期
|
||||
- 希望桌面服务始终保留在集群内部
|
||||
- 希望通过安全的浏览器访问方式,而不是直接暴露 Pod
|
||||
## 最新动态
|
||||
|
||||
## 为什么选择它
|
||||
这里展示最近的重要产品与文档更新。
|
||||
|
||||
- 一个管理后台统一管理用户、配额、实例和运行时镜像
|
||||
- 支持 OpenClaw,并提供记忆与偏好设置的导入导出
|
||||
- 通过平台提供安全桌面访问,而不是直接暴露服务
|
||||
- AI Gateway 提供受控模型访问、审计追踪、成本分析和风险控制
|
||||
- 天然适配 Kubernetes 的部署与运维方式
|
||||
- 同时支持管理员统一发放和用户自助创建
|
||||
- [2026-04-08] 平台新增了 Skill 管理与 Skill 扫描工作流,见 [Merged PR #52](https://github.com/Yuan-lab-LLM/ClawManager/pull/52)。
|
||||
- [2026-03-26] AI Gateway 文档已更新,补充了模型治理、审计追踪、成本核算与风险控制能力,见 [AI Gateway Guide](./docs/aigateway.md)。
|
||||
- [2026-03-20] ClawManager 进一步演进为面向 AI Agent 工作空间的控制平面,强化了运行时控制、可复用资源与安全扫描工作流。
|
||||
|
||||
> 如果 ClawManager 对你的团队有帮助,欢迎为项目点一个 Star,帮助更多用户和开发者发现它。
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/Yuan-lab-LLM/ClawManager/stargazers">
|
||||
<img src="https://raw.githubusercontent.com/Yuan-lab-LLM/ClawManager-Assets/main/gif/clawmanager-star.gif" alt="Star ClawManager on GitHub" width="100%" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<a id="product-tour"></a>
|
||||
## 产品介绍
|
||||
|
||||
ClawManager 将 AI Agent 实例的运行、治理与运维能力带到 Kubernetes,并在运行时基础之上叠加三层更高阶的控制平面。团队可以用它治理 AI 访问、通过 Agent 编排运行时行为,并通过可扫描、可复用的 channel 与 skill 资源交付工作空间能力。
|
||||
|
||||
它适合以下场景:
|
||||
|
||||
- 面向多用户运行 AI Agent 实例的平台团队
|
||||
- 需要运行时可观测性、命令下发与期望态控制的运维团队
|
||||
- 希望以可复用资源而不是手工配置方式交付 Agent 工作空间的开发团队
|
||||
|
||||
<a id="get-started"></a>
|
||||
## 快速开始
|
||||
|
||||
### 前置条件
|
||||
ClawManager 现在同时提供标准 Kubernetes 与轻量级集群的清晰入口。如果你想快速评估产品,可以先从匹配你环境的部署路径开始,再进入首次登录与上手流程。
|
||||
|
||||
- 一个可用的 Kubernetes 集群
|
||||
- `kubectl get nodes` 可以正常执行
|
||||
- 标准 Kubernetes 部署: [deployments/k8s/clawmanager.yaml](./deployments/k8s/clawmanager.yaml)
|
||||
- K3s / 轻量集群部署: [deployments/k3s/clawmanager.yaml](./deployments/k3s/clawmanager.yaml)
|
||||
- 首次登录与操作流程: [用户指南](./docs/use_guide_cn.md)
|
||||
- 部署说明与架构背景: [Deployment Guide(英文)](./docs/deployment.md)
|
||||
|
||||
### 部署
|
||||
## 三大控制平面
|
||||
|
||||
直接应用仓库自带清单:
|
||||
<a id="ai-gateway"></a>
|
||||
### AI Gateway
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
kubectl get pods -A
|
||||
kubectl get svc -A
|
||||
```
|
||||
AI Gateway 是 ClawManager 中负责模型访问治理的控制平面。它为受管 Agent Runtime 提供统一的 OpenAI 兼容入口,同时在上游模型服务之上叠加策略、审计与成本控制能力。
|
||||
|
||||
## 从源码构建
|
||||
- 统一的模型访问入口
|
||||
- 安全模型路由与策略驱动的模型选择
|
||||
- 端到端审计与追踪记录
|
||||
- 内建成本核算与使用分析
|
||||
- 可阻断或改道路由的风险控制规则
|
||||
|
||||
如果你想从源码运行或打包 ClawManager,而不是直接使用仓库自带的 Kubernetes 清单:
|
||||
参见 [AI Gateway Guide(英文)](./docs/aigateway.md)。
|
||||
|
||||
### 前端
|
||||
<a id="agent-control-plane"></a>
|
||||
### Agent Control Plane
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
Agent Control Plane 是受管 AI Agent 实例的运行时编排层。它让每一个实例都成为可注册、可汇报状态、可接收命令,并持续对齐平台期望态的受管运行时。
|
||||
|
||||
### 后端
|
||||
- 基于安全引导与会话生命周期的 Agent 注册
|
||||
- 依靠心跳机制进行运行时状态与健康上报
|
||||
- 控制平面与实例之间的期望态同步
|
||||
- 支持启动、停止、配置应用、健康检查与 Skill 操作的命令下发
|
||||
- 在实例维度查看 Agent 状态、channel、skill 与命令历史
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
go mod tidy
|
||||
go build -o bin/clawreef cmd/server/main.go
|
||||
```
|
||||
参见 [Agent Control Plane Guide(英文)](./docs/agent-control-plane.md)。
|
||||
|
||||
### Docker 镜像
|
||||
<a id="resource-management"></a>
|
||||
### 资源管理
|
||||
|
||||
在仓库根目录构建完整应用镜像:
|
||||
资源管理是 AI Agent 工作空间的可复用资产层。团队可以先准备好 channel 和 skill,再通过 bundle 进行组合、注入到实例中,并把安全审查纳入整个交付流程。
|
||||
|
||||
```bash
|
||||
docker build -t clawmanager:latest .
|
||||
```
|
||||
- `Channel` 管理,用于工作空间连接与集成模板
|
||||
- `Skill` 管理,用于可复用能力包
|
||||
- `Skill Scanner` 工作流,用于风险审查与扫描任务
|
||||
- 基于 bundle 的资源组合,用于可重复交付
|
||||
- 通过注入快照追踪实际下发到实例的内容
|
||||
|
||||
### 默认账户
|
||||
参见 [Resource Management Guide(英文)](./docs/resource-management.md) 与 [Security / Skill Scanner Guide(英文)](./docs/security-skill-scanner.md)。
|
||||
|
||||
- 默认管理员账户:`admin / admin123`
|
||||
- 导入管理员用户时的默认密码:`admin123`
|
||||
- 导入普通用户时的默认密码:`user123`
|
||||
## 产品界面
|
||||
|
||||
### 首次使用
|
||||
ClawManager 的设计目标,是让管理、访问与 AI 治理体验形成统一的产品界面,而不是分散在多个孤立工具中。
|
||||
|
||||
1. 使用管理员账户登录。
|
||||
2. 创建或导入用户,并分配配额。
|
||||
3. 在系统设置中查看或更新运行时镜像卡片。
|
||||
4. 使用普通用户登录并创建实例。
|
||||
5. 通过 Portal View 或 Desktop Access 访问桌面。
|
||||
### 管理控制台
|
||||
|
||||
## 核心能力
|
||||
管理控制台将用户、配额、运行时操作、安全控制与平台级策略集中到一起,是团队管理 AI Agent 基础设施的核心工作台。
|
||||
|
||||
- 实例生命周期管理:创建、启动、停止、重启、删除、查看和同步
|
||||
- 支持的运行时类型:`openclaw`、`webtop`、`ubuntu`、`debian`、`centos`、`custom`
|
||||
- 后台运行时镜像卡片管理
|
||||
- 用户级 CPU、内存、存储、GPU 和实例数量配额控制
|
||||
- 节点、CPU、内存和存储的集群资源总览
|
||||
- 基于令牌的桌面访问与 WebSocket 转发
|
||||
- AI Gateway:模型管理、可追溯审计、成本核算与风险控制
|
||||
- 基于 CSV 的批量用户导入
|
||||
- 多语言界面
|
||||
<p align="center">
|
||||
<img src="./docs/main/admin.png" alt="ClawManager 管理控制台" width="100%" />
|
||||
</p>
|
||||
|
||||
## AI Gateway
|
||||
### Portal 访问
|
||||
|
||||
AI Gateway 是 ClawManager 中负责模型访问治理的控制平面。它为 OpenClaw 实例提供统一的 OpenAI 兼容入口,并在上游 Provider 之上增加策略、审计和成本控制。
|
||||
Portal 为用户提供统一的工作空间入口。用户可以通过浏览器访问实例,并查看与控制平面保持一致的运行时状态,而不需要直接面对底层基础设施细节。
|
||||
|
||||
- 面向普通模型与安全模型的模型管理,以及 Provider 接入、启停、端点配置和价格策略
|
||||
- 面向请求、响应、路由决策和风险命中的全链路审计与追踪记录
|
||||
- 内置 Token 统计与估算分析的成本核算能力
|
||||
- 基于可配置规则的风险控制,并支持 `block` 与 `route_secure_model` 等自动动作
|
||||
<p align="center">
|
||||
<img src="./docs/main/portal.png" alt="ClawManager Portal 访问" width="100%" />
|
||||
</p>
|
||||
|
||||
### 支持的模型服务平台
|
||||
### AI Gateway
|
||||
|
||||
ClawManager 当前内置了以下模型服务平台模板:
|
||||
AI Gateway 将模型访问治理纳入工作空间体验本身,提供审计记录、成本可见性与风险路由能力,让 AI 使用成为平台能力的一部分,而不是零散接入。
|
||||
|
||||
- OpenAI
|
||||
- OpenRouter
|
||||
- DeepSeek
|
||||
- SiliconFlow
|
||||
- Moonshot AI
|
||||
- 智谱 AI
|
||||
- 阿里云 DashScope
|
||||
- 火山引擎 Ark
|
||||
- Groq
|
||||
- Together AI
|
||||
- Fireworks AI
|
||||
- xAI
|
||||
- Perplexity
|
||||
- 01.AI
|
||||
- MiniMax
|
||||
- Local / Internal 本地或内网端点
|
||||
<p align="center">
|
||||
<img src="./docs/main/aigateway.png" alt="ClawManager AI Gateway" width="100%" />
|
||||
</p>
|
||||
|
||||
其中 `Local / Internal` 模式也可用于接入自建 OpenAI-compatible 网关、Ollama、One API 以及其他内网模型服务。
|
||||
## 工作方式
|
||||
|
||||
如需查看截图、完整功能拆解以及模型选择与路由流程,请参阅 [docs/aigateway.md](./docs/aigateway.md)。
|
||||
1. 管理员先定义治理策略与可复用资源。
|
||||
2. 用户在 Kubernetes 上创建或进入受管 AI Agent 工作空间。
|
||||
3. Agent 回连控制平面并上报运行时状态。
|
||||
4. Channel、skill 与 bundle 被编译并应用到实例中。
|
||||
5. AI 流量通过 AI Gateway 进入上游服务,并附带审计、风险与成本控制。
|
||||
|
||||
## 产品流程
|
||||
## 开发者概览
|
||||
|
||||
1. 管理员定义用户、配额和运行时镜像策略。
|
||||
2. 用户创建 OpenClaw 或 Linux 桌面实例。
|
||||
3. ClawManager 创建并跟踪 Kubernetes 资源。
|
||||
4. 用户通过平台访问桌面。
|
||||
5. 管理员通过仪表盘监控健康状态和容量。
|
||||
ClawManager 是一个 Kubernetes 原生平台,包含 React 前端、Go 后端、MySQL 状态存储,以及 `skill-scanner` 与对象存储等支撑组件。代码库按产品子系统组织,因此更适合从对应能力的指南切入,再进入代码实现。
|
||||
|
||||
## 架构
|
||||
- 前端管理界面与用户界面位于 `frontend/`
|
||||
- 后端服务、handler、repository 与 migration 位于 `backend/`
|
||||
- 部署资产位于 `deployments/`
|
||||
- 产品文档与素材位于 `docs/`
|
||||
|
||||
```text
|
||||
Browser
|
||||
-> ClawManager Frontend
|
||||
-> ClawManager Backend
|
||||
-> MySQL
|
||||
-> Kubernetes API
|
||||
-> Pod / PVC / Service
|
||||
-> OpenClaw / Webtop / Linux Desktop Runtime
|
||||
```
|
||||
参见 [Developer Guide(英文)](./docs/developer-guide.md)。
|
||||
|
||||
## 配置说明
|
||||
## 文档
|
||||
|
||||
- 实例服务保留在 Kubernetes 集群内部网络
|
||||
- 桌面访问通过已认证的后端代理转发
|
||||
- 运行时镜像可以在系统设置中覆盖
|
||||
- 后端最好部署在集群内部
|
||||
|
||||
常用后端环境变量:
|
||||
|
||||
- `SERVER_ADDRESS`
|
||||
- `SERVER_MODE`
|
||||
- `DB_HOST`
|
||||
- `DB_PORT`
|
||||
- `DB_USER`
|
||||
- `DB_PASSWORD`
|
||||
- `DB_NAME`
|
||||
- `JWT_SECRET`
|
||||
|
||||
### CSV 导入模板
|
||||
|
||||
```csv
|
||||
Username,Email,Role,Max Instances,Max CPU Cores,Max Memory (GB),Max Storage (GB),Max GPU Count (optional)
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
- `Email` 为可选项
|
||||
- `Max GPU Count (optional)` 为可选项
|
||||
- 其他列均为必填项
|
||||
- [用户指南](./docs/use_guide_cn.md)
|
||||
- [Deployment Guide(英文)](./docs/deployment.md)
|
||||
- [Admin and User Guide(英文)](./docs/admin-user-guide.md)
|
||||
- [Agent Control Plane Guide(英文)](./docs/agent-control-plane.md)
|
||||
- [AI Gateway Guide(英文)](./docs/aigateway.md)
|
||||
- [Security / Skill Scanner Guide(英文)](./docs/security-skill-scanner.md)
|
||||
- [Resource Management Guide(英文)](./docs/resource-management.md)
|
||||
- [Developer Guide(英文)](./docs/developer-guide.md)
|
||||
|
||||
## 许可证
|
||||
|
||||
本项目基于 MIT License 发布。
|
||||
本项目基于 MIT License 开源。
|
||||
|
||||
## 开源
|
||||
## 开源协作
|
||||
|
||||
欢迎提交 issue 和 pull request。
|
||||
欢迎提交 Issue 与 Pull Request。
|
||||
|
||||
## Star History
|
||||
|
||||
|
||||
@@ -0,0 +1,782 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: clawmanager-system
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: clawmanager-secrets
|
||||
namespace: clawmanager-system
|
||||
type: Opaque
|
||||
stringData:
|
||||
mysql-root-password: root123
|
||||
mysql-password: clawreef123
|
||||
jwt-secret: change-me-in-production
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: clawmanager-mysql-init
|
||||
namespace: clawmanager-system
|
||||
data:
|
||||
001_init_schema.sql: |
|
||||
CREATE DATABASE IF NOT EXISTS clawmanager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
USE clawmanager;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(255) UNIQUE NOT NULL,
|
||||
email VARCHAR(320) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
role ENUM('admin', 'user') DEFAULT 'user',
|
||||
is_active BOOLEAN DEFAULT TRUE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
last_login TIMESTAMP,
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_role (role)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS instances (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT NOT NULL,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
description TEXT,
|
||||
type ENUM('openclaw', 'ubuntu', 'debian', 'centos', 'custom', 'webtop') DEFAULT 'ubuntu',
|
||||
status ENUM('creating', 'running', 'stopped', 'error', 'deleting') DEFAULT 'creating',
|
||||
cpu_cores INT NOT NULL,
|
||||
memory_gb INT NOT NULL,
|
||||
disk_gb INT NOT NULL,
|
||||
gpu_enabled BOOLEAN DEFAULT FALSE,
|
||||
gpu_type VARCHAR(100),
|
||||
gpu_count INT DEFAULT 0,
|
||||
os_type VARCHAR(50) NOT NULL,
|
||||
os_version VARCHAR(50) NOT NULL,
|
||||
image_registry VARCHAR(255),
|
||||
image_tag VARCHAR(100),
|
||||
storage_class VARCHAR(50) DEFAULT 'standard',
|
||||
mount_path VARCHAR(255) DEFAULT '/data',
|
||||
pod_name VARCHAR(255),
|
||||
pod_namespace VARCHAR(255),
|
||||
pod_ip VARCHAR(45),
|
||||
access_url VARCHAR(500),
|
||||
access_token VARCHAR(255),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
started_at TIMESTAMP,
|
||||
stopped_at TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_type (type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS persistent_volumes (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_id INT NOT NULL,
|
||||
pvc_name VARCHAR(255) UNIQUE NOT NULL,
|
||||
pvc_namespace VARCHAR(255) NOT NULL,
|
||||
storage_size_gb INT NOT NULL,
|
||||
storage_class VARCHAR(50),
|
||||
mount_path VARCHAR(255),
|
||||
status ENUM('pending', 'bound', 'released', 'failed') DEFAULT 'pending',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (instance_id) REFERENCES instances(id) ON DELETE CASCADE,
|
||||
INDEX idx_instance_id (instance_id),
|
||||
UNIQUE KEY uk_pvc_name_namespace (pvc_name, pvc_namespace)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS backups (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_id INT NOT NULL,
|
||||
backup_name VARCHAR(255) NOT NULL,
|
||||
backup_size_gb INT,
|
||||
backup_path VARCHAR(500),
|
||||
status ENUM('creating', 'completed', 'failed', 'deleted') DEFAULT 'creating',
|
||||
backup_type ENUM('manual', 'scheduled') DEFAULT 'manual',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
completed_at TIMESTAMP,
|
||||
expires_at TIMESTAMP,
|
||||
FOREIGN KEY (instance_id) REFERENCES instances(id) ON DELETE CASCADE,
|
||||
INDEX idx_instance_id (instance_id),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS backup_schedules (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_id INT NOT NULL,
|
||||
schedule_name VARCHAR(255),
|
||||
cron_expression VARCHAR(100) NOT NULL,
|
||||
retention_days INT DEFAULT 30,
|
||||
is_active BOOLEAN DEFAULT TRUE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (instance_id) REFERENCES instances(id) ON DELETE CASCADE,
|
||||
INDEX idx_instance_id (instance_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_quotas (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT NOT NULL UNIQUE,
|
||||
max_instances INT DEFAULT 10,
|
||||
max_cpu_cores INT DEFAULT 40,
|
||||
max_memory_gb INT DEFAULT 100,
|
||||
max_storage_gb INT DEFAULT 500,
|
||||
max_gpu_count INT DEFAULT 2,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_user_id (user_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS instance_usage (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_id INT NOT NULL,
|
||||
cpu_usage_percent DECIMAL(5,2),
|
||||
memory_usage_gb DECIMAL(10,2),
|
||||
disk_usage_gb DECIMAL(10,2),
|
||||
gpu_usage_percent DECIMAL(5,2),
|
||||
uptime_seconds INT,
|
||||
recorded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (instance_id) REFERENCES instances(id) ON DELETE CASCADE,
|
||||
INDEX idx_instance_recorded (instance_id, recorded_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS audit_logs (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT,
|
||||
action VARCHAR(100) NOT NULL,
|
||||
resource_type VARCHAR(50) NOT NULL,
|
||||
resource_id INT,
|
||||
details JSON,
|
||||
ip_address VARCHAR(45),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_action (action),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
INSERT INTO users (username, email, password_hash, role, is_active)
|
||||
SELECT 'admin', 'admin@clawmanager.local', '$2a$10$pbenze514mwv3pvQySQBVOsF5J4DBXL2kVo1hLa8JFhQu5x3AKvBi', 'admin', TRUE
|
||||
WHERE NOT EXISTS (SELECT 1 FROM users WHERE username = 'admin');
|
||||
|
||||
INSERT INTO user_quotas (user_id, max_instances, max_cpu_cores, max_memory_gb, max_storage_gb, max_gpu_count)
|
||||
SELECT id, 100, 200, 1000, 5000, 10 FROM users
|
||||
WHERE username = 'admin'
|
||||
AND NOT EXISTS (SELECT 1 FROM user_quotas WHERE user_id = users.id);
|
||||
002_add_webtop_instance_type.sql: |
|
||||
USE clawmanager;
|
||||
ALTER TABLE instances
|
||||
MODIFY COLUMN type ENUM('openclaw', 'ubuntu', 'debian', 'centos', 'custom', 'webtop') DEFAULT 'ubuntu';
|
||||
003_add_system_image_settings.sql: |
|
||||
USE clawmanager;
|
||||
CREATE TABLE IF NOT EXISTS system_image_settings (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_type VARCHAR(50) NOT NULL UNIQUE,
|
||||
display_name VARCHAR(255) NOT NULL,
|
||||
image VARCHAR(500) NOT NULL,
|
||||
is_enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_instance_type (instance_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
004_fix_seeded_admin_password.sql: |
|
||||
USE clawmanager;
|
||||
UPDATE users
|
||||
SET password_hash = '$2a$10$pbenze514mwv3pvQySQBVOsF5J4DBXL2kVo1hLa8JFhQu5x3AKvBi'
|
||||
WHERE username = 'admin'
|
||||
AND password_hash = '$2a$10$N9qo8uLOickgx2ZMRZoMy.MqrzL9wGC3qD3Q.ZHqQH6t3q7l1L5uG';
|
||||
005_update_openclaw_default_image.sql: |
|
||||
USE clawmanager;
|
||||
UPDATE system_image_settings
|
||||
SET image = 'ghcr.io/yuan-lab-llm/clawmanager-openclaw-image/openclaw:latest'
|
||||
WHERE instance_type = 'openclaw'
|
||||
AND image = 'ericpearlee/openclaw:v2026.3.24';
|
||||
006_add_openclaw_config_center.sql: |
|
||||
USE clawmanager;
|
||||
SET @openclaw_snapshot_column_exists = (
|
||||
SELECT COUNT(*)
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'instances'
|
||||
AND COLUMN_NAME = 'openclaw_config_snapshot_id'
|
||||
);
|
||||
SET @openclaw_snapshot_column_sql = IF(
|
||||
@openclaw_snapshot_column_exists = 0,
|
||||
'ALTER TABLE instances ADD COLUMN openclaw_config_snapshot_id INT NULL AFTER access_token',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE openclaw_snapshot_column_stmt FROM @openclaw_snapshot_column_sql;
|
||||
EXECUTE openclaw_snapshot_column_stmt;
|
||||
DEALLOCATE PREPARE openclaw_snapshot_column_stmt;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS openclaw_config_resources (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT NOT NULL,
|
||||
resource_type VARCHAR(50) NOT NULL,
|
||||
resource_key VARCHAR(100) NOT NULL,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
description TEXT NULL,
|
||||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
version INT NOT NULL DEFAULT 1,
|
||||
tags_json LONGTEXT NOT NULL,
|
||||
content_json LONGTEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
UNIQUE KEY uk_openclaw_resource_key (user_id, resource_type, resource_key),
|
||||
INDEX idx_openclaw_resource_user_type (user_id, resource_type),
|
||||
INDEX idx_openclaw_resource_user_enabled (user_id, enabled)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS openclaw_config_bundles (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT NOT NULL,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
description TEXT NULL,
|
||||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
version INT NOT NULL DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_openclaw_bundle_user (user_id),
|
||||
INDEX idx_openclaw_bundle_user_enabled (user_id, enabled)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS openclaw_config_bundle_items (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
bundle_id INT NOT NULL,
|
||||
resource_id INT NOT NULL,
|
||||
sort_order INT NOT NULL DEFAULT 0,
|
||||
required BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (bundle_id) REFERENCES openclaw_config_bundles(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (resource_id) REFERENCES openclaw_config_resources(id) ON DELETE CASCADE,
|
||||
UNIQUE KEY uk_openclaw_bundle_resource (bundle_id, resource_id),
|
||||
INDEX idx_openclaw_bundle_item_bundle (bundle_id, sort_order)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS openclaw_injection_snapshots (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_id INT NULL,
|
||||
user_id INT NOT NULL,
|
||||
mode VARCHAR(20) NOT NULL,
|
||||
bundle_id INT NULL,
|
||||
selected_resource_ids_json LONGTEXT NOT NULL,
|
||||
resolved_resources_json LONGTEXT NOT NULL,
|
||||
rendered_manifest_json LONGTEXT NOT NULL,
|
||||
rendered_env_json LONGTEXT NOT NULL,
|
||||
secret_name VARCHAR(255) NULL,
|
||||
status VARCHAR(30) NOT NULL DEFAULT 'pending',
|
||||
error_message TEXT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
activated_at TIMESTAMP NULL,
|
||||
INDEX idx_openclaw_snapshot_user_created (user_id, created_at),
|
||||
INDEX idx_openclaw_snapshot_instance (instance_id),
|
||||
INDEX idx_openclaw_snapshot_bundle (bundle_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
007_add_instance_agent_control_plane.sql: |
|
||||
USE clawmanager;
|
||||
SET @instance_agent_bootstrap_token_column_exists = (
|
||||
SELECT COUNT(*)
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'instances'
|
||||
AND COLUMN_NAME = 'agent_bootstrap_token'
|
||||
);
|
||||
SET @instance_agent_bootstrap_token_column_sql = IF(
|
||||
@instance_agent_bootstrap_token_column_exists = 0,
|
||||
'ALTER TABLE instances ADD COLUMN agent_bootstrap_token VARCHAR(255) NULL AFTER access_token',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE instance_agent_bootstrap_token_column_stmt FROM @instance_agent_bootstrap_token_column_sql;
|
||||
EXECUTE instance_agent_bootstrap_token_column_stmt;
|
||||
DEALLOCATE PREPARE instance_agent_bootstrap_token_column_stmt;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS instance_agents (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_id INT NOT NULL,
|
||||
agent_id VARCHAR(255) NOT NULL,
|
||||
agent_version VARCHAR(50) NOT NULL,
|
||||
protocol_version VARCHAR(50) NOT NULL,
|
||||
status VARCHAR(30) NOT NULL DEFAULT 'online',
|
||||
capabilities_json LONGTEXT NOT NULL,
|
||||
host_info_json LONGTEXT NULL,
|
||||
session_token VARCHAR(255) NULL,
|
||||
session_expires_at TIMESTAMP NULL,
|
||||
last_heartbeat_at TIMESTAMP NULL,
|
||||
last_reported_at TIMESTAMP NULL,
|
||||
last_seen_ip VARCHAR(45) NULL,
|
||||
registered_at TIMESTAMP NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (instance_id) REFERENCES instances(id) ON DELETE CASCADE,
|
||||
UNIQUE KEY uk_instance_agents_instance (instance_id),
|
||||
UNIQUE KEY uk_instance_agents_session_token (session_token),
|
||||
INDEX idx_instance_agents_agent_id (agent_id),
|
||||
INDEX idx_instance_agents_status (status),
|
||||
INDEX idx_instance_agents_last_heartbeat (last_heartbeat_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS instance_runtime_status (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_id INT NOT NULL,
|
||||
infra_status VARCHAR(30) NOT NULL DEFAULT 'creating',
|
||||
agent_status VARCHAR(30) NOT NULL DEFAULT 'offline',
|
||||
openclaw_status VARCHAR(30) NOT NULL DEFAULT 'unknown',
|
||||
openclaw_pid INT NULL,
|
||||
openclaw_version VARCHAR(100) NULL,
|
||||
current_config_revision_id INT NULL,
|
||||
desired_config_revision_id INT NULL,
|
||||
summary_json LONGTEXT NULL,
|
||||
system_info_json LONGTEXT NULL,
|
||||
health_json LONGTEXT NULL,
|
||||
last_reported_at TIMESTAMP NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (instance_id) REFERENCES instances(id) ON DELETE CASCADE,
|
||||
UNIQUE KEY uk_instance_runtime_status_instance (instance_id),
|
||||
INDEX idx_instance_runtime_status_agent_status (agent_status),
|
||||
INDEX idx_instance_runtime_status_openclaw_status (openclaw_status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS instance_desired_state (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_id INT NOT NULL,
|
||||
desired_power_state VARCHAR(30) NOT NULL DEFAULT 'running',
|
||||
desired_config_revision_id INT NULL,
|
||||
desired_runtime_action VARCHAR(50) NULL,
|
||||
updated_by INT NULL,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (instance_id) REFERENCES instances(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (updated_by) REFERENCES users(id) ON DELETE SET NULL,
|
||||
UNIQUE KEY uk_instance_desired_state_instance (instance_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS instance_commands (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_id INT NOT NULL,
|
||||
agent_id VARCHAR(255) NULL,
|
||||
command_type VARCHAR(50) NOT NULL,
|
||||
payload_json LONGTEXT NULL,
|
||||
status VARCHAR(30) NOT NULL DEFAULT 'pending',
|
||||
idempotency_key VARCHAR(255) NOT NULL,
|
||||
issued_by INT NULL,
|
||||
issued_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
dispatched_at TIMESTAMP NULL,
|
||||
started_at TIMESTAMP NULL,
|
||||
finished_at TIMESTAMP NULL,
|
||||
timeout_seconds INT NOT NULL DEFAULT 300,
|
||||
result_json LONGTEXT NULL,
|
||||
error_message TEXT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (instance_id) REFERENCES instances(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (issued_by) REFERENCES users(id) ON DELETE SET NULL,
|
||||
UNIQUE KEY uk_instance_commands_idempotency (instance_id, idempotency_key),
|
||||
INDEX idx_instance_commands_instance_status (instance_id, status),
|
||||
INDEX idx_instance_commands_agent_status (agent_id, status),
|
||||
INDEX idx_instance_commands_issued_at (issued_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS instance_config_revisions (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_id INT NOT NULL,
|
||||
source_snapshot_id INT NULL,
|
||||
source_bundle_id INT NULL,
|
||||
revision_no INT NOT NULL,
|
||||
content_json LONGTEXT NOT NULL,
|
||||
checksum VARCHAR(255) NOT NULL,
|
||||
status VARCHAR(30) NOT NULL DEFAULT 'published',
|
||||
published_by INT NULL,
|
||||
published_at TIMESTAMP NULL,
|
||||
activated_at TIMESTAMP NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (instance_id) REFERENCES instances(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (published_by) REFERENCES users(id) ON DELETE SET NULL,
|
||||
UNIQUE KEY uk_instance_config_revision_unique (instance_id, revision_no),
|
||||
INDEX idx_instance_config_revision_instance (instance_id, revision_no),
|
||||
INDEX idx_instance_config_revision_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
008_add_skill_management.sql: |
|
||||
USE clawmanager;
|
||||
CREATE TABLE IF NOT EXISTS skill_blobs (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
content_hash VARCHAR(128) NOT NULL,
|
||||
archive_hash VARCHAR(128) NOT NULL,
|
||||
object_key VARCHAR(512) NOT NULL,
|
||||
file_name VARCHAR(255) NOT NULL,
|
||||
media_type VARCHAR(100) NOT NULL DEFAULT 'application/gzip',
|
||||
size_bytes BIGINT NOT NULL DEFAULT 0,
|
||||
scan_status VARCHAR(30) NOT NULL DEFAULT 'pending',
|
||||
risk_level VARCHAR(30) NOT NULL DEFAULT 'unknown',
|
||||
last_scanned_at TIMESTAMP NULL,
|
||||
last_scan_result_id INT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uk_skill_blobs_content_hash (content_hash),
|
||||
INDEX idx_skill_blobs_scan_status (scan_status),
|
||||
INDEX idx_skill_blobs_risk_level (risk_level)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS skills (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT NOT NULL,
|
||||
skill_key VARCHAR(120) NOT NULL,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
description TEXT NULL,
|
||||
current_version_id INT NULL,
|
||||
source_type VARCHAR(30) NOT NULL DEFAULT 'uploaded',
|
||||
status VARCHAR(30) NOT NULL DEFAULT 'active',
|
||||
risk_level VARCHAR(30) NOT NULL DEFAULT 'unknown',
|
||||
last_scanned_at TIMESTAMP NULL,
|
||||
last_scan_result_id INT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
UNIQUE KEY uk_skills_user_key (user_id, skill_key),
|
||||
INDEX idx_skills_user_status (user_id, status),
|
||||
INDEX idx_skills_risk_level (risk_level)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS skill_versions (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
skill_id INT NOT NULL,
|
||||
blob_id INT NOT NULL,
|
||||
version_no INT NOT NULL,
|
||||
manifest_json LONGTEXT NULL,
|
||||
source_type VARCHAR(30) NOT NULL DEFAULT 'uploaded',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (skill_id) REFERENCES skills(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (blob_id) REFERENCES skill_blobs(id) ON DELETE RESTRICT,
|
||||
UNIQUE KEY uk_skill_versions_skill_version (skill_id, version_no),
|
||||
UNIQUE KEY uk_skill_versions_skill_blob (skill_id, blob_id),
|
||||
INDEX idx_skill_versions_skill_id (skill_id, version_no)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS instance_skills (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
instance_id INT NOT NULL,
|
||||
skill_id INT NOT NULL,
|
||||
skill_version_id INT NULL,
|
||||
source_type VARCHAR(40) NOT NULL DEFAULT 'discovered_in_instance',
|
||||
install_path VARCHAR(1024) NULL,
|
||||
observed_hash VARCHAR(128) NULL,
|
||||
status VARCHAR(30) NOT NULL DEFAULT 'active',
|
||||
last_seen_at TIMESTAMP NULL,
|
||||
removed_at TIMESTAMP NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (instance_id) REFERENCES instances(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (skill_id) REFERENCES skills(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (skill_version_id) REFERENCES skill_versions(id) ON DELETE SET NULL,
|
||||
UNIQUE KEY uk_instance_skills_instance_skill (instance_id, skill_id),
|
||||
INDEX idx_instance_skills_instance (instance_id, status),
|
||||
INDEX idx_instance_skills_skill (skill_id, status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS skill_scan_results (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
blob_id INT NOT NULL,
|
||||
engine VARCHAR(60) NOT NULL,
|
||||
risk_level VARCHAR(30) NOT NULL DEFAULT 'unknown',
|
||||
status VARCHAR(30) NOT NULL DEFAULT 'completed',
|
||||
summary TEXT NULL,
|
||||
findings_json LONGTEXT NULL,
|
||||
scanned_at TIMESTAMP NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (blob_id) REFERENCES skill_blobs(id) ON DELETE CASCADE,
|
||||
INDEX idx_skill_scan_results_blob (blob_id, scanned_at),
|
||||
INDEX idx_skill_scan_results_risk (risk_level, scanned_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: mysql-data
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
storageClassName: local-path
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: mysql
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: mysql
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: mysql
|
||||
spec:
|
||||
containers:
|
||||
- name: mysql
|
||||
image: mysql:8.4.8
|
||||
ports:
|
||||
- containerPort: 3306
|
||||
env:
|
||||
- name: MYSQL_ROOT_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: clawmanager-secrets
|
||||
key: mysql-root-password
|
||||
- name: MYSQL_DATABASE
|
||||
value: clawmanager
|
||||
- name: MYSQL_USER
|
||||
value: clawmanager
|
||||
- name: MYSQL_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: clawmanager-secrets
|
||||
key: mysql-password
|
||||
volumeMounts:
|
||||
- name: mysql-data
|
||||
mountPath: /var/lib/mysql
|
||||
- name: mysql-init
|
||||
mountPath: /docker-entrypoint-initdb.d
|
||||
readinessProbe:
|
||||
exec:
|
||||
command: ["sh", "-c", "mysqladmin ping -h 127.0.0.1 -uroot -p$MYSQL_ROOT_PASSWORD"]
|
||||
initialDelaySeconds: 20
|
||||
periodSeconds: 10
|
||||
volumes:
|
||||
- name: mysql-data
|
||||
persistentVolumeClaim:
|
||||
claimName: mysql-data
|
||||
- name: mysql-init
|
||||
configMap:
|
||||
name: clawmanager-mysql-init
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: mysql
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
selector:
|
||||
app: mysql
|
||||
ports:
|
||||
- name: mysql
|
||||
port: 3306
|
||||
targetPort: 3306
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: clawmanager-app
|
||||
namespace: clawmanager-system
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: clawmanager-app-cluster-admin
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: cluster-admin
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: clawmanager-app
|
||||
namespace: clawmanager-system
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: clawmanager-app
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: clawmanager-app
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: clawmanager-app
|
||||
spec:
|
||||
serviceAccountName: clawmanager-app
|
||||
containers:
|
||||
- name: clawmanager-app
|
||||
image: ghcr.io/yuan-lab-llm/clawmanager:latest
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8443
|
||||
env:
|
||||
- name: SERVER_ADDRESS
|
||||
value: ":9001"
|
||||
- name: SERVER_MODE
|
||||
value: "release"
|
||||
- name: DB_HOST
|
||||
value: "mysql"
|
||||
- name: DB_PORT
|
||||
value: "3306"
|
||||
- name: DB_USER
|
||||
value: "clawmanager"
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: clawmanager-secrets
|
||||
key: mysql-password
|
||||
- name: DB_NAME
|
||||
value: "clawmanager"
|
||||
- name: JWT_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: clawmanager-secrets
|
||||
key: jwt-secret
|
||||
- name: K8S_MODE
|
||||
value: "incluster"
|
||||
- name: K8S_NAMESPACE
|
||||
value: "clawmanager"
|
||||
- name: K8S_STORAGE_CLASS
|
||||
value: "local-path"
|
||||
- name: SKILL_SCANNER_ENABLED
|
||||
value: "true"
|
||||
- name: SKILL_SCANNER_BASE_URL
|
||||
value: "http://skill-scanner.clawmanager-system.svc.cluster.local:8000"
|
||||
- name: SKILL_SCANNER_TIMEOUT_SECONDS
|
||||
value: "120"
|
||||
- name: SKILL_SCANNER_NAMESPACE
|
||||
value: "clawmanager-system"
|
||||
- name: SKILL_SCANNER_DEPLOYMENT
|
||||
value: "skill-scanner"
|
||||
- name: OBJECT_STORAGE_LOCAL_FALLBACK
|
||||
value: "/data/object-storage"
|
||||
volumeMounts:
|
||||
- name: object-storage
|
||||
mountPath: /data/object-storage
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: 8443
|
||||
scheme: HTTPS
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 3
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: 8443
|
||||
scheme: HTTPS
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 20
|
||||
timeoutSeconds: 5
|
||||
volumes:
|
||||
- name: object-storage
|
||||
emptyDir: {}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: clawmanager-frontend
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
type: NodePort
|
||||
selector:
|
||||
app: clawmanager-app
|
||||
ports:
|
||||
- name: https
|
||||
port: 443
|
||||
targetPort: 8443
|
||||
nodePort: 30443
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: clawmanager-gateway
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: clawmanager-app
|
||||
ports:
|
||||
- name: api
|
||||
port: 8443
|
||||
targetPort: 8443
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: clawmanager-egress-proxy
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: clawmanager-app
|
||||
ports:
|
||||
- name: proxy
|
||||
port: 3128
|
||||
targetPort: 8443
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: skill-scanner
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: skill-scanner
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: skill-scanner
|
||||
spec:
|
||||
containers:
|
||||
- name: skill-scanner
|
||||
image: ghcr.io/yuan-lab-llm/skill-scanner:latest
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- /opt/skill-scanner-venv/bin/skill-scanner-api
|
||||
- --host
|
||||
- 0.0.0.0
|
||||
- --port
|
||||
- "8000"
|
||||
env:
|
||||
- name: SKILL_SCANNER_LLM_API_KEY
|
||||
value: ""
|
||||
- name: SKILL_SCANNER_LLM_MODEL
|
||||
value: ""
|
||||
- name: SKILL_SCANNER_LLM_BASE_URL
|
||||
value: ""
|
||||
- name: SKILL_SCANNER_META_LLM_API_KEY
|
||||
value: ""
|
||||
- name: SKILL_SCANNER_META_LLM_MODEL
|
||||
value: ""
|
||||
- name: SKILL_SCANNER_META_LLM_BASE_URL
|
||||
value: ""
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8000
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: skill-scanner
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
selector:
|
||||
app: skill-scanner
|
||||
ports:
|
||||
- name: http
|
||||
port: 8000
|
||||
targetPort: http
|
||||
@@ -0,0 +1,36 @@
|
||||
# Admin and User Guide
|
||||
|
||||
This guide maps the main product surfaces for administrators and end users. It is the best starting point when you want to understand how ClawManager is experienced in day-to-day use rather than how it is deployed.
|
||||
|
||||
## Admin Experience
|
||||
|
||||
Administrators use ClawManager to:
|
||||
|
||||
- manage users, quotas, and platform-wide policies
|
||||
- review instances and cluster-level operations
|
||||
- govern AI Gateway models, audit trails, cost analysis, and risk rules
|
||||
- manage Security Center and `skill-scanner` operations
|
||||
- prepare reusable resources that users can apply to workspaces
|
||||
|
||||
## User Experience
|
||||
|
||||
End users use ClawManager to:
|
||||
|
||||
- create or access OpenClaw workspaces
|
||||
- open workspaces through the portal experience
|
||||
- inspect runtime status, agent signals, and recent command activity
|
||||
- attach or remove skills from an instance when permitted
|
||||
- consume platform-governed AI access through AI Gateway
|
||||
|
||||
## Product Areas
|
||||
|
||||
- [AI Gateway Guide](./aigateway.md)
|
||||
- [Agent Control Plane Guide](./agent-control-plane.md)
|
||||
- [Resource Management Guide](./resource-management.md)
|
||||
- [Security / Skill Scanner Guide](./security-skill-scanner.md)
|
||||
|
||||
## Suggested Walkthrough
|
||||
|
||||
1. Start with the AI Gateway overview if your team cares most about model governance.
|
||||
2. Review Agent Control Plane if your focus is runtime visibility and operations.
|
||||
3. Review Resource Management and Security Center if you want reusable channels, skills, and scan-backed workflows.
|
||||
@@ -0,0 +1,43 @@
|
||||
# Agent Control Plane Guide
|
||||
|
||||
Agent Control Plane is the runtime orchestration layer for OpenClaw instances in ClawManager. It allows the platform to understand live runtime state, distribute commands, and keep each managed workspace aligned with the desired state defined by the control plane.
|
||||
|
||||
## Core Responsibilities
|
||||
|
||||
- agent bootstrap and registration for OpenClaw instances
|
||||
- authenticated session lifecycle between the runtime agent and the platform
|
||||
- heartbeat-driven runtime and health reporting
|
||||
- desired power state and desired config revision tracking
|
||||
- command dispatch and completion tracking for runtime operations
|
||||
|
||||
## Runtime Signals
|
||||
|
||||
The control plane keeps a runtime view that includes:
|
||||
|
||||
- agent identity, version, and last heartbeat
|
||||
- runtime status and OpenClaw status
|
||||
- current and desired config revision
|
||||
- reported summary data such as agent, channel, and skill counts
|
||||
- recent command history and execution outcomes
|
||||
|
||||
## Typical Commands
|
||||
|
||||
Examples of platform-driven runtime actions include:
|
||||
|
||||
- start, stop, and restart operations
|
||||
- config revision apply and reload
|
||||
- health checks and system info collection
|
||||
- skill install, update, removal, quarantine, and inventory refresh
|
||||
|
||||
## Where It Shows Up in the Product
|
||||
|
||||
- instance detail views for agent status and runtime summaries
|
||||
- runtime command history and execution feedback
|
||||
- workflows that apply config revisions or skill-related changes to a workspace
|
||||
|
||||
## Related Guides
|
||||
|
||||
- [Admin and User Guide](./admin-user-guide.md)
|
||||
- [Resource Management Guide](./resource-management.md)
|
||||
- [Security / Skill Scanner Guide](./security-skill-scanner.md)
|
||||
- [Developer Guide](./developer-guide.md)
|
||||
@@ -0,0 +1,50 @@
|
||||
# Deployment Guide
|
||||
|
||||
ClawManager is packaged as a Kubernetes-first platform. This guide is the operational entry point for deploying the control plane, locating the relevant manifests in the repository, and understanding which services are expected to come up in a working environment.
|
||||
|
||||
## Deployment Paths
|
||||
|
||||
Choose the deployment path that matches your environment:
|
||||
|
||||
- Standard Kubernetes: [`deployments/k8s/clawmanager.yaml`](../deployments/k8s/clawmanager.yaml)
|
||||
- K3s or lightweight clusters: [`deployments/k3s/clawmanager.yaml`](../deployments/k3s/clawmanager.yaml)
|
||||
- End-to-end first-use walkthrough: [User Guide](./use_guide_en.md)
|
||||
|
||||
## What Gets Deployed
|
||||
|
||||
- ClawManager frontend and backend
|
||||
- MySQL for application state
|
||||
- MinIO for object storage-backed features
|
||||
- `skill-scanner` for skill analysis workflows
|
||||
- Kubernetes Services used for portal, gateway, and supporting traffic paths
|
||||
|
||||
## Repository Entry Points
|
||||
|
||||
- Kubernetes manifest: [`deployments/k8s/clawmanager.yaml`](../deployments/k8s/clawmanager.yaml)
|
||||
- K3s manifest: [`deployments/k3s/clawmanager.yaml`](../deployments/k3s/clawmanager.yaml)
|
||||
- Container startup script: [`deployments/container/start.sh`](../deployments/container/start.sh)
|
||||
- Nginx config: [`deployments/nginx/nginx.conf`](../deployments/nginx/nginx.conf)
|
||||
|
||||
## Deployment Workflow
|
||||
|
||||
1. Choose the deployment path: standard Kubernetes or K3s/lightweight.
|
||||
2. Prepare the cluster, storage strategy, and image source strategy for that environment.
|
||||
3. Review the bundled manifest and adjust secrets, images, storage classes, and ingress exposure for your environment.
|
||||
4. Deploy the platform components into the cluster.
|
||||
5. Wait for the core services to become ready.
|
||||
6. Validate frontend access, AI Gateway management pages, Security Center connectivity, and runtime creation flows.
|
||||
|
||||
## Operational Notes
|
||||
|
||||
- ClawManager is designed around in-cluster services and platform-mediated access rather than direct pod exposure.
|
||||
- Resource Management features depend on object storage and `skill-scanner` being available.
|
||||
- Production environments should review images, credentials, TLS, persistence, and networking policies before rollout.
|
||||
|
||||
## Related Guides
|
||||
|
||||
- [Admin and User Guide](./admin-user-guide.md)
|
||||
- [Agent Control Plane Guide](./agent-control-plane.md)
|
||||
- [AI Gateway Guide](./aigateway.md)
|
||||
- [Security / Skill Scanner Guide](./security-skill-scanner.md)
|
||||
- [Resource Management Guide](./resource-management.md)
|
||||
- [Developer Guide](./developer-guide.md)
|
||||
@@ -0,0 +1,30 @@
|
||||
# Developer Guide
|
||||
|
||||
This guide is the codebase orientation page for contributors. ClawManager spans frontend, backend, deployment assets, and supporting product documentation, so the fastest way to get productive is to start from the subsystem you want to change.
|
||||
|
||||
## Repository Map
|
||||
|
||||
- `frontend/`: React application, admin surfaces, portal views, and product UI
|
||||
- `backend/`: Go services, handlers, repositories, migrations, and platform logic
|
||||
- `deployments/`: Kubernetes manifests, container bootstrap, and nginx config
|
||||
- `docs/`: product-facing guides and screenshots
|
||||
|
||||
## Suggested Entry Points
|
||||
|
||||
- AI governance work: [`docs/aigateway.md`](./aigateway.md)
|
||||
- runtime orchestration work: [Agent Control Plane Guide](./agent-control-plane.md)
|
||||
- reusable resource workflows: [Resource Management Guide](./resource-management.md)
|
||||
- security scanning work: [Security / Skill Scanner Guide](./security-skill-scanner.md)
|
||||
|
||||
## Common Areas of Change
|
||||
|
||||
- frontend pages and navigation for product surfaces such as AI Gateway, Security Center, and Config Center
|
||||
- backend services for agents, commands, resources, and scanning
|
||||
- migrations and repository logic when new control-plane state is introduced
|
||||
- deployment manifests when platform components or images change
|
||||
|
||||
## Related Guides
|
||||
|
||||
- [Deployment Guide](./deployment.md)
|
||||
- [Admin and User Guide](./admin-user-guide.md)
|
||||
- [AI Gateway Guide](./aigateway.md)
|
||||
@@ -0,0 +1,30 @@
|
||||
# Resource Management Guide
|
||||
|
||||
Resource Management is the reusable asset layer for OpenClaw workspaces in ClawManager. It is centered on channels, skills, bundles, and the snapshots used to compile those assets into instance-ready configuration.
|
||||
|
||||
## Main Resource Types
|
||||
|
||||
- `Channels` for workspace connectivity and integration templates
|
||||
- `Skills` for reusable packaged capabilities
|
||||
- `Bundles` for composing repeatable resource sets
|
||||
- injection snapshots for tracking the compiled result applied to an instance
|
||||
|
||||
## Core Workflows
|
||||
|
||||
1. Create or import channels and skills in the OpenClaw Config Center.
|
||||
2. Organize selected resources into reusable bundles.
|
||||
3. Review scan posture for skills through Security Center.
|
||||
4. Apply resources or bundles to OpenClaw workspaces.
|
||||
5. Inspect runtime state and instance-level resource results after injection.
|
||||
|
||||
## How It Connects to the Platform
|
||||
|
||||
- Resource Management defines what should be delivered to a workspace.
|
||||
- Agent Control Plane applies and tracks those changes at runtime.
|
||||
- Security Center and `skill-scanner` help review the risk posture of reusable skills before broad rollout.
|
||||
|
||||
## Related Guides
|
||||
|
||||
- [Security / Skill Scanner Guide](./security-skill-scanner.md)
|
||||
- [Agent Control Plane Guide](./agent-control-plane.md)
|
||||
- [Admin and User Guide](./admin-user-guide.md)
|
||||
@@ -0,0 +1,30 @@
|
||||
# Security / Skill Scanner Guide
|
||||
|
||||
Security Center is the review and scanning surface for skill assets in ClawManager. It works with `skill-scanner` to help teams understand asset coverage, risk posture, and scanning status before skills are reused across workspaces.
|
||||
|
||||
## What It Covers
|
||||
|
||||
- skill asset inventory across the platform
|
||||
- scan status, coverage, and recent scan jobs
|
||||
- risk-level distribution for discovered and uploaded skills
|
||||
- scanner configuration, including external analysis integrations where configured
|
||||
|
||||
## Main Workflows
|
||||
|
||||
1. Review the asset inventory and identify high-risk or unscanned skills.
|
||||
2. Start incremental or full scans from Security Center.
|
||||
3. Inspect recent scan jobs and detailed outcomes.
|
||||
4. Tune scanner configuration and analysis integrations.
|
||||
5. Feed scanning results back into skill approval and workspace rollout decisions.
|
||||
|
||||
## Why It Matters
|
||||
|
||||
- keeps reusable skills visible and reviewable
|
||||
- adds a security checkpoint to the resource supply chain
|
||||
- supports scale by replacing ad hoc per-instance trust decisions with centralized scanning workflows
|
||||
|
||||
## Related Guides
|
||||
|
||||
- [Resource Management Guide](./resource-management.md)
|
||||
- [Agent Control Plane Guide](./agent-control-plane.md)
|
||||
- [AI Gateway Guide](./aigateway.md)
|
||||
@@ -0,0 +1,783 @@
|
||||
[<- 返回 README 首页](../README.zh-CN.md)
|
||||
|
||||
# ClawManager 部署与快速启动指南
|
||||
|
||||
## 目录
|
||||
- [一、环境与目标](#sec-01)
|
||||
- [二、部署方式总览](#sec-02)
|
||||
- [三、方案 A:使用 k3s 部署](#sec-03)
|
||||
- [四、方案 B:使用标准 Kubernetes 部署](#sec-04)
|
||||
- [五、国内网络下的镜像拉取建议(可选)](#sec-05)
|
||||
- [六、部署 ClawManager](#sec-06)
|
||||
- [七、启动 Web 页面](#sec-08)
|
||||
- [八、快速启动指南(登录后初始化并创建 OpenClaw 实例)](#sec-09)
|
||||
- [九、控制台与 AI 网关其他功能说明](#sec-12)
|
||||
- [十、工作台模块说明](#sec-13)
|
||||
- [十一、问题与对策速查](#sec-14)
|
||||
- [十二、建议的最终检查顺序(可按此自查)](#sec-15)
|
||||
|
||||
<a id="sec-01"></a>
|
||||
## 一、环境与目标
|
||||
- **系统假设**:`x86_64` 架构 Linux 服务器。
|
||||
- **部署目标**:部署 **ClawManager**,并在 Web 页面中完成安全模型配置,随后创建并启动一个 **OpenClaw Desktop** 实例。
|
||||
- **适用场景**:
|
||||
- **方案 A:k3s 单机/轻量集群部署**
|
||||
- **方案 B:标准 Kubernetes 集群部署**(如 kubeadm 集群、企业 K8s 集群、云上 K8s 集群)
|
||||
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-02"></a>
|
||||
## 二、部署方式总览
|
||||
你可以按以下两种方式之一部署:
|
||||
|
||||
### 方案 A:k3s 部署
|
||||
适合单机、测试环境或轻量生产环境。
|
||||
|
||||
### 方案 B:标准 Kubernetes 部署
|
||||
适合已经具备标准 Kubernetes 集群的服务器环境。
|
||||
|
||||
无论使用哪种方式,最终都会执行同一套 ClawManager 清单:
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-03"></a>
|
||||
## 三、方案 A:使用 k3s 部署
|
||||
|
||||
### 3.1 安装 k3s
|
||||
```bash
|
||||
curl -sfL https://get.k3s.io | sh -
|
||||
```
|
||||
|
||||
国内网络可使用镜像源安装:
|
||||
|
||||
```bash
|
||||
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
|
||||
INSTALL_K3S_MIRROR=cn sh -
|
||||
```
|
||||
|
||||
### 3.2 检查服务状态
|
||||
```bash
|
||||
sudo systemctl status k3s --no-pager
|
||||
sudo systemctl enable k3s
|
||||
```
|
||||
|
||||
### 3.3 配置 kubectl
|
||||
如果当前用户无法直接使用 `kubectl`,执行:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.kube
|
||||
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
|
||||
sudo chown "$USER:$USER" ~/.kube/config
|
||||
```
|
||||
|
||||
或者临时指定:
|
||||
|
||||
```bash
|
||||
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
||||
```
|
||||
|
||||
### 3.4 验证集群
|
||||
```bash
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
正常应看到节点处于 `Ready`。
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-04"></a>
|
||||
## 四、方案 B:使用标准 Kubernetes 部署
|
||||
|
||||
> 适用于已经有可用 Kubernetes 集群的 x86 服务器环境。
|
||||
|
||||
### 4.1 前提检查
|
||||
确认当前 `kubectl` 已连接到目标集群:
|
||||
|
||||
```bash
|
||||
kubectl get nodes
|
||||
kubectl get ns
|
||||
```
|
||||
|
||||
正常应看到至少 1 个 `Ready` 节点。
|
||||
|
||||
### 4.2 检查默认 StorageClass
|
||||
ClawManager 中的 MySQL、MinIO 需要持久化存储。建议先检查集群是否有默认 `StorageClass`:
|
||||
|
||||
```bash
|
||||
kubectl get storageclass
|
||||
```
|
||||
|
||||
如果集群中已有默认存储类,可直接继续部署。
|
||||
|
||||
如果 **没有默认 StorageClass**,建议提前准备好可用的 PV / PVC 或使用本地路径存储方案,否则后续可能出现:
|
||||
|
||||
```text
|
||||
pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-05"></a>
|
||||
## 五、国内网络下的镜像拉取建议(可选)
|
||||
如果服务器访问 Docker Hub 或其他公共仓库较慢,可配置镜像加速。
|
||||
|
||||
### 5.1 k3s 场景:配置 `/etc/rancher/k3s/registries.yaml`
|
||||
```yaml
|
||||
mirrors:
|
||||
docker.io:
|
||||
endpoint:
|
||||
- "https://docker.m.daocloud.io"
|
||||
- "https://docker.nju.edu.cn"
|
||||
- "https://docker.1ms.run"
|
||||
quay.io:
|
||||
endpoint:
|
||||
- "https://quay.mirrors.ustc.edu.cn"
|
||||
gcr.io:
|
||||
endpoint:
|
||||
- "https://gcr.mirrors.ustc.edu.cn"
|
||||
k8s.gcr.io:
|
||||
endpoint:
|
||||
- "https://registry.aliyuncs.com/google_containers"
|
||||
```
|
||||
|
||||
修改后执行:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart k3s
|
||||
```
|
||||
|
||||
### 5.2 验证拉镜像
|
||||
```bash
|
||||
sudo k3s crictl pull docker.io/rancher/mirrored-pause:3.6
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-06"></a>
|
||||
## 六、部署 ClawManager
|
||||
|
||||
### 6.1 拉取项目代码
|
||||
```bash
|
||||
git clone https://github.com/Yuan-lab-LLM/ClawManager.git
|
||||
cd ClawManager
|
||||
```
|
||||
|
||||
### 6.2 应用部署清单
|
||||
在仓库根目录执行:
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
```
|
||||
|
||||
### 6.3 查看基础资源
|
||||
```bash
|
||||
kubectl get ns
|
||||
kubectl get pods -n clawmanager-system
|
||||
kubectl get svc -n clawmanager-system
|
||||
```
|
||||
|
||||
正常情况下,会看到以下组件:
|
||||
- `clawmanager-app`
|
||||
- `mysql`
|
||||
- `minio`
|
||||
- `skill-scanner`
|
||||
|
||||
如果你看到以下错误:
|
||||
|
||||
```text
|
||||
0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
说明集群存储 MySQL / MinIO 因 PVC 未绑定而无法启动,请直接跳转文末:
|
||||
|
||||
- [十一.1 存储问题专项处理(PV/PVC)](#sec-14-storage)
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-08"></a>
|
||||
## 七、启动 Web 页面
|
||||
|
||||
### 7.1 通过 NodePort 访问
|
||||
ClawManager 默认前端 Service 为 HTTPS NodePort。可先查看:
|
||||
|
||||
```bash
|
||||
kubectl get svc -n clawmanager-system
|
||||
```
|
||||
|
||||
若前端端口为:
|
||||
|
||||
```text
|
||||
443:30443/TCP
|
||||
```
|
||||
|
||||
则可直接在浏览器访问:
|
||||
|
||||
```text
|
||||
https://<服务器IP>:30443
|
||||
```
|
||||
|
||||
|
||||
### 7.2 首次 HTTPS 访问说明
|
||||
由于通常是自签名证书,浏览器可能会提示“不安全”或证书警告,点击:
|
||||
|
||||
```text
|
||||
高级 → 继续访问
|
||||
```
|
||||
|
||||
即可进入页面。
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-09"></a>
|
||||
## 八、快速启动指南(登录后初始化并创建 OpenClaw 实例)
|
||||
|
||||
完成前文部署并成功打开管理页面后,还需要完成以下初始化步骤,才能真正创建并启动一个 **OpenClaw** 实例。
|
||||
|
||||
### 8.1 登录系统
|
||||
1. 打开部署完成后的页面,例如:`https://<节点IP>:30443`。
|
||||
2. 使用默认管理员账号登录:
|
||||
- **用户名**:`admin`
|
||||
- **密码**:`admin123`
|
||||
3. 首次进入后,建议按需修改默认密码。
|
||||
|
||||
|
||||
### 8.2 配置安全模型(AI 网关)
|
||||
|
||||

|
||||
登录后,需要先配置一个可用的**安全模型**,供平台和后续实例统一使用。
|
||||
|
||||
1. 点击左侧菜单:**AI 网关** → **模型**。
|
||||
2. 新增或编辑一个模型,根据你接入的模型服务按实际情况填写以下信息:
|
||||
|
||||
* **显示名称**:填写一个便于识别的名称。
|
||||
* **厂商模板**:根据你的模型服务类型选择对应模板;如果使用自定义或兼容接口,可选择 **Local / Internal**。
|
||||
* **协议**:根据接口协议选择,例如 **OpenAI Compatible** 或其他实际协议。
|
||||
* **Base URL**:填写模型服务提供的接口地址。
|
||||
* **API Key**:填写对应模型服务的有效密钥。
|
||||
* **Provider Model**:填写实际调用的模型名称。
|
||||
* **币种**:按实际情况填写;如无需计费展示,可保持默认。
|
||||
* **输入价格 / 输出价格**:如不做计费统计,可先填写 `0`。
|
||||
3. 提交前务必勾选:
|
||||
|
||||
* **安全模型**
|
||||
* **启用**
|
||||
4. 点击 **保存**。
|
||||
|
||||
> 说明:页面中的图片仅用于展示填写位置和示例格式,实际内容请以你所使用的模型服务配置为准。
|
||||
|
||||
|
||||
### 8.3 创建 OpenClaw 实例
|
||||
模型配置完成后,再创建 **OpenClaw Desktop** 实例。
|
||||
|
||||
1. 点击左下角 **ADMIN**,切换到 **工作台**。
|
||||
2. 点击 **创建实例**。
|
||||
|
||||

|
||||
#### 第 1 步:基础信息
|
||||
- 填写 **实例名称**(至少 3 个字符)。
|
||||
- 描述可选,不填也可以。
|
||||
- 点击 **下一步**。
|
||||
|
||||

|
||||
#### 第 2 步:选择类型
|
||||
- 选择 **OpenClaw Desktop**。
|
||||
- 点击 **下一步**。
|
||||
|
||||
|
||||

|
||||
#### 第 3 步:配置
|
||||
- 可直接选择 **Small** 规格:
|
||||
- `2 CPU`
|
||||
- `4 GB RAM`
|
||||
- `20 GB Disk`
|
||||
- 也可以在下方自定义配置中按需修改。
|
||||
- OpenClaw 资源注入部分,可根据需要选择:
|
||||
- **手动资源**
|
||||
- **资源包**
|
||||
- **归档导入**
|
||||
- 首次使用可先保持默认或选择 **手动资源**。
|
||||
- 最后点击 **创建**。
|
||||
|
||||
### 8.4 首次创建说明
|
||||
- 第一次创建 **OpenClaw** 实例时,需要下载所需镜像和初始化环境,耗时会明显更长。
|
||||
- 在网络较慢或首次拉取镜像时,实例状态可能会长时间显示为 **创建中**,请耐心等待。
|
||||
- 若长时间未启动成功,再回到 Kubernetes / Docker 日志中排查镜像、PVC、网关模型等问题。
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-12"></a>
|
||||
## 九、控制台与 AI 网关其他功能说明
|
||||
|
||||
除模型配置外,平台首页控制台与 AI 网关还提供审计、成本和规则治理等能力,便于管理员统一查看集群状态、模型调用记录和安全策略执行情况。
|
||||
|
||||
### 9.1 控制台总览
|
||||
|
||||

|
||||
|
||||
控制台首页用于展示当前集群与平台的整体运行状态,方便管理员快速了解资源使用情况和系统健康状态。
|
||||
|
||||
主要包含以下信息:
|
||||
|
||||
- **集群基础信息概览**:展示当前平台的用户总数、实例总数、运行中实例数量以及总存储使用情况。
|
||||
- **节点概览**:展示当前可用节点数量,以及当前集群中主要调度节点信息。
|
||||
- **资源申请情况**:展示当前平台已申请的 CPU、内存和磁盘资源总量。
|
||||
- **容量看板**:按节点、CPU、内存、磁盘等维度展示整体资源容量与当前使用率,便于判断集群是否还有可用余量。
|
||||
- **基础设施表**:用于查看当前节点、资源与基础运行环境的状态信息。
|
||||
|
||||
> 说明:控制台主要用于查看平台总体资源、节点和实例运行概况,不直接用于具体实例内的 OpenClaw 操作。
|
||||
|
||||
|
||||
### 9.2 安全中心(skill-scanner)
|
||||
|
||||
控制台的 **安全中心** 用于统一查看平台资源的扫描状态、历史报告与扫描器配置。它依赖后端的 **skill-scanner** 服务运行,可用于对资源进行静态扫描、深度扫描以及基于 LLM 的补充分析,从而帮助管理员识别潜在风险内容、异常资源与可疑技能。
|
||||
|
||||
安全中心当前主要包括以下三个模块:
|
||||
|
||||
* **运行总览**
|
||||
* **报告历史**
|
||||
* **扫描器配置**
|
||||
|
||||
#### 9.2.1 运行总览
|
||||
|
||||

|
||||
|
||||
“运行总览”页面用于查看当前平台的整体扫描状态与风险分布,便于管理员快速掌握当前安全态势。
|
||||
|
||||
页面主要包括以下内容:
|
||||
|
||||
* **当前生效模式**:展示当前使用的是 **Quick 模式** 还是 **Deep 模式**。
|
||||
* **快速扫描 / 全量扫描**:
|
||||
|
||||
* **快速扫描**:适合处理新增或变更资源,扫描范围较轻,执行速度更快。
|
||||
* **全量扫描**:适合定期重扫全部资源,用于完整复核平台当前所有资源状态。
|
||||
* **资产总数**:当前纳入安全中心扫描范围的资源数量。
|
||||
* **已完成扫描**:已完成扫描的资源数量。
|
||||
* **高风险 / 中风险**:当前扫描结果中被识别出的风险等级统计。
|
||||
* **扫描覆盖率**:展示已完成真实扫描的资产数占平台总资产的比例。
|
||||
* **SAFE / 高风险 / 等待中 / 失败**:
|
||||
|
||||
* **SAFE**:扫描通过、当前未发现风险的资源数量
|
||||
* **高风险**:需要立即处置的风险资产数量
|
||||
* **等待中**:等待取证或排队扫描的资源数量
|
||||
* **失败**:扫描执行失败、需要重新执行的资源数量
|
||||
* **平台资产风险态势**:按风险等级聚合展示当前平台资产的风险分布情况。
|
||||
* **热点资产**:展示使用最频繁的技能或高频使用资源,帮助管理员快速定位重点资产。
|
||||
* **扫描器状态**:展示当前 skill-scanner 的可用性及连接状态,例如“静态扫描可用”“已连接”等。
|
||||
* **风险提醒与处置建议**:给出当前风险态势下的简要提醒信息。
|
||||
* **最近的扫描任务**:展示最近执行过的扫描记录,便于回溯近期扫描活动。
|
||||
|
||||
> 说明:
|
||||
>
|
||||
> * 当页面显示“当前没有高风险或中风险资产”时,说明当前扫描结果未发现显著风险。
|
||||
> * 当页面显示“还没有扫描任务记录”时,说明当前尚未执行过扫描,或尚未产生有效扫描结果。
|
||||
|
||||
#### 9.2.2 报告历史
|
||||
|
||||
“报告历史”页面用于查看历史扫描报告与相关结果记录,便于管理员回溯过去的扫描执行情况。
|
||||
|
||||
该模块主要用于:
|
||||
|
||||
* 查看过去已执行的扫描任务结果
|
||||
* 对比不同时间点的扫描输出
|
||||
* 辅助追踪某个资源在不同阶段的安全变化情况
|
||||
* 为后续复查、复扫和问题定位提供历史依据
|
||||
|
||||
> 说明:
|
||||
>
|
||||
> * “报告历史”更偏向历史结果归档与回溯;
|
||||
> * “运行总览”更偏向当前状态与整体概览。
|
||||
|
||||
#### 9.2.3 扫描器配置
|
||||
|
||||

|
||||
|
||||
“扫描器配置”页面用于维护 skill-scanner 的运行方式、LLM 相关配置以及 quick / deep 两套扫描策略。保存后会触发 Deployment rollout,并等待新配置生效。
|
||||
|
||||
页面主要包括以下内容:
|
||||
|
||||
##### (1)skill-scanner 服务状态
|
||||
|
||||
* 展示当前后端扫描服务的命名空间、Deployment 名称和连接状态。
|
||||
* 当页面显示 **已连接**、**静态扫描可用** 时,说明基础静态扫描能力已可用。
|
||||
|
||||
##### (2)LLM 配置
|
||||
|
||||
该区域用于配置主 LLM,以供 scanner 在需要时执行基于模型的分析能力。
|
||||
|
||||
主要字段包括:
|
||||
|
||||
* **主 LLM 集成**:可直接从 **AI Gateway** 中已配置好的模型导入主 LLM 配置。
|
||||
* **LLM API Key**:对应 `SKILL_SCANNER_LLM_API_KEY`,用于主 LLM analyzer 的鉴权。
|
||||
* **LLM Model**:对应 `SKILL_SCANNER_LLM_MODEL`,例如具体模型名称。
|
||||
* **LLM Base URL**:对应 `SKILL_SCANNER_LLM_BASE_URL`,用于配置主 LLM 服务地址。
|
||||
|
||||
##### (3)Meta LLM 集成
|
||||
|
||||
该区域用于配置 meta analyzer 所使用的模型,通常用于对 findings 做进一步总结、归纳或二次处理。
|
||||
|
||||
主要字段包括:
|
||||
|
||||
* **Meta LLM 集成**:可从 **AI Gateway** 中已配置好的模型直接导入 meta analyzer 配置。
|
||||
* **Meta LLM API Key**:对应 `SKILL_SCANNER_META_LLM_API_KEY`。
|
||||
* **Meta LLM Model**:对应 `SKILL_SCANNER_META_LLM_MODEL`。
|
||||
* **Meta LLM Base URL**:对应 `SKILL_SCANNER_META_LLM_BASE_URL`。
|
||||
|
||||
> 说明:
|
||||
>
|
||||
> * 若当前未配置 LLM,页面通常会提示当前仅支持静态扫描;
|
||||
> * 配置主 LLM 与 Meta LLM 后,scanner 才能启用更完整的语义分析与总结能力。
|
||||
|
||||
##### (4)当前扫描模式
|
||||
|
||||
页面支持选择当前平台实际采用的扫描模式:
|
||||
|
||||
* **Quick 模式**:使用 quick analyzers 执行扫描,适合日常快速检查。
|
||||
* **Deep 模式**:使用 deep analyzers 执行扫描,适合更完整、更深入的分析。
|
||||
|
||||
需要注意的是:
|
||||
|
||||
* Dashboard 上的“快速扫描”和“全量扫描”都会使用这里选定的扫描强度;
|
||||
* 它们的差异主要在于扫描范围,而不在 analyzer 深度本身。
|
||||
|
||||
|
||||
|
||||
##### (5)Quick / Deep 扫描策略
|
||||
|
||||
页面下方分别维护 **快速** 与 **深度** 两套扫描策略配置,便于管理员按不同场景选择不同的 analyzer 组合。
|
||||
|
||||
每套策略都包括以下配置项:
|
||||
|
||||
* **超时(秒)**:设置当前模式下扫描任务的超时时间。
|
||||
* **调用方法**:可按需启用或停用不同 analyzer。
|
||||
|
||||
当前可见的 analyzer 类型包括:
|
||||
|
||||
* **Static**:YAML + YARA 静态规则扫描
|
||||
* **Bytecode**:Python bytecode 完整性校验
|
||||
* **Pipeline**:命令链路与 taint 分析
|
||||
* **Behavioral**:基于 AST 的行为与数据流分析
|
||||
* **LLM**:依赖外部 LLM 的语义分析
|
||||
* **Meta**:对 findings 进行二次汇总分析
|
||||
|
||||
通常可按以下思路理解:
|
||||
|
||||
* **Quick 模式**:偏向更快执行,常用于日常增量检查
|
||||
* **Deep 模式**:可启用更多 analyzer,适合更深入的复核与安全审计
|
||||
|
||||
##### (6)保存并应用
|
||||
|
||||
页面右上角的 **保存并应用** 用于提交当前所有 scanner 相关配置。保存后会:
|
||||
|
||||
* 更新 ClawManager 中的 quick / deep 扫描策略
|
||||
* 更新 skill-scanner Deployment 的相关环境变量
|
||||
* 等待 rollout 完成后使新配置正式生效
|
||||
|
||||
> 说明:
|
||||
>
|
||||
> * 修改扫描器配置后,建议等待配置完全生效,再执行新的扫描任务;
|
||||
> * 若配置后发现连接状态异常,可优先检查 AI Gateway 模型、LLM 地址、Key 和 Deployment rollout 状态。
|
||||
|
||||
### 9.3 AI 网关功能概览
|
||||
|
||||
AI 网关除了“模型”配置外,还包含以下模块:
|
||||
|
||||
* **AI 审计**:查看模型调用 Trace、请求与响应负载、命中风险、路由决策以及调用明细。
|
||||
* **成本**:查看 Token 用量、预估费用、内部成本和趋势统计。
|
||||
* **风控规则**:配置敏感检测规则,控制命中后是放行还是路由到安全模型。
|
||||
|
||||
### 9.4 成本模块
|
||||
|
||||
成本页面用于统计平台模型调用的费用与 Token 使用情况,帮助管理员了解整体消耗情况。
|
||||
|
||||

|
||||
|
||||
页面主要包括以下内容:
|
||||
|
||||
* **输入 Token**:统计输入提示词总量。
|
||||
* **输出 Token**:统计模型生成内容总量。
|
||||
* **预估费用**:按 Provider 单价估算的费用。
|
||||
* **内部成本**:安全模型相关的内部核算成本。
|
||||
* **每日费用趋势**:按最近 7 天查看当前窗口内的预估费用和 Token 变化。
|
||||
* **用户汇总**:按用户聚合用量和费用。
|
||||
* **实例汇总**:按实例聚合用量和费用。
|
||||
* **最近成本记录**:支持按 Trace、用户、模型等条件搜索并分页查看成本记录,并可进一步跳转到审计详情。
|
||||
|
||||
> 说明:如果当前尚未产生模型调用记录,输入 Token、输出 Token、费用及趋势图可能都为 0,这是正常现象。
|
||||
|
||||
### 9.5 AI 审计模块
|
||||
|
||||
AI 审计页面用于查看最近的受管模型调用记录,帮助管理员排查模型调用、Token 使用和路由结果。
|
||||
|
||||

|
||||
|
||||
主要功能包括:
|
||||
|
||||
* **最近 AI Trace**:查看最近的模型调用链路。
|
||||
* **Trace 列表**:在统一表格中查看最近的受管 Trace。
|
||||
* **搜索与筛选**:支持按 Trace、请求内容、用户、模型等条件进行搜索。
|
||||
* **状态筛选**:支持按状态查看不同调用结果。
|
||||
* **模型筛选**:支持按模型筛选对应的调用记录。
|
||||
* **分页刷新**:支持分页查看和手动刷新最新审计结果。
|
||||
|
||||
> 说明:如果页面提示“暂无 AI 审计记录”,说明当前尚未产生模型实际调用请求。
|
||||
|
||||
### 9.6 风控规则模块
|
||||
|
||||
风控规则页面用于配置敏感内容检测规则,并决定命中规则后的处理动作。
|
||||
|
||||

|
||||
|
||||
该模块主要支持:
|
||||
|
||||
* **规则列表管理**:查看全部规则及其启用状态。
|
||||
* **规则分类查看**:支持按个人信息、公司信息、客户业务、安全凭据、财务法务、政治敏感、自定义等分类查看规则。
|
||||
* **规则字段配置**:可设置规则 ID、显示名称、严重级别、动作、排序、正则 Pattern 和描述。
|
||||
* **规则动作控制**:命中规则后可选择放行,或路由到安全模型。
|
||||
* **批量启用 / 停用**:支持批量调整规则状态。
|
||||
* **规则测试台**:可粘贴样本文本,测试启用规则或草稿规则会命中哪些内容。
|
||||
|
||||
当前内置规则示例包括但不限于:
|
||||
|
||||
* 个人信息:邮箱地址、手机号、身份证号、护照号、银行卡上下文、住址、简历内容等。
|
||||
* 公司信息:内网 IP、内部域名、主机命名、Kubernetes Service DNS、项目代号、组织架构、薪资 / HR 信息等。
|
||||
* 客户业务:客户名单、合同 / 报价单、发票税号、CRM / 工单数据等。
|
||||
* 安全凭据:私钥、API Key、Token、JWT、Cookie / Session、数据库连接串、Kubeconfig、环境变量密钥等。
|
||||
* 财务法务:预算、利润、营收、法务意见、诉讼、NDA 等。
|
||||
* 政治敏感:政治机构、军事国家安全、极端暴力相关表述等。
|
||||
|
||||
> 说明:默认规则已覆盖多类常见敏感信息检测场景,实际使用中可根据业务需求继续新增、调整或停用部分规则。
|
||||
---
|
||||
|
||||
<a id="sec-13"></a>
|
||||
## 十、工作台模块说明
|
||||
|
||||
工作台是普通用户进入平台后的主要操作区域,用于查看个人资源配额、创建实例、管理实例以及维护 OpenClaw 相关资源。该模块更偏向日常使用与运维操作,与管理员侧的“控制台总览”不同。
|
||||
|
||||
### 10.1 工作台首页
|
||||

|
||||
工作台首页用于展示当前账号的实例与资源使用概况,主要包含以下内容:
|
||||
|
||||
- **我的实例**:显示当前账号下已创建的实例数量。
|
||||
- **运行中**:显示当前正在运行的实例数量。
|
||||
- **已用存储**:显示当前账号已经占用的存储空间。
|
||||
- **我的资源配额**:展示当前账号可用的配额信息,包括实例数、最大 CPU 核数、最大内存、最大存储以及最大 GPU 数。
|
||||
- **快捷操作**:提供 **创建新实例** 和 **查看全部实例** 两个入口,便于快速开始使用平台。
|
||||
|
||||
> 说明:当页面显示“还没有实例”时,可直接点击 **创建新实例** 开始创建第一个 OpenClaw Desktop 实例。
|
||||
|
||||
### 10.2 我的实例
|
||||
|
||||
“我的实例”页面用于统一查看和管理当前账号下已创建的实例。该页面主要承担实例管理功能。
|
||||

|
||||
支持的常见操作包括:
|
||||
|
||||
- **查看实例状态**:查看实例是否处于创建中、运行中、已停止或异常状态。
|
||||
- **进入实例详情**:查看实例的基础信息、资源配置和运行情况。
|
||||
- **停止实例**:当实例运行异常或需要重新加载环境时,可执行停止操作。
|
||||
- **删除实例**:当实例不再使用时,可直接删除,释放对应的 CPU、内存和存储资源。
|
||||
|
||||
> 说明:删除实例后,实例相关资源会被一并清理,执行前请确认其中的数据和配置是否已完成备份。
|
||||
|
||||
### 10.3 资源管理
|
||||
|
||||
“资源管理”页面用于维护 OpenClaw 可用的资源内容,便于实例在启动后注入和使用。
|
||||

|
||||
页面主要包括以下部分:
|
||||
|
||||
- **资源**:查看和维护可用资源条目。
|
||||
- **资源包**:将多个资源组合为可复用的资源包,便于批量注入。
|
||||
- **注入记录**:查看资源注入历史与执行情况。
|
||||
|
||||
在资源管理页左侧,还可以按资源类型进行区分管理,当前页面中可见的类型包括:
|
||||
|
||||
- **通道**
|
||||
- **技能**
|
||||
- **智能体(即将上线)**
|
||||
- **定时任务(即将上线)**
|
||||
|
||||
页面右上角支持:
|
||||
|
||||
- **刷新**:重新加载当前资源列表。
|
||||
- **新建**:创建新的资源项。
|
||||
|
||||
### 10.3.1 新建通道
|
||||
|
||||
“通道”用于配置 OpenClaw 与外部消息平台或接入端的连接方式,例如 Telegram、Slack、飞书 / Lark 等。
|
||||
|
||||

|
||||
|
||||
创建通道时,可按以下步骤操作:
|
||||
|
||||
1. 进入 **资源管理** 页面,保持在 **资源** 页签。
|
||||
2. 在左侧资源类型中选择 **通道**。
|
||||
3. 点击页面右侧的 **新建**,打开“新建资源”弹窗。
|
||||
4. 在弹窗中填写基础信息:
|
||||
- **类型**:选择 **通道**
|
||||
- **资源 Key**:填写该通道的唯一标识,建议使用易于识别且不重复的英文或组合名称
|
||||
- **名称**:填写通道显示名称
|
||||
- **标签**:可选,用于分类检索
|
||||
- **描述**:可选,用于补充说明该通道的用途
|
||||
- **已启用**:建议保持勾选状态
|
||||
5. 在 **Channel 模板** 区域中选择一个起始模板。当前支持的模板包括:
|
||||
- `Telegram`
|
||||
- `Slack`
|
||||
- `飞书 / Lark`
|
||||
|
||||
6. 选择模板后,点击 **加载模板**。系统会将对应模板的基础配置自动写入下方的 **内容 JSON** 区域。
|
||||
7. 根据你的实际接入信息,继续补充或修改 **内容 JSON** 中的字段内容。
|
||||
8. 确认配置无误后,点击保存,完成通道创建。
|
||||
|
||||
> 说明:
|
||||
> - **Channel 模板** 用于帮助你快速生成基础配置;
|
||||
> - **内容 JSON** 是最终生效的通道配置内容;
|
||||
> - 如果没有完全匹配的模板,也可以直接在 **内容 JSON** 中手动填写配置。
|
||||
|
||||
### 10.3.2 上传技能
|
||||
|
||||
技能用于为 OpenClaw 提供可复用的功能能力。平台支持通过上传归档文件的方式批量导入技能。
|
||||
|
||||

|
||||
|
||||
上传技能时,可按以下步骤操作:
|
||||
|
||||
1. 进入 **资源管理** 页面,保持在 **资源** 页签。
|
||||
2. 在左侧资源类型中选择 **技能**。
|
||||
3. 点击 **选择文件**,选择本地技能压缩包。
|
||||
4. 当前页面仅支持上传 **`.zip`** 文件。
|
||||
5. 选择完成后,点击右侧的 **上传技能归档**。
|
||||
6. 系统会自动解析上传内容,并将每个一级目录导入为一个技能。
|
||||
7. 上传完成后,可在技能列表中查看已导入的技能内容。
|
||||
|
||||
> 说明:
|
||||
> - 技能归档建议提前按目录整理清楚;
|
||||
> - 每个一级目录会被识别为一个独立技能;
|
||||
> - 如果上传后列表未立即刷新,可手动点击页面右上角 **刷新** 重新加载。
|
||||
---
|
||||
|
||||
<a id="sec-14"></a>
|
||||
## 十一、问题与对策速查
|
||||
|
||||
<a id="sec-14-storage"></a>
|
||||
### 11.1 存储问题专项处理(PV/PVC)
|
||||
|
||||
如果你看到以下错误:
|
||||
|
||||
```text
|
||||
0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
说明集群存储未自动绑定。此时可以按单机 x86 服务器方式,手动创建本地 `hostPath` PV/PVC。
|
||||
|
||||
> 这一方案适合单节点服务器测试或轻量环境;生产环境建议改为 NFS、Ceph、云盘等正式存储。
|
||||
|
||||
#### 11.1.1 创建 PV
|
||||
```bash
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: mysql-pv-local
|
||||
spec:
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Delete
|
||||
hostPath:
|
||||
path: /tmp/mysql-data
|
||||
EOF
|
||||
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: minio-pv-local
|
||||
spec:
|
||||
capacity:
|
||||
storage: 10Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Delete
|
||||
hostPath:
|
||||
path: /tmp/minio-data
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 11.1.2 创建 PVC
|
||||
```bash
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: mysql-data
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
storageClassName: ""
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
volumeName: mysql-pv-local
|
||||
EOF
|
||||
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: minio-data
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
storageClassName: ""
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
volumeName: minio-pv-local
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 11.1.3 重建 Pod
|
||||
```bash
|
||||
kubectl delete pod --all -n clawmanager-system
|
||||
```
|
||||
|
||||
#### 11.1.4 重新观察状态
|
||||
```bash
|
||||
kubectl get pvc -n clawmanager-system
|
||||
kubectl get pods -n clawmanager-system -w
|
||||
```
|
||||
|
||||
预期应看到:
|
||||
- `mysql-data` / `minio-data` 为 `Bound`
|
||||
- `mysql` / `minio` / `skill-scanner` / `clawmanager-app` 最终为 `Running`
|
||||
|
||||
---
|
||||
|
||||
| 现象 | 原因 | 处理 |
|
||||
| :--- | :--- | :--- |
|
||||
| `kubectl` 连接 `localhost:8080` 被拒绝 | kubeconfig 未配置 | 设置 `KUBECONFIG` 或复制到 `~/.kube/config` |
|
||||
| Pod 拉镜像超时 | 网络到 Docker Hub / GHCR 不稳定 | 配置镜像加速或代理 |
|
||||
| MySQL / MinIO 一直 `Pending` | PVC 未绑定 | 检查 `StorageClass` 或手动创建 PV/PVC |
|
||||
| 浏览器打不开页面 | NodePort 未放通 / `port-forward` 进程未保持 | 放行端口或保持转发终端运行 |
|
||||
| 页面能打开但无法创建 OpenClaw 实例 | 未配置安全模型 | 先在 **AI 网关 → 模型** 中配置并启用安全模型 |
|
||||
| 实例长时间“创建中” | 首次拉镜像耗时长 / 存储或网络问题 | 耐心等待,必要时检查 Pod 和事件 |
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-15"></a>
|
||||
## 十二、建议的最终检查顺序(可按此自查)
|
||||
1. `kubectl get nodes`
|
||||
2. `kubectl get storageclass`
|
||||
3. `kubectl get pods -n clawmanager-system`
|
||||
4. `kubectl get pvc -n clawmanager-system`
|
||||
5. `kubectl get svc -n clawmanager-system`
|
||||
6. 浏览器访问 `https://<IP>:30443`
|
||||
7. 登录后台并完成 **安全模型配置**
|
||||
8. 在工作台中创建 **OpenClaw Desktop** 实例
|
||||
@@ -0,0 +1,782 @@
|
||||
[<- Zurueck zur README-Startseite](../README.de.md)
|
||||
|
||||
# ClawManager Bereitstellungs- und Schnellstartanleitung
|
||||
|
||||
## Inhaltsverzeichnis
|
||||
- [I. Umgebung und Ziel](#sec-01)
|
||||
- [II. Überblick über die Bereitstellungsarten](#sec-02)
|
||||
- [III. Variante A: Bereitstellung mit k3s](#sec-03)
|
||||
- [IV. Variante B: Bereitstellung mit Standard-Kubernetes](#sec-04)
|
||||
- [V. Empfehlungen zum Ziehen von Images in Netzwerken auf dem chinesischen Festland (optional)](#sec-05)
|
||||
- [VI. ClawManager bereitstellen](#sec-06)
|
||||
- [VII. Weboberfläche starten](#sec-08)
|
||||
- [VIII. Schnellstartanleitung (nach dem Login initialisieren und eine OpenClaw-Instanz erstellen)](#sec-09)
|
||||
- [IX. Konsole und weitere Funktionen des AI Gateway](#sec-12)
|
||||
- [X. Beschreibung des Workspace-Moduls](#sec-13)
|
||||
- [XI. Schnelle Referenz für Probleme und Gegenmaßnahmen](#sec-14)
|
||||
- [XII. Empfohlene abschließende Prüfreihenfolge (zur Selbstprüfung)](#sec-15)
|
||||
|
||||
<a id="sec-01"></a>
|
||||
## I. Umgebung und Ziel
|
||||
- **Systemannahme**: Linux-Server mit `x86_64`-Architektur.
|
||||
- **Bereitstellungsziel**: **ClawManager** bereitstellen, die Konfiguration des Sicherheitsmodells auf der Weboberfläche abschließen und anschließend eine **OpenClaw Desktop**-Instanz erstellen und starten.
|
||||
- **Geeignete Szenarien**:
|
||||
- **Variante A: k3s-Einzelknoten-/Lightweight-Cluster-Bereitstellung**
|
||||
- **Variante B: Standard-Kubernetes-Cluster-Bereitstellung** (z. B. kubeadm-Cluster, Enterprise-K8s-Cluster, Kubernetes-Cluster in der Cloud)
|
||||
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-02"></a>
|
||||
## II. Überblick über die Bereitstellungsarten
|
||||
Sie können mit einer der folgenden zwei Methoden bereitstellen:
|
||||
|
||||
### Variante A: k3s-Bereitstellung
|
||||
Geeignet für Einzelknoten, Testumgebungen oder leichte Produktionsumgebungen.
|
||||
|
||||
### Variante B: Standard-Kubernetes-Bereitstellung
|
||||
Geeignet für Serverumgebungen, die bereits über einen Standard-Kubernetes-Cluster verfügen.
|
||||
|
||||
Unabhängig davon, welche Methode Sie verwenden, wird am Ende dasselbe ClawManager-Manifest angewendet:
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-03"></a>
|
||||
## III. Variante A: Bereitstellung mit k3s
|
||||
|
||||
### 3.1 k3s installieren
|
||||
```bash
|
||||
curl -sfL https://get.k3s.io | sh -
|
||||
```
|
||||
|
||||
In Netzwerken auf dem chinesischen Festland kann die Installation über eine Mirror-Quelle erfolgen:
|
||||
|
||||
```bash
|
||||
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
|
||||
```
|
||||
|
||||
### 3.2 Dienststatus prüfen
|
||||
```bash
|
||||
sudo systemctl status k3s --no-pager
|
||||
sudo systemctl enable k3s
|
||||
```
|
||||
|
||||
### 3.3 kubectl konfigurieren
|
||||
Wenn der aktuelle Benutzer `kubectl` nicht direkt verwenden kann, führen Sie Folgendes aus:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.kube
|
||||
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
|
||||
sudo chown "$USER:$USER" ~/.kube/config
|
||||
```
|
||||
|
||||
Oder geben Sie es temporär an:
|
||||
|
||||
```bash
|
||||
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
||||
```
|
||||
|
||||
### 3.4 Cluster überprüfen
|
||||
```bash
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
Normalerweise sollte der Node den Status `Ready` haben.
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-04"></a>
|
||||
## IV. Variante B: Bereitstellung mit Standard-Kubernetes
|
||||
|
||||
> Gilt für x86-Serverumgebungen, in denen bereits ein nutzbarer Kubernetes-Cluster vorhanden ist.
|
||||
|
||||
### 4.1 Voraussetzungen prüfen
|
||||
Vergewissern Sie sich, dass das aktuelle `kubectl` mit dem Ziel-Cluster verbunden ist:
|
||||
|
||||
```bash
|
||||
kubectl get nodes
|
||||
kubectl get ns
|
||||
```
|
||||
|
||||
Normalerweise sollte mindestens ein `Ready`-Node angezeigt werden.
|
||||
|
||||
### 4.2 Standard-StorageClass prüfen
|
||||
MySQL und MinIO in ClawManager benötigen persistente Speicherung. Es wird empfohlen, zunächst zu prüfen, ob im Cluster eine Standard-`StorageClass` vorhanden ist:
|
||||
|
||||
```bash
|
||||
kubectl get storageclass
|
||||
```
|
||||
|
||||
Wenn im Cluster bereits eine Standard-StorageClass vorhanden ist, können Sie mit der Bereitstellung direkt fortfahren.
|
||||
|
||||
Wenn **keine Standard-StorageClass** vorhanden ist, wird empfohlen, im Voraus nutzbare PV / PVC bereitzustellen oder eine lokale Pfad-Storage-Lösung zu verwenden. Andernfalls kann später Folgendes auftreten:
|
||||
|
||||
```text
|
||||
pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-05"></a>
|
||||
## V. Empfehlungen zum Ziehen von Images in Netzwerken auf dem chinesischen Festland (optional)
|
||||
Wenn der Server Docker Hub oder andere öffentliche Registries nur langsam erreicht, können Sie Image-Beschleunigung konfigurieren.
|
||||
|
||||
### 5.1 k3s-Szenario: `/etc/rancher/k3s/registries.yaml` konfigurieren
|
||||
```yaml
|
||||
mirrors:
|
||||
docker.io:
|
||||
endpoint:
|
||||
- "https://docker.m.daocloud.io"
|
||||
- "https://docker.nju.edu.cn"
|
||||
- "https://docker.1ms.run"
|
||||
quay.io:
|
||||
endpoint:
|
||||
- "https://quay.mirrors.ustc.edu.cn"
|
||||
gcr.io:
|
||||
endpoint:
|
||||
- "https://gcr.mirrors.ustc.edu.cn"
|
||||
k8s.gcr.io:
|
||||
endpoint:
|
||||
- "https://registry.aliyuncs.com/google_containers"
|
||||
```
|
||||
|
||||
Führen Sie nach der Änderung Folgendes aus:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart k3s
|
||||
```
|
||||
|
||||
### 5.2 Image-Pull verifizieren
|
||||
```bash
|
||||
sudo k3s crictl pull docker.io/rancher/mirrored-pause:3.6
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-06"></a>
|
||||
## VI. ClawManager bereitstellen
|
||||
|
||||
### 6.1 Projektcode abrufen
|
||||
```bash
|
||||
git clone https://github.com/Yuan-lab-LLM/ClawManager.git
|
||||
cd ClawManager
|
||||
```
|
||||
|
||||
### 6.2 Bereitstellungsmanifest anwenden
|
||||
Führen Sie im Wurzelverzeichnis des Repositorys aus:
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
```
|
||||
|
||||
### 6.3 Basisressourcen prüfen
|
||||
```bash
|
||||
kubectl get ns
|
||||
kubectl get pods -n clawmanager-system
|
||||
kubectl get svc -n clawmanager-system
|
||||
```
|
||||
|
||||
Unter normalen Umständen sehen Sie die folgenden Komponenten:
|
||||
- `clawmanager-app`
|
||||
- `mysql`
|
||||
- `minio`
|
||||
- `skill-scanner`
|
||||
|
||||
Wenn Sie den folgenden Fehler sehen:
|
||||
|
||||
```text
|
||||
0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
bedeutet dies, dass MySQL / MinIO im Cluster-Speicher nicht starten können, weil die PVC nicht gebunden ist. Springen Sie bitte direkt ans Ende des Dokuments:
|
||||
|
||||
- [XI.1 Spezielle Behandlung von Speicherproblemen (PV/PVC)](#sec-14-storage)
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-08"></a>
|
||||
## VII. Weboberfläche starten
|
||||
|
||||
### 7.1 Zugriff über NodePort
|
||||
Der ClawManager-Frontend-Service verwendet standardmäßig einen HTTPS-NodePort. Prüfen Sie zunächst:
|
||||
|
||||
```bash
|
||||
kubectl get svc -n clawmanager-system
|
||||
```
|
||||
|
||||
Wenn der Frontend-Port wie folgt ist:
|
||||
|
||||
```text
|
||||
443:30443/TCP
|
||||
```
|
||||
|
||||
können Sie ihn direkt im Browser aufrufen:
|
||||
|
||||
```text
|
||||
https://<Server-IP>:30443
|
||||
```
|
||||
|
||||
|
||||
### 7.2 Hinweis zum ersten HTTPS-Zugriff
|
||||
Da in der Regel ein selbstsigniertes Zertifikat verwendet wird, zeigt der Browser möglicherweise „Unsicher“ oder eine Zertifikatswarnung an. Klicken Sie auf:
|
||||
|
||||
```text
|
||||
Erweitert → Trotzdem fortfahren
|
||||
```
|
||||
|
||||
um die Seite zu öffnen.
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-09"></a>
|
||||
## VIII. Schnellstartanleitung (nach dem Login initialisieren und eine OpenClaw-Instanz erstellen)
|
||||
|
||||
Nachdem Sie die obige Bereitstellung abgeschlossen und die Verwaltungsseite erfolgreich geöffnet haben, müssen Sie noch die folgenden Initialisierungsschritte durchführen, bevor Sie tatsächlich eine **OpenClaw**-Instanz erstellen und starten können.
|
||||
|
||||
### 8.1 Im System anmelden
|
||||
1. Öffnen Sie die Seite nach der Bereitstellung, z. B.: `https://<Knoten-IP>:30443`.
|
||||
2. Melden Sie sich mit dem Standard-Administratorkonto an:
|
||||
- **Benutzername**: `admin`
|
||||
- **Passwort**: `admin123`
|
||||
3. Nach der ersten Anmeldung wird empfohlen, das Standardpasswort nach Bedarf zu ändern.
|
||||
|
||||
|
||||
### 8.2 Sicherheitsmodell konfigurieren (AI Gateway)
|
||||
|
||||

|
||||
Nach dem Login müssen Sie zunächst ein verfügbares **Sicherheitsmodell** konfigurieren, das von der Plattform und von nachfolgenden Instanzen gemeinsam genutzt wird.
|
||||
|
||||
1. Klicken Sie im linken Menü auf **AI Gateway** → **Modelle**.
|
||||
2. Fügen Sie ein neues Modell hinzu oder bearbeiten Sie ein bestehendes Modell und tragen Sie die folgenden Informationen entsprechend dem tatsächlich angebundenen Modelldienst ein:
|
||||
|
||||
* **Anzeigename**: Geben Sie einen leicht erkennbaren Namen ein.
|
||||
* **Anbietervorlage**: Wählen Sie die passende Vorlage entsprechend dem Typ Ihres Modelldienstes; wenn Sie eine benutzerdefinierte oder kompatible Schnittstelle verwenden, können Sie **Local / Internal** auswählen.
|
||||
* **Protokoll**: Wählen Sie das Protokoll entsprechend der Schnittstelle, z. B. **OpenAI Compatible** oder ein anderes tatsächlich verwendetes Protokoll.
|
||||
* **Base URL**: Tragen Sie die vom Modelldienst bereitgestellte Schnittstellenadresse ein.
|
||||
* **API Key**: Tragen Sie den gültigen Schlüssel des entsprechenden Modelldienstes ein.
|
||||
* **Provider Model**: Tragen Sie den tatsächlichen Namen des aufzurufenden Modells ein.
|
||||
* **Währung**: Tragen Sie die Angabe entsprechend Ihrer tatsächlichen Situation ein; wenn keine Kostendarstellung benötigt wird, können Sie den Standardwert beibehalten.
|
||||
* **Eingabepreis / Ausgabepreis**: Wenn keine Kostenstatistik benötigt wird, können Sie zunächst `0` eintragen.
|
||||
3. Aktivieren Sie vor dem Absenden unbedingt:
|
||||
|
||||
* **Sicherheitsmodell**
|
||||
* **Aktiviert**
|
||||
4. Klicken Sie auf **Speichern**.
|
||||
|
||||
> Hinweis: Die Bilder auf der Seite dienen nur dazu, die Positionen der Eingabefelder und das Beispiel-Format zu zeigen. Die tatsächlichen Inhalte sollten sich nach der Konfiguration des von Ihnen verwendeten Modelldienstes richten.
|
||||
|
||||
|
||||
### 8.3 OpenClaw-Instanz erstellen
|
||||
Nach Abschluss der Modellkonfiguration erstellen Sie eine **OpenClaw Desktop**-Instanz.
|
||||
|
||||
1. Klicken Sie unten links auf **ADMIN** und wechseln Sie in den **Workspace**.
|
||||
2. Klicken Sie auf **Instanz erstellen**.
|
||||
|
||||

|
||||
#### Schritt 1: Grundinformationen
|
||||
- Geben Sie den **Instanznamen** ein (mindestens 3 Zeichen).
|
||||
- Die Beschreibung ist optional und kann leer bleiben.
|
||||
- Klicken Sie auf **Weiter**.
|
||||
|
||||

|
||||
#### Schritt 2: Typ auswählen
|
||||
- Wählen Sie **OpenClaw Desktop** aus.
|
||||
- Klicken Sie auf **Weiter**.
|
||||
|
||||
|
||||

|
||||
#### Schritt 3: Konfiguration
|
||||
- Sie können direkt die Spezifikation **Small** auswählen:
|
||||
- `2 CPU`
|
||||
- `4 GB RAM`
|
||||
- `20 GB Disk`
|
||||
- Sie können die Einstellungen auch im darunterliegenden benutzerdefinierten Konfigurationsbereich nach Bedarf anpassen.
|
||||
- Im Bereich für OpenClaw-Ressourceneinbindung können Sie je nach Bedarf auswählen:
|
||||
- **Manuelle Ressourcen**
|
||||
- **Ressourcenpaket**
|
||||
- **Archivimport**
|
||||
- Bei der ersten Verwendung können Sie die Standardwerte beibehalten oder **Manuelle Ressourcen** auswählen.
|
||||
- Klicken Sie abschließend auf **Erstellen**.
|
||||
|
||||
### 8.4 Hinweis zur ersten Erstellung
|
||||
- Wenn Sie zum ersten Mal eine **OpenClaw**-Instanz erstellen, müssen die erforderlichen Images heruntergeladen und die Umgebung initialisiert werden, daher dauert es deutlich länger.
|
||||
- Bei langsamen Netzwerken oder beim ersten Image-Pull kann der Instanzstatus lange als **Erstellen** angezeigt werden. Bitte warten Sie geduldig.
|
||||
- Wenn der Start auch nach längerer Zeit nicht erfolgreich ist, gehen Sie zurück zu den Kubernetes-/Docker-Logs und prüfen Sie Image-, PVC-, Gateway-Modell- und andere Probleme.
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-12"></a>
|
||||
## IX. Konsole und weitere Funktionen des AI Gateway
|
||||
|
||||
Neben der Modellkonfiguration bieten die Konsole auf der Startseite der Plattform und das AI Gateway auch Funktionen für Auditierung, Kosten und Regelverwaltung. So können Administratoren den Clusterstatus, Modellaufrufe und die Ausführung von Sicherheitsrichtlinien zentral einsehen.
|
||||
|
||||
### 9.1 Konsolenübersicht
|
||||
|
||||

|
||||
|
||||
Die Startseite der Konsole dient dazu, den gesamten Betriebszustand des aktuellen Clusters und der Plattform anzuzeigen, damit Administratoren Ressourcennutzung und Systemzustand schnell erfassen können.
|
||||
|
||||
Sie umfasst hauptsächlich die folgenden Informationen:
|
||||
|
||||
- **Übersicht über grundlegende Clusterinformationen**: Zeigt die Gesamtzahl der Benutzer, die Gesamtzahl der Instanzen, die Anzahl laufender Instanzen und die gesamte Speichernutzung der aktuellen Plattform an.
|
||||
- **Knotenübersicht**: Zeigt die aktuelle Anzahl verfügbarer Knoten sowie die wichtigsten Scheduling-Knoteninformationen im aktuellen Cluster an.
|
||||
- **Ressourcenanforderungsstatus**: Zeigt die Gesamtmenge der aktuell von der Plattform angeforderten CPU-, Speicher- und Plattenressourcen an.
|
||||
- **Kapazitäts-Dashboard**: Zeigt die Gesamtkapazität und aktuelle Auslastung von Knoten, CPU, Speicher, Festplatte und weiteren Dimensionen an, damit leicht beurteilt werden kann, ob im Cluster noch freie Kapazität vorhanden ist.
|
||||
- **Infrastruktur-Tabelle**: Dient zur Anzeige des Status aktueller Knoten, Ressourcen und der grundlegenden Laufzeitumgebung.
|
||||
|
||||
> Hinweis: Die Konsole dient hauptsächlich dazu, die Gesamtressourcen der Plattform, die Knoten und den Betriebsüberblick über Instanzen anzuzeigen, und wird nicht direkt für konkrete OpenClaw-Operationen innerhalb einzelner Instanzen verwendet.
|
||||
|
||||
### 9.2 Sicherheitszentrum (skill-scanner)
|
||||
|
||||
Das **Sicherheitszentrum** in der Konsole dient dazu, den Scan-Status der Plattformressourcen, historische Berichte und Scanner-Konfigurationen zentral einzusehen. Es basiert auf dem Backend-Dienst **skill-scanner** und kann statische Scans, Deep Scans sowie ergänzende, LLM-basierte Analysen auf Ressourcen ausführen. Dadurch unterstützt es Administratoren dabei, potenziell riskante Inhalte, ungewöhnliche Ressourcen und verdächtige Skills zu identifizieren.
|
||||
|
||||
Das Sicherheitszentrum umfasst derzeit hauptsächlich die folgenden drei Module:
|
||||
|
||||
* **Laufzeitübersicht**
|
||||
* **Berichtshistorie**
|
||||
* **Scanner-Konfiguration**
|
||||
|
||||
#### 9.2.1 Laufzeitübersicht
|
||||
|
||||

|
||||
|
||||
Die Seite „Laufzeitübersicht“ dient dazu, den gesamten aktuellen Scan-Status und die Risikoverteilung der Plattform einzusehen, damit Administratoren die aktuelle Sicherheitslage schnell erfassen können.
|
||||
|
||||
Die Seite enthält hauptsächlich die folgenden Informationen:
|
||||
|
||||
* **Aktuell wirksamer Modus**: Zeigt an, ob derzeit der **Quick-Modus** oder der **Deep-Modus** verwendet wird.
|
||||
* **Schnellscan / Vollscan**:
|
||||
|
||||
* **Schnellscan**: Geeignet für neu hinzugefügte oder geänderte Ressourcen. Der Scanumfang ist leichter und die Ausführung schneller.
|
||||
* **Vollscan**: Geeignet für das regelmäßige erneute Scannen aller Ressourcen, um den aktuellen Zustand aller Plattformressourcen vollständig zu überprüfen.
|
||||
* **Gesamtzahl der Assets**: Anzahl der Ressourcen, die aktuell in den Scanbereich des Sicherheitszentrums aufgenommen sind.
|
||||
* **Abgeschlossene Scans**: Anzahl der Ressourcen, deren Scan bereits abgeschlossen ist.
|
||||
* **Hohes Risiko / Mittleres Risiko**: Statistik der in den aktuellen Scanergebnissen erkannten Risikostufen.
|
||||
* **Scan-Abdeckung**: Zeigt den Anteil der tatsächlich gescannten Assets an der Gesamtzahl der Plattform-Assets.
|
||||
* **SAFE / Hohes Risiko / Wartend / Fehlgeschlagen**:
|
||||
|
||||
* **SAFE**: Anzahl der Ressourcen, die den Scan bestanden haben und bei denen aktuell kein Risiko festgestellt wurde
|
||||
* **Hohes Risiko**: Anzahl der Risiko-Assets, die sofort bearbeitet werden müssen
|
||||
* **Wartend**: Anzahl der Ressourcen, die auf Beweissicherung oder auf die Einreihung in die Scan-Warteschlange warten
|
||||
* **Fehlgeschlagen**: Anzahl der fehlgeschlagenen Scan-Ausführungen, die erneut ausgeführt werden müssen
|
||||
* **Risikolage der Plattform-Assets**: Zeigt die aktuelle Risikoverteilung der Plattform-Assets aggregiert nach Risikostufe.
|
||||
* **Hot Assets**: Zeigt die am häufigsten verwendeten Skills oder hochfrequent genutzten Ressourcen an, damit Administratoren wichtige Assets schnell identifizieren können.
|
||||
* **Scanner-Status**: Zeigt die Verfügbarkeit und den Verbindungsstatus des aktuellen skill-scanner an, zum Beispiel „Statischer Scan verfügbar“ oder „Verbunden“.
|
||||
* **Risikohinweise und Handlungsempfehlungen**: Gibt kurze Hinweise entsprechend der aktuellen Risikolage.
|
||||
* **Letzte Scan-Aufgaben**: Zeigt kürzlich ausgeführte Scan-Einträge an, damit aktuelle Scan-Aktivitäten nachvollzogen werden können.
|
||||
|
||||
> Hinweis:
|
||||
>
|
||||
> * Wenn auf der Seite „Derzeit gibt es keine Assets mit hohem oder mittlerem Risiko“ angezeigt wird, bedeutet dies, dass in den aktuellen Scan-Ergebnissen keine signifikanten Risiken gefunden wurden.
|
||||
> * Wenn auf der Seite „Es gibt noch keine Scan-Aufzeichnungen“ angezeigt wird, bedeutet dies, dass bisher noch kein Scan ausgeführt wurde oder noch keine gültigen Scan-Ergebnisse erzeugt wurden.
|
||||
|
||||
#### 9.2.2 Berichtshistorie
|
||||
|
||||
Die Seite „Berichtshistorie“ dient dazu, historische Scan-Berichte und zugehörige Ergebnisdatensätze einzusehen, damit Administratoren vergangene Scan-Ausführungen nachvollziehen können.
|
||||
|
||||
Dieses Modul dient hauptsächlich dazu:
|
||||
|
||||
* Ergebnisse bereits ausgeführter Scan-Aufgaben einzusehen
|
||||
* Scan-Ausgaben zu verschiedenen Zeitpunkten zu vergleichen
|
||||
* Änderungen des Sicherheitszustands einer bestimmten Ressource über verschiedene Phasen hinweg nachzuverfolgen
|
||||
* Eine historische Grundlage für spätere Prüfungen, erneute Scans und Fehleranalysen bereitzustellen
|
||||
|
||||
> Hinweis:
|
||||
>
|
||||
> * Die „Berichtshistorie“ ist stärker auf die Archivierung und Rückverfolgung historischer Ergebnisse ausgerichtet;
|
||||
> * Die „Laufzeitübersicht“ ist stärker auf den aktuellen Zustand und den Gesamtüberblick ausgerichtet。
|
||||
|
||||
#### 9.2.3 Scanner-Konfiguration
|
||||
|
||||

|
||||
|
||||
Die Seite „Scanner-Konfiguration“ dient zur Verwaltung der Betriebsweise von skill-scanner, der LLM-bezogenen Einstellungen sowie der beiden Scan-Strategien quick und deep. Nach dem Speichern wird ein Deployment-Rollout ausgelöst und auf das Wirksamwerden der neuen Konfiguration gewartet.
|
||||
|
||||
Die Seite enthält hauptsächlich die folgenden Inhalte:
|
||||
|
||||
##### (1) skill-scanner Servicestatus
|
||||
|
||||
* Zeigt Namespace, Deployment-Namen und Verbindungsstatus des aktuellen Backend-Scandienstes an.
|
||||
* Wenn auf der Seite **Verbunden** und **Statischer Scan verfügbar** angezeigt wird, bedeutet dies, dass die grundlegende statische Scan-Funktion verfügbar ist.
|
||||
|
||||
##### (2) LLM-Konfiguration
|
||||
|
||||
Dieser Bereich dient zur Konfiguration des primären LLM, damit der Scanner bei Bedarf modellbasierte Analysen ausführen kann.
|
||||
|
||||
Die wichtigsten Felder sind:
|
||||
|
||||
* **Primäre LLM-Integration**: Die Konfiguration des primären LLM kann direkt aus einem bereits in **AI Gateway** konfigurierten Modell importiert werden.
|
||||
* **LLM API Key**: Entspricht `SKILL_SCANNER_LLM_API_KEY` und wird zur Authentifizierung des primären LLM analyzers verwendet.
|
||||
* **LLM Model**: Entspricht `SKILL_SCANNER_LLM_MODEL`, zum Beispiel ein konkreter Modellname.
|
||||
* **LLM Base URL**: Entspricht `SKILL_SCANNER_LLM_BASE_URL` und dient zur Konfiguration der Serviceadresse des primären LLM.
|
||||
|
||||
##### (3) Meta-LLM-Integration
|
||||
|
||||
Dieser Bereich dient zur Konfiguration des Modells, das vom Meta Analyzer verwendet wird. Es wird typischerweise für die weitere Zusammenfassung, Konsolidierung oder sekundäre Verarbeitung von Findings verwendet.
|
||||
|
||||
Die wichtigsten Felder sind:
|
||||
|
||||
* **Meta-LLM-Integration**: Die Konfiguration des Meta Analyzers kann direkt aus einem bereits in **AI Gateway** konfigurierten Modell importiert werden.
|
||||
* **Meta LLM API Key**: Entspricht `SKILL_SCANNER_META_LLM_API_KEY`.
|
||||
* **Meta LLM Model**: Entspricht `SKILL_SCANNER_META_LLM_MODEL`.
|
||||
* **Meta LLM Base URL**: Entspricht `SKILL_SCANNER_META_LLM_BASE_URL`.
|
||||
|
||||
> Hinweis:
|
||||
>
|
||||
> * Wenn derzeit kein LLM konfiguriert ist, zeigt die Seite in der Regel an, dass aktuell nur statisches Scannen unterstützt wird;
|
||||
> * Erst nach der Konfiguration des primären LLM und des Meta LLM kann der Scanner vollständigere semantische Analysen und Zusammenfassungen aktivieren。
|
||||
|
||||
##### (4) Aktueller Scan-Modus
|
||||
|
||||
Die Seite unterstützt die Auswahl des aktuell von der Plattform verwendeten Scan-Modus:
|
||||
|
||||
* **Quick-Modus**: Verwendet quick analyzers für den Scan und eignet sich für tägliche Schnellprüfungen.
|
||||
* **Deep-Modus**: Verwendet deep analyzers für den Scan und eignet sich für vollständigere und tiefere Analysen.
|
||||
|
||||
Wichtig ist:
|
||||
|
||||
* Sowohl „Schnellscan“ als auch „Vollscan“ im Dashboard verwenden die hier ausgewählte Scan-Stärke;
|
||||
* Der Unterschied liegt hauptsächlich im Scan-Umfang und nicht in der Tiefe der Analyzer selbst。
|
||||
|
||||
##### (5) Quick / Deep Scan-Strategie
|
||||
|
||||
Im unteren Bereich der Seite werden die beiden Scan-Strategie-Konfigurationen **Quick** und **Deep** separat gepflegt, damit Administratoren je nach Szenario unterschiedliche Analyzer-Kombinationen auswählen können.
|
||||
|
||||
Jede Strategie umfasst die folgenden Konfigurationseinträge:
|
||||
|
||||
* **Timeout (Sekunden)**: Legt die Timeout-Zeit für Scan-Aufgaben im aktuellen Modus fest.
|
||||
* **Aufrufmethoden**: Verschiedene Analyzer können je nach Bedarf aktiviert oder deaktiviert werden.
|
||||
|
||||
Die derzeit sichtbaren Analyzer-Typen umfassen:
|
||||
|
||||
* **Static**: YAML + YARA statisches Regel-Scannen
|
||||
* **Bytecode**: Integritätsprüfung von Python-Bytecode
|
||||
* **Pipeline**: Befehlsketten- und Taint-Analyse
|
||||
* **Behavioral**: AST-basierte Verhaltens- und Datenflussanalyse
|
||||
* **LLM**: Semantische Analyse auf Basis externer LLMs
|
||||
* **Meta**: Sekundäre Zusammenfassungsanalyse von Findings
|
||||
|
||||
Dies kann in der Regel wie folgt verstanden werden:
|
||||
|
||||
* **Quick-Modus**: Legt den Schwerpunkt auf schnellere Ausführung und wird häufig für tägliche inkrementelle Prüfungen verwendet
|
||||
* **Deep-Modus**: Kann mehr Analyzer aktivieren und eignet sich für tiefere Prüfungen und Sicherheits-Audits
|
||||
|
||||
##### (6) Speichern und anwenden
|
||||
|
||||
Die Schaltfläche **Speichern und anwenden** oben rechts dient dazu, alle aktuellen scanner-bezogenen Konfigurationen zu übernehmen. Nach dem Speichern werden folgende Aktionen ausgeführt:
|
||||
|
||||
* Aktualisierung der quick / deep Scan-Strategien in ClawManager
|
||||
* Aktualisierung der relevanten Umgebungsvariablen des skill-scanner Deployment
|
||||
* Warten auf den Abschluss des Rollouts, bevor die neue Konfiguration offiziell wirksam wird
|
||||
|
||||
> Hinweis:
|
||||
>
|
||||
> * Nach Änderungen an der Scanner-Konfiguration wird empfohlen, vor dem Start neuer Scan-Aufgaben zu warten, bis die Konfiguration vollständig wirksam ist;
|
||||
> * Falls der Verbindungsstatus nach der Konfiguration ungewöhnlich ist, sollten zuerst das AI Gateway-Modell, die LLM-Adresse, der Key und der Deployment-Rollout-Status geprüft werden。
|
||||
|
||||
### 9.3 Überblick über die AI-Gateway-Funktionen
|
||||
|
||||
Zusätzlich zur Konfiguration von „Modellen“ enthält AI Gateway auch die folgenden Module:
|
||||
|
||||
* **AI Audit**: Zeigt Modellaufruf-Traces, Request- und Response-Payloads, erkannte Risiken, Routing-Entscheidungen und Aufrufdetails an.
|
||||
* **Kosten**: Zeigt Token-Nutzung, geschätzte Kosten, interne Kosten und Trendstatistiken an.
|
||||
* **Risikokontrollregeln**: Konfiguriert Regeln zur Erkennung sensibler Inhalte und steuert, ob Treffer freigegeben oder an das Sicherheitsmodell weitergeleitet werden.
|
||||
|
||||
### 9.4 Kostenmodul
|
||||
|
||||
Die Kostenseite dient dazu, die Kosten und die Token-Nutzung von Modellaufrufen auf der Plattform zu erfassen und Administratoren beim Verständnis des Gesamtverbrauchs zu unterstützen.
|
||||
|
||||

|
||||
|
||||
Die Seite enthält hauptsächlich die folgenden Inhalte:
|
||||
|
||||
* **Input Token**: Statistik über die Gesamtmenge der Eingabe-Prompts
|
||||
* **Output Token**: Statistik über die Gesamtmenge der vom Modell generierten Inhalte
|
||||
* **Geschätzte Kosten**: Auf Basis der Provider-Stückpreise geschätzte Kosten
|
||||
* **Interne Kosten**: Interne Verrechnungskosten im Zusammenhang mit dem Sicherheitsmodell
|
||||
* **Täglicher Kostentrend**: Zeigt die Veränderungen von geschätzten Kosten und Token im aktuellen Fenster über die letzten 7 Tage an
|
||||
* **Benutzerübersicht**: Aggregierte Nutzung und Kosten nach Benutzer
|
||||
* **Instanzübersicht**: Aggregierte Nutzung und Kosten nach Instanz
|
||||
* **Neueste Kostenaufzeichnungen**: Unterstützt Suche und Paginierung von Kostenaufzeichnungen nach Trace, Benutzer, Modell und weiteren Bedingungen und ermöglicht den Sprung zu Audit-Details
|
||||
|
||||
> Hinweis: Falls noch keine Modellaufruf-Datensätze erzeugt wurden, können Input Token, Output Token, Kosten und Trenddiagramme alle 0 sein. Das ist normal.
|
||||
|
||||
### 9.5 AI-Audit-Modul
|
||||
|
||||
Die AI-Audit-Seite dient dazu, kürzliche Aufrufdatensätze verwalteter Modelle einzusehen und Administratoren bei der Untersuchung von Modellaufrufen, Token-Nutzung und Routing-Ergebnissen zu unterstützen.
|
||||
|
||||

|
||||
|
||||
Die Hauptfunktionen umfassen:
|
||||
|
||||
* **Letzte AI Trace**: Zeigt aktuelle Modellaufruf-Ketten an
|
||||
* **Trace-Liste**: Zeigt aktuelle verwaltete Traces in einer einheitlichen Tabelle an
|
||||
* **Suche und Filterung**: Unterstützt Suche nach Trace, Request-Inhalt, Benutzer, Modell und weiteren Bedingungen
|
||||
* **Statusfilterung**: Unterstützt die Anzeige verschiedener Aufrufergebnisse nach Status
|
||||
* **Modellfilterung**: Unterstützt die Filterung zugehöriger Aufrufdatensätze nach Modell
|
||||
* **Paginierung und Aktualisierung**: Unterstützt paginierte Anzeige und manuelles Aktualisieren der neuesten Audit-Ergebnisse
|
||||
|
||||
> Hinweis: Wenn auf der Seite „Es liegen noch keine AI-Audit-Aufzeichnungen vor“ angezeigt wird, bedeutet dies, dass noch keine tatsächlichen Modellaufruf-Anfragen erzeugt wurden.
|
||||
|
||||
### 9.6 Modul für Risikokontrollregeln
|
||||
|
||||
Die Seite für Risikokontrollregeln dient dazu, Erkennungsregeln für sensible Inhalte zu konfigurieren und festzulegen, welche Aktion nach einem Regeltreffer ausgeführt werden soll.
|
||||
|
||||

|
||||
|
||||
Dieses Modul unterstützt hauptsächlich:
|
||||
|
||||
* **Verwaltung der Regelliste**: Anzeige aller Regeln und ihres Aktivierungsstatus
|
||||
* **Ansicht nach Regelkategorie**: Unterstützt die Anzeige nach Kategorien wie personenbezogene Informationen, Unternehmensinformationen, Kundengeschäft, Sicherheitszugangsdaten, Finanzen und Recht, politisch sensible Inhalte und benutzerdefiniert
|
||||
* **Konfiguration der Regelfelder**: Es können Regel-ID, Anzeigename, Schweregrad, Aktion, Reihenfolge, Regex-Pattern und Beschreibung festgelegt werden
|
||||
* **Steuerung der Regelaktion**: Bei einem Treffer kann gewählt werden, ob Inhalte freigegeben oder an das Sicherheitsmodell weitergeleitet werden
|
||||
* **Stapelweises Aktivieren / Deaktivieren**: Unterstützt die stapelweise Anpassung des Regelstatus
|
||||
* **Regel-Testkonsole**: Ermöglicht das Einfügen von Beispieltexten, um zu testen, welche aktiven oder Entwurfsregeln ausgelöst werden
|
||||
|
||||
Die aktuell integrierten Regelbeispiele umfassen unter anderem:
|
||||
|
||||
* Personenbezogene Informationen: E-Mail-Adresse, Mobiltelefonnummer, Ausweisnummer, Reisepassnummer, Bankkartenkontext, Adresse, Lebenslaufinhalte usw.
|
||||
* Unternehmensinformationen: interne IP, interne Domain, Host-Benennung, Kubernetes Service DNS, Projekt-Codename, Organisationsstruktur, Gehalts- / HR-Informationen usw.
|
||||
* Kundengeschäft: Kundenlisten, Verträge / Angebote, Steuer-IDs auf Rechnungen, CRM- / Ticket-Daten usw.
|
||||
* Sicherheitszugangsdaten: Private Keys, API Keys, Tokens, JWT, Cookie / Session, Datenbank-Verbindungsstrings, Kubeconfig, geheime Umgebungsvariablen usw.
|
||||
* Finanzen und Recht: Budget, Gewinn, Umsatz, Rechtsgutachten, Rechtsstreitigkeiten, NDA usw.
|
||||
* Politisch sensible Inhalte: politische Institutionen, Militär / nationale Sicherheit, extremistische und gewaltbezogene Ausdrücke usw.
|
||||
|
||||
> Hinweis: Die Standardregeln decken bereits viele gängige Szenarien zur Erkennung sensibler Informationen ab. In der Praxis können Regeln je nach Geschäftsanforderung weiter ergänzt, angepasst oder deaktiviert werden.
|
||||
---
|
||||
|
||||
<a id="sec-13"></a>
|
||||
## X. Beschreibung des Workspace-Moduls
|
||||
|
||||
Der Workspace ist der wichtigste Arbeitsbereich, nachdem sich ein normaler Benutzer bei der Plattform angemeldet hat. Er wird verwendet, um persönliche Ressourcenquoten einzusehen, Instanzen zu erstellen, Instanzen zu verwalten und OpenClaw-bezogene Ressourcen zu pflegen. Dieses Modul ist stärker auf tägliche Nutzung und Betriebsaufgaben ausgerichtet als die administratorseitige „Konsolenübersicht“.
|
||||
|
||||
### 10.1 Workspace-Startseite
|
||||

|
||||
Die Workspace-Startseite dient dazu, die Übersicht über Instanzen und Ressourcennutzung des aktuellen Kontos anzuzeigen und umfasst hauptsächlich die folgenden Inhalte:
|
||||
|
||||
- **Meine Instanzen**: Zeigt die Anzahl der unter dem aktuellen Konto erstellten Instanzen an.
|
||||
- **Laufend**: Zeigt die Anzahl der aktuell laufenden Instanzen an.
|
||||
- **Verwendeter Speicher**: Zeigt den derzeit vom Konto belegten Speicherplatz an.
|
||||
- **Meine Ressourcenquoten**: Zeigt die für das aktuelle Konto verfügbaren Quoten an, darunter Anzahl der Instanzen, maximale CPU-Kerne, maximaler Speicher, maximaler Storage und maximale GPU-Anzahl.
|
||||
- **Schnellaktionen**: Bietet zwei Einstiege: **Neue Instanz erstellen** und **Alle Instanzen anzeigen**, damit Sie schnell mit der Plattform starten können.
|
||||
|
||||
> Hinweis: Wenn auf der Seite „Noch keine Instanzen“ angezeigt wird, können Sie direkt auf **Neue Instanz erstellen** klicken, um mit der Erstellung der ersten OpenClaw Desktop-Instanz zu beginnen.
|
||||
|
||||
### 10.2 Meine Instanzen
|
||||
|
||||
Die Seite **Meine Instanzen** dient dazu, die unter dem aktuellen Konto erstellten Instanzen zentral anzuzeigen und zu verwalten. Diese Seite übernimmt hauptsächlich die Instanzverwaltungsfunktionen.
|
||||

|
||||
Zu den üblichen unterstützten Aktionen gehören:
|
||||
|
||||
- **Instanzstatus anzeigen**: Prüfen, ob sich die Instanz im Status Erstellung, Laufend, Gestoppt oder Fehler befindet.
|
||||
- **Instanzdetails öffnen**: Grundinformationen, Ressourcenkonfiguration und Laufzeitstatus der Instanz anzeigen.
|
||||
- **Instanz stoppen**: Wenn die Instanz fehlerhaft läuft oder die Umgebung neu geladen werden muss, kann eine Stop-Aktion ausgeführt werden.
|
||||
- **Instanz löschen**: Wenn die Instanz nicht mehr benötigt wird, kann sie direkt gelöscht werden, um CPU-, Speicher- und Storage-Ressourcen freizugeben.
|
||||
|
||||
> Hinweis: Nach dem Löschen einer Instanz werden die zugehörigen Ressourcen ebenfalls bereinigt. Stellen Sie vor der Ausführung sicher, dass die enthaltenen Daten und Konfigurationen gesichert wurden.
|
||||
|
||||
### 10.3 Ressourcenverwaltung
|
||||
|
||||
Die Seite **Ressourcenverwaltung** dient dazu, verfügbare OpenClaw-Ressourceninhalte zu pflegen, sodass sie nach dem Start einer Instanz eingebunden und verwendet werden können.
|
||||

|
||||
Die Seite umfasst hauptsächlich die folgenden Bereiche:
|
||||
|
||||
- **Ressourcen**: Verfügbare Ressourceneinträge anzeigen und pflegen.
|
||||
- **Ressourcenpakete**: Mehrere Ressourcen zu wiederverwendbaren Paketen kombinieren, um eine gebündelte Einbindung zu erleichtern.
|
||||
- **Einbindungsprotokolle**: Verlauf und Ausführungsstatus von Ressourceneinbindungen anzeigen.
|
||||
|
||||
Auf der linken Seite der Ressourcenverwaltungsseite können Ressourcen außerdem nach Typ getrennt verwaltet werden. Die derzeit auf der Seite sichtbaren Typen sind:
|
||||
|
||||
- **Kanäle**
|
||||
- **Skills**
|
||||
- **Agenten (demnächst verfügbar)**
|
||||
- **Geplante Aufgaben (demnächst verfügbar)**
|
||||
|
||||
Rechts oben auf der Seite werden unterstützt:
|
||||
|
||||
- **Aktualisieren**: Die aktuelle Ressourcenliste neu laden.
|
||||
- **Neu**: Einen neuen Ressourceneintrag erstellen.
|
||||
|
||||
> Hinweis: Die Ressourcenverwaltung dient hauptsächlich dazu, OpenClaw-Ressourcen vorzubereiten, die nach dem Start einer Instanz verwendet werden können, und ersetzt nicht direkt den Prozess der Instanzerstellung. Bei der Erstellung einer Instanz können Ressourcen über **Manuelle Ressourcen**, **Ressourcenpakete** und **Archivimport** eingebunden werden.
|
||||
|
||||
|
||||
### 10.3.1 Kanal erstellen
|
||||
|
||||
„Kanäle“ werden verwendet, um die Verbindungsweise zwischen OpenClaw und externen Nachrichtenplattformen oder Zugriffsendpunkten zu konfigurieren, z. B. Telegram, Slack und Feishu / Lark.
|
||||
|
||||

|
||||
|
||||
Gehe beim Erstellen eines Kanals wie folgt vor:
|
||||
|
||||
1. Öffne die Seite **Ressourcenverwaltung** und bleibe im Reiter **Ressourcen**.
|
||||
2. Wähle links unter den Ressourcentypen **Kanal** aus.
|
||||
3. Klicke rechts auf der Seite auf **Neu**, um das Dialogfenster „Neue Ressource“ zu öffnen.
|
||||
4. Fülle im Dialog die Basisinformationen aus:
|
||||
- **Typ**: **Kanal** auswählen
|
||||
- **Ressourcen-Key**: Trage die eindeutige Kennung dieses Kanals ein. Es wird empfohlen, einen leicht erkennbaren und nicht doppelt verwendeten englischen Namen oder eine entsprechende Kombination zu verwenden
|
||||
- **Name**: Trage den Anzeigenamen des Kanals ein
|
||||
- **Tags**: optional, für Klassifizierung und Suche
|
||||
- **Beschreibung**: optional, zur ergänzenden Beschreibung des Kanalzwecks
|
||||
- **Aktiviert**: Es wird empfohlen, diese Option aktiviert zu lassen
|
||||
5. Wähle im Bereich **Channel Template** eine Startvorlage aus. Derzeit werden folgende Vorlagen unterstützt:
|
||||
- `Telegram`
|
||||
- `Slack`
|
||||
- `Feishu / Lark`
|
||||
|
||||
6. Nachdem du eine Vorlage ausgewählt hast, klicke auf **Vorlage laden**. Das System schreibt die Grundkonfiguration der entsprechenden Vorlage automatisch in den darunterliegenden Bereich **Content JSON**.
|
||||
7. Ergänze oder ändere anschließend die Feldinhalte in **Content JSON** entsprechend deinen tatsächlichen Anbindungsinformationen.
|
||||
8. Wenn die Konfiguration korrekt ist, klicke auf Speichern, um die Erstellung des Kanals abzuschließen.
|
||||
|
||||
> Hinweis:
|
||||
> - **Channel Template** dient dazu, schnell eine Grundkonfiguration zu erzeugen;
|
||||
> - **Content JSON** ist der tatsächlich wirksame Konfigurationsinhalt des Kanals;
|
||||
> - Wenn keine Vorlage vollständig passt, kannst du die Konfiguration auch direkt manuell in **Content JSON** eintragen。
|
||||
|
||||
### 10.3.2 Skills hochladen
|
||||
|
||||
Skills werden verwendet, um OpenClaw wiederverwendbare Funktionsfähigkeiten bereitzustellen. Die Plattform unterstützt den Batch-Import von Skills durch das Hochladen von Archivdateien.
|
||||
|
||||

|
||||
|
||||
Gehe beim Hochladen von Skills wie folgt vor:
|
||||
|
||||
1. Öffne die Seite **Ressourcenverwaltung** und bleibe im Reiter **Ressourcen**.
|
||||
2. Wähle links unter den Ressourcentypen **Skills** aus.
|
||||
3. Klicke auf **Datei auswählen** und wähle ein lokales Skill-Archiv aus.
|
||||
4. Die aktuelle Seite unterstützt nur das Hochladen von **`.zip`**-Dateien.
|
||||
5. Nachdem die Datei ausgewählt wurde, klicke rechts auf **Skill-Archiv hochladen**.
|
||||
6. Das System analysiert den hochgeladenen Inhalt automatisch und importiert jedes Verzeichnis der ersten Ebene als einen Skill.
|
||||
7. Nach Abschluss des Uploads kannst du die importierten Skills in der Skill-Liste anzeigen.
|
||||
|
||||
> Hinweis:
|
||||
> - Es wird empfohlen, das Skill-Archiv im Voraus sauber nach Verzeichnissen zu strukturieren;
|
||||
> - Jedes Verzeichnis der ersten Ebene wird als eigenständiger Skill erkannt;
|
||||
> - Falls die Liste nach dem Upload nicht sofort aktualisiert wird, kannst du oben rechts auf der Seite manuell auf **Aktualisieren** klicken, um neu zu laden。
|
||||
---
|
||||
|
||||
<a id="sec-14"></a>
|
||||
## XI. Schnelle Referenz für Probleme und Gegenmaßnahmen
|
||||
|
||||
<a id="sec-14-storage"></a>
|
||||
### 11.1 Spezielle Behandlung von Speicherproblemen (PV/PVC)
|
||||
|
||||
Wenn der folgende Fehler angezeigt wird:
|
||||
|
||||
```text
|
||||
0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
bedeutet dies, dass der Cluster-Speicher nicht automatisch gebunden wurde. In diesem Fall können Sie lokale `hostPath`-PV/PVC im Stil eines x86-Einzelknotenservers manuell erstellen.
|
||||
|
||||
> Diese Lösung eignet sich für Einzelknoten-Servertests oder leichte Umgebungen. Für Produktionsumgebungen wird empfohlen, formelle Speicherlösungen wie NFS, Ceph oder Cloud-Disks zu verwenden.
|
||||
|
||||
#### 11.1.1 PV erstellen
|
||||
```bash
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: mysql-pv-local
|
||||
spec:
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Delete
|
||||
hostPath:
|
||||
path: /tmp/mysql-data
|
||||
EOF
|
||||
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: minio-pv-local
|
||||
spec:
|
||||
capacity:
|
||||
storage: 10Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Delete
|
||||
hostPath:
|
||||
path: /tmp/minio-data
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 11.1.2 PVC erstellen
|
||||
```bash
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: mysql-data
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
storageClassName: ""
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
volumeName: mysql-pv-local
|
||||
EOF
|
||||
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: minio-data
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
storageClassName: ""
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
volumeName: minio-pv-local
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 11.1.3 Pod neu erstellen
|
||||
```bash
|
||||
kubectl delete pod --all -n clawmanager-system
|
||||
```
|
||||
|
||||
#### 11.1.4 Status erneut beobachten
|
||||
```bash
|
||||
kubectl get pvc -n clawmanager-system
|
||||
kubectl get pods -n clawmanager-system -w
|
||||
```
|
||||
|
||||
Erwartetes Ergebnis:
|
||||
- `mysql-data` / `minio-data` sind `Bound`
|
||||
- `mysql` / `minio` / `skill-scanner` / `clawmanager-app` sind schließlich `Running`
|
||||
|
||||
---
|
||||
|
||||
| Symptom | Ursache | Behebung |
|
||||
| :--- | :--- | :--- |
|
||||
| Verbindung von `kubectl` zu `localhost:8080` wird abgelehnt | kubeconfig ist nicht konfiguriert | `KUBECONFIG` setzen oder in `~/.kube/config` kopieren |
|
||||
| Timeout beim Ziehen von Pod-Images | Netzwerk zu Docker Hub / GHCR ist instabil | Image-Beschleunigung oder Proxy konfigurieren |
|
||||
| MySQL / MinIO bleiben `Pending` | PVC ist nicht gebunden | `StorageClass` prüfen oder PV/PVC manuell erstellen |
|
||||
| Die Seite lässt sich im Browser nicht öffnen | NodePort ist nicht freigegeben / der `port-forward`-Prozess wurde nicht aufrechterhalten | Port freigeben oder das Weiterleitungs-Terminal geöffnet lassen |
|
||||
| Die Seite öffnet sich, aber eine OpenClaw-Instanz kann nicht erstellt werden | Sicherheitsmodell ist nicht konfiguriert | Zuerst unter **AI Gateway → Modelle** das Sicherheitsmodell konfigurieren und aktivieren |
|
||||
| Die Instanz bleibt lange im Status „Erstellen“ | Das erste Image-Pulling dauert lange / Speicher- oder Netzwerkproblem | Geduldig warten und bei Bedarf Pods und Events prüfen |
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-15"></a>
|
||||
## XII. Empfohlene abschließende Prüfreihenfolge (zur Selbstprüfung)
|
||||
1. `kubectl get nodes`
|
||||
2. `kubectl get storageclass`
|
||||
3. `kubectl get pods -n clawmanager-system`
|
||||
4. `kubectl get pvc -n clawmanager-system`
|
||||
5. `kubectl get svc -n clawmanager-system`
|
||||
6. Im Browser `https://<IP>:30443` öffnen
|
||||
7. Im Backend anmelden und die **Konfiguration des Sicherheitsmodells** abschließen
|
||||
8. Im Workspace eine **OpenClaw Desktop**-Instanz erstellen
|
||||
@@ -0,0 +1,782 @@
|
||||
[<- Back to README](../README.md)
|
||||
|
||||
# ClawManager Deployment and Quick Start Guide
|
||||
|
||||
## Table of Contents
|
||||
- [I. Environment and Goals](#sec-01)
|
||||
- [II. Deployment Options Overview](#sec-02)
|
||||
- [III. Option A: Deploy with k3s](#sec-03)
|
||||
- [IV. Option B: Deploy with Standard Kubernetes](#sec-04)
|
||||
- [V. Recommendations for Image Pulling on Mainland China Networks (Optional)](#sec-05)
|
||||
- [VI. Deploy ClawManager](#sec-06)
|
||||
- [VII. Launch the Web Page](#sec-08)
|
||||
- [VIII. Quick Start Guide (Initialize and Create an OpenClaw Instance After Login)](#sec-09)
|
||||
- [IX. Console and Other AI Gateway Features](#sec-12)
|
||||
- [X. Workspace Module Guide](#sec-13)
|
||||
- [XI. Quick Troubleshooting Reference](#sec-14)
|
||||
- [XII. Recommended Final Check Sequence (Use as a Self-Check)](#sec-15)
|
||||
|
||||
<a id="sec-01"></a>
|
||||
## I. Environment and Goals
|
||||
- **System assumption**: `x86_64` Linux server.
|
||||
- **Deployment goal**: Deploy **ClawManager**, complete secure model configuration in the Web UI, and then create and start an **OpenClaw Desktop** instance.
|
||||
- **Applicable scenarios**:
|
||||
- **Option A: k3s single-node/lightweight cluster deployment**
|
||||
- **Option B: standard Kubernetes cluster deployment** (such as kubeadm clusters, enterprise Kubernetes clusters, and cloud-hosted Kubernetes clusters)
|
||||
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-02"></a>
|
||||
## II. Deployment Options Overview
|
||||
You can deploy using either of the following methods:
|
||||
|
||||
### Option A: k3s deployment
|
||||
Suitable for single-node, test, or lightweight production environments.
|
||||
|
||||
### Option B: standard Kubernetes deployment
|
||||
Suitable for server environments that already have a standard Kubernetes cluster.
|
||||
|
||||
No matter which method you use, you will ultimately apply the same ClawManager manifest:
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-03"></a>
|
||||
## III. Option A: Deploy with k3s
|
||||
|
||||
### 3.1 Install k3s
|
||||
```bash
|
||||
curl -sfL https://get.k3s.io | sh -
|
||||
```
|
||||
|
||||
For mainland China networks, you can install using a mirror source:
|
||||
|
||||
```bash
|
||||
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
|
||||
```
|
||||
|
||||
### 3.2 Check service status
|
||||
```bash
|
||||
sudo systemctl status k3s --no-pager
|
||||
sudo systemctl enable k3s
|
||||
```
|
||||
|
||||
### 3.3 Configure kubectl
|
||||
If the current user cannot use `kubectl` directly, run:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.kube
|
||||
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
|
||||
sudo chown "$USER:$USER" ~/.kube/config
|
||||
```
|
||||
|
||||
Or set it temporarily:
|
||||
|
||||
```bash
|
||||
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
||||
```
|
||||
|
||||
### 3.4 Verify the cluster
|
||||
```bash
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
Normally, you should see the node in the `Ready` state.
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-04"></a>
|
||||
## IV. Option B: Deploy with Standard Kubernetes
|
||||
|
||||
> Applies to x86 server environments that already have an available Kubernetes cluster.
|
||||
|
||||
### 4.1 Prerequisite checks
|
||||
Confirm that the current `kubectl` is connected to the target cluster:
|
||||
|
||||
```bash
|
||||
kubectl get nodes
|
||||
kubectl get ns
|
||||
```
|
||||
|
||||
Normally, you should see at least one `Ready` node.
|
||||
|
||||
### 4.2 Check the default StorageClass
|
||||
MySQL and MinIO in ClawManager require persistent storage. It is recommended to first check whether the cluster has a default `StorageClass`:
|
||||
|
||||
```bash
|
||||
kubectl get storageclass
|
||||
```
|
||||
|
||||
If the cluster already has a default storage class, you can continue with deployment directly.
|
||||
|
||||
If there is **no default StorageClass**, it is recommended to prepare available PV / PVC resources or use a local path storage solution in advance; otherwise, you may later encounter:
|
||||
|
||||
```text
|
||||
pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-05"></a>
|
||||
## V. Recommendations for Image Pulling on Mainland China Networks (Optional)
|
||||
If the server accesses Docker Hub or other public registries slowly, you can configure image acceleration.
|
||||
|
||||
### 5.1 k3s scenario: configure `/etc/rancher/k3s/registries.yaml`
|
||||
```yaml
|
||||
mirrors:
|
||||
docker.io:
|
||||
endpoint:
|
||||
- "https://docker.m.daocloud.io"
|
||||
- "https://docker.nju.edu.cn"
|
||||
- "https://docker.1ms.run"
|
||||
quay.io:
|
||||
endpoint:
|
||||
- "https://quay.mirrors.ustc.edu.cn"
|
||||
gcr.io:
|
||||
endpoint:
|
||||
- "https://gcr.mirrors.ustc.edu.cn"
|
||||
k8s.gcr.io:
|
||||
endpoint:
|
||||
- "https://registry.aliyuncs.com/google_containers"
|
||||
```
|
||||
|
||||
After modifying it, run:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart k3s
|
||||
```
|
||||
|
||||
### 5.2 Verify image pulling
|
||||
```bash
|
||||
sudo k3s crictl pull docker.io/rancher/mirrored-pause:3.6
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-06"></a>
|
||||
## VI. Deploy ClawManager
|
||||
|
||||
### 6.1 Pull the project code
|
||||
```bash
|
||||
git clone https://github.com/Yuan-lab-LLM/ClawManager.git
|
||||
cd ClawManager
|
||||
```
|
||||
|
||||
### 6.2 Apply the deployment manifest
|
||||
Run in the repository root directory:
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
```
|
||||
|
||||
### 6.3 Check base resources
|
||||
```bash
|
||||
kubectl get ns
|
||||
kubectl get pods -n clawmanager-system
|
||||
kubectl get svc -n clawmanager-system
|
||||
```
|
||||
|
||||
Under normal circumstances, you will see the following components:
|
||||
- `clawmanager-app`
|
||||
- `mysql`
|
||||
- `minio`
|
||||
- `skill-scanner`
|
||||
|
||||
If you see the following error:
|
||||
|
||||
```text
|
||||
0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
it means MySQL / MinIO in cluster storage cannot start because the PVC is not bound. Please jump directly to the end of this document:
|
||||
|
||||
- [XI.1 Dedicated Handling for Storage Issues (PV/PVC)](#sec-14-storage)
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-08"></a>
|
||||
## VII. Launch the Web Page
|
||||
|
||||
### 7.1 Access via NodePort
|
||||
By default, the ClawManager frontend Service uses an HTTPS NodePort. You can check it first:
|
||||
|
||||
```bash
|
||||
kubectl get svc -n clawmanager-system
|
||||
```
|
||||
|
||||
If the frontend port is:
|
||||
|
||||
```text
|
||||
443:30443/TCP
|
||||
```
|
||||
|
||||
you can access it directly in the browser:
|
||||
|
||||
```text
|
||||
https://<serverIP>:30443
|
||||
```
|
||||
|
||||
|
||||
### 7.2 First HTTPS access note
|
||||
Since it usually uses a self-signed certificate, the browser may show an “unsafe” or certificate warning. Click:
|
||||
|
||||
```text
|
||||
Advanced → Continue to visit
|
||||
```
|
||||
|
||||
to enter the page.
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-09"></a>
|
||||
## VIII. Quick Start Guide (Initialize and Create an OpenClaw Instance After Login)
|
||||
|
||||
After completing the deployment above and successfully opening the management page, you still need to finish the following initialization steps before you can actually create and start an **OpenClaw** instance.
|
||||
|
||||
### 8.1 Log in to the system
|
||||
1. Open the deployed page, for example: `https://<nodeIP>:30443`.
|
||||
2. Log in with the default administrator account:
|
||||
- **Username**: `admin`
|
||||
- **Password**: `admin123`
|
||||
3. After first login, it is recommended to change the default password as needed.
|
||||
|
||||
|
||||
### 8.2 Configure the secure model (AI Gateway)
|
||||
|
||||

|
||||
After logging in, you need to configure an available **secure model** first so that it can be used uniformly by the platform and subsequent instances.
|
||||
|
||||
1. Click the left-side menu: **AI Gateway** → **Models**.
|
||||
2. Add a new model or edit an existing one, and fill in the following information according to the actual model service you connect:
|
||||
|
||||
* **Display Name**: Enter a name that is easy to identify.
|
||||
* **Vendor Template**: Choose the corresponding template based on your model service type; if you use a custom or compatible interface, you can select **Local / Internal**.
|
||||
* **Protocol**: Select the protocol according to the interface, such as **OpenAI Compatible** or another actual protocol.
|
||||
* **Base URL**: Enter the endpoint address provided by the model service.
|
||||
* **API Key**: Enter the valid key for the corresponding model service.
|
||||
* **Provider Model**: Enter the actual model name to call.
|
||||
* **Currency**: Fill it in according to your situation; if no billing display is needed, you can keep the default.
|
||||
* **Input Price / Output Price**: If billing statistics are not needed, you can first fill in `0`.
|
||||
3. Be sure to check the following before submission:
|
||||
|
||||
* **Secure Model**
|
||||
* **Enabled**
|
||||
4. Click **Save**.
|
||||
|
||||
> Note: The images on the page are only used to show the field positions and example format. The actual content should be based on the model service configuration you use.
|
||||
|
||||
|
||||
### 8.3 Create an OpenClaw instance
|
||||
After the model configuration is completed, create an **OpenClaw Desktop** instance.
|
||||
|
||||
1. Click **ADMIN** in the lower-left corner and switch to the **Workspace**.
|
||||
2. Click **Create Instance**.
|
||||
|
||||

|
||||
#### Step 1: Basic Information
|
||||
- Fill in the **Instance Name** (at least 3 characters).
|
||||
- The description is optional and may be left blank.
|
||||
- Click **Next**.
|
||||
|
||||

|
||||
#### Step 2: Select Type
|
||||
- Select **OpenClaw Desktop**.
|
||||
- Click **Next**.
|
||||
|
||||
|
||||

|
||||
#### Step 3: Configuration
|
||||
- You can directly choose the **Small** specification:
|
||||
- `2 CPU`
|
||||
- `4 GB RAM`
|
||||
- `20 GB Disk`
|
||||
- You can also modify the settings as needed in the custom configuration section below.
|
||||
- For the OpenClaw resource injection section, you can choose as needed:
|
||||
- **Manual Resources**
|
||||
- **Resource Bundle**
|
||||
- **Archive Import**
|
||||
- For first-time use, you can keep the default or select **Manual Resources**.
|
||||
- Finally, click **Create**.
|
||||
|
||||
### 8.4 First creation note
|
||||
- When creating an **OpenClaw** instance for the first time, the required images must be downloaded and the environment must be initialized, so it will take noticeably longer.
|
||||
- On slow networks or during the first image pull, the instance status may remain at **Creating** for a long time. Please wait patiently.
|
||||
- If it still does not start successfully after a long time, go back to the Kubernetes / Docker logs to troubleshoot image, PVC, gateway model, and other issues.
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-12"></a>
|
||||
## IX. Console and Other AI Gateway Features
|
||||
|
||||
In addition to model configuration, the platform homepage console and the AI Gateway also provide auditing, cost, and rule governance features, making it easier for administrators to centrally view cluster status, model call records, and security policy execution status.
|
||||
|
||||
### 9.1 Console Overview
|
||||
|
||||

|
||||
|
||||
The console homepage is used to display the overall running status of the current cluster and platform, allowing administrators to quickly understand resource usage and system health.
|
||||
|
||||
It mainly includes the following information:
|
||||
|
||||
- **Cluster Basic Information Overview**: Displays the total number of users, total number of instances, number of running instances, and total storage usage of the current platform.
|
||||
- **Node Overview**: Displays the current number of available nodes, as well as the main scheduling node information in the current cluster.
|
||||
- **Resource Request Status**: Displays the total amount of CPU, memory, and disk resources that have been requested by the current platform.
|
||||
- **Capacity Dashboard**: Shows overall resource capacity and current usage rates by node, CPU, memory, disk, and other dimensions, making it easier to determine whether the cluster still has available capacity.
|
||||
- **Infrastructure Table**: Used to view the status information of current nodes, resources, and the basic runtime environment.
|
||||
|
||||
> Note: The console is mainly used to view the overall platform resources, nodes, and instance operation summary, and is not used directly for specific OpenClaw operations inside an instance.
|
||||
|
||||
### 9.2 Security Center (skill-scanner)
|
||||
|
||||
The **Security Center** in the console is used to centrally view the scanning status of platform resources, historical reports, and scanner configurations. It relies on the backend **skill-scanner** service and can be used to perform static scanning, deep scanning, and supplementary LLM-based analysis on resources, thereby helping administrators identify potential risky content, abnormal resources, and suspicious skills.
|
||||
|
||||
The Security Center currently includes the following three modules:
|
||||
|
||||
* **Runtime Overview**
|
||||
* **Report History**
|
||||
* **Scanner Configuration**
|
||||
|
||||
#### 9.2.1 Runtime Overview
|
||||
|
||||

|
||||
|
||||
The “Runtime Overview” page is used to view the overall scanning status and risk distribution of the current platform, helping administrators quickly understand the current security posture.
|
||||
|
||||
The page mainly includes the following information:
|
||||
|
||||
* **Current Active Mode**: Displays whether the system is currently using **Quick Mode** or **Deep Mode**.
|
||||
* **Quick Scan / Full Scan**:
|
||||
|
||||
* **Quick Scan**: Suitable for handling newly added or modified resources, with a lighter scan scope and faster execution speed.
|
||||
* **Full Scan**: Suitable for periodically rescanning all resources to fully review the current state of all platform resources.
|
||||
* **Total Assets**: The number of resources currently included in the scanning scope of the Security Center.
|
||||
* **Completed Scans**: The number of resources that have completed scanning.
|
||||
* **High Risk / Medium Risk**: Statistics on the risk levels identified in the current scanning results.
|
||||
* **Scan Coverage**: Shows the proportion of assets that have actually completed scanning relative to the total assets on the platform.
|
||||
* **SAFE / High Risk / Pending / Failed**:
|
||||
|
||||
* **SAFE**: Number of resources that passed the scan and currently have no detected risks
|
||||
* **High Risk**: Number of risky assets that require immediate handling
|
||||
* **Pending**: Number of resources waiting for evidence collection or queued for scanning
|
||||
* **Failed**: Number of scan tasks that failed and need to be rerun
|
||||
* **Platform Asset Risk Trend**: Displays the current risk distribution of platform assets aggregated by risk level.
|
||||
* **Hot Assets**: Displays the most frequently used skills or high-frequency resources to help administrators quickly locate key assets.
|
||||
* **Scanner Status**: Displays the availability and connection status of the current skill-scanner, such as “Static scanning available” and “Connected”.
|
||||
* **Risk Alerts and Handling Suggestions**: Provides brief alert information based on the current risk posture.
|
||||
* **Recent Scan Tasks**: Displays recently executed scan records for easier review of recent scanning activities.
|
||||
|
||||
> Notes:
|
||||
>
|
||||
> * When the page shows “There are currently no high-risk or medium-risk assets,” it means no significant risks have been found in the current scan results.
|
||||
> * When the page shows “There are no scan task records yet,” it means no scans have been executed yet, or no valid scan results have been generated.
|
||||
|
||||
#### 9.2.2 Report History
|
||||
|
||||
The “Report History” page is used to view historical scan reports and related result records, making it easier for administrators to review past scan executions.
|
||||
|
||||
This module is mainly used for:
|
||||
|
||||
* Viewing the results of previously executed scan tasks
|
||||
* Comparing scan outputs at different points in time
|
||||
* Assisting in tracking security changes of a specific resource at different stages
|
||||
* Providing historical references for subsequent review, rescanning, and issue troubleshooting
|
||||
|
||||
> Notes:
|
||||
>
|
||||
> * “Report History” focuses more on archiving and reviewing historical results;
|
||||
> * “Runtime Overview” focuses more on current status and overall overview.
|
||||
|
||||
#### 9.2.3 Scanner Configuration
|
||||
|
||||

|
||||
|
||||
The “Scanner Configuration” page is used to manage the operating mode of skill-scanner, LLM-related settings, and the two scanning strategies: quick and deep. After saving, a Deployment rollout will be triggered, and the system will wait for the new configuration to take effect.
|
||||
|
||||
The page mainly includes the following content:
|
||||
|
||||
##### (1) skill-scanner Service Status
|
||||
|
||||
* Displays the namespace, Deployment name, and connection status of the current backend scanning service.
|
||||
* When the page shows **Connected** and **Static scanning available**, it means the basic static scanning capability is available.
|
||||
|
||||
##### (2) LLM Configuration
|
||||
|
||||
This section is used to configure the primary LLM so that the scanner can perform model-based analysis when needed.
|
||||
|
||||
The main fields include:
|
||||
|
||||
* **Primary LLM Integration**: The primary LLM configuration can be imported directly from a model already configured in **AI Gateway**.
|
||||
* **LLM API Key**: Corresponds to `SKILL_SCANNER_LLM_API_KEY`, used for authentication of the primary LLM analyzer.
|
||||
* **LLM Model**: Corresponds to `SKILL_SCANNER_LLM_MODEL`, for example a specific model name.
|
||||
* **LLM Base URL**: Corresponds to `SKILL_SCANNER_LLM_BASE_URL`, used to configure the primary LLM service endpoint.
|
||||
|
||||
##### (3) Meta LLM Integration
|
||||
|
||||
This section is used to configure the model used by the meta analyzer, typically for further summarization, aggregation, or secondary processing of findings.
|
||||
|
||||
The main fields include:
|
||||
|
||||
* **Meta LLM Integration**: The meta analyzer configuration can be imported directly from a model already configured in **AI Gateway**.
|
||||
* **Meta LLM API Key**: Corresponds to `SKILL_SCANNER_META_LLM_API_KEY`.
|
||||
* **Meta LLM Model**: Corresponds to `SKILL_SCANNER_META_LLM_MODEL`.
|
||||
* **Meta LLM Base URL**: Corresponds to `SKILL_SCANNER_META_LLM_BASE_URL`.
|
||||
|
||||
> Notes:
|
||||
>
|
||||
> * If no LLM is currently configured, the page will usually indicate that only static scanning is supported at the moment;
|
||||
> * Only after configuring both the primary LLM and the Meta LLM can the scanner enable more complete semantic analysis and summarization capabilities.
|
||||
|
||||
##### (4) Current Scanning Mode
|
||||
|
||||
The page supports selecting the scanning mode currently used by the platform:
|
||||
|
||||
* **Quick Mode**: Uses quick analyzers for scanning and is suitable for daily rapid checks.
|
||||
* **Deep Mode**: Uses deep analyzers for scanning and is suitable for more complete and in-depth analysis.
|
||||
|
||||
It should be noted that:
|
||||
|
||||
* Both “Quick Scan” and “Full Scan” on the Dashboard will use the scan strength selected here;
|
||||
* Their main difference lies in the scan scope, not in the analyzer depth itself.
|
||||
|
||||
##### (5) Quick / Deep Scanning Strategy
|
||||
|
||||
The lower part of the page maintains two sets of scanning strategy configurations, **Quick** and **Deep**, so that administrators can choose different analyzer combinations for different scenarios.
|
||||
|
||||
Each strategy includes the following configuration items:
|
||||
|
||||
* **Timeout (seconds)**: Sets the timeout for scan tasks under the current mode.
|
||||
* **Invocation Methods**: Different analyzers can be enabled or disabled as needed.
|
||||
|
||||
The currently visible analyzer types include:
|
||||
|
||||
* **Static**: YAML + YARA static rule scanning
|
||||
* **Bytecode**: Python bytecode integrity verification
|
||||
* **Pipeline**: Command chain and taint analysis
|
||||
* **Behavioral**: AST-based behavior and data flow analysis
|
||||
* **LLM**: Semantic analysis relying on external LLMs
|
||||
* **Meta**: Secondary summarization analysis of findings
|
||||
|
||||
These can usually be understood as follows:
|
||||
|
||||
* **Quick Mode**: Focuses on faster execution and is often used for daily incremental checks
|
||||
* **Deep Mode**: Can enable more analyzers and is suitable for deeper review and security auditing
|
||||
|
||||
##### (6) Save and Apply
|
||||
|
||||
The **Save and Apply** button in the upper-right corner is used to submit all current scanner-related configurations. After saving, it will:
|
||||
|
||||
* Update the quick / deep scanning strategies in ClawManager
|
||||
* Update the related environment variables of the skill-scanner Deployment
|
||||
* Wait for the rollout to complete before the new configuration officially takes effect
|
||||
|
||||
> Notes:
|
||||
>
|
||||
> * After modifying scanner configurations, it is recommended to wait until the configuration has fully taken effect before executing new scan tasks;
|
||||
> * If the connection status becomes abnormal after configuration changes, it is recommended to first check the AI Gateway model, LLM endpoint, Key, and Deployment rollout status.
|
||||
|
||||
### 9.3 AI Gateway Feature Overview
|
||||
|
||||
In addition to model configuration, AI Gateway also includes the following modules:
|
||||
|
||||
* **AI Audit**: View model invocation traces, request and response payloads, hit risks, routing decisions, and invocation details.
|
||||
* **Cost**: View token usage, estimated cost, internal cost, and trend statistics.
|
||||
* **Risk Control Rules**: Configure sensitive detection rules to control whether matched content is allowed through or routed to the security model.
|
||||
|
||||
### 9.4 Cost Module
|
||||
|
||||
The Cost page is used to count the cost and token usage of platform model calls, helping administrators understand overall consumption.
|
||||
|
||||

|
||||
|
||||
The page mainly includes the following content:
|
||||
|
||||
* **Input Tokens**: Statistics of the total input prompt tokens.
|
||||
* **Output Tokens**: Statistics of the total tokens generated by the model.
|
||||
* **Estimated Cost**: Cost estimated according to the Provider's unit price.
|
||||
* **Internal Cost**: Internal accounting cost related to the security model.
|
||||
* **Daily Cost Trend**: View estimated cost and token changes within the current window over the last 7 days.
|
||||
* **User Summary**: Aggregated usage and cost by user.
|
||||
* **Instance Summary**: Aggregated usage and cost by instance.
|
||||
* **Recent Cost Records**: Supports searching and paginated viewing of cost records by Trace, user, model, and other conditions, and can further jump to audit details.
|
||||
|
||||
> Note: If no model invocation records have been generated yet, input tokens, output tokens, cost, and trend charts may all be 0, which is normal.
|
||||
|
||||
### 9.5 AI Audit Module
|
||||
|
||||
The AI Audit page is used to view recent managed model invocation records, helping administrators troubleshoot model invocations, token usage, and routing results.
|
||||
|
||||

|
||||
|
||||
The main functions include:
|
||||
|
||||
* **Recent AI Trace**: View recent model invocation chains.
|
||||
* **Trace List**: View recent managed traces in a unified table.
|
||||
* **Search and Filtering**: Supports searching by Trace, request content, user, model, and other conditions.
|
||||
* **Status Filtering**: Supports viewing different invocation results by status.
|
||||
* **Model Filtering**: Supports filtering corresponding invocation records by model.
|
||||
* **Pagination and Refresh**: Supports paginated viewing and manual refresh of the latest audit results.
|
||||
|
||||
> Note: If the page shows “No AI audit records yet,” it means that no actual model invocation requests have been generated yet.
|
||||
|
||||
### 9.6 Risk Control Rules Module
|
||||
|
||||
The Risk Control Rules page is used to configure sensitive content detection rules and determine the action to be taken after a rule is hit.
|
||||
|
||||

|
||||
|
||||
This module mainly supports:
|
||||
|
||||
* **Rule List Management**: View all rules and their enabled status.
|
||||
* **Rule Category View**: Supports viewing rules by categories such as personal information, company information, customer business, security credentials, finance and legal, politically sensitive, and custom.
|
||||
* **Rule Field Configuration**: Supports setting rule ID, display name, severity level, action, order, regex pattern, and description.
|
||||
* **Rule Action Control**: When a rule is hit, it can be configured to allow the content or route it to the security model.
|
||||
* **Batch Enable / Disable**: Supports batch adjustment of rule status.
|
||||
* **Rule Test Console**: Paste sample text to test which enabled rules or draft rules will be triggered.
|
||||
|
||||
The built-in rule examples currently include, but are not limited to:
|
||||
|
||||
* Personal information: email address, mobile number, ID card number, passport number, bank card context, address, resume content, etc.
|
||||
* Company information: internal IP, internal domain name, host naming, Kubernetes Service DNS, project code name, organizational structure, salary / HR information, etc.
|
||||
* Customer business: customer list, contracts / quotations, invoice tax IDs, CRM / ticket data, etc.
|
||||
* Security credentials: private keys, API keys, tokens, JWT, Cookie / Session, database connection strings, kubeconfig, environment variable secrets, etc.
|
||||
* Finance and legal: budget, profit, revenue, legal opinions, litigation, NDA, etc.
|
||||
* Politically sensitive: political institutions, military/national security, extremist and violent expressions, etc.
|
||||
|
||||
> Note: Default rules already cover many common sensitive information detection scenarios. In actual use, rules can be further added, adjusted, or disabled according to business requirements.
|
||||
---
|
||||
|
||||
<a id="sec-13"></a>
|
||||
## X. Workspace Module Guide
|
||||
|
||||
The Workspace is the main operating area after a regular user enters the platform. It is used to view personal resource quotas, create instances, manage instances, and maintain OpenClaw-related resources. This module is more oriented toward daily use and operations than the administrator-side “Console Overview”.
|
||||
|
||||
### 10.1 Workspace Home
|
||||

|
||||
The Workspace home page is used to display the instance and resource usage summary of the current account, and mainly includes the following contents:
|
||||
|
||||
- **My Instances**: Displays the number of instances created under the current account.
|
||||
- **Running**: Displays the number of instances currently running.
|
||||
- **Used Storage**: Displays the amount of storage space currently occupied by the account.
|
||||
- **My Resource Quotas**: Shows the available quota information of the current account, including the number of instances, maximum CPU cores, maximum memory, maximum storage, and maximum GPU count.
|
||||
- **Quick Actions**: Provides two entry points: **Create New Instance** and **View All Instances**, so you can get started quickly with the platform.
|
||||
|
||||
> Note: When the page shows “No instances yet”, you can directly click **Create New Instance** to start creating the first OpenClaw Desktop instance.
|
||||
|
||||
### 10.2 My Instances
|
||||
|
||||
The **My Instances** page is used to centrally view and manage all instances created under the current account. This page mainly carries the instance management functions.
|
||||

|
||||
Common supported operations include:
|
||||
|
||||
- **View instance status**: Check whether the instance is being created, running, stopped, or in an abnormal state.
|
||||
- **Open instance details**: View basic instance information, resource configuration, and runtime status.
|
||||
- **Stop instance**: When the instance is abnormal or the environment needs to be reloaded, you can perform a stop operation.
|
||||
- **Delete instance**: When the instance is no longer needed, you can delete it directly to release the corresponding CPU, memory, and storage resources.
|
||||
|
||||
> Note: After deleting an instance, the related resources of the instance will be cleaned up together. Before executing, make sure that the data and configuration inside it have been backed up.
|
||||
|
||||
### 10.3 Resource Management
|
||||
|
||||
The **Resource Management** page is used to maintain the OpenClaw resource content available for use, making it easy to inject and use after an instance starts.
|
||||

|
||||
The page mainly includes the following parts:
|
||||
|
||||
- **Resources**: View and maintain available resource entries.
|
||||
- **Resource Bundles**: Combine multiple resources into reusable bundles to facilitate batch injection.
|
||||
- **Injection Records**: View resource injection history and execution status.
|
||||
|
||||
On the left side of the Resource Management page, you can also manage resources by type. The currently visible types on the page include:
|
||||
|
||||
- **Channels**
|
||||
- **Skills**
|
||||
- **Agents (coming soon)**
|
||||
- **Scheduled Tasks (coming soon)**
|
||||
|
||||
The upper-right corner of the page supports:
|
||||
|
||||
- **Refresh**: Reload the current resource list.
|
||||
- **New**: Create a new resource item.
|
||||
|
||||
> Note: Resource Management is mainly used to prepare OpenClaw resource content that can be used after the instance starts, and does not directly replace the instance creation process. When creating an instance, resources can be injected through methods such as **Manual Resources**, **Resource Bundles**, and **Archive Import**.
|
||||
|
||||
|
||||
### 10.3.1 Create a Channel
|
||||
|
||||
A "Channel" is used to configure how OpenClaw connects to external messaging platforms or access endpoints, such as Telegram, Slack, and Feishu / Lark.
|
||||
|
||||

|
||||
|
||||
To create a channel, follow these steps:
|
||||
|
||||
1. Go to the **Resource Management** page and stay on the **Resources** tab.
|
||||
2. In the resource type list on the left, select **Channel**.
|
||||
3. Click **New** on the right side of the page to open the "Create Resource" dialog.
|
||||
4. Fill in the basic information in the dialog:
|
||||
- **Type**: select **Channel**
|
||||
- **Resource Key**: enter the unique identifier for this channel. It is recommended to use an easy-to-recognize and non-duplicated English name or combined identifier
|
||||
- **Name**: enter the display name of the channel
|
||||
- **Tags**: optional, used for classification and search
|
||||
- **Description**: optional, used to supplement the purpose of the channel
|
||||
- **Enabled**: it is recommended to keep this checked
|
||||
5. In the **Channel Template** section, choose an initial template. The currently supported templates include:
|
||||
- `Telegram`
|
||||
- `Slack`
|
||||
- `Feishu / Lark`
|
||||
|
||||
6. After selecting a template, click **Load Template**. The system will automatically write the basic configuration of the corresponding template into the **Content JSON** section below.
|
||||
7. Based on your actual integration information, continue to supplement or modify the fields in **Content JSON**.
|
||||
8. After confirming the configuration is correct, click Save to complete channel creation.
|
||||
|
||||
> Notes:
|
||||
> - **Channel Template** helps you quickly generate a basic configuration;
|
||||
> - **Content JSON** is the final effective channel configuration content;
|
||||
> - If there is no fully matching template, you can also manually fill in the configuration directly in **Content JSON**.
|
||||
|
||||
### 10.3.2 Upload Skills
|
||||
|
||||
Skills are used to provide reusable functional capabilities for OpenClaw. The platform supports batch importing skills by uploading archive files.
|
||||
|
||||

|
||||
|
||||
To upload skills, follow these steps:
|
||||
|
||||
1. Go to the **Resource Management** page and stay on the **Resources** tab.
|
||||
2. In the resource type list on the left, select **Skills**.
|
||||
3. Click **Choose File** and select a local skill archive.
|
||||
4. The current page only supports uploading **`.zip`** files.
|
||||
5. After selecting the file, click **Upload Skill Archive** on the right.
|
||||
6. The system will automatically parse the uploaded content and import each first-level directory as one skill.
|
||||
7. After the upload is complete, you can view the imported skills in the skill list.
|
||||
|
||||
> Notes:
|
||||
> - It is recommended to organize the skill archive in advance by directory;
|
||||
> - Each first-level directory will be recognized as an independent skill;
|
||||
> - If the list is not refreshed immediately after upload, you can manually click **Refresh** in the upper-right corner of the page to reload it.
|
||||
---
|
||||
|
||||
<a id="sec-14"></a>
|
||||
## XI. Quick Troubleshooting Reference
|
||||
|
||||
<a id="sec-14-storage"></a>
|
||||
### 11.1 Dedicated Handling for Storage Issues (PV/PVC)
|
||||
|
||||
If you see the following error:
|
||||
|
||||
```text
|
||||
0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
it means the cluster storage was not bound automatically. In this case, you can manually create local `hostPath` PV/PVC in the x86 single-node server style.
|
||||
|
||||
> This solution is suitable for single-node server testing or lightweight environments. For production environments, it is recommended to use formal storage such as NFS, Ceph, or cloud disks instead.
|
||||
|
||||
#### 11.1.1 Create PV
|
||||
```bash
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: mysql-pv-local
|
||||
spec:
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Delete
|
||||
hostPath:
|
||||
path: /tmp/mysql-data
|
||||
EOF
|
||||
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: minio-pv-local
|
||||
spec:
|
||||
capacity:
|
||||
storage: 10Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Delete
|
||||
hostPath:
|
||||
path: /tmp/minio-data
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 11.1.2 Create PVC
|
||||
```bash
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: mysql-data
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
storageClassName: ""
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
volumeName: mysql-pv-local
|
||||
EOF
|
||||
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: minio-data
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
storageClassName: ""
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
volumeName: minio-pv-local
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 11.1.3 Recreate Pod
|
||||
```bash
|
||||
kubectl delete pod --all -n clawmanager-system
|
||||
```
|
||||
|
||||
#### 11.1.4 Observe status again
|
||||
```bash
|
||||
kubectl get pvc -n clawmanager-system
|
||||
kubectl get pods -n clawmanager-system -w
|
||||
```
|
||||
|
||||
Expected results:
|
||||
- `mysql-data` / `minio-data` are `Bound`
|
||||
- `mysql` / `minio` / `skill-scanner` / `clawmanager-app` are finally `Running`
|
||||
|
||||
---
|
||||
|
||||
| Symptom | Cause | Fix |
|
||||
| :--- | :--- | :--- |
|
||||
| `kubectl` connection to `localhost:8080` is refused | kubeconfig is not configured | Set `KUBECONFIG` or copy it to `~/.kube/config` |
|
||||
| Pod image pull timeout | Network to Docker Hub / GHCR is unstable | Configure image acceleration or a proxy |
|
||||
| MySQL / MinIO remain `Pending` | PVC not bound | Check the `StorageClass` or manually create PV/PVC |
|
||||
| The browser cannot open the page | NodePort is not open / the `port-forward` process was not kept running | Open the port or keep the forwarding terminal running |
|
||||
| The page opens but an OpenClaw instance cannot be created | Secure model is not configured | First configure and enable the secure model under **AI Gateway → Models** |
|
||||
| The instance remains “Creating” for a long time | The first image pull takes a long time / storage or network issues | Wait patiently, and if necessary check Pods and events |
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-15"></a>
|
||||
## XII. Recommended Final Check Sequence (Use as a Self-Check)
|
||||
1. `kubectl get nodes`
|
||||
2. `kubectl get storageclass`
|
||||
3. `kubectl get pods -n clawmanager-system`
|
||||
4. `kubectl get pvc -n clawmanager-system`
|
||||
5. `kubectl get svc -n clawmanager-system`
|
||||
6. Open `https://<IP>:30443` in a browser
|
||||
7. Log in to the backend and complete **secure model configuration**
|
||||
8. Create an **OpenClaw Desktop** instance in the Workspace
|
||||
@@ -0,0 +1,781 @@
|
||||
[<- README トップへ戻る](../README.ja.md)
|
||||
|
||||
# ClawManager デプロイとクイックスタートガイド
|
||||
|
||||
## 目次
|
||||
- [一、環境と目標](#sec-01)
|
||||
- [二、デプロイ方式の概要](#sec-02)
|
||||
- [三、方式 A:k3s を使用したデプロイ](#sec-03)
|
||||
- [四、方式 B:標準 Kubernetes を使用したデプロイ](#sec-04)
|
||||
- [五、中国国内ネットワークでのイメージ取得に関する推奨事項(任意)](#sec-05)
|
||||
- [六、ClawManager のデプロイ](#sec-06)
|
||||
- [七、Web ページの起動](#sec-08)
|
||||
- [八、クイックスタートガイド(ログイン後に初期化して OpenClaw インスタンスを作成)](#sec-09)
|
||||
- [九、コンソールと AI Gateway のその他の機能説明](#sec-12)
|
||||
- [十、ワークスペースモジュールの説明](#sec-13)
|
||||
- [十一、問題と対処のクイックリファレンス](#sec-14)
|
||||
- [十二、推奨される最終確認手順(セルフチェック用)](#sec-15)
|
||||
|
||||
<a id="sec-01"></a>
|
||||
## 一、環境と目標
|
||||
- **想定システム**:`x86_64` アーキテクチャの Linux サーバー。
|
||||
- **デプロイ目標**:**ClawManager** をデプロイし、Web ページ上でセキュアモデル設定を完了した後、**OpenClaw Desktop** インスタンスを作成して起動すること。
|
||||
- **適用シナリオ**:
|
||||
- **方式 A:k3s 単一ノード / 軽量クラスター構成**
|
||||
- **方式 B:標準 Kubernetes クラスター構成**(kubeadm クラスター、企業内 K8s クラスター、クラウド上の K8s クラスターなど)
|
||||
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-02"></a>
|
||||
## 二、デプロイ方式の概要
|
||||
以下の 2 つの方式のいずれかでデプロイできます:
|
||||
|
||||
### 方式 A:k3s デプロイ
|
||||
単一ノード、テスト環境、または軽量な本番環境に適しています。
|
||||
|
||||
### 方式 B:標準 Kubernetes デプロイ
|
||||
標準 Kubernetes クラスターをすでに備えているサーバー環境に適しています。
|
||||
|
||||
どの方式を使用しても、最終的には同じ ClawManager マニフェストを適用します:
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-03"></a>
|
||||
## 三、方式 A:k3s を使用したデプロイ
|
||||
|
||||
### 3.1 k3s のインストール
|
||||
```bash
|
||||
curl -sfL https://get.k3s.io | sh -
|
||||
```
|
||||
|
||||
中国国内ネットワークでは、ミラーソースを使用してインストールできます:
|
||||
|
||||
```bash
|
||||
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
|
||||
```
|
||||
|
||||
### 3.2 サービス状態の確認
|
||||
```bash
|
||||
sudo systemctl status k3s --no-pager
|
||||
sudo systemctl enable k3s
|
||||
```
|
||||
|
||||
### 3.3 kubectl の設定
|
||||
現在のユーザーで `kubectl` を直接使用できない場合は、次を実行します:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.kube
|
||||
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
|
||||
sudo chown "$USER:$USER" ~/.kube/config
|
||||
```
|
||||
|
||||
または一時的に指定します:
|
||||
|
||||
```bash
|
||||
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
||||
```
|
||||
|
||||
### 3.4 クラスターの検証
|
||||
```bash
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
通常、ノードが `Ready` 状態で表示されます。
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-04"></a>
|
||||
## 四、方式 B:標準 Kubernetes を使用したデプロイ
|
||||
|
||||
> すでに利用可能な Kubernetes クラスターがある x86 サーバー環境に適用されます。
|
||||
|
||||
### 4.1 前提条件の確認
|
||||
現在の `kubectl` が対象クラスターに接続されていることを確認します:
|
||||
|
||||
```bash
|
||||
kubectl get nodes
|
||||
kubectl get ns
|
||||
```
|
||||
|
||||
通常、少なくとも 1 つの `Ready` ノードが表示されます。
|
||||
|
||||
### 4.2 デフォルト StorageClass の確認
|
||||
ClawManager の MySQL と MinIO では永続ストレージが必要です。まず、クラスターにデフォルト `StorageClass` があるか確認することを推奨します:
|
||||
|
||||
```bash
|
||||
kubectl get storageclass
|
||||
```
|
||||
|
||||
クラスターにデフォルトのストレージクラスがすでにある場合は、そのままデプロイを続行できます。
|
||||
|
||||
**デフォルト StorageClass がない** 場合は、事前に利用可能な PV / PVC を準備するか、ローカルパスストレージ方式を使用することを推奨します。そうしないと、後続で次のようなエラーが発生する可能性があります:
|
||||
|
||||
```text
|
||||
pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-05"></a>
|
||||
## 五、中国国内ネットワークでのイメージ取得に関する推奨事項(任意)
|
||||
サーバーから Docker Hub またはその他の公開レジストリへのアクセスが遅い場合は、イメージ高速化を設定できます。
|
||||
|
||||
### 5.1 k3s シナリオ:`/etc/rancher/k3s/registries.yaml` を設定する
|
||||
```yaml
|
||||
mirrors:
|
||||
docker.io:
|
||||
endpoint:
|
||||
- "https://docker.m.daocloud.io"
|
||||
- "https://docker.nju.edu.cn"
|
||||
- "https://docker.1ms.run"
|
||||
quay.io:
|
||||
endpoint:
|
||||
- "https://quay.mirrors.ustc.edu.cn"
|
||||
gcr.io:
|
||||
endpoint:
|
||||
- "https://gcr.mirrors.ustc.edu.cn"
|
||||
k8s.gcr.io:
|
||||
endpoint:
|
||||
- "https://registry.aliyuncs.com/google_containers"
|
||||
```
|
||||
|
||||
変更後に実行します:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart k3s
|
||||
```
|
||||
|
||||
### 5.2 イメージ取得の確認
|
||||
```bash
|
||||
sudo k3s crictl pull docker.io/rancher/mirrored-pause:3.6
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-06"></a>
|
||||
## 六、ClawManager のデプロイ
|
||||
|
||||
### 6.1 プロジェクトコードの取得
|
||||
```bash
|
||||
git clone https://github.com/Yuan-lab-LLM/ClawManager.git
|
||||
cd ClawManager
|
||||
```
|
||||
|
||||
### 6.2 デプロイマニフェストの適用
|
||||
リポジトリのルートディレクトリで実行します:
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
```
|
||||
|
||||
### 6.3 基本リソースの確認
|
||||
```bash
|
||||
kubectl get ns
|
||||
kubectl get pods -n clawmanager-system
|
||||
kubectl get svc -n clawmanager-system
|
||||
```
|
||||
|
||||
通常、以下のコンポーネントが表示されます:
|
||||
- `clawmanager-app`
|
||||
- `mysql`
|
||||
- `minio`
|
||||
- `skill-scanner`
|
||||
|
||||
次のエラーが表示された場合:
|
||||
|
||||
```text
|
||||
0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
これは、クラスターのストレージで MySQL / MinIO が PVC 未バインドのため起動できないことを意味します。文末の次の項目へ直接移動してください:
|
||||
|
||||
- [十一.1 ストレージ問題の専用対応(PV/PVC)](#sec-14-storage)
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-08"></a>
|
||||
## 七、Web ページの起動
|
||||
|
||||
### 7.1 NodePort 経由でアクセス
|
||||
ClawManager のフロントエンド Service はデフォルトで HTTPS NodePort を使用します。まず確認します:
|
||||
|
||||
```bash
|
||||
kubectl get svc -n clawmanager-system
|
||||
```
|
||||
|
||||
フロントエンドのポートが次の場合:
|
||||
|
||||
```text
|
||||
443:30443/TCP
|
||||
```
|
||||
|
||||
ブラウザから直接次へアクセスできます:
|
||||
|
||||
```text
|
||||
https://<サーバーIP>:30443
|
||||
```
|
||||
|
||||
|
||||
### 7.2 初回 HTTPS アクセス時の説明
|
||||
通常は自己署名証明書のため、ブラウザに「安全ではない」または証明書警告が表示される場合があります。以下をクリックします:
|
||||
|
||||
```text
|
||||
詳細設定 → 続行してアクセス
|
||||
```
|
||||
|
||||
これでページに入れます。
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-09"></a>
|
||||
## 八、クイックスタートガイド(ログイン後に初期化して OpenClaw インスタンスを作成)
|
||||
|
||||
上記のデプロイを完了して管理ページを正常に開いた後、実際に **OpenClaw** インスタンスを作成して起動するには、さらに以下の初期化手順を完了する必要があります。
|
||||
|
||||
### 8.1 システムにログイン
|
||||
1. デプロイ後のページを開きます。例:`https://<ノードIP>:30443`。
|
||||
2. デフォルトの管理者アカウントでログインします:
|
||||
- **ユーザー名**:`admin`
|
||||
- **パスワード**:`admin123`
|
||||
3. 初回ログイン後は、必要に応じてデフォルトパスワードを変更することを推奨します。
|
||||
|
||||
|
||||
### 8.2 セキュアモデルの設定(AI Gateway)
|
||||
|
||||

|
||||
ログイン後、まず利用可能な **セキュアモデル** を設定する必要があります。これはプラットフォームおよび後続インスタンスで共通して使用されます。
|
||||
|
||||
1. 左側メニューの **AI Gateway** → **モデル** をクリックします。
|
||||
2. 新しいモデルを追加するか既存モデルを編集し、接続するモデルサービスに応じて次の情報を入力します:
|
||||
|
||||
* **表示名**:識別しやすい名前を入力します。
|
||||
* **ベンダーテンプレート**:モデルサービスの種類に応じて該当テンプレートを選択します。カスタムまたは互換インターフェースを使用する場合は **Local / Internal** を選択できます。
|
||||
* **プロトコル**:インターフェースのプロトコルに応じて、**OpenAI Compatible** またはその他の実際のプロトコルを選択します。
|
||||
* **Base URL**:モデルサービスが提供するインターフェースアドレスを入力します。
|
||||
* **API Key**:対応するモデルサービスの有効なキーを入力します。
|
||||
* **Provider Model**:実際に呼び出すモデル名を入力します。
|
||||
* **通貨**:実際の状況に応じて入力します。課金表示が不要な場合はデフォルトのままでも構いません。
|
||||
* **入力価格 / 出力価格**:課金統計を行わない場合は `0` を入力できます。
|
||||
3. 送信前に必ず次にチェックを入れてください:
|
||||
|
||||
* **セキュアモデル**
|
||||
* **有効化**
|
||||
4. **保存** をクリックします。
|
||||
|
||||
> 注:ページ内の画像は、入力位置と例示形式を示すためのものです。実際の内容は、使用するモデルサービスの設定に従ってください。
|
||||
|
||||
|
||||
### 8.3 OpenClaw インスタンスを作成
|
||||
モデル設定の完了後に、**OpenClaw Desktop** インスタンスを作成します。
|
||||
|
||||
1. 左下の **ADMIN** をクリックし、**ワークスペース** に切り替えます。
|
||||
2. **インスタンスを作成** をクリックします。
|
||||
|
||||

|
||||
#### ステップ 1:基本情報
|
||||
- **インスタンス名** を入力します(3 文字以上)。
|
||||
- 説明は任意で、空欄でも構いません。
|
||||
- **次へ** をクリックします。
|
||||
|
||||

|
||||
#### ステップ 2:タイプを選択
|
||||
- **OpenClaw Desktop** を選択します。
|
||||
- **次へ** をクリックします。
|
||||
|
||||
|
||||

|
||||
#### ステップ 3:設定
|
||||
- **Small** 仕様を直接選択できます:
|
||||
- `2 CPU`
|
||||
- `4 GB RAM`
|
||||
- `20 GB Disk`
|
||||
- 下部のカスタム設定で必要に応じて変更することもできます。
|
||||
- OpenClaw リソース注入セクションでは、必要に応じて以下を選択できます:
|
||||
- **手動リソース**
|
||||
- **リソースパック**
|
||||
- **アーカイブ導入**
|
||||
- 初回利用時は、デフォルトのままにするか **手動リソース** を選択してください。
|
||||
- 最後に **作成** をクリックします。
|
||||
|
||||
### 8.4 初回作成時の説明
|
||||
- **OpenClaw** インスタンスを初めて作成するときは、必要なイメージのダウンロードと環境の初期化が行われるため、明らかに時間がかかります。
|
||||
- ネットワークが遅い場合や初回のイメージ取得時には、インスタンスの状態が長時間 **作成中** と表示されることがあります。しばらくお待ちください。
|
||||
- 長時間経っても起動しない場合は、Kubernetes / Docker ログに戻って、イメージ、PVC、Gateway モデルなどの問題を確認してください。
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-12"></a>
|
||||
## 九、コンソールと AI Gateway のその他の機能説明
|
||||
|
||||
モデル設定に加えて、プラットフォームのホームページコンソールと AI Gateway には、監査、コスト、ルールガバナンスなどの機能もあり、管理者がクラスター状態、モデル呼び出し記録、およびセキュリティポリシーの実行状況を一元的に確認しやすくなっています。
|
||||
|
||||
### 9.1 コンソール概要
|
||||
|
||||

|
||||
|
||||
コンソールのホームページは、現在のクラスターとプラットフォームの全体的な稼働状況を表示し、管理者がリソース使用状況とシステム健全性を素早く把握できるようにするためのものです。
|
||||
|
||||
主に以下の情報が含まれます:
|
||||
|
||||
- **クラスター基本情報の概要**:現在のプラットフォームのユーザー総数、インスタンス総数、稼働中インスタンス数、総ストレージ使用量を表示します。
|
||||
- **ノード概要**:現在利用可能なノード数と、現在のクラスターにおける主要スケジューリングノード情報を表示します。
|
||||
- **リソース申請状況**:現在のプラットフォームで申請済みの CPU、メモリ、ディスクリソースの総量を表示します。
|
||||
- **容量ダッシュボード**:ノード、CPU、メモリ、ディスクなどの観点で全体リソース容量と現在の使用率を表示し、クラスターに利用可能な余裕があるかを判断しやすくします。
|
||||
- **インフラストラクチャテーブル**:現在のノード、リソース、および基本実行環境の状態情報を表示するために使用します。
|
||||
|
||||
> 注:コンソールは主にプラットフォーム全体のリソース、ノード、インスタンス稼働状況を確認するためのものであり、特定インスタンス内の OpenClaw 操作には直接使用しません。
|
||||
|
||||
### 9.2 セキュリティセンター(skill-scanner)
|
||||
|
||||
コンソールの **セキュリティセンター** は、プラットフォーム資産のスキャン状態、履歴レポート、およびスキャナー設定を一元的に確認するために使用されます。これはバックエンドの **skill-scanner** サービスに依存して動作し、資産に対する静的スキャン、深度スキャン、および LLM に基づく補足分析を行うことで、管理者が潜在的なリスクコンテンツ、異常な資産、および疑わしいスキルを識別できるよう支援します。
|
||||
|
||||
セキュリティセンターには現在、主に以下の 3 つのモジュールがあります。
|
||||
|
||||
* **実行概要**
|
||||
* **レポート履歴**
|
||||
* **スキャナー設定**
|
||||
|
||||
#### 9.2.1 実行概要
|
||||
|
||||

|
||||
|
||||
「実行概要」ページは、現在のプラットフォーム全体のスキャン状況とリスク分布を確認するために使用され、管理者が現在のセキュリティ状況を迅速に把握するのに役立ちます。
|
||||
|
||||
ページには主に以下の内容が含まれます。
|
||||
|
||||
* **現在有効なモード**:現在使用されているのが **Quick モード** か **Deep モード** かを表示します。
|
||||
* **クイックスキャン / 全量スキャン**:
|
||||
|
||||
* **クイックスキャン**:新規追加または変更された資産の処理に適しており、スキャン範囲が軽く、実行速度が速いです。
|
||||
* **全量スキャン**:定期的にすべての資産を再スキャンし、プラットフォーム上の全資産の状態を完全に再確認するのに適しています。
|
||||
* **資産総数**:現在セキュリティセンターのスキャン対象となっている資産数。
|
||||
* **スキャン完了数**:スキャンが完了した資産数。
|
||||
* **高リスク / 中リスク**:現在のスキャン結果で識別されたリスクレベルの統計。
|
||||
* **スキャンカバレッジ**:実際にスキャンが完了した資産数が、プラットフォーム総資産数に占める割合を表示します。
|
||||
* **SAFE / 高リスク / 待機中 / 失敗**:
|
||||
|
||||
* **SAFE**:スキャンに合格し、現時点でリスクが検出されていない資産数
|
||||
* **高リスク**:直ちに対処が必要なリスク資産数
|
||||
* **待機中**:証拠取得待ち、またはスキャン待ちキューに入っている資産数
|
||||
* **失敗**:スキャン実行に失敗し、再実行が必要な資産数
|
||||
* **プラットフォーム資産リスク動向**:リスクレベル別に集計した現在のプラットフォーム資産のリスク分布を表示します。
|
||||
* **ホット資産**:最も頻繁に使用されているスキルや高頻度利用資産を表示し、管理者が重点資産を素早く特定できるようにします。
|
||||
* **スキャナー状態**:現在の skill-scanner の利用可否と接続状態を表示します。たとえば「静的スキャン利用可」「接続済み」などです。
|
||||
* **リスク通知と対処提案**:現在のリスク状況に応じた簡潔な通知情報を表示します。
|
||||
* **最近のスキャンタスク**:最近実行されたスキャン記録を表示し、直近のスキャン活動を振り返りやすくします。
|
||||
|
||||
> 説明:
|
||||
>
|
||||
> * ページに「現在、高リスクまたは中リスク資産はありません」と表示される場合、現在のスキャン結果では重大なリスクが見つかっていないことを意味します。
|
||||
> * ページに「まだスキャンタスク記録がありません」と表示される場合、まだスキャンが実行されていない、または有効なスキャン結果が生成されていないことを意味します。
|
||||
|
||||
#### 9.2.2 レポート履歴
|
||||
|
||||
「レポート履歴」ページは、過去のスキャンレポートおよび関連結果記録を確認するために使用され、管理者が過去のスキャン実行状況を振り返りやすくします。
|
||||
|
||||
このモジュールは主に以下の用途で使用されます。
|
||||
|
||||
* 過去に実行されたスキャンタスクの結果を確認する
|
||||
* 異なる時点でのスキャン出力を比較する
|
||||
* 特定資産の各段階におけるセキュリティ変化を補助的に追跡する
|
||||
* 今後のレビュー、再スキャン、および問題切り分けのための履歴的根拠を提供する
|
||||
|
||||
> 説明:
|
||||
>
|
||||
> * 「レポート履歴」は履歴結果の保存と追跡により重点があります;
|
||||
> * 「実行概要」は現在状態と全体概要により重点があります。
|
||||
|
||||
#### 9.2.3 スキャナー設定
|
||||
|
||||

|
||||
|
||||
「スキャナー設定」ページは、skill-scanner の動作方式、LLM 関連設定、および quick / deep の 2 つのスキャン戦略を管理するために使用されます。保存後は Deployment rollout がトリガーされ、新しい設定が有効になるまで待機します。
|
||||
|
||||
ページには主に以下の内容が含まれます。
|
||||
|
||||
##### (1)skill-scanner サービス状態
|
||||
|
||||
* 現在のバックエンドスキャンサービスの namespace、Deployment 名称、および接続状態を表示します。
|
||||
* ページに **接続済み**、**静的スキャン利用可** と表示される場合、基本的な静的スキャン機能が利用可能であることを示します。
|
||||
|
||||
##### (2)LLM 設定
|
||||
|
||||
このエリアでは、scanner が必要に応じてモデルベースの分析を実行できるよう、主 LLM を設定します。
|
||||
|
||||
主なフィールドは以下の通りです。
|
||||
|
||||
* **主 LLM 統合**:**AI Gateway** に設定済みのモデルから主 LLM 設定を直接読み込めます。
|
||||
* **LLM API Key**:`SKILL_SCANNER_LLM_API_KEY` に対応し、主 LLM analyzer の認証に使用されます。
|
||||
* **LLM Model**:`SKILL_SCANNER_LLM_MODEL` に対応し、具体的なモデル名などを指定します。
|
||||
* **LLM Base URL**:`SKILL_SCANNER_LLM_BASE_URL` に対応し、主 LLM サービスのアドレスを設定します。
|
||||
|
||||
##### (3)Meta LLM 統合
|
||||
|
||||
このエリアでは、meta analyzer が使用するモデルを設定します。通常、findings のさらなる要約、整理、または二次処理に使用されます。
|
||||
|
||||
主なフィールドは以下の通りです。
|
||||
|
||||
* **Meta LLM 統合**:**AI Gateway** に設定済みのモデルから meta analyzer 設定を直接読み込めます。
|
||||
* **Meta LLM API Key**:`SKILL_SCANNER_META_LLM_API_KEY` に対応します。
|
||||
* **Meta LLM Model**:`SKILL_SCANNER_META_LLM_MODEL` に対応します。
|
||||
* **Meta LLM Base URL**:`SKILL_SCANNER_META_LLM_BASE_URL` に対応します。
|
||||
|
||||
> 説明:
|
||||
>
|
||||
> * 現在 LLM が未設定の場合、ページには通常、現時点では静的スキャンのみ対応している旨が表示されます;
|
||||
> * 主 LLM と Meta LLM の両方を設定した後にのみ、scanner はより完全な意味解析と要約機能を有効にできます。
|
||||
|
||||
##### (4)現在のスキャンモード
|
||||
|
||||
ページでは、現在プラットフォームで実際に採用しているスキャンモードを選択できます。
|
||||
|
||||
* **Quick モード**:quick analyzers を使用してスキャンを実行し、日常的な高速チェックに適しています。
|
||||
* **Deep モード**:deep analyzers を使用してスキャンを実行し、より完全かつ深い分析に適しています。
|
||||
|
||||
注意すべき点は以下です。
|
||||
|
||||
* Dashboard 上の「クイックスキャン」と「全量スキャン」は、どちらもここで選択したスキャン強度を使用します;
|
||||
* 両者の違いは主にスキャン範囲にあり、analyzer の深さそのものではありません。
|
||||
|
||||
##### (5)Quick / Deep スキャン戦略
|
||||
|
||||
ページ下部では **Quick** と **Deep** の 2 つのスキャン戦略設定をそれぞれ管理しており、管理者が異なるシナリオに応じて異なる analyzer の組み合わせを選択できるようになっています。
|
||||
|
||||
各戦略には以下の設定項目があります。
|
||||
|
||||
* **タイムアウト(秒)**:現在のモードにおけるスキャンタスクのタイムアウト時間を設定します。
|
||||
* **呼び出し方法**:必要に応じて異なる analyzer を有効または無効にできます。
|
||||
|
||||
現在表示されている analyzer タイプには以下が含まれます。
|
||||
|
||||
* **Static**:YAML + YARA 静的ルールスキャン
|
||||
* **Bytecode**:Python bytecode の完全性検証
|
||||
* **Pipeline**:コマンドチェーンおよび taint 分析
|
||||
* **Behavioral**:AST ベースの挙動およびデータフロー分析
|
||||
* **LLM**:外部 LLM に依存する意味解析
|
||||
* **Meta**:findings の二次要約分析
|
||||
|
||||
通常、以下のように理解できます。
|
||||
|
||||
* **Quick モード**:より高速な実行を重視し、日常的な増分チェックによく使われます
|
||||
* **Deep モード**:より多くの analyzer を有効にでき、より深いレビューやセキュリティ監査に適しています
|
||||
|
||||
##### (6)保存して適用
|
||||
|
||||
ページ右上の **保存して適用** は、現在の scanner 関連設定をまとめて送信するために使用されます。保存後は以下が行われます。
|
||||
|
||||
* ClawManager 内の quick / deep スキャン戦略を更新する
|
||||
* skill-scanner Deployment の関連環境変数を更新する
|
||||
* rollout 完了を待って新しい設定を正式に有効化する
|
||||
|
||||
> 説明:
|
||||
>
|
||||
> * スキャナー設定を変更した後は、新しいスキャンタスクを実行する前に、設定が完全に有効になるまで待つことを推奨します;
|
||||
> * 設定後に接続状態が異常になった場合は、AI Gateway モデル、LLM アドレス、Key、および Deployment rollout 状態を優先的に確認してください。
|
||||
|
||||
### 9.3 AI Gateway 機能概要
|
||||
|
||||
AI Gateway には「モデル」設定以外にも、以下のモジュールがあります。
|
||||
|
||||
* **AI 監査**:モデル呼び出し Trace、リクエストとレスポンスのペイロード、命中したリスク、ルーティング判断、および呼び出し詳細を確認します。
|
||||
* **コスト**:Token 使用量、推定費用、内部コスト、およびトレンド統計を確認します。
|
||||
* **リスク制御ルール**:機微検出ルールを設定し、命中時に許可するか安全モデルへルーティングするかを制御します。
|
||||
|
||||
### 9.4 コストモジュール
|
||||
|
||||
コストページは、プラットフォーム上のモデル呼び出しに関する費用と Token 使用状況を統計し、管理者が全体の消費状況を把握するのに役立ちます。
|
||||
|
||||

|
||||
|
||||
ページには主に以下の内容が含まれます。
|
||||
|
||||
* **入力 Token**:入力プロンプト総量の統計
|
||||
* **出力 Token**:モデル生成内容総量の統計
|
||||
* **推定費用**:Provider 単価に基づいて見積もられた費用
|
||||
* **内部コスト**:安全モデルに関連する内部精算コスト
|
||||
* **日次費用トレンド**:直近 7 日間の現在ウィンドウ内における推定費用と Token 変化を確認
|
||||
* **ユーザー集計**:ユーザー単位で使用量と費用を集計
|
||||
* **インスタンス集計**:インスタンス単位で使用量と費用を集計
|
||||
* **最近のコスト記録**:Trace、ユーザー、モデルなどの条件でコスト記録を検索・ページ表示し、さらに監査詳細へ遷移可能
|
||||
|
||||
> 説明:現在まだモデル呼び出し記録が生成されていない場合、入力 Token、出力 Token、費用、およびトレンド図がすべて 0 の場合がありますが、これは正常です。
|
||||
|
||||
### 9.5 AI 監査モジュール
|
||||
|
||||
AI 監査ページは、最近の管理対象モデル呼び出し記録を確認するために使用され、管理者がモデル呼び出し、Token 使用、およびルーティング結果を調査するのに役立ちます。
|
||||
|
||||

|
||||
|
||||
主な機能は以下の通りです。
|
||||
|
||||
* **最近の AI Trace**:最近のモデル呼び出しチェーンを確認
|
||||
* **Trace リスト**:最近の管理対象 Trace を統一テーブルで確認
|
||||
* **検索とフィルタリング**:Trace、リクエスト内容、ユーザー、モデルなどの条件で検索可能
|
||||
* **状態フィルタ**:状態別に異なる呼び出し結果を確認可能
|
||||
* **モデルフィルタ**:モデル別に対応する呼び出し記録を絞り込み可能
|
||||
* **ページネーションと更新**:監査結果のページ表示および手動更新に対応
|
||||
|
||||
> 説明:ページに「まだ AI 監査記録はありません」と表示される場合、まだ実際のモデル呼び出しリクエストが生成されていないことを意味します。
|
||||
|
||||
### 9.6 リスク制御ルールモジュール
|
||||
|
||||
リスク制御ルールページは、機微内容の検出ルールを設定し、ルール命中後の処理動作を決定するために使用されます。
|
||||
|
||||

|
||||
|
||||
このモジュールでは主に以下をサポートします。
|
||||
|
||||
* **ルール一覧管理**:すべてのルールとその有効状態を確認
|
||||
* **ルール分類表示**:個人情報、会社情報、顧客業務、安全資格情報、財務法務、政治的機微、カスタムなどの分類でルールを確認可能
|
||||
* **ルール項目設定**:ルール ID、表示名、重要度、アクション、順序、正規表現 Pattern、説明を設定可能
|
||||
* **ルール動作制御**:ルール命中時に通過させるか、安全モデルへルーティングするかを選択可能
|
||||
* **一括有効化 / 無効化**:ルール状態の一括調整に対応
|
||||
* **ルールテスト台**:サンプルテキストを貼り付けて、有効ルールまたは下書きルールが何に命中するかをテスト可能
|
||||
|
||||
現在の内蔵ルール例には以下が含まれますが、これらに限定されません。
|
||||
|
||||
* 個人情報:メールアドレス、携帯電話番号、身分証番号、パスポート番号、銀行カード文脈、住所、履歴書内容など
|
||||
* 会社情報:内部 IP、内部ドメイン、ホスト命名、Kubernetes Service DNS、プロジェクトコード名、組織構成、給与 / HR 情報など
|
||||
* 顧客業務:顧客リスト、契約 / 見積書、請求税番号、CRM / チケットデータなど
|
||||
* 安全資格情報:秘密鍵、API Key、Token、JWT、Cookie / Session、データベース接続文字列、Kubeconfig、環境変数秘密情報など
|
||||
* 財務法務:予算、利益、売上、法務意見、訴訟、NDA など
|
||||
* 政治的機微:政治機関、軍事国家安全、極端暴力に関する表現など
|
||||
|
||||
> 説明:デフォルトルールは多くの一般的な機微情報検出シナリオをすでにカバーしています。実際の利用では、業務要件に応じてルールを追加、調整、または無効化できます。
|
||||
---
|
||||
|
||||
<a id="sec-13"></a>
|
||||
## 十、ワークスペースモジュールの説明
|
||||
|
||||
ワークスペースは、一般ユーザーがプラットフォームに入った後の主要な操作領域です。個人のリソースクォータ確認、インスタンス作成、インスタンス管理、および OpenClaw 関連リソースの維持に使用します。このモジュールは、管理者側の「コンソール概要」とは異なり、日常利用と運用寄りの機能です。
|
||||
|
||||
### 10.1 ワークスペースホーム
|
||||

|
||||
ワークスペースホームは、現在のアカウントにおけるインスタンスとリソース使用状況の概要を表示するためのもので、主に以下を含みます:
|
||||
|
||||
- **マイインスタンス**:現在のアカウントで作成されたインスタンス数を表示します。
|
||||
- **稼働中**:現在実行中のインスタンス数を表示します。
|
||||
- **使用済みストレージ**:現在のアカウントが使用しているストレージ容量を表示します。
|
||||
- **マイリソースクォータ**:現在のアカウントで使用可能なクォータ情報(インスタンス数、最大 CPU コア数、最大メモリ、最大ストレージ、最大 GPU 数)を表示します。
|
||||
- **クイック操作**:**新規インスタンス作成** と **全インスタンス表示** の 2 つの入口を提供し、素早くプラットフォームを使い始められます。
|
||||
|
||||
> 注:ページに「まだインスタンスがありません」と表示される場合は、直接 **新規インスタンス作成** をクリックして最初の OpenClaw Desktop インスタンス作成を開始できます。
|
||||
|
||||
### 10.2 マイインスタンス
|
||||
|
||||
**マイインスタンス** ページは、現在のアカウントで作成されたインスタンスを一元的に表示・管理するためのページです。このページは主にインスタンス管理機能を担当します。
|
||||

|
||||
一般的にサポートされる操作は次のとおりです:
|
||||
|
||||
- **インスタンス状態の確認**:インスタンスが作成中、稼働中、停止済み、または異常状態かを確認します。
|
||||
- **インスタンス詳細に入る**:インスタンスの基本情報、リソース構成、および実行状況を確認します。
|
||||
- **インスタンス停止**:インスタンスが異常な場合や環境の再読み込みが必要な場合に、停止操作を実行できます。
|
||||
- **インスタンス削除**:インスタンスが不要になった場合、CPU、メモリ、ストレージなどのリソースを解放するために直接削除できます。
|
||||
|
||||
> 注:インスタンスを削除すると、そのインスタンスに関連するリソースも一緒にクリーンアップされます。実行前に、中のデータや設定がバックアップ済みか確認してください。
|
||||
|
||||
### 10.3 リソース管理
|
||||
|
||||
**リソース管理** ページは、利用可能な OpenClaw リソース内容を保守し、インスタンス起動後に注入して使用しやすくするためのものです。
|
||||

|
||||
ページには主に以下の部分があります:
|
||||
|
||||
- **リソース**:利用可能なリソース項目を表示・保守します。
|
||||
- **リソースパック**:複数のリソースを再利用可能なパックとして組み合わせ、一括注入を容易にします。
|
||||
- **注入記録**:リソース注入の履歴と実行状況を確認します。
|
||||
|
||||
リソース管理ページの左側では、リソースタイプごとに分類して管理することもできます。現在ページ上で確認できるタイプは次のとおりです:
|
||||
|
||||
- **チャネル**
|
||||
- **スキル**
|
||||
- **エージェント(近日公開)**
|
||||
- **定期タスク(近日公開)**
|
||||
|
||||
ページ右上では次をサポートします:
|
||||
|
||||
- **更新**:現在のリソース一覧を再読み込みします。
|
||||
- **新規作成**:新しいリソース項目を作成します。
|
||||
|
||||
> 注:リソース管理は主に、インスタンス起動後に使用できる OpenClaw リソース内容を準備するためのものであり、インスタンス作成フローそのものを直接置き換えるものではありません。インスタンス作成時には、**手動リソース**、**リソースパック**、**アーカイブ導入** などの方式と組み合わせてリソース注入を行えます。
|
||||
|
||||
### 10.3.1 チャンネルの新規作成
|
||||
|
||||
「チャンネル」は、OpenClaw と外部メッセージプラットフォームまたは接続先との接続方法を設定するために使用します。例として Telegram、Slack、Feishu / Lark などがあります。
|
||||
|
||||

|
||||
|
||||
チャンネルを作成する際は、以下の手順で操作します。
|
||||
|
||||
1. **リソース管理** ページに入り、**リソース** タブのままにします。
|
||||
2. 左側のリソースタイプで **チャンネル** を選択します。
|
||||
3. ページ右側の **新規作成** をクリックし、「新規リソース」ダイアログを開きます。
|
||||
4. ダイアログで基本情報を入力します。
|
||||
- **タイプ**:**チャンネル** を選択
|
||||
- **リソース Key**:このチャンネルの一意な識別子を入力します。識別しやすく、重複しない英語名または組み合わせ名を使用することを推奨します
|
||||
- **名前**:チャンネルの表示名を入力します
|
||||
- **タグ**:任意、分類検索に使用します
|
||||
- **説明**:任意、このチャンネルの用途を補足するために使用します
|
||||
- **有効化済み**:チェックを入れたままにすることを推奨します
|
||||
5. **Channel テンプレート** 領域で初期テンプレートを選択します。現在サポートされているテンプレートは以下の通りです。
|
||||
- `Telegram`
|
||||
- `Slack`
|
||||
- `Feishu / Lark`
|
||||
|
||||
6. テンプレートを選択した後、**テンプレートを読み込む** をクリックします。システムは対応するテンプレートの基本設定を下部の **内容 JSON** 領域に自動で書き込みます。
|
||||
7. 実際の接続情報に基づいて、**内容 JSON** 内の各フィールドを追加または修正します。
|
||||
8. 設定内容に誤りがないことを確認したら、保存をクリックしてチャンネル作成を完了します。
|
||||
|
||||
> 説明:
|
||||
> - **Channel テンプレート** は基本設定を素早く生成するために使用します;
|
||||
> - **内容 JSON** は最終的に有効となるチャンネル設定内容です;
|
||||
> - 完全に一致するテンプレートがない場合は、**内容 JSON** に直接手動で設定を記入することもできます。
|
||||
|
||||
### 10.3.2 スキルのアップロード
|
||||
|
||||
スキルは、OpenClaw に再利用可能な機能を提供するために使用します。プラットフォームは、アーカイブファイルをアップロードすることでスキルを一括インポートすることをサポートしています。
|
||||
|
||||

|
||||
|
||||
スキルをアップロードする際は、以下の手順で操作します。
|
||||
|
||||
1. **リソース管理** ページに入り、**リソース** タブのままにします。
|
||||
2. 左側のリソースタイプで **スキル** を選択します。
|
||||
3. **ファイルを選択** をクリックし、ローカルのスキル圧縮パッケージを選択します。
|
||||
4. 現在のページでは **`.zip`** ファイルのみアップロードをサポートしています。
|
||||
5. 選択完了後、右側の **スキルアーカイブをアップロード** をクリックします。
|
||||
6. システムはアップロード内容を自動解析し、各第1階層ディレクトリを1つのスキルとしてインポートします。
|
||||
7. アップロード完了後、スキル一覧でインポート済みのスキルを確認できます。
|
||||
|
||||
> 説明:
|
||||
> - スキルアーカイブは事前にディレクトリ構成を整理しておくことを推奨します;
|
||||
> - 各第1階層ディレクトリは独立したスキルとして認識されます;
|
||||
> - アップロード後に一覧がすぐ更新されない場合は、ページ右上の **更新** を手動でクリックして再読み込みしてください。
|
||||
---
|
||||
|
||||
<a id="sec-14"></a>
|
||||
## 十一、問題と対処のクイックリファレンス
|
||||
|
||||
<a id="sec-14-storage"></a>
|
||||
### 11.1 ストレージ問題の専用対応(PV/PVC)
|
||||
|
||||
次のエラーが表示された場合:
|
||||
|
||||
```text
|
||||
0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
クラスターのストレージが自動でバインドされていないことを意味します。この場合は、x86 単一ノードサーバー方式でローカル `hostPath` PV/PVC を手動作成できます。
|
||||
|
||||
> この方式は単一ノードサーバーのテストまたは軽量環境に適しています。本番環境では NFS、Ceph、クラウドディスクなどの正式なストレージの使用を推奨します。
|
||||
|
||||
#### 11.1.1 PV の作成
|
||||
```bash
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: mysql-pv-local
|
||||
spec:
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Delete
|
||||
hostPath:
|
||||
path: /tmp/mysql-data
|
||||
EOF
|
||||
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: minio-pv-local
|
||||
spec:
|
||||
capacity:
|
||||
storage: 10Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Delete
|
||||
hostPath:
|
||||
path: /tmp/minio-data
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 11.1.2 PVC の作成
|
||||
```bash
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: mysql-data
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
storageClassName: ""
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
volumeName: mysql-pv-local
|
||||
EOF
|
||||
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: minio-data
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
storageClassName: ""
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
volumeName: minio-pv-local
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 11.1.3 Pod の再作成
|
||||
```bash
|
||||
kubectl delete pod --all -n clawmanager-system
|
||||
```
|
||||
|
||||
#### 11.1.4 状態の再確認
|
||||
```bash
|
||||
kubectl get pvc -n clawmanager-system
|
||||
kubectl get pods -n clawmanager-system -w
|
||||
```
|
||||
|
||||
期待される結果:
|
||||
- `mysql-data` / `minio-data` が `Bound`
|
||||
- `mysql` / `minio` / `skill-scanner` / `clawmanager-app` が最終的に `Running`
|
||||
|
||||
---
|
||||
|
||||
| 症状 | 原因 | 対処 |
|
||||
| :--- | :--- | :--- |
|
||||
| `kubectl` の `localhost:8080` 接続が拒否される | kubeconfig が設定されていない | `KUBECONFIG` を設定するか `~/.kube/config` にコピーする |
|
||||
| Pod のイメージ取得がタイムアウトする | Docker Hub / GHCR へのネットワークが不安定 | イメージ高速化またはプロキシを設定する |
|
||||
| MySQL / MinIO がずっと `Pending` | PVC がバインドされていない | `StorageClass` を確認するか、PV/PVC を手動作成する |
|
||||
| ブラウザでページを開けない | NodePort が解放されていない / `port-forward` プロセスが維持されていない | ポートを解放するか転送用ターミナルを維持する |
|
||||
| ページは開くが OpenClaw インスタンスを作成できない | セキュアモデルが未設定 | 先に **AI Gateway → モデル** でセキュアモデルを設定して有効化する |
|
||||
| インスタンスが長時間「作成中」のまま | 初回のイメージ取得に時間がかかる / ストレージまたはネットワークの問題 | しばらく待ち、必要に応じて Pod とイベントを確認する |
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-15"></a>
|
||||
## 十二、推奨される最終確認手順(セルフチェック用)
|
||||
1. `kubectl get nodes`
|
||||
2. `kubectl get storageclass`
|
||||
3. `kubectl get pods -n clawmanager-system`
|
||||
4. `kubectl get pvc -n clawmanager-system`
|
||||
5. `kubectl get svc -n clawmanager-system`
|
||||
6. ブラウザで `https://<IP>:30443` を開く
|
||||
7. バックエンドにログインして **セキュアモデル設定** を完了する
|
||||
8. ワークスペースで **OpenClaw Desktop** インスタンスを作成する
|
||||
@@ -0,0 +1,782 @@
|
||||
[<- README 홈으로 돌아가기](../README.ko.md)
|
||||
|
||||
# ClawManager 배포 및 빠른 시작 가이드
|
||||
|
||||
## 목차
|
||||
- [1. 환경과 목표](#sec-01)
|
||||
- [2. 배포 방식 개요](#sec-02)
|
||||
- [3. 방식 A: k3s를 사용한 배포](#sec-03)
|
||||
- [4. 방식 B: 표준 Kubernetes를 사용한 배포](#sec-04)
|
||||
- [5. 중국 내 네트워크에서의 이미지 풀링 권장 사항(선택 사항)](#sec-05)
|
||||
- [6. ClawManager 배포](#sec-06)
|
||||
- [7. 웹 페이지 시작](#sec-08)
|
||||
- [8. 빠른 시작 가이드(로그인 후 초기화 및 OpenClaw 인스턴스 생성)](#sec-09)
|
||||
- [9. 콘솔 및 AI Gateway 기타 기능 설명](#sec-12)
|
||||
- [10. 워크스페이스 모듈 설명](#sec-13)
|
||||
- [11. 문제와 대응 빠른 참조](#sec-14)
|
||||
- [12. 권장 최종 점검 순서(자가 점검용)](#sec-15)
|
||||
|
||||
<a id="sec-01"></a>
|
||||
## 1. 환경과 목표
|
||||
- **시스템 가정**: `x86_64` 아키텍처 Linux 서버.
|
||||
- **배포 목표**: **ClawManager**를 배포하고 Web 페이지에서 보안 모델 구성을 완료한 뒤, **OpenClaw Desktop** 인스턴스를 생성하고 시작합니다.
|
||||
- **적용 시나리오**:
|
||||
- **방식 A: k3s 단일 노드/경량 클러스터 배포**
|
||||
- **방식 B: 표준 Kubernetes 클러스터 배포**(예: kubeadm 클러스터, 기업용 K8s 클러스터, 클라우드 K8s 클러스터)
|
||||
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-02"></a>
|
||||
## 2. 배포 방식 개요
|
||||
다음 두 가지 방식 중 하나로 배포할 수 있습니다:
|
||||
|
||||
### 방식 A: k3s 배포
|
||||
단일 노드, 테스트 환경 또는 경량 프로덕션 환경에 적합합니다.
|
||||
|
||||
### 방식 B: 표준 Kubernetes 배포
|
||||
이미 표준 Kubernetes 클러스터를 갖춘 서버 환경에 적합합니다.
|
||||
|
||||
어떤 방식을 사용하든 최종적으로 동일한 ClawManager 매니페스트를 적용합니다:
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-03"></a>
|
||||
## 3. 방식 A: k3s를 사용한 배포
|
||||
|
||||
### 3.1 k3s 설치
|
||||
```bash
|
||||
curl -sfL https://get.k3s.io | sh -
|
||||
```
|
||||
|
||||
중국 내 네트워크에서는 미러 소스를 사용하여 설치할 수 있습니다:
|
||||
|
||||
```bash
|
||||
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
|
||||
```
|
||||
|
||||
### 3.2 서비스 상태 확인
|
||||
```bash
|
||||
sudo systemctl status k3s --no-pager
|
||||
sudo systemctl enable k3s
|
||||
```
|
||||
|
||||
### 3.3 kubectl 구성
|
||||
현재 사용자가 `kubectl`을 직접 사용할 수 없다면 다음을 실행합니다:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.kube
|
||||
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
|
||||
sudo chown "$USER:$USER" ~/.kube/config
|
||||
```
|
||||
|
||||
또는 임시로 지정합니다:
|
||||
|
||||
```bash
|
||||
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
||||
```
|
||||
|
||||
### 3.4 클러스터 검증
|
||||
```bash
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
정상이라면 노드가 `Ready` 상태로 표시됩니다.
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-04"></a>
|
||||
## 4. 방식 B: 표준 Kubernetes를 사용한 배포
|
||||
|
||||
> 사용 가능한 Kubernetes 클러스터가 이미 있는 x86 서버 환경에 적용됩니다.
|
||||
|
||||
### 4.1 사전 점검
|
||||
현재 `kubectl`이 대상 클러스터에 연결되어 있는지 확인합니다:
|
||||
|
||||
```bash
|
||||
kubectl get nodes
|
||||
kubectl get ns
|
||||
```
|
||||
|
||||
정상이라면 최소 1개의 `Ready` 노드가 보여야 합니다.
|
||||
|
||||
### 4.2 기본 StorageClass 확인
|
||||
ClawManager의 MySQL과 MinIO는 영구 스토리지가 필요합니다. 먼저 클러스터에 기본 `StorageClass`가 있는지 확인하는 것을 권장합니다:
|
||||
|
||||
```bash
|
||||
kubectl get storageclass
|
||||
```
|
||||
|
||||
클러스터에 기본 스토리지 클래스가 이미 있다면 바로 배포를 계속할 수 있습니다.
|
||||
|
||||
**기본 StorageClass가 없는 경우**, 사용 가능한 PV / PVC를 미리 준비하거나 로컬 경로 스토리지 방식을 사용하는 것을 권장합니다. 그렇지 않으면 이후 다음과 같은 문제가 발생할 수 있습니다:
|
||||
|
||||
```text
|
||||
pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-05"></a>
|
||||
## 5. 중국 내 네트워크에서의 이미지 풀링 권장 사항(선택 사항)
|
||||
서버가 Docker Hub 또는 기타 공개 레지스트리에 느리게 접근하는 경우 이미지 가속을 구성할 수 있습니다.
|
||||
|
||||
### 5.1 k3s 시나리오: `/etc/rancher/k3s/registries.yaml` 구성
|
||||
```yaml
|
||||
mirrors:
|
||||
docker.io:
|
||||
endpoint:
|
||||
- "https://docker.m.daocloud.io"
|
||||
- "https://docker.nju.edu.cn"
|
||||
- "https://docker.1ms.run"
|
||||
quay.io:
|
||||
endpoint:
|
||||
- "https://quay.mirrors.ustc.edu.cn"
|
||||
gcr.io:
|
||||
endpoint:
|
||||
- "https://gcr.mirrors.ustc.edu.cn"
|
||||
k8s.gcr.io:
|
||||
endpoint:
|
||||
- "https://registry.aliyuncs.com/google_containers"
|
||||
```
|
||||
|
||||
수정 후 다음을 실행합니다:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart k3s
|
||||
```
|
||||
|
||||
### 5.2 이미지 풀링 검증
|
||||
```bash
|
||||
sudo k3s crictl pull docker.io/rancher/mirrored-pause:3.6
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-06"></a>
|
||||
## 6. ClawManager 배포
|
||||
|
||||
### 6.1 프로젝트 코드 가져오기
|
||||
```bash
|
||||
git clone https://github.com/Yuan-lab-LLM/ClawManager.git
|
||||
cd ClawManager
|
||||
```
|
||||
|
||||
### 6.2 배포 매니페스트 적용
|
||||
저장소 루트 디렉터리에서 실행합니다:
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployments/k8s/clawmanager.yaml
|
||||
```
|
||||
|
||||
### 6.3 기본 리소스 확인
|
||||
```bash
|
||||
kubectl get ns
|
||||
kubectl get pods -n clawmanager-system
|
||||
kubectl get svc -n clawmanager-system
|
||||
```
|
||||
|
||||
정상적인 경우 다음 구성 요소가 표시됩니다:
|
||||
- `clawmanager-app`
|
||||
- `mysql`
|
||||
- `minio`
|
||||
- `skill-scanner`
|
||||
|
||||
다음 오류가 보이면:
|
||||
|
||||
```text
|
||||
0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
이는 클러스터 스토리지에서 MySQL / MinIO가 PVC 미바인드로 인해 시작되지 못한다는 의미입니다. 문서 끝의 다음 항목으로 바로 이동하세요:
|
||||
|
||||
- [11.1 스토리지 문제 전용 처리(PV/PVC)](#sec-14-storage)
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-08"></a>
|
||||
## 7. 웹 페이지 시작
|
||||
|
||||
### 7.1 NodePort로 접근
|
||||
ClawManager의 프런트엔드 Service는 기본적으로 HTTPS NodePort를 사용합니다. 먼저 확인합니다:
|
||||
|
||||
```bash
|
||||
kubectl get svc -n clawmanager-system
|
||||
```
|
||||
|
||||
프런트엔드 포트가 다음과 같다면:
|
||||
|
||||
```text
|
||||
443:30443/TCP
|
||||
```
|
||||
|
||||
브라우저에서 직접 다음으로 접근할 수 있습니다:
|
||||
|
||||
```text
|
||||
https://<서버IP>:30443
|
||||
```
|
||||
|
||||
|
||||
### 7.2 최초 HTTPS 접근 안내
|
||||
일반적으로 자체 서명 인증서를 사용하므로 브라우저가 “안전하지 않음” 또는 인증서 경고를 표시할 수 있습니다. 다음을 클릭합니다:
|
||||
|
||||
```text
|
||||
고급 → 계속 방문
|
||||
```
|
||||
|
||||
그러면 페이지에 들어갈 수 있습니다.
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-09"></a>
|
||||
## 8. 빠른 시작 가이드(로그인 후 초기화 및 OpenClaw 인스턴스 생성)
|
||||
|
||||
위 배포를 완료하고 관리 페이지를 성공적으로 연 후에도, 실제로 **OpenClaw** 인스턴스를 생성하고 시작하려면 다음 초기화 단계를 완료해야 합니다.
|
||||
|
||||
### 8.1 시스템 로그인
|
||||
1. 배포 완료 후 페이지를 엽니다. 예: `https://<노드IP>:30443`.
|
||||
2. 기본 관리자 계정으로 로그인합니다:
|
||||
- **사용자 이름**: `admin`
|
||||
- **비밀번호**: `admin123`
|
||||
3. 처음 로그인한 후에는 필요에 따라 기본 비밀번호를 변경하는 것을 권장합니다.
|
||||
|
||||
|
||||
### 8.2 보안 모델 구성(AI Gateway)
|
||||
|
||||

|
||||
로그인 후 먼저 사용 가능한 **보안 모델**을 구성해야 하며, 이는 플랫폼과 이후 인스턴스에서 공통으로 사용됩니다.
|
||||
|
||||
1. 왼쪽 메뉴에서 **AI Gateway** → **모델**을 클릭합니다.
|
||||
2. 새 모델을 추가하거나 기존 모델을 편집하고, 연결하는 모델 서비스에 따라 다음 정보를 입력합니다:
|
||||
|
||||
* **표시 이름**: 식별하기 쉬운 이름을 입력합니다.
|
||||
* **벤더 템플릿**: 모델 서비스 유형에 따라 해당 템플릿을 선택합니다. 사용자 정의 또는 호환 인터페이스를 사용하는 경우 **Local / Internal**을 선택할 수 있습니다.
|
||||
* **프로토콜**: 인터페이스 프로토콜에 따라 **OpenAI Compatible** 또는 실제 사용하는 다른 프로토콜을 선택합니다.
|
||||
* **Base URL**: 모델 서비스가 제공하는 인터페이스 주소를 입력합니다.
|
||||
* **API Key**: 해당 모델 서비스의 유효한 키를 입력합니다.
|
||||
* **Provider Model**: 실제 호출할 모델 이름을 입력합니다.
|
||||
* **통화**: 실제 상황에 맞게 입력합니다. 비용 표시가 필요 없다면 기본값을 유지할 수 있습니다.
|
||||
* **입력 가격 / 출력 가격**: 비용 통계를 하지 않을 경우 `0`을 입력할 수 있습니다.
|
||||
3. 제출 전에 반드시 다음 항목을 체크합니다:
|
||||
|
||||
* **보안 모델**
|
||||
* **사용**
|
||||
4. **저장**을 클릭합니다。
|
||||
|
||||
> 참고: 페이지의 이미지는 입력 위치와 예시 형식을 보여주기 위한 것입니다. 실제 내용은 사용 중인 모델 서비스 구성에 따라 입력하세요。
|
||||
|
||||
|
||||
### 8.3 OpenClaw 인스턴스 생성
|
||||
모델 구성이 완료되면 **OpenClaw Desktop** 인스턴스를 생성합니다.
|
||||
|
||||
1. 왼쪽 아래의 **ADMIN**을 클릭하여 **워크스페이스**로 전환합니다.
|
||||
2. **인스턴스 생성**을 클릭합니다。
|
||||
|
||||

|
||||
#### 1단계: 기본 정보
|
||||
- **인스턴스 이름**을 입력합니다(최소 3자).
|
||||
- 설명은 선택 사항이며 비워 둘 수 있습니다.
|
||||
- **다음**을 클릭합니다.
|
||||
|
||||

|
||||
#### 2단계: 유형 선택
|
||||
- **OpenClaw Desktop**을 선택합니다.
|
||||
- **다음**을 클릭합니다。
|
||||
|
||||
|
||||

|
||||
#### 3단계: 구성
|
||||
- **Small** 사양을 바로 선택할 수 있습니다:
|
||||
- `2 CPU`
|
||||
- `4 GB RAM`
|
||||
- `20 GB Disk`
|
||||
- 아래 사용자 정의 구성 영역에서 필요에 따라 수정할 수도 있습니다。
|
||||
- OpenClaw 리소스 주입 부분에서는 필요에 따라 다음을 선택할 수 있습니다:
|
||||
- **수동 리소스**
|
||||
- **리소스 패키지**
|
||||
- **아카이브 가져오기**
|
||||
- 처음 사용하는 경우 기본값을 유지하거나 **수동 리소스**를 선택해도 됩니다。
|
||||
- 마지막으로 **생성**을 클릭합니다。
|
||||
|
||||
### 8.4 첫 생성 안내
|
||||
- **OpenClaw** 인스턴스를 처음 생성할 때는 필요한 이미지를 다운로드하고 환경을 초기화해야 하므로 시간이 더 오래 걸립니다。
|
||||
- 네트워크가 느리거나 처음 이미지 풀링을 수행하는 경우, 인스턴스 상태가 오랫동안 **생성 중**으로 표시될 수 있습니다. 잠시 기다려 주세요。
|
||||
- 오랜 시간이 지나도 시작되지 않으면 Kubernetes / Docker 로그로 돌아가 이미지, PVC, 게이트웨이 모델 등의 문제를 점검하세요。
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-12"></a>
|
||||
## 9. 콘솔 및 AI Gateway 기타 기능 설명
|
||||
|
||||
모델 구성 외에도 플랫폼 홈의 콘솔과 AI Gateway는 감사, 비용, 규칙 거버넌스 등의 기능을 제공하여 관리자가 클러스터 상태, 모델 호출 기록, 보안 정책 실행 상태를 중앙에서 쉽게 확인할 수 있도록 합니다。
|
||||
|
||||
### 9.1 콘솔 개요
|
||||
|
||||

|
||||
|
||||
콘솔 홈은 현재 클러스터와 플랫폼의 전체 운영 상태를 보여주며, 관리자가 리소스 사용량과 시스템 상태를 빠르게 파악할 수 있도록 합니다。
|
||||
|
||||
주요 내용은 다음과 같습니다:
|
||||
|
||||
- **클러스터 기본 정보 개요**: 현재 플랫폼의 총 사용자 수, 총 인스턴스 수, 실행 중 인스턴스 수, 총 스토리지 사용량을 표시합니다。
|
||||
- **노드 개요**: 현재 사용 가능한 노드 수와 현재 클러스터의 주요 스케줄링 노드 정보를 표시합니다。
|
||||
- **리소스 신청 현황**: 현재 플랫폼이 신청한 CPU, 메모리, 디스크 리소스 총량을 표시합니다。
|
||||
- **용량 대시보드**: 노드, CPU, 메모리, 디스크 등 차원별로 전체 리소스 용량과 현재 사용률을 표시하여 클러스터에 사용 가능한 여유가 있는지 판단하기 쉽게 합니다。
|
||||
- **기반 시설 표**: 현재 노드, 리소스 및 기본 런타임 환경의 상태 정보를 확인하는 데 사용됩니다。
|
||||
|
||||
> 참고: 콘솔은 주로 플랫폼 전체 리소스, 노드, 인스턴스 운영 개요를 보는 데 사용되며, 특정 인스턴스 내부의 OpenClaw 작업에 직접 사용되지는 않습니다。
|
||||
|
||||
### 9.2 보안 센터 (skill-scanner)
|
||||
|
||||
콘솔의 **보안 센터**는 플랫폼 자원의 스캔 상태, 이력 보고서, 스캐너 구성을 통합하여 확인하는 데 사용됩니다. 이 기능은 백엔드의 **skill-scanner** 서비스에 의존하여 동작하며, 자원에 대해 정적 스캔, 심층 스캔, 그리고 LLM 기반의 보조 분석을 수행하여 관리자가 잠재적인 위험 콘텐츠, 비정상 자원, 의심스러운 스킬을 식별할 수 있도록 도와줍니다.
|
||||
|
||||
보안 센터는 현재 다음 세 가지 주요 모듈로 구성됩니다.
|
||||
|
||||
* **실행 개요**
|
||||
* **보고서 이력**
|
||||
* **스캐너 구성**
|
||||
|
||||
#### 9.2.1 실행 개요
|
||||
|
||||

|
||||
|
||||
“실행 개요” 페이지는 현재 플랫폼 전체의 스캔 상태와 위험 분포를 확인하는 데 사용되며, 관리자가 현재 보안 상태를 빠르게 파악할 수 있도록 도와줍니다.
|
||||
|
||||
페이지에는 주로 다음과 같은 내용이 포함됩니다.
|
||||
|
||||
* **현재 적용 모드**: 현재 사용 중인 모드가 **Quick 모드**인지 **Deep 모드**인지 표시합니다.
|
||||
* **빠른 스캔 / 전체 스캔**:
|
||||
|
||||
* **빠른 스캔**: 새로 추가되거나 변경된 자원을 처리하는 데 적합하며, 스캔 범위가 가볍고 실행 속도가 빠릅니다.
|
||||
* **전체 스캔**: 전체 자원을 주기적으로 다시 스캔하여 현재 플랫폼의 모든 자원 상태를 완전하게 재검토하는 데 적합합니다.
|
||||
* **총 자산 수**: 현재 보안 센터의 스캔 범위에 포함된 자원 수입니다.
|
||||
* **완료된 스캔**: 스캔이 완료된 자원 수입니다.
|
||||
* **고위험 / 중위험**: 현재 스캔 결과에서 식별된 위험 등급 통계입니다.
|
||||
* **스캔 커버리지**: 실제로 스캔이 완료된 자산 수가 플랫폼 전체 자산 수에서 차지하는 비율을 표시합니다.
|
||||
* **SAFE / 고위험 / 대기 중 / 실패**:
|
||||
|
||||
* **SAFE**: 스캔을 통과했으며 현재 위험이 발견되지 않은 자산 수
|
||||
* **고위험**: 즉시 처리해야 하는 위험 자산 수
|
||||
* **대기 중**: 증거 수집 대기 또는 스캔 대기열에 있는 자산 수
|
||||
* **실패**: 스캔 실행에 실패하여 다시 실행해야 하는 자산 수
|
||||
* **플랫폼 자산 위험 추세**: 위험 등급별로 집계된 현재 플랫폼 자산의 위험 분포를 표시합니다.
|
||||
* **핫 자산**: 가장 자주 사용되는 스킬 또는 고빈도 사용 자원을 표시하여 관리자가 핵심 자산을 빠르게 파악할 수 있도록 도와줍니다.
|
||||
* **스캐너 상태**: 현재 skill-scanner 의 사용 가능 여부 및 연결 상태를 표시합니다. 예: “정적 스캔 사용 가능”, “연결됨”.
|
||||
* **위험 알림 및 처리 제안**: 현재 위험 상태에 따른 간단한 안내 정보를 제공합니다.
|
||||
* **최근 스캔 작업**: 최근 실행된 스캔 기록을 표시하여 최근 스캔 활동을 추적하기 쉽게 합니다.
|
||||
|
||||
> 설명:
|
||||
>
|
||||
> * 페이지에 “현재 고위험 또는 중위험 자산이 없습니다”라고 표시되면, 현재 스캔 결과에서 뚜렷한 위험이 발견되지 않았음을 의미합니다.
|
||||
> * 페이지에 “아직 스캔 작업 기록이 없습니다”라고 표시되면, 아직 스캔이 실행되지 않았거나 유효한 스캔 결과가 생성되지 않았음을 의미합니다.
|
||||
|
||||
#### 9.2.2 보고서 이력
|
||||
|
||||
“보고서 이력” 페이지는 과거 스캔 보고서와 관련 결과 기록을 확인하는 데 사용되며, 관리자가 이전 스캔 실행 상황을 되짚어볼 수 있도록 도와줍니다.
|
||||
|
||||
이 모듈은 주로 다음 용도로 사용됩니다.
|
||||
|
||||
* 과거에 실행된 스캔 작업 결과 확인
|
||||
* 서로 다른 시점의 스캔 출력 비교
|
||||
* 특정 자원이 서로 다른 단계에서 어떻게 보안 상태가 변했는지 추적 보조
|
||||
* 이후 재검토, 재스캔, 문제 추적을 위한 이력 근거 제공
|
||||
|
||||
> 설명:
|
||||
>
|
||||
> * “보고서 이력”은 과거 결과의 보관과 추적에 더 중점을 둡니다;
|
||||
> * “실행 개요”는 현재 상태와 전체 개요에 더 중점을 둡니다。
|
||||
|
||||
#### 9.2.3 스캐너 구성
|
||||
|
||||

|
||||
|
||||
“스캐너 구성” 페이지는 skill-scanner 의 동작 방식, LLM 관련 설정, 그리고 quick / deep 두 가지 스캔 전략을 관리하는 데 사용됩니다. 저장 후 Deployment rollout 이 트리거되며, 새로운 구성이 적용될 때까지 기다립니다.
|
||||
|
||||
페이지에는 주로 다음 내용이 포함됩니다.
|
||||
|
||||
##### (1) skill-scanner 서비스 상태
|
||||
|
||||
* 현재 백엔드 스캔 서비스의 namespace, Deployment 이름, 연결 상태를 표시합니다.
|
||||
* 페이지에 **연결됨**, **정적 스캔 사용 가능** 이 표시되면 기본 정적 스캔 기능이 사용 가능한 상태임을 의미합니다.
|
||||
|
||||
##### (2) LLM 구성
|
||||
|
||||
이 영역은 scanner 가 필요할 때 모델 기반 분석 기능을 수행할 수 있도록 주 LLM 을 구성하는 데 사용됩니다.
|
||||
|
||||
주요 필드는 다음과 같습니다.
|
||||
|
||||
* **주 LLM 통합**: **AI Gateway** 에 이미 구성된 모델에서 주 LLM 구성을 직접 가져올 수 있습니다.
|
||||
* **LLM API Key**: `SKILL_SCANNER_LLM_API_KEY` 에 대응하며, 주 LLM analyzer 의 인증에 사용됩니다.
|
||||
* **LLM Model**: `SKILL_SCANNER_LLM_MODEL` 에 대응하며, 구체적인 모델 이름 등을 지정합니다.
|
||||
* **LLM Base URL**: `SKILL_SCANNER_LLM_BASE_URL` 에 대응하며, 주 LLM 서비스 주소를 구성하는 데 사용됩니다.
|
||||
|
||||
##### (3) Meta LLM 통합
|
||||
|
||||
이 영역은 meta analyzer 가 사용하는 모델을 구성하는 데 사용되며, 일반적으로 findings 를 추가 요약, 정리 또는 2차 처리하는 데 사용됩니다.
|
||||
|
||||
주요 필드는 다음과 같습니다.
|
||||
|
||||
* **Meta LLM 통합**: **AI Gateway** 에 이미 구성된 모델에서 meta analyzer 구성을 직접 가져올 수 있습니다.
|
||||
* **Meta LLM API Key**: `SKILL_SCANNER_META_LLM_API_KEY` 에 대응합니다.
|
||||
* **Meta LLM Model**: `SKILL_SCANNER_META_LLM_MODEL` 에 대응합니다.
|
||||
* **Meta LLM Base URL**: `SKILL_SCANNER_META_LLM_BASE_URL` 에 대응합니다.
|
||||
|
||||
> 설명:
|
||||
>
|
||||
> * 현재 LLM 이 구성되어 있지 않으면, 페이지에는 일반적으로 현재 정적 스캔만 지원된다는 안내가 표시됩니다;
|
||||
> * 주 LLM 과 Meta LLM 을 모두 구성한 후에야 scanner 가 더 완전한 의미 분석 및 요약 기능을 사용할 수 있습니다。
|
||||
|
||||
##### (4) 현재 스캔 모드
|
||||
|
||||
페이지에서는 현재 플랫폼에서 실제로 사용하는 스캔 모드를 선택할 수 있습니다.
|
||||
|
||||
* **Quick 모드**: quick analyzers 를 사용하여 스캔을 수행하며, 일상적인 빠른 점검에 적합합니다.
|
||||
* **Deep 모드**: deep analyzers 를 사용하여 스캔을 수행하며, 보다 완전하고 심층적인 분석에 적합합니다.
|
||||
|
||||
주의할 점은 다음과 같습니다.
|
||||
|
||||
* Dashboard 의 “빠른 스캔”과 “전체 스캔”은 모두 여기에서 선택한 스캔 강도를 사용합니다;
|
||||
* 둘의 차이는 주로 스캔 범위에 있으며 analyzer 깊이 자체에는 있지 않습니다。
|
||||
|
||||
##### (5) Quick / Deep 스캔 전략
|
||||
|
||||
페이지 하단에서는 **빠른** 과 **심층** 두 가지 스캔 전략 구성을 각각 유지하며, 관리자가 서로 다른 시나리오에 따라 다른 analyzer 조합을 선택할 수 있도록 합니다.
|
||||
|
||||
각 전략에는 다음 구성 항목이 포함됩니다.
|
||||
|
||||
* **타임아웃(초)**: 현재 모드에서 스캔 작업의 타임아웃 시간을 설정합니다.
|
||||
* **호출 방식**: 필요에 따라 서로 다른 analyzer 를 활성화하거나 비활성화할 수 있습니다.
|
||||
|
||||
현재 표시되는 analyzer 유형은 다음과 같습니다.
|
||||
|
||||
* **Static**: YAML + YARA 정적 규칙 스캔
|
||||
* **Bytecode**: Python bytecode 무결성 검증
|
||||
* **Pipeline**: 명령 체인 및 taint 분석
|
||||
* **Behavioral**: AST 기반 동작 및 데이터 흐름 분석
|
||||
* **LLM**: 외부 LLM 에 의존하는 의미 분석
|
||||
* **Meta**: findings 에 대한 2차 요약 분석
|
||||
|
||||
일반적으로 다음과 같이 이해할 수 있습니다.
|
||||
|
||||
* **Quick 모드**: 더 빠른 실행에 중점을 두며, 일상적인 증분 점검에 자주 사용됩니다
|
||||
* **Deep 모드**: 더 많은 analyzer 를 활성화할 수 있으며, 보다 깊이 있는 검토와 보안 감사에 적합합니다
|
||||
|
||||
##### (6) 저장 및 적용
|
||||
|
||||
페이지 오른쪽 상단의 **저장 및 적용** 은 현재의 모든 scanner 관련 구성을 제출하는 데 사용됩니다. 저장 후 다음 작업이 수행됩니다.
|
||||
|
||||
* ClawManager 의 quick / deep 스캔 전략 업데이트
|
||||
* skill-scanner Deployment 의 관련 환경 변수 업데이트
|
||||
* rollout 완료를 기다린 후 새 구성을 정식으로 적용
|
||||
|
||||
> 설명:
|
||||
>
|
||||
> * 스캐너 구성을 변경한 후에는 새 스캔 작업을 실행하기 전에 구성이 완전히 적용될 때까지 기다리는 것을 권장합니다;
|
||||
> * 구성 후 연결 상태가 비정상적이라면 AI Gateway 모델, LLM 주소, Key, Deployment rollout 상태를 우선 확인하는 것이 좋습니다。
|
||||
|
||||
### 9.3 AI Gateway 기능 개요
|
||||
|
||||
AI Gateway 는 “모델” 구성 외에도 다음 모듈을 포함합니다.
|
||||
|
||||
* **AI 감사**: 모델 호출 Trace, 요청 및 응답 payload, 적중 위험, 라우팅 결정, 호출 상세를 확인합니다.
|
||||
* **비용**: Token 사용량, 예상 비용, 내부 비용, 추세 통계를 확인합니다.
|
||||
* **위험 제어 규칙**: 민감 정보 탐지 규칙을 구성하고 적중 시 통과시킬지 안전 모델로 라우팅할지 제어합니다.
|
||||
|
||||
### 9.4 비용 모듈
|
||||
|
||||
비용 페이지는 플랫폼 모델 호출의 비용과 Token 사용 현황을 집계하여 관리자가 전체 소비 상황을 파악할 수 있도록 도와줍니다.
|
||||
|
||||

|
||||
|
||||
페이지에는 주로 다음 내용이 포함됩니다.
|
||||
|
||||
* **입력 Token**: 입력 프롬프트 총량 통계
|
||||
* **출력 Token**: 모델 생성 내용 총량 통계
|
||||
* **예상 비용**: Provider 단가 기준으로 추산된 비용
|
||||
* **내부 비용**: 보안 모델 관련 내부 정산 비용
|
||||
* **일일 비용 추세**: 최근 7일 동안 현재 구간 내 예상 비용과 Token 변화 확인
|
||||
* **사용자 요약**: 사용자별 사용량 및 비용 집계
|
||||
* **인스턴스 요약**: 인스턴스별 사용량 및 비용 집계
|
||||
* **최근 비용 기록**: Trace, 사용자, 모델 등 조건으로 비용 기록을 검색하고 페이지 단위로 확인하며, 감사 상세로 이동 가능
|
||||
|
||||
> 설명: 현재 아직 모델 호출 기록이 생성되지 않았다면 입력 Token, 출력 Token, 비용, 추세 차트가 모두 0 으로 표시될 수 있으며 이는 정상입니다。
|
||||
|
||||
### 9.5 AI 감사 모듈
|
||||
|
||||
AI 감사 페이지는 최근의 관리형 모델 호출 기록을 확인하는 데 사용되며, 관리자가 모델 호출, Token 사용, 라우팅 결과를 추적하고 점검하는 데 도움을 줍니다.
|
||||
|
||||

|
||||
|
||||
주요 기능은 다음과 같습니다.
|
||||
|
||||
* **최근 AI Trace**: 최근 모델 호출 체인 확인
|
||||
* **Trace 목록**: 최근 관리형 Trace 를 통합 테이블에서 확인
|
||||
* **검색 및 필터링**: Trace, 요청 내용, 사용자, 모델 등 조건으로 검색 가능
|
||||
* **상태 필터링**: 상태별로 서로 다른 호출 결과 확인 가능
|
||||
* **모델 필터링**: 모델별로 해당 호출 기록 필터링 가능
|
||||
* **페이지네이션 및 새로고침**: 감사 결과를 페이지 단위로 확인하고 수동 새로고침 가능
|
||||
|
||||
> 설명: 페이지에 “아직 AI 감사 기록이 없습니다”라고 표시되면, 아직 실제 모델 호출 요청이 발생하지 않았음을 의미합니다。
|
||||
|
||||
### 9.6 위험 제어 규칙 모듈
|
||||
|
||||
위험 제어 규칙 페이지는 민감 콘텐츠 탐지 규칙을 구성하고, 규칙 적중 후 어떤 처리 동작을 수행할지 결정하는 데 사용됩니다.
|
||||
|
||||

|
||||
|
||||
이 모듈은 주로 다음 기능을 지원합니다.
|
||||
|
||||
* **규칙 목록 관리**: 전체 규칙과 활성 상태 확인
|
||||
* **규칙 분류 보기**: 개인정보, 회사 정보, 고객 업무, 보안 자격 정보, 재무/법무, 정치적 민감, 사용자 정의 등 분류별로 규칙 확인 가능
|
||||
* **규칙 필드 구성**: 규칙 ID, 표시 이름, 심각도, 동작, 정렬 순서, 정규식 Pattern, 설명 설정 가능
|
||||
* **규칙 동작 제어**: 규칙 적중 시 통과시키거나 보안 모델로 라우팅하도록 선택 가능
|
||||
* **일괄 활성화 / 비활성화**: 규칙 상태를 일괄로 조정 가능
|
||||
* **규칙 테스트 콘솔**: 샘플 텍스트를 붙여 넣어 활성 규칙 또는 초안 규칙이 무엇에 적중하는지 테스트 가능
|
||||
|
||||
현재 내장된 규칙 예시는 다음을 포함하지만 이에 한정되지 않습니다.
|
||||
|
||||
* 개인정보: 이메일 주소, 휴대전화 번호, 신분증 번호, 여권 번호, 은행카드 문맥, 주소, 이력서 내용 등
|
||||
* 회사 정보: 내부 IP, 내부 도메인, 호스트 명명, Kubernetes Service DNS, 프로젝트 코드명, 조직 구조, 급여 / HR 정보 등
|
||||
* 고객 업무: 고객 목록, 계약 / 견적서, 세금계산서 세금 번호, CRM / 티켓 데이터 등
|
||||
* 보안 자격 정보: 개인 키, API Key, Token, JWT, Cookie / Session, 데이터베이스 연결 문자열, Kubeconfig, 환경 변수 비밀값 등
|
||||
* 재무/법무: 예산, 이익, 매출, 법무 의견, 소송, NDA 등
|
||||
* 정치적 민감: 정치 기관, 군사/국가 안보, 극단 폭력 관련 표현 등
|
||||
|
||||
> 설명: 기본 규칙은 이미 다양한 일반적인 민감 정보 탐지 시나리오를 포괄하고 있습니다. 실제 사용 시에는 업무 요구에 따라 규칙을 추가, 조정 또는 비활성화할 수 있습니다。
|
||||
---
|
||||
|
||||
<a id="sec-13"></a>
|
||||
## 10. 워크스페이스 모듈 설명
|
||||
|
||||
워크스페이스는 일반 사용자가 플랫폼에 들어온 후 사용하는 주요 작업 영역입니다. 개인 리소스 할당량 조회, 인스턴스 생성, 인스턴스 관리, OpenClaw 관련 리소스 유지에 사용됩니다. 이 모듈은 관리자 측의 “콘솔 개요”와 달리 일상 사용 및 운영 작업에 더 초점이 맞춰져 있습니다。
|
||||
|
||||
### 10.1 워크스페이스 홈
|
||||

|
||||
워크스페이스 홈은 현재 계정의 인스턴스 및 리소스 사용 현황을 표시하는 데 사용되며, 주로 다음 내용을 포함합니다:
|
||||
|
||||
- **내 인스턴스**: 현재 계정에서 생성한 인스턴스 수를 표시합니다。
|
||||
- **실행 중**: 현재 실행 중인 인스턴스 수를 표시합니다。
|
||||
- **사용된 스토리지**: 현재 계정이 사용 중인 스토리지 공간을 표시합니다。
|
||||
- **내 리소스 할당량**: 현재 계정에서 사용 가능한 할당량 정보(인스턴스 수, 최대 CPU 코어 수, 최대 메모리, 최대 스토리지, 최대 GPU 수)를 표시합니다。
|
||||
- **빠른 작업**: **새 인스턴스 생성** 및 **모든 인스턴스 보기** 두 개의 진입점을 제공하여 플랫폼을 빠르게 사용할 수 있게 합니다。
|
||||
|
||||
> 참고: 페이지에 “아직 인스턴스가 없습니다”가 표시되면, 바로 **새 인스턴스 생성**을 클릭하여 첫 번째 OpenClaw Desktop 인스턴스 생성을 시작할 수 있습니다。
|
||||
|
||||
### 10.2 내 인스턴스
|
||||
|
||||
**내 인스턴스** 페이지는 현재 계정에서 생성된 인스턴스를 통합 조회 및 관리하기 위한 페이지입니다. 이 페이지는 주로 인스턴스 관리 기능을 담당합니다。
|
||||

|
||||
일반적으로 지원되는 작업은 다음과 같습니다:
|
||||
|
||||
- **인스턴스 상태 보기**: 인스턴스가 생성 중, 실행 중, 중지됨 또는 비정상 상태인지 확인합니다。
|
||||
- **인스턴스 상세 진입**: 인스턴스의 기본 정보, 리소스 구성 및 실행 상태를 확인합니다。
|
||||
- **인스턴스 중지**: 인스턴스가 비정상이거나 환경을 다시 로드해야 하는 경우 중지 작업을 수행할 수 있습니다。
|
||||
- **인스턴스 삭제**: 인스턴스가 더 이상 필요하지 않을 때 CPU, 메모리, 스토리지 등의 리소스를 해제하기 위해 직접 삭제할 수 있습니다。
|
||||
|
||||
> 참고: 인스턴스를 삭제하면 관련 리소스도 함께 정리됩니다. 실행 전에 내부 데이터와 구성이 백업되었는지 확인하세요。
|
||||
|
||||
### 10.3 리소스 관리
|
||||
|
||||
**리소스 관리** 페이지는 사용 가능한 OpenClaw 리소스 내용을 유지하여, 인스턴스 시작 후 주입하고 사용할 수 있도록 하는 데 사용됩니다。
|
||||

|
||||
페이지에는 주로 다음 부분이 있습니다:
|
||||
|
||||
- **리소스**: 사용 가능한 리소스 항목을 조회하고 유지합니다。
|
||||
- **리소스 패키지**: 여러 리소스를 재사용 가능한 패키지로 묶어 일괄 주입을 쉽게 합니다。
|
||||
- **주입 기록**: 리소스 주입 이력과 실행 상태를 확인합니다。
|
||||
|
||||
리소스 관리 페이지 왼쪽에서는 리소스 유형별로 구분 관리할 수도 있으며, 현재 페이지에 표시되는 유형은 다음과 같습니다:
|
||||
|
||||
- **채널**
|
||||
- **스킬**
|
||||
- **에이전트(출시 예정)**
|
||||
- **예약 작업(출시 예정)**
|
||||
|
||||
페이지 오른쪽 상단에서는 다음을 지원합니다:
|
||||
|
||||
- **새로고침**: 현재 리소스 목록을 다시 불러옵니다。
|
||||
- **새로 만들기**: 새로운 리소스 항목을 생성합니다。
|
||||
|
||||
> 참고: 리소스 관리는 주로 인스턴스 시작 후 사용할 수 있는 OpenClaw 리소스 내용을 준비하는 데 사용되며, 인스턴스 생성 과정을 직접 대체하지는 않습니다. 인스턴스 생성 시 **수동 리소스**, **리소스 패키지**, **아카이브 가져오기** 등의 방식과 함께 리소스를 주입할 수 있습니다。
|
||||
|
||||
|
||||
### 10.3.1 채널 생성
|
||||
|
||||
“채널”은 OpenClaw와 외부 메시징 플랫폼 또는 접속 대상 간의 연결 방식을 구성하는 데 사용됩니다. 예를 들어 Telegram, Slack, Feishu / Lark 등이 있습니다.
|
||||
|
||||

|
||||
|
||||
채널을 생성할 때는 다음 단계에 따라 진행합니다.
|
||||
|
||||
1. **리소스 관리** 페이지로 이동하고 **리소스** 탭을 유지합니다.
|
||||
2. 왼쪽 리소스 유형에서 **채널**을 선택합니다.
|
||||
3. 페이지 오른쪽의 **새로 만들기**를 클릭하여 “새 리소스” 팝업을 엽니다.
|
||||
4. 팝업에서 기본 정보를 입력합니다.
|
||||
- **유형**: **채널** 선택
|
||||
- **리소스 Key**: 해당 채널의 고유 식별자를 입력합니다. 식별하기 쉽고 중복되지 않는 영문명 또는 조합명을 사용하는 것을 권장합니다
|
||||
- **이름**: 채널 표시 이름을 입력합니다
|
||||
- **태그**: 선택 사항이며, 분류 및 검색에 사용됩니다
|
||||
- **설명**: 선택 사항이며, 채널의 용도를 보충 설명하는 데 사용됩니다
|
||||
- **사용 중**: 체크 상태를 유지하는 것을 권장합니다
|
||||
5. **Channel 템플릿** 영역에서 시작 템플릿을 선택합니다. 현재 지원되는 템플릿은 다음과 같습니다.
|
||||
- `Telegram`
|
||||
- `Slack`
|
||||
- `Feishu / Lark`
|
||||
|
||||
6. 템플릿을 선택한 후 **템플릿 불러오기**를 클릭합니다. 시스템은 해당 템플릿의 기본 구성을 아래의 **내용 JSON** 영역에 자동으로 입력합니다.
|
||||
7. 실제 연동 정보에 따라 **내용 JSON**의 필드 내용을 계속 추가하거나 수정합니다.
|
||||
8. 설정이 올바른지 확인한 후 저장을 클릭하여 채널 생성을 완료합니다.
|
||||
|
||||
> 설명:
|
||||
> - **Channel 템플릿**은 기본 구성을 빠르게 생성하는 데 사용됩니다;
|
||||
> - **내용 JSON**은 최종적으로 적용되는 채널 구성 내용입니다;
|
||||
> - 완전히 일치하는 템플릿이 없는 경우 **내용 JSON**에 직접 수동으로 설정을 입력할 수도 있습니다.
|
||||
|
||||
### 10.3.2 스킬 업로드
|
||||
|
||||
스킬은 OpenClaw에 재사용 가능한 기능을 제공하는 데 사용됩니다. 플랫폼은 아카이브 파일 업로드를 통해 스킬을 일괄 가져오는 기능을 지원합니다.
|
||||
|
||||

|
||||
|
||||
스킬을 업로드할 때는 다음 단계에 따라 진행합니다.
|
||||
|
||||
1. **리소스 관리** 페이지로 이동하고 **리소스** 탭을 유지합니다.
|
||||
2. 왼쪽 리소스 유형에서 **스킬**을 선택합니다.
|
||||
3. **파일 선택**을 클릭하여 로컬 스킬 압축 파일을 선택합니다.
|
||||
4. 현재 페이지는 **`.zip`** 파일 업로드만 지원합니다.
|
||||
5. 파일 선택이 완료되면 오른쪽의 **스킬 아카이브 업로드**를 클릭합니다。
|
||||
6. 시스템은 업로드된 내용을 자동으로 분석하고 각 1단계 디렉터리를 하나의 스킬로 가져옵니다.
|
||||
7. 업로드가 완료되면 스킬 목록에서 가져온 스킬 내용을 확인할 수 있습니다。
|
||||
|
||||
> 설명:
|
||||
> - 스킬 아카이브는 미리 디렉터리 구조를 정리해 두는 것을 권장합니다;
|
||||
> - 각 1단계 디렉터리는 하나의 독립된 스킬로 인식됩니다;
|
||||
> - 업로드 후 목록이 바로 새로고침되지 않으면 페이지 오른쪽 상단의 **새로고침**을 수동으로 클릭하여 다시 불러올 수 있습니다。
|
||||
---
|
||||
|
||||
<a id="sec-14"></a>
|
||||
## 11. 문제와 대응 빠른 참조
|
||||
|
||||
<a id="sec-14-storage"></a>
|
||||
### 11.1 스토리지 문제 전용 처리(PV/PVC)
|
||||
|
||||
다음 오류가 보이는 경우:
|
||||
|
||||
```text
|
||||
0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims
|
||||
```
|
||||
|
||||
클러스터 스토리지가 자동으로 바인딩되지 않았음을 의미합니다. 이 경우 x86 단일 노드 서버 방식으로 로컬 `hostPath` PV/PVC를 수동 생성할 수 있습니다。
|
||||
|
||||
> 이 방식은 단일 노드 서버 테스트 또는 경량 환경에 적합합니다. 프로덕션 환경에서는 NFS, Ceph, 클라우드 디스크 등 정식 스토리지를 사용하는 것이 좋습니다。
|
||||
|
||||
#### 11.1.1 PV 생성
|
||||
```bash
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: mysql-pv-local
|
||||
spec:
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Delete
|
||||
hostPath:
|
||||
path: /tmp/mysql-data
|
||||
EOF
|
||||
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: minio-pv-local
|
||||
spec:
|
||||
capacity:
|
||||
storage: 10Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Delete
|
||||
hostPath:
|
||||
path: /tmp/minio-data
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 11.1.2 PVC 생성
|
||||
```bash
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: mysql-data
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
storageClassName: ""
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
volumeName: mysql-pv-local
|
||||
EOF
|
||||
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: minio-data
|
||||
namespace: clawmanager-system
|
||||
spec:
|
||||
storageClassName: ""
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
volumeName: minio-pv-local
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 11.1.3 Pod 재생성
|
||||
```bash
|
||||
kubectl delete pod --all -n clawmanager-system
|
||||
```
|
||||
|
||||
#### 11.1.4 상태 다시 확인
|
||||
```bash
|
||||
kubectl get pvc -n clawmanager-system
|
||||
kubectl get pods -n clawmanager-system -w
|
||||
```
|
||||
|
||||
예상 결과:
|
||||
- `mysql-data` / `minio-data`가 `Bound`
|
||||
- `mysql` / `minio` / `skill-scanner` / `clawmanager-app`가 최종적으로 `Running`
|
||||
|
||||
---
|
||||
|
||||
| 현상 | 원인 | 처리 |
|
||||
| :--- | :--- | :--- |
|
||||
| `kubectl`의 `localhost:8080` 연결이 거부됨 | kubeconfig가 구성되지 않음 | `KUBECONFIG`를 설정하거나 `~/.kube/config`에 복사 |
|
||||
| Pod 이미지 풀링 타임아웃 | Docker Hub / GHCR 네트워크 불안정 | 이미지 가속 또는 프록시 구성 |
|
||||
| MySQL / MinIO가 계속 `Pending` | PVC가 바인딩되지 않음 | `StorageClass`를 확인하거나 PV/PVC를 수동 생성 |
|
||||
| 브라우저에서 페이지를 열 수 없음 | NodePort가 열려 있지 않음 / `port-forward` 프로세스가 유지되지 않음 | 포트를 열거나 포워딩 터미널을 유지 |
|
||||
| 페이지는 열리지만 OpenClaw 인스턴스를 생성할 수 없음 | 보안 모델이 구성되지 않음 | 먼저 **AI Gateway → 모델**에서 보안 모델을 구성하고 활성화 |
|
||||
| 인스턴스가 오랫동안 “생성 중” 상태로 남음 | 첫 이미지 풀링에 시간이 오래 걸림 / 스토리지 또는 네트워크 문제 | 잠시 기다리고, 필요 시 Pod와 이벤트 확인 |
|
||||
|
||||
---
|
||||
|
||||
<a id="sec-15"></a>
|
||||
## 12. 권장 최종 점검 순서(자가 점검용)
|
||||
1. `kubectl get nodes`
|
||||
2. `kubectl get storageclass`
|
||||
3. `kubectl get pods -n clawmanager-system`
|
||||
4. `kubectl get pvc -n clawmanager-system`
|
||||
5. `kubectl get svc -n clawmanager-system`
|
||||
6. 브라우저에서 `https://<IP>:30443` 열기
|
||||
7. 백엔드에 로그인하여 **보안 모델 구성** 완료
|
||||
8. 워크스페이스에서 **OpenClaw Desktop** 인스턴스 생성
|
||||
Reference in New Issue
Block a user