# NexCMP 1.6.1 — full documentation > Complete NexCMP documentation in one file. Source: https://nexcmp.com/de/docs/ · generated 2026-11-02. --- # Was ist NexCMP {#what-is-nexcmp} NexCMP ist eine Software, die Sie auf **Ihrem eigenen Server** installieren, um Cloud-Infrastruktur in ein verkäufliches Produkt zu verwandeln. Sie bietet Ihnen: - ein **Kundenportal**, in dem sich Nutzer registrieren, Guthaben aufladen, virtuelle Maschinen und andere Dienste bestellen, eine Konsole öffnen, Snapshots erstellen und den Support kontaktieren; - ein **Admin-Panel** (`/admin`) zur Verwaltung von Kunden, Tarifen, Preisen, Zahlungen, Infrastruktur und Einstellungen; - **Abrechnung**: ein Wallet pro Kunde, stündliche oder monatliche Abrechnung, Rechnungen, Rabattaktionen und Ressourcenquoten; - **White-Label-Reseller**: andere Marken, die Ihre Kapazitäten unter ihrer eigenen Domain vertreiben; - eine **API**, ein Befehlszeilentool (`cmp`) und einen MCP-Server für die Automatisierung; - optionalen **AI Chat** (Support-Assistent) und **AI Agent** (Verwaltung einer VM in natürlicher Sprache). ## Womit es verbunden wird {#what-it-connects-to} NexCMP hostet keine virtuellen Maschinen selbst. Es steuert die Plattform, die dies tut. Eine *Source* (auch Provider genannt) ist eines von: | Source | Typischer Einsatz | Anleitung | |---|---|---| | Apache CloudStack | Private oder Public Cloud mit Zonen, Netzwerken, Virtual Routern und öffentlichen IPs | [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/) | | Proxmox VE | Bereits betriebene Einzelserver oder Cluster | [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/) | Weitere Module benötigen eine eigene Infrastruktur: [Bare-Metal-Server](https://nexcmp.com/de/docs/infrastructure/dedicated/), [VPN- und Proxy-Knoten](https://nexcmp.com/de/docs/infrastructure/vpn-proxy-nodes/), [S3 Object Storage](https://nexcmp.com/de/docs/infrastructure/s3/), [Kubernetes und Private Cloud](https://nexcmp.com/de/docs/infrastructure/kubernetes-and-private-cloud/). In [Infrastructure requirements](https://nexcmp.com/de/docs/infrastructure/requirements/) finden Sie eine Tabelle, die alle abdeckt. ## Wie es aufgebaut ist {#how-it-is-built} NexCMP ist ein einzelnes Programm mit zwei systemd-Diensten auf einem Ubuntu-Server: - `nexcmp` — der Webserver: Kundenportal, Admin-Panel, API, Setup-Assistent; - `nexcmp-vmd` — der Hintergrunddienst: Provisionierungs-Jobs, Synchronisation mit CloudStack oder Proxmox, Abrechnungsläufe. Daten befinden sich in `/var/lib/nexcmp` (SQLite-Datenbanken und -Dateien), die Konfiguration in `/etc/nexcmp`, das Programm in `/opt/nexcmp`. Siehe [Architecture](https://nexcmp.com/de/docs/infrastructure/architecture/) für die vollständige Übersicht. ## Wie es weitergeht {#where-to-go-next} 1. Überprüfen Sie die [requirements](https://nexcmp.com/de/docs/getting-started/requirements/). 2. Besorgen Sie sich eine Lizenz — [License and purchase](https://nexcmp.com/de/docs/getting-started/license-and-purchase/). 3. [Install](https://nexcmp.com/de/docs/getting-started/installation/), führen Sie anschließend den [setup wizard](https://nexcmp.com/de/docs/getting-started/setup-wizard/) aus. 4. Verbinden Sie Ihre Plattform: [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/) oder [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/). --- # Anforderungen an den NexCMP-Server {#requirements-for-the-nexcmp-server} Diese Seite behandelt den Server, auf dem NexCMP ausgeführt wird. Was Ihr Apache CloudStack, Proxmox VE oder eine andere Infrastruktur benötigt, finden Sie unter [Infrastructure requirements](https://nexcmp.com/de/docs/infrastructure/requirements/). ## Server {#server} | Komponente | Anforderung | Vom Installer geprüft | |---|---|---| | Betriebssystem | Ubuntu **22.04** oder **24.04** | Ja — bricht bei allem anderen mit einem Fehler ab | | CPU-Architektur | x86_64 | Ja | | Arbeitsspeicher | Mindestens 2 GB (das Installationsprogramm verweigert den Dienst unter ca. 1.8 GB) | Ja | | Freier Speicher | 8 GB frei auf `/` minimum | Ja | | Berechtigungen | root (`sudo`) | Ja | | Pakete | `curl`, `ca-certificates`, `zstd`, `tar`, `openssl`, `python3`, `openssh-client` — werden automatisch installiert | Wird bei Fehlen installiert | | Mit HTTPS | `nginx` und `certbot` — werden automatisch installiert, es sei denn, Sie übergeben `--no-nginx` | Wird bei Fehlen installiert | ::: tip Dimensionierung Eine kleine Installation (ein paar Hundert Kunden) läuft problemlos auf 2 vCPU / 4 GB RAM. Die Festplattennutzung wird von den SQLite-Datenbanken sowie den optionalen Update- und Backup-Kopien dominiert — planen Sie für den Produktivbetrieb 20 GB oder mehr ein. ::: ## Netzwerk {#network} | Richtung | Port | Zweck | |---|---|---| | Eingehend | 80/tcp | Let's Encrypt-Validierung und Weiterleitung zu HTTPS | | Eingehend | 443/tcp | Kundenportal, Admin-Konsole, API | | Eingehend | 3000/tcp | Nur für den Setup-Assistenten bei der Erstinstallation und Notfallzugriff — siehe [Installation](https://nexcmp.com/de/docs/getting-started/installation/#the-panel-port-3000) | | Ausgehend | 443/tcp zu `nexcmp.com` | Lizenzaktivierung, tägliche Lizenzprüfung, Updates | | Ausgehend | zu Ihrer CloudStack API / Proxmox API | Bereitstellung und Synchronisierung | | Ausgehend | 443/tcp zu von Ihnen aktivierten Zahlungs-, E-Mail- und AI-Anbietern | Stripe, PayPal, SMTP, AI-Anbieter und so weiter | Der Server benötigt eine **öffentliche IPv4-Adresse**, wenn Let's Encrypt direkt ein Zertifikat ausstellen soll. Wenn die Domain über Cloudflare proxied wird, lesen Sie [DNS and Cloudflare](https://nexcmp.com/de/docs/getting-started/dns-and-cloudflare/). ## DNS - Eine **Hauptdomain** (zum Beispiel `cloud.example.com`) — das Portal ist unter `https://cloud.example.com/` und die Admin-Konsole unter `https://cloud.example.com/admin` erreichbar. - Optional: `admin.` und `partner.`. Wenn diese Namen auf den Server (oder auf Cloudflare) aufgelöst werden, fügt der Installer sie dem Zertifikat hinzu. - Die Domain muss mit der auf Ihrer Lizenz registrierten übereinstimmen. ## Auf diesem Server nicht erforderlich {#not-required-on-this-server} NexCMP läuft als gewöhnlicher, unprivilegierter Service-Benutzer (`nexcmp`). Es benötigt zur Laufzeit **weder** root, Docker, einen separaten Datenbankserver, Redis noch eine Hypervisor-Software. --- # Lizenz und Kauf {#license-and-purchase} > **Wo im Adminbereich:** System › Admin › License & updates (`/license`) NexCMP wird mit einem **Lizenzschlüssel** aktiviert, den Sie in Ihrem [NexCMP-Konto](https://nexcmp.com/licenses) verwalten. Editionen und aktuelle Preise finden Sie unter [nexcmp.com/pricing](https://nexcmp.com/pricing); diese Seite erklärt das Verhalten der Lizenz nach dem Erwerb. ## Lizenz erhalten {#get-a-license} 1. Erstellen Sie ein Konto auf [nexcmp.com](https://nexcmp.com/register) und bestätigen Sie Ihre E-Mail-Adresse. 2. Wählen Sie eine Edition: - **NexCMP Free** — für Netzbetreiber mit eigener ASN und einem auf ihren Namen registrierten Subnetz. Senden Sie eine Anfrage an [nexcmp.com/deploy](https://nexcmp.com/deploy) (Unternehmen, ASN, Subnetz, Panel-Domain). Ihre Konto-E-Mail muss zur Unternehmensdomain passen, die im öffentlichen Register (WHOIS) für die ASN oder das Subnetz hinterlegt ist. Jede Anfrage wird geprüft; Sie erhalten bei Entscheidung eine E-Mail, und der Lizenzschlüssel erscheint erst nach der Freigabe. - **NexCMP Source** — ein einmaliges Upgrade, keine ASN erforderlich. Siehe [nexcmp.com/pricing](https://nexcmp.com/pricing). 3. Öffnen Sie Ihre Lizenzseite. Dort werden der **Lizenzschlüssel** (Format `NXC-XXXXX-XXXXX-XXXXX-XXXXX`), die **Hauptdomain** und ein fertiger Installationsbefehl angezeigt. ::: warning Schlüssel geheim halten Der Lizenzschlüssel aktiviert eine Installation. Behandeln Sie ihn wie ein Passwort: fügen Sie ihn weder in Tickets, Chats noch in Screenshots ein. ::: ## Inhalt einer Lizenz {#what-a-license-contains} | Feld | Bedeutung | |---|---| | Hauptdomain | Der Hostname, auf dem Ihr Portal läuft. Der Schlüssel wird bei der Aktivierung an ihn gebunden. | | Reseller-Domains | Zusätzliche Hostnames, die als White-Label-Portale bereitgestellt werden — siehe [Resellers](https://nexcmp.com/de/docs/customers/resellers/). | | Updates bis | Datum, bis zu dem Sie **Updates und Fehlerbehebungen** erhalten. Eine Free-Lizenz beginnt mit **1 Jahr** ab dem Tag der Freigabe; verlängern Sie diese für $99 pro Jahr auf Ihrer Lizenzseite. Sicherheitsupdates werden auch nach diesem Datum stets bereitgestellt. | | Status | `active`, oder suspended / expired / revoked. | ## Nach Ablauf des kostenlosen Jahres {#when-the-free-year-ends} Die Software **läuft weiter**, wenn das Datum unter „Updates bis“ überschritten wird: Kunden, Dienste und Abrechnung sind nicht betroffen. Sie erhalten keine neuen Funktionsupdates und Fehlerbehebungen mehr (Sicherheitsupdates treffen weiterhin ein). Verlängern Sie für $99 pro Jahr auf Ihrer Lizenzseite unter [nexcmp.com/licenses](https://nexcmp.com/licenses), um fortzufahren; die Verlängerung fügt dem aktuellen Enddatum 12 Monate hinzu. NexCMP Free beinhaltet ausschließlich Fehlerbehebungen — keinen technischen Support und keine Apps. ## Was NexCMP Source hinzufügt {#what-nexcmp-source-adds} Eine Source-Lizenz ist ein einmaliges Upgrade Ihrer Lizenz für $1,999: den vollständigen Quellcode, alle NexCMP-Apps (Android, iOS, Windows, macOS, Linux, Chrome / Edge / Brave und Firefox) für Sie erstellt und gebrandet sowie 30 Arbeitstage mit einem Experten — kostenlose Migration von VMware, WHMCS oder einem anderen Panel oder eine komplette Einrichtung von A bis Z. Neue Quellcode-Releases sind für 12 Monate enthalten; eine Verlängerung im Anschluss ($99 pro Jahr) ist optional, und der heruntergeladene Quellcode gehört dauerhaft Ihnen. Siehe die [Source license terms](https://nexcmp.com/legal/source-license/). ## Wie die Installation ihre Lizenz prüft {#how-the-installation-checks-its-license} - Bei der Installation aktiviert der Server den Schlüssel für Ihre Domain und erhält ein **signiertes Token**. - Das Token wird alle **24 Stunden** automatisch erneuert. Es bleibt **14 Tage** lang gültig, sodass ein kurzer Internetausfall unschädlich ist. - Alle Versionen und Token werden über eine im Programm integrierte Ed25519-Signatur verifiziert; ein manipulierter Download wird abgelehnt. Überprüfen Sie den Status jederzeit in der Verwaltungskonsole oder mit `sudo nexcmp status`. ## Wenn die Lizenz ungültig ist {#if-the-license-is-not-valid} Wenn das Token abläuft, die Lizenz ausgesetzt wird oder die Domain nicht mehr übereinstimmt: - Kunden **können keine neuen Dienste erstellen** und in der Verwaltungskonsole wird ein Banner angezeigt; - bereits laufende Dienste, **die Abrechnung und bestehende Kunden sind nicht betroffen**; - beheben Sie die Ursache (verbinden Sie den Server wieder mit dem Internet, erneuern Sie die Lizenz unter [nexcmp.com/licenses](https://nexcmp.com/licenses)) und klicken Sie in Lizenz & Aktualisierungen auf **Check now**. ## Umzug auf einen neuen Server oder eine neue Domain {#moving-to-a-new-server-or-domain} Aktivieren Sie die Software auf dem neuen Server mit demselben Schlüssel und der registrierten Domain (siehe [Installation](https://nexcmp.com/de/docs/getting-started/installation/)). Um die registrierte Domain zu ändern, tun Sie dies zuerst auf Ihrer Lizenzseite unter [nexcmp.com/licenses](https://nexcmp.com/licenses) und führen Sie dann den Installer mit dem neuen Parameter `--domain` erneut aus. --- # NexCMP installieren {#install-nexcmp} Der Installer ist ein einzelnes Skript, das von Ihrem Lizenzserver bereitgestellt wird. Er prüft das System, aktiviert Ihre Lizenz, lädt das Programm herunter und verifiziert es, installiert die Dienste und richtet (optional) nginx mit einem Let's Encrypt-Zertifikat ein. ## Bevor Sie beginnen {#before-you-start} - Ein Server, der die [Anforderungen](https://nexcmp.com/de/docs/getting-started/requirements/) erfüllt, sowie Root-Zugriff. - Ihr **Lizenzschlüssel** und Ihre **Hauptdomain** von Ihrer [Lizenzseite](https://nexcmp.com/licenses) — siehe [Lizenz und Kauf](https://nexcmp.com/de/docs/getting-started/license-and-purchase/). - Ein DNS-Eintrag für die Domain — siehe [DNS und Cloudflare](https://nexcmp.com/de/docs/getting-started/dns-and-cloudflare/). Sie können die Software auch zuerst installieren und das DNS später einrichten; der Installer zeigt Ihnen an, was fehlt, und kann einfach erneut ausgeführt werden. ## Installation {#install} 1. Melden Sie sich am Server an und werden Sie Root (oder stellen Sie `sudo` voran). 2. Führen Sie den Befehl von Ihrer Lizenzseite aus. Er sieht folgendermaßen aus: ```bash curl -fsSL https://nexcmp.com/install.sh | sudo bash -s -- \ --license NXC-XXXXX-XXXXX-XXXXX-XXXXX \ --domain cloud.example.com \ --email admin@example.com ``` 3. Warten Sie auf die Häkchen. Eine Neuinstallation dauert wenige Minuten; der erste Start erstellt das Datenbankschema und kann auf langsamen Festplatten bis zu einer Minute dauern. 4. Lesen Sie die Zusammenfassung am Ende. Sie gibt die Portal- und Admin-URLs, den **Setup-Code** sowie den nächsten Schritt aus. ![Der Installer schließt mit der Portal-URL, der Admin-URL und dem Einmal-Setup-Code ab](https://nexcmp.com/de/docs/images/getting-started/installation-01-finish.webp) ## Parameter {#parameters} | Parameter | Standard | Bedeutung | |---|---|---| | `--license KEY` | bei Erstinstallation erforderlich | Der Lizenzschlüssel. | | `--domain NAME` | bei Erstinstallation erforderlich | Hauptdomain. Muss zur Lizenz passen. `https://` und angehängte Pfade werden entfernt. | | `--email ADDRESS` | keine | Kontakt-E-Mail für Let's Encrypt-Ablaufhinweise. Ohne diese wird das Zertifikat ohne E-Mail registriert. | | `--port N` | `3000` | Lokal Port des Panels (1–65535). | | `--no-nginx` | aus | Nginx / TLS weder installieren noch konfigurieren. Verwenden Sie dies, wenn Sie einen eigenen Reverse Proxy betreiben oder NexCMP zunächst ansehen möchten. | | `--behind-cloudflare` | automatisch erkannt | Modus „Die Domain wird von Cloudflare proxied“ erzwingen. Wird normalerweise aus dem DNS erkannt. | | `--channel NAME` | `stable` | Release-Kanal. | Das erneute Ausführen des Installers **ohne Parameter** verwendet die gespeicherten Einstellungen (`/etc/nexcmp/install.conf`) wieder und führt ein sicheres Upgrade durch, wobei Daten, Konfiguration und Konten erhalten bleiben. Genau das tut `sudo nexcmp update`. ## Was der Installer tut {#what-the-installer-does} 1. **Überprüft das System** — Ubuntu 22.04/24.04, x86_64, mindestens 2 GB RAM, 8 GB freier Festplattenspeicher. 2. **Installiert Pakete**, die benötigt werden (`curl`, `zstd`, `openssl`, `python3`, `openssh-client` …). 3. **Erstellt den Service-User** `nexcmp` sowie die Verzeichnisse: `/opt/nexcmp` (Programm, im Besitz von root, für den Dienst schreibgeschützt), `/etc/nexcmp` (Konfiguration), `/var/lib/nexcmp` (Daten), `/var/log/nexcmp`. 4. **Aktiviert die Lizenz** für die Domain und speichert eine feste Instanz-ID für diese Maschine. 5. **Lädt das neueste Release herunter, für das Sie berechtigt sind**, und prüft anschließend dessen SHA-256-Prüfsumme sowie die Ed25519-Signatur. Ein Release ohne gültige Signatur wird abgelehnt. Eine bereits laufende, neuere Version wird niemals herabgestuft. 6. **Schreibt Konfiguration und systemd-Units** (`nexcmp`, `nexcmp-vmd`, `nexcmp-update`) und startet die Dienste; wartet, bis `/healthz` antwortet. 7. **Richtet nginx und TLS ein** (sofern nicht `--no-nginx`): Ruft ein Let's-Encrypt-Zertifikat mittels certbot (webroot-Challenge) für die Domain sowie für `admin.` / `partner.` ab, falls diese Namen ebenfalls aufgelöst werden. Wenn das DNS noch nicht auf diesen Server (oder Cloudflare) verweist, wird dieser Schritt übersprungen und entsprechend ausgegeben. 8. **Gibt eine Zusammenfassung aus** mit den URLs und — falls noch kein Administrator existiert — dem **Einrichtungscode**. ## Der Port des Panels (3000) {#the-panel-port-3000} - Während der Erstinstallation lauscht das Panel auf `0.0.0.0:3000`, damit Sie den Einrichtungsassistenten unter `http://:3000/setup` öffnen können. - Sobald der Assistent abgeschlossen **und** TLS aktiv ist, lauscht das Panel nur noch auf `127.0.0.1`; nginx leitet `https://` an dieses weiter. - Für Notfälle (nginx beschädigt, DNS falsch) können Sie den Port für eine begrenzte Zeit öffnen: `sudo nexcmp open-port 30` (30 Minuten, danach schließt er sich selbst) — oder nutzen Sie einen SSH-Tunnel: `ssh -L 3000:127.0.0.1:3000 ` und rufen Sie `http://127.0.0.1:3000/` auf. ::: warning Klares HTTP Port 3000 verwendet unverschlüsseltes HTTP. Verwenden Sie ihn nur für den Einrichtungsassistenten in einem vertrauenswürdigen Netzwerk oder über einen SSH-Tunnel. Lassen Sie ihn nicht offen. ::: ## Installation ohne öffentliche Domain (Test- oder Laborumgebung) {#installing-without-a-public-domain-lab-or-test} Sie können die Installation auf einer Maschine durchführen, die noch über keinen DNS-Eintrag verfügt: ```bash curl -fsSL https://nexcmp.com/install.sh | sudo bash -s -- \ --license NXC-XXXXX-XXXXX-XXXXX-XXXXX --domain lab.example.com --no-nginx ``` Öffnen Sie den Assistenten anschließend über einen SSH-Tunnel (`ssh -L 3000:127.0.0.1:3000 `, rufen Sie `http://127.0.0.1:3000/setup` auf). Führen Sie den Installer nach dem Einrichten des DNS erneut ohne `--no-nginx` aus. ## Docker und Kubernetes {#docker-and-kubernetes} Es gibt kein veröffentlichtes Container-Image. Der Installer (eine native systemd-Installation) ist die unterstützte Installationsmethode. ## Verifizierung {#verify} ```bash sudo nexcmp status ``` Sie sollten die Version, `nexcmp: active`, `nexcmp-vmd: active`, `healthz: ok` und — bis zum Abschluss des Assistenten — den Einrichtungscode sehen. Fahren Sie mit dem [setup wizard](https://nexcmp.com/de/docs/getting-started/setup-wizard/) fort. Sollte ein Fehler auftreten, lesen Sie unter [Installation errors](https://nexcmp.com/de/docs/troubleshooting/installation-errors/) nach. --- # DNS und Cloudflare {#dns-and-cloudflare} NexCMP benötigt einen DNS-Namen — seine **Hauptdomain** — und funktioniert in zwei Modi. ## Modus A: DNS verweist direkt auf den Server {#mode-a-dns-points-straight-at-the-server} 1. Erstellen Sie einen **A**-Record für `cloud.example.com → ` (sowie einen **AAAA**-Record, falls der Server über IPv6 verfügt). 2. Optional, falls von Ihnen genutzt: `admin.cloud.example.com` und `partner.cloud.example.com`, die auf dieselbe IP-Adresse verweisen. 3. Führen Sie den [installer](https://nexcmp.com/de/docs/getting-started/installation/) aus (bzw. erneut aus). Er erkennt, dass der Name auf die öffentliche IP-Adresse des Servers aufgelöst wird, und beschafft ein Let's-Encrypt-Zertifikat über die HTTP-01-Challenge auf Port 80. ## Modus B: Die Domain wird von Cloudflare per Proxy durchgeleitet {#mode-b-the-domain-is-proxied-by-cloudflare} Erstellen Sie dieselbe Einträge mit der orangefarbenen Wolke (**Proxied**). Das Installationsprogramm erkennt, dass der Name sich nur in Cloudflare-Adressen auflöst, und wechselt in den Cloudflare-Modus: - nginx lauscht weiterhin auf 80/443 auf Ihrem Server; - die echte IP des Besuchers wird aus dem `CF-Connecting-IP`-Header gelesen — **nur** bei Verbindungen aus den veröffentlichten IP-Bereichen von Cloudflare, sodass sie von niemand anderem gefälscht werden kann; - das Zertifikat wird über Let's Encrypt bezogen (Cloudflare leitet die Challenge an Ihren Ursprung weiter); falls das noch nicht möglich ist, wird ein **selbstsigniertes Ursprungszertifikat** erstellt, damit der Modus „Full“ funktioniert, und ein späterer erneuter Durchlauf des Installers aktualisiert auf Let's Encrypt. Sie können diesen Modus mit `--behind-cloudflare` erzwingen. ::: important SSL/TLS-Modus in Cloudflare festlegen Gehen Sie in Cloudflare zu **SSL/TLS › Overview** und wählen Sie **Full (strict)**, sobald der Installer ein Let's Encrypt-Zertifikat meldet. Verwenden Sie bei einem selbstsignierten Ursprungszertifikat **Full**. **Flexible** führt zu Weiterleitungsschleifen. ::: ::: tip Wenn „Always Use HTTPS“ aktiv ist, sendet Cloudflare die Validierungsanfrage an Port 443 Ihres Ursprungs. Der Installer handhabt dies, indem er zuerst das temporäre selbstsignierte Zertifikat erstellt und dann Let's Encrypt erneut versucht. ::: ## Überprüfung {#check-it} ```bash dig +short cloud.example.com # A record (a Cloudflare address in mode B) curl -I https://cloud.example.com/healthz sudo certbot certificates # certificate name, domains and expiry ``` Zertifikate werden automatisch über den Timer von certbot erneuert. Die Erneuerung verwendet das Webroot `/var/www/nexcmp-acme`, daher muss Port 80 erreichbar bleiben (direkt oder über Cloudflare). ## Häufige Probleme {#common-problems} | Symptom | Ursache | Behebung | |---|---|---| | Installer meldet „DNS … does not point to … (nor to Cloudflare) — skipping nginx/TLS“ | DNS-Eintrag fehlt, ist falsch oder noch nicht propagiert | Eintrag korrigieren, auf Propagation warten, Installer erneut ausführen. | | Browser zeigt `ERR_TOO_MANY_REDIRECTS` hinter Cloudflare | SSL-Modus ist **Flexible** | Setzen Sie **Full (strict)** (oder **Full**). | | Cloudflare-Fehler 525/526 | Ursprungszertifikat abgelehnt | Verwenden Sie **Full** mit einem selbstsignierten Ursprungszertifikat oder **Full (strict)** mit Let's Encrypt. | | In den Protokollen zeigen alle Besucher Cloudflare-IPs | Nicht im Cloudflare-Modus | Führen Sie den Installer mit `--behind-cloudflare` erneut aus. | Mehr dazu unter [Installation errors](https://nexcmp.com/de/docs/troubleshooting/installation-errors/). --- # Setup-Assistent {#setup-wizard} > **Wo im Admin-Bereich:** Der Assistent ist eine eigenständige Seite unter `/setup`, die nur angezeigt wird, bis der erste Administrator existiert. Danach befinden sich dieselben Prüfungen unter System › Admin › Start (`/setup`). Der Assistent verwandelt eine frische Installation in vier kurzen Schritten in ein funktionierendes Panel. Er ist auf Port 3000 (`http://:3000/setup`) oder, wenn TLS bereits aktiv ist, unter `https:///setup` erreichbar. ::: warning Der Assistent verschwindet nach Schritt 3 Sobald der Administrator erstellt ist, wird der Assistent geschlossen und der Setup-Code gelöscht. Um das Panel danach zu erreichen, verwenden Sie die Admin-Konsole. ::: ## Schritt 0 — Setup-Code {#step-0-—-setup-code} Der Installer gibt am Ende einen **einmaligen Setup-Code** aus. Sie können ihn erneut auslesen mit: ```bash sudo nexcmp status ``` Fügen Sie ihn in **Setup code** ein und klicken Sie auf **Continue**. Der Code schützt den Assistenten: Niemand, der den offenen Port findet, kann ohne ihn den Administrator erstellen. ![Schritt 0 des Setup-Assistenten fordert den einmaligen Setup-Code an](https://nexcmp.com/de/docs/images/getting-started/setup-wizard-00-code.webp) ## Schritt 1 — Lizenz {#step-1-—-license} | Feld | Wert | |---|---| | Lizenzschlüssel | `NXC-XXXXX-XXXXX-XXXXX-XXXXX` – vom Installer voraktiviert, daher zeigt dieser Schritt normalerweise "Activated for cloud.example.com" an | | Hauptdomain | Die auf der Lizenz registrierte Domain | Wenn der Installer die Lizenz bereits aktiviert hat, erkennt der Assistent dies und fährt fort. Geben Sie ansonsten den Schlüssel sowie die Domain ein und klicken Sie auf **Activate**. Fehler werden in Rot angezeigt – siehe [Installation errors](https://nexcmp.com/de/docs/troubleshooting/installation-errors/). ![Schritt 1 des Setup-Assistenten zeigt die für die Hauptdomain bereits aktivierte Lizenz](https://nexcmp.com/de/docs/images/getting-started/setup-wizard-01-license.webp) ## Schritt 2 – CloudStack (oder später verbinden) {#step-2-—-cloudstack-or-connect-later} Sie haben zwei Möglichkeiten: - **Jetzt verbinden.** Geben Sie die CloudStack-**API URL** (`https://cloudstack.example.com/client/api`), den **API key** und den **Secret key** ein, klicken Sie auf **Test connection** und wählen Sie dann die **Zone**, das **Guest network for customer VMs**, einen **Zone display name** sowie das zweistellige **Country** aus. Klicken Sie auf **Save CloudStack**. - **Später verbinden.** Klicken Sie auf **Connect later**. Alles andere funktioniert; Sie verbinden CloudStack oder Proxmox VE im Anschluss unter Infrastructure. Bis dahin erinnert Sie das Status-Panel daran, dass keine Quelle verbunden ist. ![Schritt 2 des Assistenten, bei dem die Felder für CloudStack-API-URL, API-Schlüssel und Secret Key mit Beispielwerten gefüllt sind](https://nexcmp.com/de/docs/images/getting-started/setup-wizard-02-cloudstack-form.webp) ::: important Einen dedizierten CloudStack-Account verwenden Verwenden Sie nicht den ROOT-Administratorschlüssel. Erstellen Sie eine dedizierte Domain sowie ein Konto für NexCMP und verwenden Sie dessen API-Schlüssel – siehe [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/#create-a-dedicated-account-and-api-key). Der Assistent prüft, ob das gewählte Netzwerk zur Zone und zum Konto dieses Schlüssels gehört. ::: ![Nach Test connection: die Zonen- und Gastnetzwerklisten sowie die Felder für Zonenanzeigenamen und Land](https://nexcmp.com/de/docs/images/getting-started/setup-wizard-02b-cloudstack-picked.webp) Wenn Sie nur **Proxmox VE** verwenden möchten, wählen Sie **Connect later** und folgen Sie [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/). ## Schritt 3 – Administrator und Marke {#step-3-—-administrator-and-brand} | Feld | Regeln | |---|---| | Admin-E-Mail (Anmeldung) | Gültige E-Mail-Adresse. Dies ist Ihr Administrator-Benutzername. | | Passwort | Mindestens 12 Zeichen mit Buchstaben und Ziffern. | | Markenname | Wird Ihren Kunden angezeigt (Standard: "Cloud"). Bis zu 60 Zeichen. | | Support-E-Mail | Standardmäßig die Admin-E-Mail. | ![Schritt 3 des Assistenten mit Administrator-E-Mail, Passwort, Markenname und Support-E-Mail](https://nexcmp.com/de/docs/images/getting-started/setup-wizard-03-admin.webp) Klicken Sie auf **Finish setup**. Das Panel wird neu gestartet (ca. 1–2 Sekunden) und die Seite leitet Sie zur Admin-Anmeldung unter `https:///admin/` weiter. Wenn diese Adresse noch nicht antwortet (DNS oder TLS ausstehend), werden Sie stattdessen zur aktuellen Adresse `/` weitergeleitet. ![Der Assistent nach Abschluss mit der Meldung, dass das Panel neu gestartet wird](https://nexcmp.com/de/docs/images/getting-started/setup-wizard-03-done.webp) ## Was der Assistent für Sie einrichtet {#what-the-wizard-sets-up-for-you} - Markenname, Site-URL (`https://`), Admin-URL (`https:///admin`), Konsolen-URL (`https:///console`), Support-E-Mail und Absendername. - Standardeinstellungen für die mit NexCMP ausgelieferten Module: DDoS & BGP, AI und Web-SSH sind **aus**; Bandbreitenmessung ist **an**. Siehe [Modules](https://nexcmp.com/de/docs/infrastructure/modules/). - Wenn Sie CloudStack verbunden haben: Provider Nr. 1, dessen erste Zone, das Gastnetzwerk sowie ein Betriebs-Schlüsselpaar, das an Kunden-VMs angehängt wird, damit Sie diese unterstützen können. Weiter: [First login](https://nexcmp.com/de/docs/getting-started/first-login/). --- # Erste Anmeldung und nächste Schritte {#first-login-and-next-steps} > **Im Admin-Bereich:** Die Anmeldeseite lautet `/admin`; nach der Anmeldung gelangen Sie auf Overview › Dashboard. ## Adressen {#addresses} | Was | URL | |---|---| | Kundenportal | `https:///` | | Admin-Konsole | `https:///admin` | | Setup / Notfall über IP | `http://:3000/` (siehe [den Port des Panels](https://nexcmp.com/de/docs/getting-started/installation/#the-panel-port-3000)) | | Integritätsprüfung | `https:///healthz` | ## Anmelden {#sign-in} 1. Öffnen Sie `https:///admin`. 2. Geben Sie die Administrator-E-Mail-Adresse und das Passwort ein, die Sie im Assistenten erstellt haben. 3. Sie landen auf dem **Dashboard**. Oben wird ein Banner angezeigt, wenn die Lizenz ungültig ist oder keine Quelle verbunden ist. ![Die Admin-Anmeldeseite](https://nexcmp.com/de/docs/images/getting-started/first-login-01-login.webp) ## Empfohlene Checkliste {#recommended-checklist} Arbeiten Sie diese der Reihe nach ab — jedes Element verlinkt auf seine Seite. | # | Aufgabe | Seite | |---|---|---| | 1 | Aktivieren Sie die Zwei-Faktor-Authentifizierung für sich selbst | [Security](https://nexcmp.com/de/docs/administration/security/) | | 2 | Verbinden einer Infrastrukturquelle (falls Sie „Connect later“ gewählt haben) | [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/) oder [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/) | | 3 | Zonen sowie die Maschinenvorlagen / OS-Liste überprüfen | [Zones](https://nexcmp.com/de/docs/infrastructure/zones/), [Templates](https://nexcmp.com/de/docs/infrastructure/templates/) | | 4 | Tarife und Preise überprüfen | [Plans](https://nexcmp.com/de/docs/catalog/plans/) | | 5 | Logo, Farben und rechtliche Seiten festlegen | [Branding](https://nexcmp.com/de/docs/customers/branding/), [Legal](https://nexcmp.com/de/docs/customers/legal/) | | 6 | Ausgehende E-Mails konfigurieren und einen Test senden | [SMTP and emails](https://nexcmp.com/de/docs/administration/smtp-and-emails/) | | 7 | Mindestens einen Zahlungskanal aktivieren und eine Aufladung testen | [Payment channels](https://nexcmp.com/de/docs/billing/payment-channels/) | | 8 | Entscheiden, welche Module Sie verkaufen | [Modules](https://nexcmp.com/de/docs/infrastructure/modules/) | | 9 | Eine Testbestellung als Kunde aufgeben und löschen | [Ordering](https://nexcmp.com/de/docs/portal/ordering/) | | 10 | Ein erstes Backup erstellen | [Backup and restore](https://nexcmp.com/de/docs/getting-started/backup-and-restore/) | ## Erste Bestellung aufgeben (Rauchtest) {#create-your-first-order-smoke-test} 1. Öffnen Sie das Kundenportal in einem privaten Fenster und registrieren Sie ein Testkonto. 2. Guthaben hinzufügen (einen Gutschein oder eine Testzahlung). 3. Bestellen Sie den kleinsten Tarif in Ihrer Zone. 4. Beobachten Sie, wie er im Admin-Bereich unter Services › Virtual Machines erscheint, öffnen Sie seine Konsole und löschen Sie ihn dann. Wenn die VM nicht den Status *running* erreicht, öffnen Sie **Infrastructure › Cloud provider › Sync & errors** und lesen Sie den Fehler. --- # NexCMP aktualisieren {#updating-nexcmp} > **Im Admin-Bereich:** System › Admin › License & updates (`/license`) → Karte *Update*. ## Was Sie erhalten {#what-you-receive} | Release-Typ | Bereitgestellt am | |---|---| | Sicherheits-Fix | **Immer**, selbst nach Ihrem Datum für „Updates bis“ | | Feature-Release | Nur wenn es **am oder vor** Ihrem Datum für „Updates bis“ veröffentlicht wurde | Sie sehen beide Daten unter **License & updates**. Verlängern Sie die Berechtigung unter [nexcmp.com/licenses](https://nexcmp.com/licenses). ## Über die Admin-Konsole aktualisieren {#update-from-the-admin-console} 1. Öffnen Sie **System › Admin › License & updates**. 2. Klicken Sie in der Karte **Update** auf **Check for update**. Die Karte zeigt die aktuelle Version, die neueste installierbare Version, ein *Security*-Tag falls relevant und das Changelog. 3. Klicken Sie auf **Update to X.Y.Z** und bestätigen Sie. Das Programm lädt das Release herunter, überprüft dessen **SHA-256- und Ed25519-Signatur**, ersetzt die Binärdatei atomar (wobei eine `.bak`-Kopie behalten wird) und startet neu. Planen Sie etwa **10 Sekunden** Downtime ein. 4. Laden Sie die Seite neu und überprüfen Sie die Version oben rechts unter License & updates. ![Die Update-Karte mit der laufenden Version und dem Button Check for new version](https://nexcmp.com/de/docs/images/getting-started/updating-01-card.webp) ## Über die Befehlszeile aktualisieren {#update-from-the-command-line} ```bash sudo nexcmp update ``` Dies führt das Installationsprogramm aus, das *in dem aktuell installierten Release enthalten* ist (kein zu diesem Zeitpunkt heruntergeladenes Skript), mit den gespeicherten Parametern aus `/etc/nexcmp/install.conf`. Es aktualisiert die Binärdatei, die systemd-Units, die Nginx-Templates und den Node-Agent und behält Daten, Konfiguration und Konten bei. ::: tip Kein Downgrade Wenn der Server eine ältere Version als die laufende anbietet, behält das Installationsprogramm die laufende Version bei. ::: ## Vor dem Update {#before-you-update} 1. Erstellen Sie ein Backup: `sudo nexcmp backup` — siehe [Backup and restore](https://nexcmp.com/de/docs/getting-started/backup-and-restore/). 2. Lesen Sie das Changelog in der Update-Karte. Informationen zu Änderungen seit 1.3 finden Sie unter [Release Notes bis 1.6.1](https://nexcmp.com/de/docs/getting-started/release-notes/), einschließlich des VPN-Agent-Updates und der Bare-Metal-Preisregeln. 3. Aktualisieren Sie während einer ruhigen Phase; laufende virtuelle Maschinen werden nicht angetastet, aber Kunden können das Portal für einige Sekunden nicht nutzen. ## Nach dem Update {#after-you-update} - Führen Sie `sudo nexcmp status` aus und bestätigen Sie, dass beide Dienste aktiv sind. - Öffnen Sie das Admin-Dashboard und die Seite **Needs attention**. - Datenbankmigrationen werden beim ersten Start der neuen Version automatisch ausgeführt. - Wenn Sie VPN-Nodes betreiben, aktualisieren Sie deren Agent separat und prüfen Sie die Verbrauchswerte. Das Aktualisieren des Panels stellt den neuen Agenten bereit; es garantiert nicht, dass jeder Remote-Node ihn bereits ausführt. Siehe [Datenvolumen für VPN-Nodes](https://nexcmp.com/de/docs/infrastructure/vpn-proxy-nodes/#data-allowance-on-a-vpn-node). Wenn ein Update fehlschlägt, siehe [Update errors](https://nexcmp.com/de/docs/troubleshooting/update-errors/). --- # Release Notes {#release-notes} > **Im Adminbereich:** System › Admin › License & updates (`/license`), die Karte **Update**. Diese Hinweise behandeln Änderungen nach 1.3 bis einschließlich **NexCMP 1.6.1**. Erstellen Sie vor dem Update ein Backup und nutzen Sie das Release, das in der Karte **Update** Ihrer Installation angeboten wird. Siehe [NexCMP aktualisieren](https://nexcmp.com/de/docs/getting-started/updating/) für Befehle und Signaturprüfungen. ## 1.6.1 - **Bare-Metal-Metriken:** Die Kunden-**Overview** zeigt Kacheln für CPU, RAM, Festplattenaktivität und Netzwerk mit aktuellem Verlauf. Bei fehlenden Messwerten werden ein Bindestrich und ein Grund angezeigt. Netzwerkmessungen erfordern einen Traffic-Zähler; sie werden nicht aus dem iDRAC-Hardware-Inventar abgeleitet. - **Bare-Metal-Beispielpläne:** Beispielnamen verwenden `BM-40C-`. Integrierte Beispielpläne, die Sie nicht bearbeitet haben, erhalten neutrale Namen. Bearbeitete Pläne bleiben erhalten, und ein referenzierter Plan behält seinen Code. Prüfen Sie die tatsächliche Server-Hardware, bevor Sie einen Plan zum Verkauf freigeben. - **Tarifwechsel:** Die Liste der Anfragen im Adminbereich sortiert serverseitig und behält ihre Aktionen beim horizontalen Scrollen im Blickfeld. - **Fehler melden:** Das Formular scrollt, während die Schaltflächen sichtbar bleiben. Die Passwortmaskierung behält den umgebenden Diagnosetext bei. - **Ladevorgang:** Seitenressourcen und häufig genutzte Admin-Daten werden früher geladen, um Navigationsverzögerungen zu reduzieren. Siehe [Bare-Metal-Einrichtung, Preise und Kundensteuerung](https://nexcmp.com/de/docs/infrastructure/dedicated/) und [Report a bug](https://nexcmp.com/de/docs/administration/report-a-bug/). ## 1.6.0 - **Bare-Metal-Einrichtung:** Tragen Sie die iDRAC-Netzwerke, die ISO-Serveradresse und die Panel-Callback-Adresse unter **Safety › Management network connection** ein. Beispielwerte blockieren den Produktivbetrieb, bis sie konfiguriert sind. - **ISO-Hosting:** `sudo nexcmp dedicated-setup-iso` richtet den ISO-Webserver für das Management-Netzwerk ein. Der Installer kann die Konsole und die ISO-Tools mit `--baremetal` oder den ISO-Optionen installieren. Fehlende Tools blockieren den Produktivbetrieb mit `tools_missing`. - **Bare-Metal-Preise:** Eine neue oder ungenutzte Installation startet mit USD-Preisen. Eine Installation, die bereits VND-Preisdaten enthält, behält VND bei und erfordert weiterhin einen USD/VND-Kurs. Das Update interpretiert diese bestehenden Preise nicht als Dollar. - **Kunden-Serverseite:** Vorab verlängern, Abrechnungszyklus-Wechsel planen, Tarifwechsel anfordern, Rechnungen einsehen und nach der Installation die OS-Zugangsdaten aufrufen. Ein neuer Eigentümer kann das Passwort eines früheren Eigentümers nicht einsehen. - **Kundenprofile:** Acht Tabs gliedern Overview, Services, Billing, Quota, Security, Support, Affiliate und Logs. Services teilen sich eine durchsuchbare, sortierbare Tabelle. - **Service-Aktionen:** Sperren, Entsperren, Kündigung ohne Erstattung oder Kündigung mit Erstattung nutzen einen gemeinsamen Dialog. Erstattungen fließen in die ursprüngliche Wallet oder das Guthabenkontingent zurück; Zahlungsdienstleister werden nicht automatisch erstattet. Siehe [Dedicated servers](https://nexcmp.com/de/docs/infrastructure/dedicated/) und [Managing customers](https://nexcmp.com/de/docs/customers/managing-customers/). BYOIP und das Zuweisen eines Kunden-Subnetzes zu einem Bare-Metal-Server bleiben in NexCMP weiterhin nicht verfügbar. ## 1.5.2 Der Hauptadministrator kann **Report a bug** neben **Docs** öffnen und ohne separate Anmeldung ein Ticket an das Lizenzkonto senden. Diagnosedaten sind optional. Mitarbeiter, Kunden und AI-Assistenten können über diese Aktion keine Meldungen senden. Siehe [Report a bug](https://nexcmp.com/de/docs/administration/report-a-bug/). ## 1.5.1 - **VPN-Nutzung:** Agent-Nodes melden den Datenverkehr an das Panel. Ein Abonnement, dessen GB-Kontingent aufgebraucht ist, wird gesperrt; nach einem Bandbreiten-Upgrade oder zu Beginn eines neuen Zeitraums steht es wieder zur Verfügung. Nodes ohne Nutzungsberichte zeigen **Not measured** an und werden nicht anhand des GB-Verbrauchs gesperrt. - **VPN-Agent:** Version 1.5.1 wiederholt unbestätigte Nutzungsmeldungen, überträgt beim Herunterfahren den finalen Traffic und schließt offene Verbindungen, wenn ein Endpunkt gestoppt wird. Aktualisieren Sie sowohl die Remote-Agents als auch das Panel. - **Eingestellte VPN-Add-ons:** High IP Reputation, High Concurrency und High Priority Network werden nicht mehr vertrieben. Deren Gebühren werden aus künftigen Verlängerungsbeträgen bestehender Abonnements entfernt; vergangene Zeiträume werden nicht erstattet. Wurde ein Add-on aus dem Katalog gelöscht, prüfen Sie den Verlängerungsbetrag manuell. - **Protokollbezeichnungen:** Der IPv4-HTTP-Proxy arbeitet mit reinem HTTP. IPv4-Adressen rotieren nicht. Port 443 des IPv6-Proxys bedient SOCKS5; es handelt sich nicht um einen HTTPS-Proxy-Endpunkt. - **Neuinstallation:** Die Datenbankinitialisierung wiederholt vorübergehende Migrationskonflikte zwischen Panel und Worker, sodass beim Speichern des ersten Providers kein Neustart erforderlich ist. Siehe [VPN and IPv6 proxy nodes](https://nexcmp.com/de/docs/infrastructure/vpn-proxy-nodes/). ## 1.5.0 **AI Models** ist ein optionales Gateway- und Abrechnungsmodul, das standardmäßig deaktiviert ist. Fügen Sie Modellquellen hinzu, die Sie selbst betreiben oder als Reseller anbieten dürfen, synchronisieren Sie Modelle, legen Sie Preise sowie Routen fest, aktivieren Sie die Modelle und schalten Sie den Verkauf frei. Es sind keine Provider-Konten, Modelle oder Preise gebündelt enthalten. Das Modul ist unabhängig vom Modul für AI Chat und AI Agent. Siehe [AI Models](https://nexcmp.com/de/docs/infrastructure/ai-models/). ## 1.4.2 Die Installation von IPv6-Proxy-Nodes nutzt den Daemon und das Netzwerkskript aus dem Release-Paket. Das Panel benötigt `sshpass` für die passwortbasierte SSH-Installation. Das Panel führt Rotationszeitpläne aus, und das Node-Setup schließt die Gateway-Adresse von der Vergabe aus. Über das Branding lässt sich ein individueller Anzeigename für den VPN-Dienst hinterlegen. Siehe [VPN and IPv6 proxy nodes](https://nexcmp.com/de/docs/infrastructure/vpn-proxy-nodes/). ## 1.4.0–1.4.1 - **KI-Administration:** Administrator-AI Chat, persönliche KI-Konten, Administrator-API-Keys, der Administrator-MCP-Server, OAuth-Connectors, Konfigurations-Import/Export und die Setup-Checkliste stehen zur Verfügung. Siehe [Configure with AI](https://nexcmp.com/de/docs/configure-with-ai/overview/). - **Lizenzierung:** Free- und Source-Workflows umfassen offizielle Builds und benutzerdefinierte Source-Builds. Konto, Lizenzierung, Downloads und Dokumentation nutzen `nexcmp.com`. Siehe [License and purchase](https://nexcmp.com/de/docs/getting-started/license-and-purchase/). - **Dokumentationslinks:** **Docs** im Admin-Bereich öffnet die Anleitung zur aktuellen Seite. - **Währungen:** Eine neue Installation richtet sich standardmäßig nach der Sprache des Kunden. USD/VND stammt aus einer öffentlichen Wechselkurstabelle oder Ihrem festgelegten Kurs. Siehe [Currency and exchange rates](https://nexcmp.com/de/docs/catalog/currency-and-exchange-rates/). - **Mischquellen-Zonen:** Öffentliche Cloud-Server-Preise funktionieren, wenn sich CloudStack und Proxmox VE eine Zone teilen. Tarife nutzen ihre eigene Infrastrukturquelle. - **Von Offerings abgeleitete Preise:** Der Prozentsatz ist eine Marge auf den Verkaufspreis. Eine Marge von 40% bei Kosten von $60 ergibt vor Rundungen $100. ## Upgrade-Checkliste {#upgrade-checklist} 1. Erstellen Sie ein Backup, lesen Sie die Karte **Update**, führen Sie das Update durch und führen Sie `sudo nexcmp status` aus. 2. Aktualisieren Sie VPN-Agents und stellen Sie sicher, dass die Nodes gemessenen Traffic melden, bevor Sie sich auf die GB-Abschaltung verlassen. 3. Prüfen Sie bei der Nutzung von Bare Metal die Felder des Verwaltungsnetzwerks, die erforderlichen Tools, die Preiseinheit, die Vorlagen und Beispieltarife, bevor Sie den Verkauf oder den Produktivbetrieb eröffnen. 4. Öffnen Sie ein Kundenprofil und prüfen Sie dessen Dienstliste. Überprüfen Sie den Betrag und die ursprüngliche Zahlungszuordnung, bevor Sie eine Kündigung mit Erstattung bestätigen. 5. Lassen Sie optionale Module deaktiviert, bis deren Infrastruktur bereit ist. Verifizieren Sie bei AI Models einen Provider, ein bepreistes Modell und eine erfolgreiche Kundenanfrage, bevor Sie den Verkauf freigeben. --- # Backup and restore {#backup-and-restore} > **Wo im Admin:** System › Admin › Backup (`/backup`) erscheint nur, wenn das Modul DDoS & BGP aktiviert ist; verwenden Sie für eine Standardinstallation die Befehlszeile unten. ## Was gesichert wird {#what-is-backed-up} `sudo nexcmp backup` erstellt ein komprimiertes Archiv mit folgenden Inhalten: | Komponente | Inhalt | |---|---| | `data/**/*.db` | Jede SQLite-Datenbank in `/var/lib/nexcmp`, kopiert über die SQLite-Online-Backup-API — konsistent selbst während des laufenden Panel-Betriebs | | `files.tar` | Alle anderen Dateien in `/var/lib/nexcmp` (Einstellungsdateien, Branding-Uploads, `secrets/`), ausgenommen Datenbanken und der Ordner `updates/` | | `etc/` | Eine Kopie von `/etc/nexcmp` (Installer-Einstellungen, Instanz-ID, Port und Bind) | ::: warning Das Archiv enthält Ihre Master-Keys `secrets/` enthält den Schlüssel, der in der Datenbank gespeicherte API-Schlüssel, Zahlungsanmeldedaten und SMTP-Passwörter verschlüsselt. Das Archiv wird mit den Berechtigungen `0600` erstellt. Bewahren Sie es verschlüsselt und außerhalb des Servers auf. Ohne diese Schlüssel kann eine wiederhergestellte Datenbank ihre Geheimnisse nicht entschlüsseln. ::: ## Backup erstellen {#take-a-backup} ```bash sudo nexcmp backup # writes to /var/backups/nexcmp sudo nexcmp backup /mnt/nas/nexcmp # or to another directory ``` Der Befehl gibt den Archivpfad aus, zum Beispiel `/var/backups/nexcmp/nexcmp-backup-20261030-120000.tar.zst`. ### Zeitplan einrichten {#schedule-it} ```bash echo '17 3 * * * root /usr/local/bin/nexcmp backup /var/backups/nexcmp && find /var/backups/nexcmp -name "nexcmp-backup-*" -mtime +14 -delete' | sudo tee /etc/cron.d/nexcmp-backup ``` Kopieren Sie den Ordner von der Maschine weg (Objektspeicher, NAS, ein anderer Server). ## Wiederherstellen {#restore} Stellen Sie auf einem Server wieder her, auf dem NexCMP in der **gleichen Version (oder neuer)** installiert ist. 1. Installieren Sie NexCMP mit dem [installer](https://nexcmp.com/de/docs/getting-started/installation/) unter Verwendung derselben Lizenz und Domain, aber führen Sie **nicht** den Setup-Assistenten aus. 2. Stoppen Sie die Dienste: ```bash sudo systemctl stop nexcmp-vmd nexcmp ``` 3. Entpacken Sie das Archiv in ein temporäres Verzeichnis: ```bash sudo mkdir /root/restore && sudo tar --zstd -xf nexcmp-backup-20261030-120000.tar.zst -C /root/restore ``` 4. Legen Sie die Dateien zurück: ```bash sudo tar -xf /root/restore/files.tar -C /var/lib/nexcmp sudo cp -a /root/restore/data/. /var/lib/nexcmp/ sudo cp -a /root/restore/etc/. /etc/nexcmp/ sudo chown -R nexcmp:nexcmp /var/lib/nexcmp ``` 5. Starten Sie die Dienste und prüfen Sie: ```bash sudo systemctl start nexcmp nexcmp-vmd sudo nexcmp status ``` 6. Melden Sie sich an `https:///admin` mit dem Administrator des *gesicherten* Systems an. ::: tip Probelauf durchführen Führen Sie die Schritte 1–6 einmal auf einem Ersatzserver aus, bevor Sie sie benötigen. Ein Backup, das Sie nie wiederhergestellt haben, ist nur eine Hoffnung. ::: ## Nicht enthalten {#not-included} - nginx-Konfiguration und Zertifikate (werden vom Installationsprogramm neu generiert; Let's Encrypt-Zertifikate werden neu ausgestellt). - Ihre CloudStack- / Proxmox VE-Server und die darauf befindlichen virtuellen Maschinen — sichern Sie diese mit ihren eigenen Werkzeugen. --- # NexCMP deinstallieren {#uninstall-nexcmp} ::: warning Kunden verlieren den Zugriff Das Deinstallieren stoppt das Portal und die Abrechnung. Virtuelle Maschinen auf Ihrem CloudStack oder Proxmox VE laufen weiter, aber nichts verwaltet oder berechnet sie. Erstellen Sie zuerst ein [backup](https://nexcmp.com/de/docs/getting-started/backup-and-restore/). ::: ## Programm entfernen, Daten behalten {#remove-the-program-keep-the-data} ```bash sudo nexcmp uninstall ``` Dies deaktiviert und entfernt die Dienste `nexcmp` und `nexcmp-vmd`, die nginx-Website und das Snippet, `/opt/nexcmp` sowie den Befehl `nexcmp`. **Daten verbleiben** in `/var/lib/nexcmp` und `/etc/nexcmp`, sodass eine spätere Installation auf demselben Server dort fortfährt, wo Sie aufgehört haben. ## Alles entfernen {#remove-everything} ```bash sudo nexcmp uninstall --purge ``` Löscht zusätzlich `/var/lib/nexcmp`, `/etc/nexcmp`, `/var/log/nexcmp` und den Systembenutzer `nexcmp`. Dies kann nicht rückgängig gemacht werden. ## Nach der Deinstallation {#after-uninstalling} - Let's Encrypt-Zertifikate und die Pakete `nginx` / `certbot` verbleiben an Ort und Stelle. Entfernen Sie das Zertifikat bei Bedarf mit `sudo certbot delete --cert-name `. - Geben Sie die Domain auf Ihrer Lizenzseite unter [nexcmp.com/licenses](https://nexcmp.com/licenses) frei, wenn Sie sie an einem anderen Ort aktivieren. - Löschen Sie das dedizierte CloudStack-Konto / den Proxmox API-Token, das bzw. der für NexCMP erstellt wurde, falls Sie es bzw. ihn nicht mehr benötigen. --- # `nexcmp`-Befehlsreferenz {#nexcmp-command-reference} Das Installationsprogramm platziert einen Helfer unter `/usr/local/bin/nexcmp`. Führen Sie ihn auf dem NexCMP-Server aus. Befehle, die das System verändern, erfordern `sudo`. (Das kundenseitige Werkzeug für die API ist ein anderes Programm, siehe [cmp CLI](https://nexcmp.com/de/docs/developers/cmp-cli/).) | Befehl | Root erforderlich | Funktion | |---|---|---| | `nexcmp status` | Nein (weitere Details unter `sudo`) | Version, Servicestatus (`nexcmp`, `nexcmp-vmd`), `/healthz`, Lizenzübersicht, Status der öffentlichen Ports, Setup-Code, falls der Assistent nicht abgeschlossen ist | | `nexcmp update` | Ja | Führt das in der installierten Version enthaltene Installationsprogramm mit den gespeicherten Parametern aus — siehe [Updating](https://nexcmp.com/de/docs/getting-started/updating/) | | `nexcmp backup [dir]` | Ja | Backup nach `/var/backups/nexcmp` (oder `dir`) — siehe [Backup and restore](https://nexcmp.com/de/docs/getting-started/backup-and-restore/) | | `nexcmp uninstall [--purge]` | Ja | Dienste und Programm entfernen; `--purge` entfernt auch Daten — siehe [Uninstall](https://nexcmp.com/de/docs/getting-started/uninstall/) | | `nexcmp open-port [minutes]` | Ja | **Emergency**: Lauschdienst auf dem Port des Panels (Standard 3000) auf allen Schnittstellen für 1–1440 Minuten (Standard 30), danach automatisches Schließen | | `nexcmp close-port` | Ja | Notfallfenster jetzt schließen | | `nexcmp fix-owner` | Ja | Dateien in `/var/lib/nexcmp`, die root gehören, dem Benutzer `nexcmp` zurückgeben | ## `nexcmp status` ```text Version : 1.6.1 nexcmp : active nexcmp-vmd : active healthz : ok License : active · domain cloud.example.com · token valid until 2026-11-12 · updates until 2027-10-30 Public port: 127.0.0.1 only (nginx proxy; emergency: sudo nexcmp open-port) ``` Wenn Dateien im Datenverzeichnis root gehören (z. B. erstellt durch das Ausführen eines anderen `nexcmp`-Befehls mit `sudo` als root), gibt `status` eine Warnung aus, da der Dienstbenutzer sie nicht lesen kann – ein typisches Symptom ist die Lizenz, die HTTP 421 anzeigt. Beheben Sie dies mit `sudo nexcmp fix-owner`. Derselbe Fix wird bei jedem Dienststart automatisch ausgeführt. ## Notzugriff {#emergency-access} Wenn Domain, Nginx oder TLS ausfallen, können Sie das Panel dennoch erreichen: ```bash sudo nexcmp open-port 30 # http://:3000/ for 30 minutes sudo nexcmp close-port # close it earlier ``` Sicherer, ohne etwas zu öffnen: `ssh -L 3000:127.0.0.1:3000 user@server` und rufen Sie `http://127.0.0.1:3000/` auf. ## Umgebung {#environment} | Variable | Verwendet für | |---|---| | `NEXCMP_BASE` | Basis-URL des Lizenzservers überschreiben (Standard `https://nexcmp.com`); nur zu Testzwecken | Dateien und Verzeichnisse: Programm `/opt/nexcmp`, Konfiguration `/etc/nexcmp`, Daten `/var/lib/nexcmp`, Protokolle `/var/log/nexcmp` und `journalctl -u nexcmp -u nexcmp-vmd`. --- # Infrastrukturanforderungen {#infrastructure-requirements} > **Wo im Admin:** Infrastructure (der linke Menübereich) und System › Admin › License & updates (`/license`) zum Aktivieren von Modulen. Diese Seite listet auf, was jedes Modul **außerhalb** des NexCMP-Servers benötigt. Informationen zum Server selbst (Ubuntu, Arbeitsspeicher, Festplatte, Ports) finden Sie unter [Requirements for the NexCMP server](https://nexcmp.com/de/docs/getting-started/requirements/). Informationen zum Aktivieren von Modulen finden Sie unter [Modules](https://nexcmp.com/de/docs/infrastructure/modules/). ## Modul für Modul {#module-by-module} | Modul | Minimale Infrastruktur | Details | |---|---|---| | **Virtual Machines on CloudStack** | Apache CloudStack 4.23 (getestet), KVM, eine erweiterte Zone mit einem Gastnetzwerk und einem öffentlichen IP-Bereich; eine dedizierte Domain und ein Konto mit einem API-Key (niemals ROOT); mindestens eine vorbereitete Template und ein Service Offering | [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/) | | **Virtual Machines on Proxmox VE** | Proxmox VE 9.x (verifiziert unter 9.2); ein API-Token mit einer benutzerdefinierten Rolle; ein Storage, das Klone unterstützt; eine Bridge; ein IPv4-Block mit einem Gateway; eine Cloud-Init-Template pro Betriebssystem und pro Knoten | [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/) | | **OS templates** | CloudStack: ein Linux-Build-Server mit libguestfs und einem Webserver für das Image. Proxmox VE: Cloud-Image-Templates mit dem Guest Agent | [OS templates](https://nexcmp.com/de/docs/infrastructure/templates/) | | **Bare metal / Dedicated Server** | Dell-Server mit iDRAC 9, die vom Panel aus über HTTPS (Redfish) in einem Management-Netzwerk erreichbar sind; ein HTTP-Server in diesem Netzwerk, der ISO-Dateien bereitstellt; beschreibbare ISO-Ordner für den NexCMP-Dienst | [Dedicated servers](https://nexcmp.com/de/docs/infrastructure/dedicated/) | | **AI Models** | Eine oder mehrere Modellquellen, zu deren Weiterverkauf Sie berechtigt sind, mit einer OpenAI- oder Anthropic-kompatiblen API und eigenem Schlüssel; ausgehendes HTTPS (Port 443, öffentliche Domain) vom Panel zu jeder Quelle oder ein unter Allowed internal hosts aufgeführtes internes Gateway; keine GPU oder Spezialhardware erforderlich | [AI Models](https://nexcmp.com/de/docs/infrastructure/ai-models/) | | **VPN** | Ein oder mehrere Linux-Hosts (x86_64, systemd, root) mit öffentlichen IPv4-Adressen an der Schnittstelle oder dorthin geroutet, ausgehendes HTTPS zu Ihrem Panel | [VPN- und Proxy-Knoten](https://nexcmp.com/de/docs/infrastructure/vpn-proxy-nodes/) | | **IPv6 Proxy** | Linux-Hosts (x86_64, systemd, `nft`, `ip`, `ss`, `sysctl`) mit einer öffentlichen IPv4, freien Ports 80, 443 und 60001-65535 sowie einem IPv6-Präfix von /32 bis /64, das für ausgehenden Datenverkehr funktioniert; SSH-Zugriff mit einem Passwort für die einmalige Installation | [VPN- und Proxy-Knoten](https://nexcmp.com/de/docs/infrastructure/vpn-proxy-nodes/) | | **Object Storage (S3)** | Ein Ceph-Cluster mit RADOS Gateway (RGW), einem Admin-Ops-Benutzer und einem öffentlichen HTTPS-Endpunkt an Port 443 | [S3](https://nexcmp.com/de/docs/infrastructure/s3/) | | **Kubernetes** | CloudStack mit aktiviertem Kubernetes Service (CKS), mindestens einer Kubernetes-Version-ISO und einem kostenlosen Control-Plane-Service-Offering von genau 2 vCPU und 2048 MB | [Kubernetes und Private Cloud](https://nexcmp.com/de/docs/infrastructure/kubernetes-and-private-cloud/) | | **Private Cloud** | CloudStack mit einem VPC-Offering und einem Netzwerk-Offering pro Bandbreiten-Tarif (plus ein gesperrtes 1-Mbps-Offering) | [Kubernetes und Private Cloud](https://nexcmp.com/de/docs/infrastructure/kubernetes-and-private-cloud/) | | **OS & ISO Images** | CloudStack, dessen Secondary-Storage-VM das Internet erreichen kann, um Kunden-Images herunterzuladen (direkte Links, keine Weiterleitungen); das CloudStack-Konto darf Templates und ISOs registrieren | [Modules](https://nexcmp.com/de/docs/infrastructure/modules/) | | **Bandwidth** | Nichts Zusätzliches bei der Standardquelle: Die Nutzung wird aus den CloudStack-VM-Statistiken ausgelesen. VMs auf Proxmox VE werden nicht erfasst | [Bandwidth](https://nexcmp.com/de/docs/catalog/bandwidth/) | | **AI Chat and AI Agent** | Eine OpenAI-kompatible API (Basis-URL, Modell und Schlüssel), die vom Panel-Server aus erreichbar ist. Keine zusätzliche Software auf Ihren Servern | [AI providers](https://nexcmp.com/de/docs/ai/ai-providers/) | | **DDoS & BGP** | Ein Add-on-Paket, das einen Edge-Router-Host mit Daemons erfordert, die als root laufen (BGP, Filterung, Flow-Statistiken). Es ist nicht Teil der Standardinstallation | [Modules](https://nexcmp.com/de/docs/infrastructure/modules/) | | **DDoS Shield** | Das Add-on für DDoS & BGP | [Modules](https://nexcmp.com/de/docs/infrastructure/modules/) | | **Web SSH terminal** | Ein separater SSH-Proxy-Dienst und eine Route dafür. Er ist nicht Teil der Standardinstallation; der AI Agent benötigt ihn nicht | [Modules](https://nexcmp.com/de/docs/infrastructure/modules/) | ## Netzwerkpfade im Überblick {#network-paths-at-a-glance} | Von | Zu | Port | Zweck | |---|---|---|---| | Panel-Server | CloudStack-Verwaltungsserver | 443 oder 8080 (je nachdem, wie Sie es veröffentlichen) | API | | Panel-Server | Proxmox VE-Knoten | 8006/tcp | API und Konsole | | Panel-Server | Dell iDRAC | 443/tcp (und der VNC-Port, Standard 5901) | Redfish und Konsole | | iDRAC | ISO-Webserver | der von Ihnen gewählte HTTP-Port (zum Beispiel 8080) | Virtuelle Medien | | Panel-Server | Ceph RGW | 443/tcp | Admin Ops | | Panel-Server | IPv6-Proxy-Knoten | Von Ihnen eingegebener SSH-Port | Einmalige Installation | | VPN- und Proxy-Knoten | Panel (über nginx) | 443/tcp | Registrierung, Heartbeat, Konfiguration | | Kunden | VPN- und Proxy-Knoten | Pro-IP-Ports 65001-65535 (VPN); 80, 443, 60001-65535 (IPv6-Proxy) | Der Dienst selbst | ::: tip Verwaltungsnetzwerke privat halten iDRAC- und Hypervisor-Verwaltungsadressen sollten sich in einem Netzwerk befinden, das Kunden nicht erreichen können. NexCMP verweigert iDRAC-Adressen außerhalb der von Ihnen zugelassenen privaten Bereiche. ::: ## Checkliste vor dem Verkauf {#checklist-before-you-sell} 1. Die Infrastruktur hinter dem ersten Dienst ist verbunden und **Test connection** ist grün. 2. Eine Zone ist verkaufsbereit (siehe [Zones](https://nexcmp.com/de/docs/infrastructure/zones/)): ein aktives Backend, ein Tarif und ein bereites Template. 3. Ein Zahlungskanal ist konfiguriert (siehe [Payment channels](https://nexcmp.com/de/docs/billing/payment-channels/)). 4. E-Mail funktioniert (siehe [SMTP and e-mails](https://nexcmp.com/de/docs/administration/smtp-and-emails/)). 5. Sie haben eine Testbestellung aufgegeben und die VM gelöscht. --- # Architektur {#architecture} > **Wo im Adminbereich:** Dies ist eine Referenzseite. Die hier beschriebenen Dienste sind mit `sudo nexcmp status` sichtbar; Verbindungen werden unter Infrastructure und System › Settings konfiguriert. ## Die Übersicht {#the-picture} ![NexCMP-Architektur: Kunden erreichen nginx über DNS und optional Cloudflare, nginx leitet an das Panel auf Port 3000 weiter, Panel und Worker kommunizieren mit CloudStack, Proxmox VE, iDRAC, Ceph, Zahlungs-Gateways, SMTP und einem KI-Anbieter, und VPN- sowie IPv6-Proxy-Knoten funken an das Panel zurück](https://nexcmp.com/de/docs/images/infrastructure/architecture.svg) ### Dasselbe Diagramm in Worten {#the-same-diagram-in-words} 1. Ein Kunde oder Administrator öffnet `https://cloud.example.com` (das Portal), `https://cloud.example.com/admin` (die Admin-Konsole) oder ruft die REST API auf. DNS leitet den Namen auf Ihren Server oder auf Cloudflare weiter, das als Proxy dert 2. **nginx** auf dem Panel-Server lauscht auf den Ports 80 (Weiterleitung und Zertifikatserneuerung) und 443 (TLS) und leitet jede Anfrage an das **Panel** unter `127.0.0.1:3000` weiter. Nach dem Setup-Assistenten lauscht das Panel nur auf der Loopback-Schnittstelle. 3. Das **Panel** (`nexcmp.service`) stellt das Kundenportal, die Admin-Konsole, die REST API, den Setup-Assistenten und die von Knoten benötigten Downloads (die Agent-Binärdatei, das Installationsskript, das `cmp`-Befehlszeilentool) bereit. Außerdem prüft es einmal täglich Ihre Lizenz. 4. Der **Worker** (`nexcmp-vmd.service`) lauscht auf `127.0.0.1:8112`, was nur lokal ist. Er führt alles aus, was Zeit beansprucht oder nach Zeitplan ablaufen muss: Bereitstellungsaufträge, Synchronisierung mit CloudStack und Proxmox VE, Abrechnungstakte, Bandbreitenerfassung und die Browser-Konsolenverbindungen. 5. Von diesen beiden Prozessen aus initiiert NexCMP ausgehende Verbindungen zu: **CloudStack** (Management-API), **Proxmox VE** (API auf Port 8006, Zertifikat gepinnt), **Dell iDRAC** (Redfish über HTTPS im Verwaltungsnetzwerk), **Ceph RGW** (S3 und Admin Ops über HTTPS), **Zahlungs-Gateways** (Stripe, PayPal, USDT und Banküberweisungsanbieter, die auch Ihre Webhook-URLs aufrufen), **Ihrem SMTP-Server**, einem **KI-Anbieter** mit einer OpenAI-kompatiblen API und optional **Telegram**. 6. **VPN-Knoten** führen `cmp-agent` aus. Jeder Knoten registriert sich einmal mit einem Einmal-Token, sendet dann alle 5 Sekunden einen Heartbeat per HTTPS an das Panel und erhält in der Antwort seine Konfiguration. **IPv6-Proxy-Knoten** werden einmalig vom Panel über SSH installiert und rufen ihre Konfiguration anschließend vom Panel ab. 7. Der Status wird in SQLite-Datenbanken und einigen Dateien in `/var/lib/nexcmp` gespeichert. Anmeldedaten für CloudStack, Proxmox, S3, iDRAC und den KI-Anbieter werden verschlüsselt (AES-256-GCM) mit Master-Schlüsseldateien im selben Bereich gespeichert. ## Dienste und Prozesse {#services-and-processes} | Prozess | Ausführung als | Lauscht auf | Funktion | |---|---|---|---| | `nginx` | root (Worker `www-data`) | 80, 443 | TLS, Weiterleitung, Proxy zum Panel | | `nexcmp` | `nexcmp` | 3000 (alle Schnittstellen während der Erstinstallation, danach `127.0.0.1`) | Portal, Admin-Konsole, API, Assistent, Downloads | | `nexcmp-vmd` | `nexcmp` | `127.0.0.1:8112` | Jobs, Synchronisierung, Abrechnung, Bandbreite, Konsole | | `nexcmp-update` | root | keine | Führt Updates aus, die die Admin-Konsole anfordert (eine Path-Unit wartet auf die Anfrage) | | `cmp-agent` (auf VPN-Knoten) | root | Die VPN-Listener-Ports | Meldet sich an das Panel, betreibt Proxy-Listener auf öffentlichen IPv4-Adressen | Das Panel und der Worker laufen als gewöhnlicher Benutzer ohne Linux-Capabilities und mit einem schreibgeschützten Dateisystem mit Ausnahme von `/var/lib/nexcmp` und `/var/log/nexcmp`. Sie benötigen weder root, Docker, eine separate Datenbank noch Redis. ## Dateien und ihre Speicherorte {#files-and-where-they-are} | Pfad | Inhalt | |---|---| | `/opt/nexcmp` | Das Programm: Releases, `bin/`, freigegebene Dateien wie der Template Builder. Gehört root, für den Dienst schreibgeschützt. | | `/etc/nexcmp` | Installatoreinstellungen (`install.conf`), Port und Bindung (`nexcmp.env`). | | `/var/lib/nexcmp` | SQLite-Datenbänke, hochgeladenes Branding, der Agent-Download-Ordner, Lizenzstatus, die Master-Key-Dateien. Sichern Sie diese. | | `/var/log/nexcmp` | Protokolle. | Siehe [Backup and restore](https://nexcmp.com/de/docs/getting-started/backup-and-restore/). Die Master-Key-Dateien müssen zusammen mit den Datenbanken gesichert werden, da eine wiederhergestellte Datenbank andernfalls ihre gespeicherten Anmeldeinformationen nicht entschlüsseln kann. ## Wer verbindet sich mit wem {#who-connects-to-whom} | Richtung | Pfad | Port | Hinweise | |---|---|---|---| | Kunde an Panel | Internet, DNS, optionales Cloudflare, nginx | 443 | Siehe [DNS and Cloudflare](https://nexcmp.com/de/docs/getting-started/dns-and-cloudflare/). | | Panel an Lizenzserver | `nexcmp.com` | 443 | Aktivierung, tägliche Prüfung und Updates. | | Panel an CloudStack | API | 443 oder 8080 | Die VM-Konsole, Bandbreiten- und Kubernetes-Funktionen verwenden denselben Endpunkt. | | Panel an Proxmox VE | API und WebSocket-Konsole | 8006 | Zertifikat per SHA-256-Prüfsumme angeheftet. | | Panel an iDRAC | Redfish | 443, VNC 5901 | Nur Management-Netzwerk. | | iDRAC an ISO-Server | HTTP | Ihr Port | Der iDRAC ruft das ISO ab. | | Panel an Ceph RGW | Admin Ops | 443 | | | Panel an SMTP | SMTP | 587 oder 465 | | | Panel an KI-Anbieter | HTTPS | 443 | Nur wenn das KI-Modul aktiv ist. | | Zahlungsanbieter an Panel | Webhook | 443 | Stripe und PayPal rufen zurück. | | Knoten an Panel | `cmp-agent` | 443 | Registrierung, Heartbeat, Upgrade. | | Panel an IPv6-Proxy-Knoten | SSH | der eingegebene Port | Nur einmalige Installation. | ## Warum das wichtig ist {#why-it-matters} - **Ein Panel, das erreichbar ist, kann angegriffen werden.** Halten Sie Port 3000 nach Abschluss des Setup-Assistenten geschlossen. Der Installer tut dies bereits, wenn TLS aktiv ist. - **Der Worker muss laufen**, damit etwas erstellt oder abgerechnet werden kann. `sudo nexcmp status` zeigt sowohl die Dienste als auch den Gesundheitsstatus. - **Planen Sie Outbound-Firewalls.** Wenn der ausgehende Datenverkehr des Panel-Servers gefiltert wird, erlauben Sie die Ziele in der obigen Tabelle. - **Verwaltungsdatenverkehr bleibt außerhalb des öffentlichen Pfads.** Verbindungen zu CloudStack, Proxmox VE, iDRAC und Ceph gehen direkt vom Panel-Server zu diesen Systemen, niemals über nginx oder Cloudflare. --- # Module {#modules} > **Wo im Admin-Bereich:** System › Admin › License & updates (`/license`), die Karte **Module**. ## Funktion {#what-it-does} Ein Modul ist ein Dienst oder eine Funktion, die als Ganzes ein- oder ausgeschaltet werden kann. Ein **ausgeschaltetes** Modul ist im Admin-Menü ausgeblendet und Kunden können es nicht erwerben; seine API-Routen antworten mit `404 module_disabled`, sofern es sich um ein Add-on handelt. Das Einschalten eines Moduls schaltet lediglich die Funktion frei: Die dahinterliegende Infrastruktur muss dennoch verbunden sein (siehe letzte Spalte). ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Konto | Ein Administrator mit Schreibrechten. Personal mit Nur-Lese-Rechten kann die Schalter sehen, aber nicht ändern. | | Infrastruktur | Siehe Tabelle: Jedes Modul führt auf, was es benötigt. | | Abhängig von | Einige Module erfordern andere (DDoS Shield benötigt DDoS & BGP). | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Für den Schalter selbst nicht erforderlich. Verbinden Sie die Infrastruktur jedes Moduls wie auf der in der Tabelle verlinkten Seite beschrieben. ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **System › Admin › License & updates** und scrollen Sie zur Karte **Module**. Dort wird angegeben, dass deaktivierte Module im Admin-Menü ausgeblendet sind und von Kunden nicht erworben werden können. 2. Verwenden Sie den Schalter eines Moduls. Die Seite bestätigt **Saved: reloading menu** und lädt neu, sodass sich das Menü sofort ändert. ![Die Modul-Karte unter License & updates mit einem Schalter für jedes Modul](https://nexcmp.com/de/docs/images/infrastructure/modules-01-license-modules.webp) ### Die Module {#the-modules} | Modul (wie angezeigt) | Standard | Was es hinzufügt | Benötigt | Seite | |---|---|---|---|---| | **Virtual Machines** | immer an | VM-Katalog, Bestellungen, Konsole, Snapshots | CloudStack oder Proxmox VE | [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/), [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/) | | **Bandwidth** | **ein** | Quotas, Add-ons, Warnungen und Überschreitungsaktionen für VMs, Kubernetes und S3 | Nichts Zusätzliches (CloudStack-VM-Statistiken) | [Bandwidth](https://nexcmp.com/de/docs/catalog/bandwidth/) | | **OS & ISO Images** | aus | Kunden registrieren eigene OS-Images und ISOs, Abrechnung pro GB | CloudStack; Internetzugang für dessen Secondary Storage VM | [Requirements](https://nexcmp.com/de/docs/infrastructure/requirements/) | | **Kubernetes** | aus | Kubernetes-Cluster (CKS) | CloudStack mit aktiviertem CKS | [Kubernetes und Private Cloud](https://nexcmp.com/de/docs/infrastructure/kubernetes-and-private-cloud/) | | **Private Cloud** | aus | VPC mit Tarifen für dedizierte Bandbreite | CloudStack VPC und Netzwerk-Offerings | [Kubernetes und Private Cloud](https://nexcmp.com/de/docs/infrastructure/kubernetes-and-private-cloud/) | | **Object Storage** | aus | S3-Konten auf Ceph RGW, Pay-as-you-go | Ceph RGW und eine Zone mit dem S3-Dienst | [S3](https://nexcmp.com/de/docs/infrastructure/s3/) | | **VPN** | aus | VPN auf eigenen Nodes | Nodes, auf denen `cmp-agent` läuft | [VPN- und Proxy-Knoten](https://nexcmp.com/de/docs/infrastructure/vpn-proxy-nodes/) | | **IPv6 Proxy** | aus | IPv6-Proxy auf eigenen Nodes | Proxy-Nodes mit einem IPv6-Präfix | [VPN- und Proxy-Knoten](https://nexcmp.com/de/docs/infrastructure/vpn-proxy-nodes/) | | **Bare Metal** | aus | Dell-Server über iDRAC: Bestellungen, Betriebssysteminstallation, Konsole, Stromversorgung | iDRAC 9 in einem Management-Netzwerk | [Dedicated servers](https://nexcmp.com/de/docs/infrastructure/dedicated/) | | **AI Models** | aus | Ein Gateway für den Verkauf des Zugangs zu AI-Modellen: ein Schlüssel für viele Modelle, Preise je Modell, Nutzungslimits, Logs, Wallet-Abrechnung | Von Ihnen bereitgestellte Modellquellen: eine OpenAI- oder Anthropic-kompatible API mit eigenem Schlüssel | [AI Models](https://nexcmp.com/de/docs/infrastructure/ai-models/) | | **AI** | aus | AI Chat (automatisierter Support) und AI Agent (VM-Verwaltung in Klartext) | Ein OpenAI-kompatibler Provider | [AI providers](https://nexcmp.com/de/docs/ai/ai-providers/) | | **DDoS Shield** | aus | IP-Schutz für Kunden; erfordert DDoS & BGP, daher bleibt der Schalter ohne diesen Dienst deaktiviert | Das Add-on für DDoS & BGP | unten | | **DDoS & BGP** | aus, **Add-on** | Edge-Router-Konsole: BGP, RTBH, XDP, Sitzungen und Edge-Traffic | Ein Edge-Host mit Root-Daemons | unten | ### Welcher Schalter bewirkt was {#which-switch-does-what} - **Bare Metal** umfasst zwei Ebenen. Der Modulschalter blendet das Admin-Menü und die API ein. Der Verkauf an Kunden ist ein separater Schalter mit Bestätigung per Texteingabe unter **Services › Dedicated Server**, und jeder Schreibzugriff auf einen iDRAC wird blockiert, bis Sie **live ops** unter **Infrastructure › Bare Metal › Safety** aktivieren. Siehe [Dedizierte Server](https://nexcmp.com/de/docs/infrastructure/dedicated/). - Für **Kubernetes**, **Private Cloud**, **VPN**, **IPv6 Proxy** und **Images** steuern der Modulschalter und der Verkaufsschalter auf der Dienstseite dieselbe Einstellung. - **AI** erfordert zudem einen unter **System › Settings › AI provider** konfigurierten Provider. - **AI Models** umfasst zwei Ebenen. Der Modul-Schalter aktiviert das Admin-Menü und die API. Der Verkauf an Kunden ist ein separater Verkaufsschalter oben auf den Seiten von AI Models, standardmäßig deaktiviert. Siehe [AI Models](https://nexcmp.com/de/docs/infrastructure/ai-models/). ### Beim Start eingelesene Module {#modules-read-at-start-up} Drei Funktionen sind keine gewöhnlichen Schalter. Sie werden **einmalig beim Start der Dienste** eingelesen und erfordern eine Infrastruktur, die in der Standardinstallation nicht enthalten ist. | Funktion | Einstellung | Status | Voraussetzungen | |---|---|---|---| | DDoS & BGP | `module_ddos` | Wird im ausgeschalteten Zustand als **Add-on package**, im eingeschalteten als **Installed** angezeigt. Es gibt keinen Schalter in der Konsole. | Edge-Router-Daemons (BGP, RTBH, XDP, Flow-Statistiken), die als Root ausgeführt werden. Das Panel läuft als unprivilegierter Benutzer und kann diese nicht ausführen. | | KI | `module_ai` | Ein normaler Schalter. Die Routen werden sofort übernommen; die Hintergrundjobs von AI Chat (Ticket-Untersuchung, geplante Antworten) starten beim nächsten Neustart der Dienste. Die Konsole empfiehlt einen Neustart. | Der AI-Provider. | | Web-SSH-Terminal | `feature_ssh_web` | Standardmäßig aus, kein Schalter in der Konsole | Ein separater SSH-Proxy-Dienst und dessen Route. Ohne diesen zeigt die Konsole-Registerkarte des Portals nur VNC an. Der **AI Agent benötigt dies nicht**: Er führt Befehle über eine SSH-Verbindung aus, die das Panel selbst herstellt. | Nach einer Änderung einer Starteinstellung starten Sie die Dienste neu: `sudo systemctl restart nexcmp nexcmp-vmd`. ## Verifizierung {#verify} 1. Der Menüeintrag des Moduls erscheint (oder verschwindet) nach dem Neuladen. 2. Bei einem kundenorientierten Modul zeigt das Portal den neuen Menüeintrag für einen angemeldeten Kunden an. Ein deaktiviertes Modul zeigt nichts oder „coming soon“ an. ## Grenzwerte und Hinweise {#limits-and-notes} - Das Deaktivieren eines Moduls löscht keine Daten. Laufende VMs, Cluster, S3-Konten und Abonnements laufen und werden weiterhin abgerechnet; Kunden können lediglich keine neuen erstellen. - Kontingentseiten listen nur die Dienste auf, deren Module eingeschaltet sind. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Der Menüeintrag wurde nicht angezeigt | Die Seite wurde nicht neu geladen | Laden Sie die Admin-Konsole neu. | | DDoS-Shield-Schalter ist deaktiviert | DDoS & BGP ist nicht installiert | DDoS Shield benötigt das Add-on DDoS & BGP. | | "This module is an add-on package and cannot be switched here" (HTTP 409 oder 422) | Sie (oder ein Skript) haben versucht, DDoS & BGP umzuschalten | Es handelt sich um ein Add-on-Paket; es gibt keinen Schalter. | | "DDoS Shield benötigt das Add-on für DDoS & BGP" | Gleiches gilt für DDoS Shield | Installieren Sie das Add-on zuerst. | | Eine Modulroute antwortet mit 404 `module_disabled` | Das Modul ist ausgeschaltet | Schalten Sie das Modul ein. | | AI Chat antwortet, aber die Ticket-Untersuchung startet nie | Das KI-Modul wurde ohne Neustart eingeschaltet | `sudo systemctl restart nexcmp nexcmp-vmd`. | | Mitarbeiter mit Leserechten können nicht speichern | Ihre Rolle ist auf reines Lesen beschränkt | Verwenden Sie ein Administratorkonto. | --- # Zonen {#zones} > **Wo im Admin:** Infrastructure › Datacenter › Zone (`/infra/zones`). Die Detailseite einer Zone ist `/infra/zones/`. ## Funktion {#what-it-does} Eine **Zone** ist der Standort, den ein Kunde bei der Bestellung auswählt: ein Land und eine Stadt mit Flagge sowie die dort verkauften Dienste. Dies ist ein Vertriebskonzept, getrennt von den Zonen, Clustern und Nodes der zugrundeliegenden Plattformen. Hinter einer Zone verknüpfen Sie **Infrastruktur**: eine CloudStack-Zone, einen Proxmox VE-Cluster, VPN-Nodes mit IP-Bereichen sowie ein S3-Backend. Zone 1 wird vom [setup wizard](https://nexcmp.com/de/docs/getting-started/setup-wizard/) mit dem von Ihnen eingegebenen Anzeigenamen und Land erstellt. Fügen Sie weitere Zonen hinzu, wenn Sie über Infrastruktur an mehreren Standorten verfügen oder um VPN und S3 eigene Standorte zuzuweisen. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Berechtigungen | Ein Administratorkonto. Eine Nur-Lese-Mitarbeiterrolle kann einsehen, aber nichts ändern. | | Infrastruktur | Eine Zone verkauft erst dann etwas, wenn ihr etwas zugewiesen wurde (siehe „Which service sells where“ unten). | | Abhängig von | [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/) oder [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/) für VMs, [VPN and proxy nodes](https://nexcmp.com/de/docs/infrastructure/vpn-proxy-nodes/) für VPN, [S3](https://nexcmp.com/de/docs/infrastructure/s3/) für Object Storage. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Nicht erforderlich. Eine Zone ist ein Datensatz innerhalb von NexCMP. ## In NexCMP verbinden {#connect-in-nexcmp} ### Eine Zone erstellen {#create-a-zone} 1. Öffnen Sie **Infrastructure › Datacenter › Zone** und klicken Sie auf **Add zone**. 2. Füllen Sie das Formular aus: | Feld | Beispielwert | Hinweise | |---|---|---| | Land | `United States` | Wählt die Flagge aus. | | Stadt | `New York` | Optional. | | Name (Vietnamesisch), Name (Englisch) | `New York` | Der Name, den Kunden in der jeweiligen Sprache sehen. | | Slug | `us-new-york` | a-z, 0-9, Bindestrich, 2-32 Zeichen. Wird aus Land und Stadt übernommen, bis Sie einen eigenen Wert eingeben. | | Sichtbarkeit | Öffentlich | **Public**-Zonen sind für jeden Kunden sichtbar; **Hidden**-Zonen werden nur von einem Administrator zugewiesen. | | Reihenfolge | `0` | Kleinere Nummern in Listen zuerst. | | In dieser Zone verkaufte Dienste | Virtual Machines (VM), VPN, Object Storage (S3) | Mindestens einen auswählen. | | Aktiv | An | **Off** blendet die Zone für Kunden aus. | | Standard | aus | Die voreingestellte Zone für Kunden, die keine Auswahl getroffen haben. Genau eine Zone ist Standard. | ![Dialog zum Hinzufügen einer Zone mit Land, Stadt, Slug und markierten Diensten](https://nexcmp.com/de/docs/images/infrastructure/zones-01-add-zone.webp) 3. Klicken Sie auf **Create zone**. Die Liste zeigt die Zone mit Flagge, Eigentümer, Diensten, Status sowie der Anzahl der VMs, Tarife und zugehörigen Infrastrukturen. ![Zonenliste mit der Standardzone und einer zweiten Zone](https://nexcmp.com/de/docs/images/infrastructure/zones-02-list.webp) ### Zuordnungen prüfen {#look-at-what-is-attached} Klicken Sie auf eine Zeile, um die Zone zu öffnen. Der Tab **Provider infrastructure** listet jedes angebundene Backend mit Anbieter, Typ (CloudStack oder Proxmox VE), Region, Status und Priorität auf. Der Tab **VPN infrastructure** listet die VPN-Bereiche und -Knoten der Zone auf und verlinkt auf den VPN-Pool. ![Zonendetails mit dem Tab Provider infrastructure](https://nexcmp.com/de/docs/images/infrastructure/zones-03-detail.webp) ### Welcher Dienst wo verkauft wird {#which-service-sells-where} | Dienst | Wie er in eine Zone gelangt | |---|---| | Virtual Machines auf CloudStack | Der Assistent (oder **Infrastructure › Cloud provider › CloudStack**) bindet CloudStack an Zone 1 an. | | Virtual Machines auf Proxmox VE | Im Tab **Clusters** des Clusters über **Attach cluster to zone**. Der Cluster tritt einer **bestehenden** Zone bei, normalerweise derjenigen, die über CloudStack verkauft. | | VPN | Ein VPN-Knoten, der seine öffentlichen IP-Bereiche meldet, erstellt (oder beitritt) eine Zone für sein Land und legt die Bereiche in den VPN-Pool. Sie können die Zone und den Knoten eines Bereichs auch unter **VPN IP pools** zuweisen. | | IPv6 Proxy | Ein neuer IPv6-Proxy-Knoten erstellt seine Zone im Status **off**. Schalten Sie die Zone hier ein, damit Kunden sie auswählen können. | | Object Storage (S3) | Aktivieren Sie den S3-Dienst in der Zone und binden Sie das Backend dann unter **Ceph S3 (RGW)** an. | ### Wann kann eine Zone virtuelle Maschinen verkaufen? {#when-can-a-zone-sell-virtual-machines} Eine Zone zeigt das Tag **not ready to sell VMs**, bis sie mindestens ein aktives, verkäufliches Backend **und** mindestens einen sichtbaren Tarif **und** mindestens eine bereite Template auf diesem Backend hat. Das Kundenbestellformular listet nur bereite Zonen auf. ## Verifizierung {#verify} 1. Die Zone erscheint in der Liste als **On** mit der entsprechenden Flagge. 2. Die Detailseite zeigt das Backend oder die erwarteten VPN-Bereiche. 3. Für VMs: Das Tag **not ready to sell VMs** ist verschwunden. Starten Sie im Kundenportal eine Bestellung und prüfen Sie, ob die Zone angeboten wird. ## Grenzwerte und Hinweise {#limits-and-notes} - In diesem NexCMP-Release bestellen Kunden virtuelle Maschinen in der **Standardzone** (Zone 1). Andere Zonen werden für VPN, IPv6-Proxy und Object Storage verwendet oder um einen Standort vorzubereiten, bevor er über Infrastruktur verfügt; der Hinweis unter der Zonenliste besagt dasselbe. - Eine Zone kann nur gelöscht werden, wenn nichts angebunden ist: keine Backends, VMs, Tarife oder VPN-Bereiche. Die Standardzone kann nicht gelöscht werden; machen Sie zuerst eine andere Zone zur Standardzone. - Zonen im Besitz eines Resellers können von Ihnen nur ein- oder ausgeschaltet sowie ausgeblendet oder angezeigt werden; ihre übrigen Felder sind gesperrt. - Der Slug ist Teil interner Referenzen. Wählen Sie ihn einmalig aus. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "Zonenname ist erforderlich" / "Land auswählen" / "Mindestens 1 Dienst auswählen" | Ein Pflichtfeld ist leer. | Füllen Sie den Namen aus, wählen Sie das Land und aktivieren Sie einen Dienst. | | "Ungültiger Slug (a-z 0-9 -, 2-32 Zeichen)" | Der Slug enthält andere Zeichen oder hat die falsche Länge. | Verwenden Sie nur Kleinbuchstaben, Ziffern und Bindestriche. | | Tag "Nicht bereit zum Verkauf von VMs" | Kein aktives verkäufliches Backend, kein Tarif oder keine bereite Vorlage in dieser Zone | Verbinden Sie die Infrastruktur und fügen Sie dann einen Tarif sowie eine Vorlage hinzu. Siehe [Plans](https://nexcmp.com/de/docs/catalog/plans/) und [Templates](https://nexcmp.com/de/docs/infrastructure/templates/). | | Löschen ist wegen "still attached" deaktiviert. | Die Zone hat Backends, VMs, Tarife oder VPN-Bereiche. | Entfernen oder verschieben Sie diese zuerst. | | Löschen ist wegen "Default zone" deaktiviert. | Die Zone ist die Standardzone. | Llegen Sie eine andere Zone als Standard fest. | | Kunden sehen die Zone nicht. | Sie ist ausgeblendet, inaktiv oder es wurde kein Dienst ausgewählt. | Setzen Sie Visibility auf Public, Active auf On und aktivieren Sie den Dienst. | | Eine S3-Zone fehlt im Backend-Formular. | Der S3-Dienst ist für die Zone nicht ausgewählt. | Bearbeiten Sie die Zone und aktivieren Sie **Object Storage (S3)**. | --- # CloudStack > **Where in the admin:** Infrastructure › Cloud provider › CloudStack › API connection (`/infra/cloudstack?tab=connect`). Die erste Verbindung kann auch im [setup wizard](https://nexcmp.com/de/docs/getting-started/setup-wizard/) (Schritt 2) hergestellt werden. ## Funktion {#what-it-does} NexCMP verkauft virtuelle Maschinen, die auf Ihrer Apache CloudStack-Cloud laufen. Die Software bereitgestellt, startet, stoppt, skaliert, erstellt Snapshots und löscht VMs über die CloudStack-API, vergibt öffentliche IP-Adressen aus der Zone, liest Nutzungsdaten für Abrechnung und Bandbreite aus und zeigt Kapazität sowie Status in der Admin-Konsole an. CloudStack bleibt die maßgebliche Datenquelle für die Hypervisors; NexCMP bildet das Storefront, die Abrechnung und das Portal darüber. Verwenden Sie diese Seite, wenn CloudStack Ihre Hauptquelle für VMs ist (oder sein wird). Eine zweite Quelle daneben finden Sie unter [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/). ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | CloudStack-Version | 4.23 ist die getestete Version. Die VM-Konsole benötigt 4.18 oder neuer, und die Live-CPU/RAM-Skalierung einer laufenden VM erfordert 4.23 mit KVM. | | Zonentyp | Eine Zone mit mindestens einem Gastnetzwerk für Kunden-VMs und einem öffentlichen IP-Bereich mit freien Adressen. | | Hypervisor | KVM ist der getestete Hypervisor. | | Konto | Eine für NexCMP erstellte **dedizierte Domain und ein dediziertes Konto**. Verwenden Sie niemals den ROOT-Administrator-Schlüssel. | | API-Erreichbarkeit | Der Panel-Server muss die API-URL des Management-Servers (`https://cloudstack.example.com/client/api`) über HTTP(S) erreichen können. Die VM-Konsole, Bandbreite und Kubernetes-Funktionen nutzen denselben Endpunkt. | | Optionaler Nur-Lese-Schlüssel | Ein zweiter Nur-Lese-Schlüssel ermöglicht der Admin-Konsole die Anzeige von Hosts, Speicher, System-VMs und öffentlichen IP-Bereichen. Für den VM-Verkauf nicht erforderlich. | | Öffentliche IP | Freie öffentliche IPv4-Adressen in der Zone. Das Präfix, das NexCMP verkaufen darf, wird unter Sales IP pools konfiguriert. | | Vorlagen | Mindestens eine bereite, passwortaktivierte Template und ein Service-Offering, die Ihr Account sehen kann. Siehe [Templates](https://nexcmp.com/de/docs/infrastructure/templates/). | | Storage | Primärer Storage für die Volumes des Accounts und sekundärer Storage, falls Sie Snapshots oder Images verkaufen. | | Abhängig von | Nichts. Kubernetes, Private Cloud, Images und Bandbreite hängen von dieser Seite ab. | ::: warning Verwenden Sie nicht den ROOT-Administrator-Key Erstellen Sie eine dedizierte Domain und einen Account für NexCMP. Der Key greift dann nur auf diese Domain zu, und ein geleakter Key kann den Rest Ihrer Cloud nicht berühren. Der Setup-Assistent prüft zudem, ob das von Ihnen gewählte Netzwerk zur Zone **und** zu dem Account gehört, dem der Key gehört. ::: ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Die Befehle verwenden [CloudMonkey](https://cloudstack.apache.org/) (`cmk`), angemeldet als CloudStack-Administrator. Ersetzen Sie die Beispieldynamiken und die Platzhalter in spitzen Klammern. ### Einen dedizierten Account und API-Key erstellen {#create-a-dedicated-account-and-api-key} 1. Erstellen Sie die Domain, die alles enthalten soll, was NexCMP gehört. ```bash cmk create domain name=nexcmp ``` Notieren Sie die `id` in der Ausgabe; sie wird unten als `` verwendet. 2. Finden Sie die Rolle, die Sie dem Account zuweisen möchten. ```bash cmk list roles type=DomainAdmin filter=id,name ``` | Rolle | Wann zu wählen | |---|---| | **Domain Admin** (empfohlen) | Vollständiger Funktionsumfang: VMs, Netzwerke, Projekte für Kubernetes, VPC, Images. Die Reichweite endet bei der `nexcmp`-Domain. | | User | Nur VM-Lebenszyklus. Ein normaler User kann VMs nicht expungeln, es sei denn, die globale Einstellung `allow.user.expunge.recover.vm` ist true; NexCMP stoppt die VM dann und CloudStack expungelt sie nach `expunge.delay`. | 3. Erstellen Sie den Account und dessen ersten User. Verwenden Sie ein langes, zufälliges Passwort; es wird nie wieder eingegeben. ```bash cmk create account name=nexcmp-api username=nexcmp-api \ password='CHANGE-ME-LONG-RANDOM' email=ops@example.com \ firstname=NexCMP lastname=API roleid= domainid= ``` 4. Generieren Sie das API-Key-Paar für den neuen User. ```bash cmk list users domainid= username=nexcmp-api filter=id,username cmk generate userkeys id= ``` Kopieren Sie `apikey` und `secretkey`. Das sind der **API key** und der **Secret key**, die Sie in NexCMP eingeben. NexCMP speichert diese verschlüsselt und zeigt danach nur die letzten vier Zeichen an. 5. Stellen Sie sicher, dass die Domain keine restriktiven Ressourcenlimits aufweist (Instanzen, Volumes, öffentliche IPs, Netzwerke, Snapshots, Templates, Projekte). ```bash cmk list resourcelimits domainid= ``` ### Das Gastnetzwerk für Kunden-VMs erstellen {#create-the-guest-network-for-customer-vms} Kunden-VMs werden in einem Gastnetzwerk bereitgestellt, das zum neuen Account gehört. Ein isoliertes Netzwerk mit einem Virtual Router (VR) und den Diensten Static NAT, Firewall und Port Forwarding funktioniert gut, da NexCMP jeder VM über Static NAT eine öffentliche IP zuweist. ```bash cmk list networkofferings state=Enabled guestiptype=Isolated filter=id,name cmk create network name=customers displaytext=customers zoneid= \ networkofferingid= account=nexcmp-api domainid= ``` Überprüfen Sie die Standard-Egress-Richtlinie des Offerings: Wenn diese auf „deny“ steht, haben Kunden-VMs keinen Outbound-Zugriff, bis Firewall-Egress-Regeln hinzugefügt werden. ### Offerings und Templates sichtbar machen {#make-offerings-and-templates-visible} - **Service offerings** und **network offerings** müssen öffentlich oder der `nexcmp`-Domain zugewiesen sein, da der Account sie sonst nicht auflisten oder verwenden kann. - Registrieren oder teilen Sie mindestens ein Template (siehe [Templates](https://nexcmp.com/de/docs/infrastructure/templates/)). NexCMP listet Templates auf, die bereit und featured sind. ### Optional: Read-Only-Key für Infrastrukturseiten {#optional-read-only-key-for-infrastructure-pages} Die Tabs **Capacity**, **Host**, **Storage** und **System VM** sowie die Liste der öffentlichen IP-Bereiche verwenden einen zweiten Key, der nur Lesezugriff auf sechs Befehle benötigt. Erstellen Sie eine eingeschränkte Rolle, anstatt einen vollständigen Administratoren-Key wiederzuverwenden: ```bash cmk create role name=nexcmp-readonly type=Admin # is the id printed above for api in listHosts listCapacity listSystemVms listVlanIpRanges listClusters listStoragePools; do cmk create rolepermission roleid= rule=$api permission=allow done cmk create rolepermission roleid= rule='*' permission=deny ``` Erstellen Sie dann einen Account mit dieser Rolle (in der ROOT-Domain, da zonengeweit Daten gelesen werden), generieren Sie dessen Keys wie in Schritt 4 und geben Sie diese im nächsten Abschnitt als **RO API key** ein. ### Den Netzwerkpfad prüfen {#check-the-network-path} Vom Panel-Server aus: ```bash curl -fsS -o /dev/null -w '%{http_code}\n' https://cloudstack.example.com/client/api ``` Jede HTTP-Antwort (selbst 4xx) beweist, dass der Port erreichbar ist. Ein Timeout bedeutet ein Firewall- oder DNS-Problem auf Ihrer Seite. ## In NexCMP verbinden {#connect-in-nexcmp} ### Im Installationsassistenten {#in-the-setup-wizard} Schritt 2 des [setup wizard](https://nexcmp.com/de/docs/getting-started/setup-wizard/) fragt nach denselben Werten. **Test connection** listet die Zonen und Netzwerke auf, die der Schlüssel sehen kann; wählen Sie die Zone und das Gastnetzwerk, einen Anzeigenamen für die Zone sowie das Land aus und klicken Sie dann auf **Save CloudStack**. Der Assistent lehnt ein Netzwerk ab, das sich nicht in dieser Zone befindet oder für den Schlüssel nicht sichtbar ist. ![Assistentenschritt 2 mit ausgefüllter CloudStack API-URL und Schlüsseln sowie nach Test connection ausgewählter Zone und ausgewähltem Netzwerk](https://nexcmp.com/de/docs/images/infrastructure/cloudstack-01-wizard-step.webp) ### Später in der Admin-Konsole {#later-in-the-admin-console} 1. Öffnen Sie **Infrastructure › Cloud provider › CloudStack** und wählen Sie den Tab **API connection**. 2. Füllen Sie die Karte **Connection** aus: | Feld | Beispielwert | |---|---| | Endpoint API | `https://cloudstack.example.com/client/api` | | API key (Schreibzugriff) | `XXXX` (leer lassen, um den gespeicherten Schlüssel beizubehalten) | | Secret key | `XXXX` | | RO-API-Schlüssel / RO-Geheimschlüssel | optional, vom Konto mit Lesezugriff | | Zone ID | die UUID Ihrer Zone | ![Der API-Verbindungs-Tab mit einem Beispiel-Endpoint und maskierten Schlüsseln](https://nexcmp.com/de/docs/images/infrastructure/cloudstack-02-connect-form.webp) 3. Klicken Sie vor dem Speichern auf **Test connection**. Dadurch werden die von Ihnen eingegebenen Schlüssel getestet, ohne sie zu speichern: den Schreibschlüssel mit `listZones` und `listCapabilities` sowie den Schlüssel mit Lesezugriff mit `listSystemVms`. 4. Klicken Sie auf **Save connection**. Lassen Sie **Enable CloudStack connection** eingeschaltet; das Ausschalten sorgt dafür, dass der Worker alle CloudStack-Jobs stoppt, ohne Daten zu verlieren. 5. Öffnen Sie **Services › Virtual Machines › Policy › Provisioning**, um das Standard-Gastnetzwerk, benutzerdefinierte Angebote und das Standard-Schlüsselpaar für neue VMs festzulegen. ![VM-Richtlinie (Policy), Tab Provisioning, mit der Standard-Netzwerk-ID](https://nexcmp.com/de/docs/images/infrastructure/cloudstack-04-provisioning.webp) 6. Öffnen Sie **Infrastructure › Cloud provider › Sales IP pools** und legen Sie unter **Configure sales ranges** die Option **Sellable IP range prefixes** (zum Beispiel `203.0.113.`) sowie **Excluded IP prefixes** fest, falls bestimmte Adressen in der Zone niemals verkauft werden dürfen. Lassen Sie das Präfix leer, um jede freie Adresse zuzulassen. ![Verkaufs-IP-Pools mit dem verkäuflichen Präfix 203.0.113. gesetzt](https://nexcmp.com/de/docs/images/infrastructure/cloudstack-05-sales-ip-pool.webp) ### Was NexCMP liest und schreibt {#what-nexcmp-reads-and-writes} | Bereich | Liest | Änderungen | |---|---|---| | VMs | Liste, Status, Nutzungsverlauf, Konsolen-Endpoint | Bereitstellen, Starten, Stoppen, Neustarten, Neuinstallieren, Löschen, Skalieren, Passwort- und SSH-Key-Zurücksetzung | | Datenträger und Snapshots | Volumes, VM-Snapshots, Backups | Erstellen, Anhängen, Trennen, Größe ändern, Löschen, Snapshot, Wiederherstellen | | Netzwerk | Netzwerke, Router, öffentliche IPs, Firewall, Portweiterleitung, Load-Balancer-Regeln | Öffentliche IPs zuweisen und freigeben, statisches NAT, Firewall, Portweiterleitung, Egress-Regeln, Netzwerke und ACLs für Private Cloud | | Katalog | Dienst-, Datenträger- und Netzwerkangebote, Templates, ISOs, Betriebssystemtypen | Templates und ISOs (Images) registrieren und löschen, Dienstangebote beim Erstellen benutzerdefinierter Tarife | | Kubernetes | Unterstützte Versionen, Cluster, Konfiguration | Projekte, Ressourcenlimits, Netzwerke, Cluster (Modul Kubernetes) | | Schlüssel mit Lesezugriff | Hosts, Cluster, Storage Pools, System-VMs, Kapazität, VLAN-IP-Bereiche | Keine | ### Live-CPU und -RAM sowie Bandbreite {#live-cpu-and-ram-and-bandwidth} - **Hot-Plug.** Eine laufende VM kann nur dann ohne Neustart in der Größe angepasst werden, wenn deren Template dies erlaubt (dynamisch skalierbar) und das Gastbetriebssystem neue CPUs und RAM online nimmt. NexCMP aktiviert Auto Scaling für Templates, deren Name auf `vN` endet mit N von 6 oder mehr, oder wenn Sie es manuell im Feld **vCPU/RAM-Hot-Plug** des Templates festlegen. Siehe [Templates](https://nexcmp.com/de/docs/infrastructure/templates/). - **Bandbreitenquelle.** Mit den Standardeinstellungen misst NexCMP den Traffic anhand der CloudStack-VM-Statistiken (`listVirtualMachinesUsageHistory`, alle 5 Minuten abgefragt und pro VM-Netzwerkschnittstelle summiert). Die Werte beinhalten Traffic zwischen VMs und können daher etwas höher sein als von einem Edge-Router gezählt. Lassen Sie die Erfassung der CloudStack-VM-Statistiken eingeschaltet; Lücken, die länger als die Statistikvorhaltung sind, werden übersprungen. Siehe [Bandbreite](https://nexcmp.com/de/docs/catalog/bandwidth/). ## Verifizierung {#verify} 1. **Test connection** gibt "Write key: OK" zusammen mit Ihrer Zone und der CloudStack-Version zurück. 2. **Infrastructure › Cloud provider › Providers** zeigt den Provider als aktiv mit einem kürzlichen Testzeitpunkt an. Das Dashboard-Zustandspanel zeigt nicht mehr "CloudStack: not connected". 3. **Sales IP pools** listet freie Adressen auf (aktualisiert sich etwa einmal pro Minute). 4. Bestellen Sie eine kleine VM über das Kundenportal oder die Admin-Konsole und prüfen Sie, ob sie den Status Running erreicht, eine öffentliche IP hat und ob Sie die Konsole öffnen können. ## Grenzwerte und Hinweise {#limits-and-notes} - In dieser NexCMP-Release kann ein CloudStack-Cluster verbunden werden. Der Dialog **Add cloud provider** kann die Schlüssel eines zweiten Clusters testen, diese jedoch nicht speichern. - Eine CloudStack-Zone ist mit der Standardzone von NexCMP verknüpft; ein CloudStack mit mehreren Zonen ist auf die von Ihnen eingegebene Zone beschränkt, sodass VMs, IPs und Netzwerke anderer Zonen ignoriert werden. - Das Löschen des Gastnetzwerks in CloudStack führt dazu, dass jede neue Bereitstellung fehlschlägt. Die Admin-Konsole zeigt einen roten Hinweis, wenn das Netzwerk verschwindet. - Anmeldeinformationen verlassen niemals den Server. Die API gibt nur die letzten vier Zeichen zurück. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | `listCapabilities: cloudstack 401: unable to verify user credentials and/or request signature` | Falscher API-Schlüssel oder -Secret, Schlüssel von einem anderen Benutzer oder ein Zeitproblem auf dem Panel-Server | Generieren Sie die Schlüssel mit `cmk generate userkeys` neu und fügen Sie beide ein. Überprüfen Sie die Uhrzeit des Panel-Servers. | | Test: `listZones: …` oder Timeout | Der Panel-Server kann die API-URL nicht erreichen | Überprüfen Sie DNS, Firewall und den exakten `/client/api`-Pfad. | | Assistent: "network not found in that zone for this API key" | Das gewählte Netzwerk gehört zu einem anderen Account oder einer anderen Zone | Erstellen Sie das Netzwerk im dedizierten Account (siehe oben) und führen Sie **Test connection** erneut aus. | | Assistent: "pick a zone and a network" | Test nicht ausgeführt oder keine Zone bzw. kein Netzwerk ausgewählt | Klicken Sie auf **Test connection** und wählen Sie beide Listen aus. | | "CloudStack-Schlüssel nicht konfiguriert" (Banner) | Noch kein Schlüssel gespeichert ("Connect later") | Füllen Sie die Verbindungskarte aus, **Save connection** und danach **Test connection**. | | Banner "CloudStack connection is OFF" | Der Schalter **Enable CloudStack connection** ist ausgeschaltet | Schalten Sie ihn ein und speichern Sie. | | Schreibgeschützter Schlüssel: "unusable …" im Test | Fehlende Rollenberechtigung oder falscher Account | Überprüfen Sie die sechs erlaubten Befehle und stellen Sie sicher, dass sich der Account in der ROOT-Domain befindet. | | "Zone public IP ranges not measured yet" oder "no public IP ranges declared" | Kein schreibgeschützter Schlüssel oder die Zone besitzt tatsächlich keinen öffentlichen Bereich | Fügen Sie den Nur-Lese-Schlüssel hinzu oder fügen Sie einen öffentlichen IP-Bereich in CloudStack hinzu. | | "Pool leer — 60 Sek. auf vmd-Synchronisierung warten" | Die IP-Liste wird einmal pro Minute vom Worker aktualisiert. | Warten Sie eine Minute und laden Sie die Seite neu. | | "Keine freien IPs im Bereich 203.0.113. verfügbar" | Alle Adressen im verkäuflichen Präfix sind belegt. | Fügen Sie Adressen zur Zone hinzu, vergrößern Sie das Präfix oder geben Sie nicht genutzte IPs frei. | | "Netzwerkdaten konnten nicht abgerufen werden (CloudStack antwortet nicht oder Schlüssel hat keine Berechtigungen)" | Schlüssel hat den Zugriff verloren oder CloudStack ist nicht erreichbar. | Führen Sie **Test connection** aus; prüfen Sie, ob das Konto aktiviert ist. | | "Gastnetzwerk existiert NICHT" | Das Netzwerk wurde in CloudStack gelöscht. | Erstellen Sie das Netzwerk neu und legen Sie es unter Provisioning als Standard fest. | --- # Proxmox VE > **Wo im Admin-Bereich:** Infrastructure › Cloud provider › Providers (`/infra/providers`), dann die Anbieterseite (`/infra/providers/`) mit den Registerkarten Overview, Clusters, VMs, Servers und Credentials. Tarife werden unter Services › Virtual Machines › Plans & pricing (`/vm/catalog`) festgelegt. ## Funktion {#what-it-does} NexCMP kann virtuelle Maschinen verkaufen, die auf einem oder mehreren Proxmox VE-Clusters laufen — parallel zu oder anstelle von CloudStack. Eine VM wird durch Klonen einer OS-Vorlage mit Full Clone erstellt und anschließend über cloud-init konfiguriert: Größe, IP-Adresse aus einem von Ihnen definierten Pool, Root-Passwort und SSH Key. Kunden erhalten im Portal Steuerungsmöglichkeiten für Power, Konsole, Snapshots, Neuinstallation, Passwort-Reset und Metriken. Sie bekommen niemals den Cluster-, Node- oder Quellnamen zu Gesicht. Verwenden Sie dies, wenn Sie Proxmox VE bereits einsetzen oder einen zweiten, preislich anders gestalteten VM-Pool anbieten möchten. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Proxmox VE | PVE 9.x. Die Integration wurde unter 9.2 verifiziert. Sie erfordert den Speicherinhalt `import` und die Festplattenoption `import-from` (PVE 8.2 oder neuer). | | Netzwerk aus dem Panel | HTTPS zur Cluster-API, `https://:8006`. Kein Pfad, Benutzername oder Query-String. Sowohl das Panel als auch der Worker verbinden sich; die Browser-Konsole wird über das Panel geproxt. | | Konto | Ein dedizierter PVE-Benutzer mit einem **API-Token** und einer benutzerdefinierten Rolle mit den unten aufgeführten Berechtigungen. Verwenden Sie niemals `root@pam`. | | Storage | Ein Speicher für VM-Disks, der Clones unterstützt (zum Beispiel `local-lvm`). Für den integrierten Template-Builder wird der Speicher namens `local` mit den Inhaltstypen `import` und `snippets` benötigt. | | Netzwerk | Eine Linux-Bridge (zum Beispiel `vmbr0`), die das Netzwerk erreicht, in dem sich die Kunden-IPs befinden. Verwenden Sie eine VLAN-fähige Bridge, wenn Sie ein VLAN-Tag eingeben. | | IPs | Ein IPv4-Block (/16 bis /30), der zu dieser Bridge geroutet wird, inklusive Gateway. NexCMP weist Adressen selbst zu; Proxmox verfügt über kein IP-Management. | | Vorlagen | Eine Cloud-init-Template-VM pro Betriebssystem auf jedem Node, auf dem Sie bereitstellen, inklusive des QEMU Guest Agent. | | Zone | Eine bestehende Zone, der der Cluster zugeordnet werden soll. Siehe [Zones](https://nexcmp.com/de/docs/infrastructure/zones/). | | Abhängig von | Nichts. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Führen Sie die Befehle als Root auf einem beliebigen Cluster-Node aus. ### 1. Rolle, Benutzer und API-Token mit minimalen Rechten erstellen {#_1-create-a-least-privilege-role-user-and-api-token} 1. Erstellen Sie die Rolle. Die Liste der Berechtigungen entspricht exakt dem, was NexCMP verwendet; sie enthält nichts, was Benutzer, Speicherdefinitionen oder das Datacenter bearbeitet. ```bash pveum role add NexCMP -privs "VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.PowerMgmt VM.Audit VM.Console VM.Snapshot VM.Snapshot.Rollback VM.Backup VM.GuestAgent.Audit VM.GuestAgent.Unrestricted Datastore.Audit Datastore.AllocateSpace Datastore.AllocateTemplate Sys.Audit Sys.AccessNetwork SDN.Use SDN.Audit Pool.Audit Mapping.Audit Mapping.Use" ``` `Sys.AccessNetwork` ist für den Download des Cloud-Images erforderlich. PVE 9 verfügt über keine Berechtigung `VM.Monitor`; fügen Sie diese nicht hinzu. 2. Erstellen Sie den Benutzer und ein Token. `--privsep 1` bedeutet, dass die Rechte des Tokens aus der **Schnittmenge** der eigenen Berechtigungen des Benutzers und des Tokens resultieren. ```bash pveum user add nexcmp@pve --comment "NexCMP" pveum user token add nexcmp@pve api --privsep 1 ``` Der Befehl gibt das Token **secret once** aus (eine UUID). Kopieren Sie es jetzt. Die Token-ID ist `nexcmp@pve!api`. 3. Weisen Sie die Rolle **sowohl** dem Benutzer als auch dem Token zu. Dies ist der Schritt, der oft übersehen wird: Bei der Trennung von Berechtigungen erhalten nur Token 403-Fehler wie `Datastore.Audit`, wenn der Benutzer keine Berechtigung hat. ```bash pveum acl modify / --roles NexCMP --users nexcmp@pve pveum acl modify / --roles NexCMP --tokens 'nexcmp@pve!api' ``` 4. Testen Sie es vom Panel-Server aus: ```bash curl -sk -H 'Authorization: PVEAPIToken=nexcmp@pve!api=' https://192.0.2.10:8006/api2/json/version ``` Ein JSON-Dokument mit einer `version` bedeutet, dass das Token funktioniert. (`-k` dient nur diesem Schnelltest; NexCMP pinnt das Zertifikat selbst, siehe unten.) ### 2. Brücke und Speicher überprüfen {#_2-check-the-bridge-and-the-storage} ```bash pvesm status # storages, type, content and free space ip -br link show type bridge ``` - Kunden-VMs erhalten `virtio` Netzwerkschnittstellen auf der Brücke, die Sie in NexCMP eingeben. Wenn Sie ein VLAN festlegen, muss die Brücke VLAN-fähig sein. - Verbinden Sie Kunden-VMs mit einer Brücke oder einem VLAN, das **von der Verwaltungsadresse des Knotens getrennt** ist. Wenn sie sich ein Netzwerk teilen, öffnet der automatische Verwaltungs-IP-Satz der Proxmox-Firewall die Ports 22, 8006, 3128, 5900-5999 und 60000-60050 des Knotens für jede VM in diesem Netzwerk. Wenn Sie sie nicht trennen können, fügen Sie oberhalb der Verwaltungs-ACCEPT-Regel eine explizite DROP-Regel für das VM-Subnetz für diese Ports hinzu. ### 3. Hinweise zum Speicher (LVM-thin) {#_3-storage-notes-lvm-thin} - Belassen Sie das Nullen des Thin-Pools **auf dem Standardwert**. Das Ausschalten (`lvchange -Zn`) kann dazu führen, dass alte Daten in neu zugewiesenen Blöcken verbleiben und Partitionstabellen oder Dateisysteme geklonter VMs beschädigt werden. - Disks mit der Meldung „write cache: disabled“ klonen oft nur mit wenigen MB/s. Überprüfen Sie dies mit `hdparm -W /dev/sdX` und aktivieren Sie den Schreibcache, wenn der Datenträger über einen Stromausfallschutz verfügt. ### 4. Aktivieren Sie den Inhalt `import` (nur für den integrierten Template-Builder) {#_4-enable-the-import-content-only-for-the-built-in-template-builder} Der integrierte Builder lädt das Cloud-Image in den Speicher namens `local` herunter und erstellt daraus das Template. Fügen Sie `import` (und `snippets`) zur Inhaltsliste dieses Speichers hinzu. Behalten Sie die bereits verwendeten Typen bei; `--content` ersetzt die gesamte Liste: ```bash pvesm status --storage local # note the current content pvesm set local --content iso,vztmpl,backup,import,snippets ``` ### 5. Ein OS-Template aus einem Cloud-Image erstellen {#_5-build-an-os-template-from-a-cloud-image} Ein Template ist eine Cloud-Init-VM, die von NexCMP geklont wird. Jedes wird unter einem kurzen **OS key** wie `ubuntu-24.04` mit seiner VM-ID registriert. Erstellen Sie ein Template pro OS **auf jedem Knoten, der VMs erhalten soll**, da der Klon auf dem ausgewählten Knoten ausgeführt wird. **Option A, empfohlen: Selbst erstellen.** Standardmäßige Ubuntu- und Debian-Cloud-Images enthalten den Guest Agent nicht, erlauben keinen Root-Login und NexCMP setzt das Root-Passwort über Cloud-Init. Bereiten Sie das Image zuerst vor: ```bash apt install -y libguestfs-tools wget -O noble.qcow2 https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img virt-customize -a noble.qcow2 --install qemu-guest-agent \ --write /etc/cloud/cloud.cfg.d/99-nexcmp.cfg:$'ssh_pwauth: true\ndisable_root: false\n' \ --write /etc/ssh/sshd_config.d/00-nexcmp.conf:$'PermitRootLogin yes\nPasswordAuthentication yes\n' ``` Erstellen Sie anschließend die Template-VM (ID 9000 ist ein Beispiel; halten Sie Template-IDs unter dem Wert `vmid from`, Standard 1000): ```bash qm create 9000 --name tpl-ubuntu-24-04 --memory 2048 --cores 2 --cpu host --ostype l26 \ --scsihw virtio-scsi-single --net0 virtio,bridge=vmbr0 --agent 1 --serial0 socket --vga serial0 qm set 9000 --scsi0 local-lvm:0,import-from=$PWD/noble.qcow2,discard=on,iothread=1 qm set 9000 --ide2 local-lvm:cloudinit --boot order=scsi0 qm template 9000 ``` **Option B: Der integrierte Builder.** Die Karte **Create OS template from cloud image** auf der Registerkarte Clusters (siehe unten) lädt ein qcow2-Image herunter, erstellt das Template und registriert es. Sie erstellt die VM mit Cloud-Init und dem Guest-Agent-Flag, ändert jedoch nichts am Inhalt des Images. Verwenden Sie sie nur mit einem Image, das bereits einen Root-Login erlaubt und den Guest Agent ausführt, oder wenn Sie zusätzlich ein Cloud-Init-Vendor-Data-Snippet bereitstellen. Der Guest Agent ist für **Reset password** und die Anzeige der IP-Adresse der VM erforderlich. ### 6. Den Zertifikatsfingerabdruck kennen (optional) {#_6-know-the-certificate-fingerprint-optional} NexCMP vertraut dem Cluster, indem es den SHA-256-Fingerabdruck seines TLS-Zertifikats pinnt, sodass ein selbstsigniertes Zertifikat problemlos verwendet werden kann. So zeigen Sie den Wert an, den NexCMP pinnen wird: ```bash openssl x509 -in /etc/pve/local/pve-ssl.pem -noout -fingerprint -sha256 ``` ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **Infrastructure › Cloud provider › Providers** und klicken Sie auf **Add cloud provider**. Wählen Sie **Proxmox VE** aus und füllen Sie die Felder aus: | Feld | Beispielwert | |---|---| | Name | `Proxmox cluster 1` | | Endpoint | `https://192.0.2.10:8006` | | Token id | `nexcmp@pve!api` | | Token secret | `XXXX` (die in Schritt 1 ausgegebene UUID) | | Slug | `pve-1` (a-z, 0-9, Bindestrich, 2-32 Zeichen) | | Default node | `pve1` (leer: Der Online-Node mit dem meisten freien RAM) | | Storage | `local-lvm` | | Bridge | `vmbr0` | ![Dialog zum Hinzufügen eines Cloud-Providers mit ausgewähltem Proxmox VE sowie Beispielwerten für Endpunkt, Token und Storage](https://nexcmp.com/de/docs/images/infrastructure/proxmox-01-add-provider.webp) 2. Klicken Sie auf **Save & open provider** und geben Sie auf Nachfrage einen Grund ein. Das Token wird vor dem Speichern verschlüsselt. 3. Klicken Sie im Reiter **Overview** auf **Test connection**. Der erste erfolgreiche Test **pinnt den TLS-Fingerabdruck des Clusters**; ab diesem Zeitpunkt wird ein abweichendes Zertifikat abgelehnt. 4. Öffnen Sie den Reiter **Clusters**. Die Karte **Node · storage · bridge** zeigt an, was die API erkennt; die Karte **Cluster configuration** enthält die Einstellungen: | Feld | Bedeutung | |---|---| | Default node | Für neue VMs verwendeter Node. Leer bedeutet der Online-Node mit dem meisten freien RAM. | | Storage, Bridge, VLAN | Festplattenspeicher, NIC-Bridge und optionales VLAN-Tag (0 bedeutet keines). | | CPU type | `host` standardmäßig. Verwenden Sie `x86-64-v2-AES`, wenn die Nodes unterschiedliche CPU-Generationen aufweisen. | | vmid from | Erste VM-ID, die an Kunden-VMs vergeben wird (Standard: 1000). | | Storage ISO, Storage backup | Leer lassen, sofern nicht verwendet; leer bedeutet, dass ISO- und Backup-Funktionen nicht angeboten werden. | | Template OS | Einer pro Zeile, `os-key=vmid`, zum Beispiel `ubuntu-24.04=9000`. | | Pinned TLS fingerprint (SHA-256) | Wird beim ersten Test automatisch ausgefüllt. Löschen Sie den Wert und testen Sie erneut, nachdem Sie das Cluster-Zertifikat ausgetauscht haben. | ![Cluster-Reiter, Cluster-Konfigurationskarte mit Beispielen für Node, Storage, Bridge und OS-Template-Liste](https://nexcmp.com/de/docs/images/infrastructure/proxmox-03-cluster-config.webp) 5. Optional: Wenn Sie obige Option B verwendet haben, füllen Sie **Create OS template from cloud image** aus (OS-Key `ubuntu-24.04`, vmid `9000`, Node `pve1`, die qcow2-Image-URL) und klicken Sie auf **Create template**. Dies läuft einige Minuten im Hintergrund; das Ergebnis befindet sich im Audit-Log. ![Karte zum Erstellen eines OS-Templates aus einem Cloud-Image mit einer beispielhaften Ubuntu-Image-URL](https://nexcmp.com/de/docs/images/infrastructure/proxmox-04-template-from-image.webp) 6. Klicken Sie auf **Add pool** unter **Cluster IP pool** und erstellen Sie den Pool, aus dem VMs Adressen beziehen: | Feld | Beispielwert | |---|---| | Name | `customers-1` | | CIDR | `198.51.100.0/24` | | Gateway | `198.51.100.1` (wird niemals an eine VM vergeben) | | DNS | `1.1.1.1,8.8.8.8` (1 bis 4 IPv4-Adressen) | | Bridge, VLAN | `vmbr0`, `0` | | Already used IPs | einer pro Zeile, `ip note`, zum Beispiel `198.51.100.10 monitoring` | NexCMP weist niemals die Netzwerkadresse, die Broadcast-Adresse, das Gateway oder eine reservierte Adresse zu. Pools desselben Clusters dürfen sich nicht überlappen. Ein Pool kann nur gelöscht werden, wenn keine seiner Adressen in Verwendung ist. ![Dialog zum Hinzufügen eines IP-Pools mit beispielhaftem /24 und Gateway](https://nexcmp.com/de/docs/images/infrastructure/proxmox-05-ip-pool.webp) 7. Wählen Sie unter **Attach cluster to zone** die Zone und optional einen Nodenamen aus und klicken Sie auf **Attach to zone**. Das Cluster tritt der Zone bei, die bereits VMs verkauft, sodass eine Zone CloudStack und Proxmox gemeinsam nutzen kann. Die neue Quelle wird **standardmäßig nicht verkauft** und ändert nichts am Verhalten bestehender Tarife. ![Karte zum Zuweisen des Clusters zu einer Zone mit ausgewählter Bestandszone](https://nexcmp.com/de/docs/images/infrastructure/proxmox-06-attach-zone.webp) 8. Öffnen Sie **Services › Virtual Machines › Plans & pricing** und klicken Sie auf **Add plan**. Wählen Sie unter **Infrastructure source** das Proxmox-Cluster aus und legen Sie anschließend CPU, RAM, Festplatte und Preis fest. Ein Proxmox-Tarif benötigt kein CloudStack-Offering. Um dieselbe Konfiguration von beiden Quellen aus anzubieten, verwenden Sie **Clone** bei einem Tarif und wählen Sie die andere Quelle aus. Die Festplatte des Tarifs muss mindestens so groß sein wie die des Templates; Proxmox kann eine Festplatte nicht verkleinern. ### Bereits existierende VM importieren {#import-a-vm-that-already-exists} Öffnen Sie die Registerkarte **Servers**, um die VMs auf dem Cluster aufzulisten. **Import** weist einem Kundenkonto eine bestehende VM kostenlos zu: Es wird nichts für Stunden, Ausschaltzeiten oder Traffic berechnet. Der Kunde kann die VM starten, stoppen, neu starten und die Konsole öffnen, sie jedoch nicht löschen; dies kann nur ein Administrator. NexCMP liest beim Importieren nur vom Cluster. - Der Cluster muss mit einer Zone verknüpft sein, **die den Nodename** dieser VM enthält (lassen Sie den Node leer, meldet der Import, dass die Region nicht eingerichtet ist). - Um eine VM als **geschützt** zu markieren (Stoppen, Neustarten, Neuinstallieren, Snapshot-Wiederherstellung, Löschen und Tarifänderungen werden verweigert), importieren Sie diese über die Befehlszeile mit `--protect`: ```bash sudo -u nexcmp /opt/nexcmp/bin/nexcmp px-import --provider pve-1 --server-ref pve1/101 --account-id 12 --hostname web-1 --protect ``` ### Was auf Proxmox unterstützt wird und was nicht {#what-is-and-is-not-supported-on-proxmox} | Funktion | Proxmox VE | |---|---| | Erstellen, Ein-/Ausschalten/Neustarten, Löschen | Ja | | CPU und RAM anpassen, Festplatte vergrößern | Ja, aber die VM wird gestoppt, geändert und wieder gestartet (keine Live-Größenänderung) | | Snapshots | Ja, bis zu 5 pro VM: Erstellen, Auflisten, Wiederherstellen, Löschen | | Reinstall | Ja: Die VM wird aus dem Template neu erstellt und behält ihre ID, IP und Einstellungen bei, mit einem neuen Passwort | | Reset password | Ja, über den Guest Agent | | Konsole | Ja, eine vom Panel bereitgestellte Browser-Konsole | | Metriken | Ja: CPU, Arbeitsspeicher, Netzwerk und Festplatte | | ISO-Mount, Backups, Firewall, IPv6, Portweiterleitung, IP ändern, zusätzliche Datenträger, Auto Scaling, DDoS Shield, VPC, Bandbreitenmessung | Nicht verfügbar. Die Kunden-VM-Seite blendet aus, was eine Quelle nicht unterstützt. | ## Verifizierung {#verify} 1. **Test connection** zeigt OK und der Anbieterstatus ist aktiv. 2. **Clusters** listet Ihre Nodes als online, samt Speicher und Bridge. 3. **Cluster IP pool** zeigt die Anzahl der freien, genutzten und gehaltenen IPs. 4. Der OS-Key erscheint nach dem Zuordnen des Clusters unter den Vorlagen der Zone in **Services › Virtual Machines › Template**. 5. Bestellen Sie eine Test-VM über einen Tarif, der das Cluster verwendet. Sie sollte eine Adresse aus dem Pool, ein Root-Passwort und eine funktionierende Konsole erhalten; der Pool zeigt eine verwendete Adresse an. ## Grenzwerte und Hinweise {#limits-and-notes} ::: tip Zonen mit gemischten Quellen Seit NexCMP 1.4.0 funktioniert die öffentliche Preisliste für Cloud Server auch, wenn sich CloudStack und Proxmox VE eine Zone teilen. Jeder Plan nutzt seine eigene **Infrastructure source**. Prüfen Sie nach dem Anbinden eines Clusters die öffentliche Preisliste und geben Sie für jede Quelle eine Testbestellung auf. ::: - Es können mehrere Proxmox-Cluster hinzugefügt werden. Jedes repräsentiert einen Anbieter. - Eine Zone bietet eine Standardquelle; ein Tarif mit einer eigenen **Infrastructure source** wird genau auf diesem Cluster bereitgestellt, sofern das Cluster aktiv ist und in der Zone des Tarifs liegt. - Ein Cluster hinter derselben Zone wie CloudStack behält seine Legacy-Tarife auf CloudStack bei. Testen Sie eine Bestellung vor dem Launch von Anfang bis Ende. - Der API-Token kann nur ersetzt, nie eingesehen werden. Ersetzen Sie ihn im Tab **Credentials**: Erstellen Sie den neuen Token zuerst in Proxmox, geben Sie ihn ein, führen Sie **Test connection** aus und sperren Sie anschließend den alten Token. - Die Aktionen Test, Sync und Cluster-Info sind auf sechs Aufrufe pro Minute und Administrator beschränkt. - NexCMP stellt Ihren Kunden Rechnungen; die Kosten für Hardware und Lizenzen des Clusters tragen Sie. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Test: „Key rejected (wrong access key / secret, or revoked)“ oder HTTP 401/403 | Falsche Token-ID oder falsches Secret, oder die ACL wurde nur dem Token zugewiesen | Führen Sie die beiden `pveum acl modify` Befehle (Benutzer **und** Token) erneut aus und prüfen Sie, ob die Token-ID `user@realm!tokenid` lautet. | | Test: „Could not connect to the provider“ oder „Timed out“ | Firewall, falscher Host oder Port | Prüfen Sie `https://host:8006` vom Panel-Server aus. | | Test: „Invalid endpoint or not on the allowlist“ | Der Endpunkt enthält einen Pfad, Benutzer, Query oder verwendet kein HTTPS | Verwenden Sie genau `https://host:8006`. | | „cluster TLS certificate DOES NOT match pinned fingerprint“ | Das Cluster-Zertifikat wurde ausgetauscht | Löschen Sie **Pinned TLS fingerprint** auf der Registerkarte Clusters, speichern Sie und führen Sie **Test connection** erneut aus. | | Slug abgelehnt | Keine a-z, 0-9, Bindestriche oder nicht 2–32 Zeichen lang | Verwenden Sie etwas wie `pve-1`. | | „Token id format: user@realm!tokenid and secret is required“ | Token-ID oder Secret fehlt | Geben Sie beides ein; das Secret ist die UUID, die bei der Erstellung des Tokens ausgegeben wurde. | | „Invalid template line: …“ | Eine Zeile in **Template OS** entspricht nicht `key=vmid` | Verwenden Sie im Schlüssel Buchstaben, Ziffern, `.`, `_`, `-` und eine vmid von mindestens 100. | | „OS key: a-z 0-9 . _ - and vmid ≥ 100“ | Ungültiger Schlüssel oder ID in **Create template** | Korrigieren Sie den OS-Schlüssel und verwenden Sie eine freie vmid. | | „vmid … already exists“ beim Erstellen einer Vorlage | Die vmid ist bereits vergeben | Wählen Sie eine andere ID. | | „url points to internal address“ | Die Image-URL ist eine interne IP | Verwenden Sie eine öffentliche URL; Namen werden von Proxmox aufgelöst. | | Vorlagenaufgabe schlägt beim Download fehl | Der Speicher `local` hat keinen `import`-Inhalt | `pvesm set local --content …,import,snippets`, dann erneut versuchen. Ein Dateiname muss auf `.qcow2`, `.raw`, `.vmdk`, `.ova` oder `.ovf` enden. | | „cluster has no online nodes“ oder „node … is not online“ | Der Standardknoten ist offline oder falsch geschrieben | Korrigieren Sie **Default node** oder lassen Sie das Feld leer. | | „image does not belong to cluster“ | Das Betriebssystem des Tarifs ist nicht in **Template OS** enthalten | Fügen Sie den Schlüssel zur Liste hinzu und speichern Sie. | | Bereitstellung wartet und schlägt dann beim Klonen fehl | Die Vorlagen-VM befindet sich nicht auf dem ausgewählten Knoten | Erstellen Sie die Vorlage auf diesem Knoten oder setzen Sie **Default node** auf den Knoten, der sie enthält. | | Kunde kann sich nicht als root anmelden | Das Image blockiert die root-Anmeldung | Erstellen Sie die Vorlage wie in Option A neu. | | Passwort zurücksetzen bewirkt nichts | Kein Gastagent im Gastsystem installiert | Installieren und aktivieren Sie `qemu-guest-agent` in der Vorlage. | | "Name, CIDR and gateway sind erforderlich" | Fehlendes Pool-Feld | Füllen Sie alle drei aus. | | Pool-Erstellung: "overlaps with pool …", "gateway must be within range (not network/broadcast address)" oder "cidr: network address must be …" | Überlappender Pool, falsches Gateway oder eine CIDR, die nicht auf einer Netzwerkgrenze liegt | Verwenden Sie einen freien Bereich, ein Gateway darin und eine als Netzwerkadresse geschriebene CIDR (zum Beispiel `198.51.100.0/24`). | | Import: „region is not set up“ | Das Cluster ist ohne den Knotennamen der VM angebunden | Binden Sie das Cluster mit dem Knotennamen an die Zone an. | --- # OS-Vorlagen und ISOs {#os-templates-and-isos} > **Wo im Adminbereich:** Services › Virtual Machines › Template (`/vm/templates`). Proxmox-Templates werden pro Cluster unter Infrastructure › Cloud provider › Providers › (cluster) › Clusters aufgeführt. ## Funktion {#what-it-does} Eine Vorlage ist das Betriebssystem-Image, mit dem eine neue VM gestartet wird. NexCMP speichert Images nicht selbst: Es liest aus, was CloudStack meldet (bereite, als „featured“ markierte Vorlagen) oder was Sie für ein Proxmox-Cluster auflisten, und lässt Sie auswählen, welche davon verkauft werden – mit kundenfreundlichem Namen, Symbol und Login-Benutzer. Diese Seite zeigt, wie Sie Images vorbereiten, die optimal mit NexCMP funktionieren: Passwort-Login, Live-CPU- und RAM-Skalierung, eine Auslagerungsdatei und eine Root-Festplatte, die auf die Tarifgröße anwächst. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | CloudStack-Vorlagen-Builder | Eine Linux-Maschine mit `libguestfs-tools` (`virt-customize`, `virt-sparsify`, `guestfish`), `qemu-utils`, `curl` und etwa 5 GB freiem Festplattenspeicher. Es werden weder KVM noch Root-Rechte benötigt. Internetzugang für Paketinstallationen (oder Erstellung mit `--offline`). | | Wo sich der Builder befindet | Er wird mit jedem Release im Ordner `/opt/nexcmp/releases//share/templates/` auf dem Panel-Server ausgeliefert. Sie müssen ihn dort nicht ausführen: Kopieren Sie den Ordner einfach auf eine beliebige Linux-Maschine. | | Webserver | Jeder HTTP(S)-Server, den die Secondary Storage-VM von CloudStack erreichen kann, um die fertige `.qcow2`-Datei zu veröffentlichen. Er muss nicht aus dem Internet erreichbar sein. | | CloudStack | Ein Konto, das Vorlagen registrieren darf, sowie die ID Ihrer Zone und eines passenden Betriebssystemtyps. Siehe [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/). | | Proxmox VE | Cloud-init-Vorlagen-VMs mit dem QEMU Guest Agent, eine pro OS und pro Knoten. Siehe [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/). | | Abhängig von | Zuerst verbundene [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/) oder [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/). | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} ### CloudStack: Eine Vorlage erstellen {#cloudstack-build-a-template} Unterstützte Basis-Images (das Hersteller-Image wird heruntergeladen und seine Prüfsumme vor allen Änderungen verifiziert): | Image | `--distro` | Login-Benutzer | |---|---|---| | Ubuntu 22.04 | `ubuntu-22.04` | `ubuntu` | | Ubuntu 24.04 | `ubuntu-24.04` | `ubuntu` | | Debian 12 | `debian-12` | `debian` | | Rocky Linux 9 | `rocky-9` | `rocky` | Weitere Distributionen: Fügen Sie eine Zeile zu `distros.conf` hinzu (Image-URL, Prüfsummendatei, Familie `deb` oder `rpm`). 1. Kopieren Sie den Builder auf eine Build-Maschine und führen Sie ihn aus: ```bash cp -r /opt/nexcmp/releases//share/templates ~/templates && cd ~/templates ./build-template.sh --distro ubuntu-24.04 --version v7 --work ./out ``` Fügen Sie `--panel-url https://cloud.example.com` hinzu, um einen optionalen First-Boot-Überwachungsagenten zu integrieren, der sich bei Ihrem Panel registriert (nur HTTPS). Ohne diese Option wird kein Agent hinzugefügt. Weitere Optionen: `--base `, um ein heruntergeladenes Image zu verwenden, `--offline`, um Paketinstallationen zu überspringen. 2. Das Ergebnis ist `out/ubuntu-24.04-v7.qcow2` und seine `.sha256`. Der Build endet mit der Ausführung von `verify-image.sh`, wodurch das fertige Image schreibgeschützt überprüft und fehlerhafte Images abgelehnt werden (sie werden als `.unverified` beibehalten). Sie können dies jederzeit erneut ausführen: `./verify-image.sh out/ubuntu-24.04-v7.qcow2 --no-agent`. Was der Builder in das Image einfügt: | Komponente | Grund | |---|---| | `qemu-guest-agent` | CloudStack kann die VM nach CPUs und IPs abfragen und sie für Snapshots anhalten. | | cloud-init mit der CloudStack-Datenquelle, `set_passwords` bei jedem Systemstart, SSH-Passwort-Login | Das generierte Passwort wird vom Virtual Router abgerufen und **Reset password** funktioniert. | | Eine udev-Regel für im laufenden Betrieb hinzugefügte CPU und RAM | Dynamisch hinzugefügte vCPUs und RAM nehmen von selbst den Betrieb auf, sodass Live-Skalierung und Auto Scaling funktionieren. | | Ein Swap-Datei-Dienst | Erstellt `/swapfile` aus dem kleineren Wert von 50 % des RAM und 4 GiB, nachdem die Festplatte gewachsen ist. `touch /etc/cmp-swap.disabled` schaltet dies aus. | | cloud-init `growpart` und `resizefs` | Die kleine Root-Festplatte wächst beim ersten Systemstart auf die Festplattengröße des Tarifs an. | | Leere machine-id, keine SSH-Host-Schlüssel | Jede VM erhält ihre eigene Identität. | ::: warning Vorlage benennen: ` ` NexCMP schaltet **Auto Scaling** für Vorlagen ein, deren Name auf `vN` oder `vN.M` endet mit **N von 6 oder mehr** (`Ubuntu 24.04 v7`, `Rocky Linux 9 v7.1`). Der Builder erzwingt dies für `--version`. Registrieren Sie die Vorlage mit exakt dem ausgegebenen Namen. ::: 3. Veröffentlichen Sie die Datei und registrieren Sie sie in CloudStack. Verwenden Sie den vom Build ausgegebenen SHA-256-Wert und registrieren Sie sie erst, wenn die Datei vollständig geschrieben ist: ```bash cmk list ostypes keyword="Ubuntu 24.04" filter=id,description cmk register template name="Ubuntu 24.04 v7" displaytext="Ubuntu 24.04 v7" \ url=https://files.example.com/ubuntu-24.04-v7.qcow2 zoneid= format=QCOW2 hypervisor=KVM \ ostypeid= passwordenabled=true sshkeyenabled=true isdynamicallyscalable=true \ requireshvm=true isextractable=false ispublic=true isfeatured=true \ checksum="{SHA-256}" \ details[0].guest.cpu.mode=host-passthrough details[0].rootDiskController=osdefault ``` - `passwordenabled=true` lässt CloudStack das VM-Passwort generieren. - `isdynamicallyscalable=true` ermöglicht Live-Skalierung. - `host-passthrough` wird benötigt, damit aktuelle Rocky- und Alma-Images booten; `osdefault` hält den Festplattencontroller portabel. 4. Warten Sie, bis die Vorlage **Download Complete / Ready** erreicht. Das Hersteller-Image behält seine geringe virtuelle Größe (ca. 3.5 GiB für Ubuntu und Debian, 10 GiB für Rocky). Denken Sie daran, dass die Festplatte eines Tarifs nicht kleiner sein darf als die des Templates. ### Proxmox VE: Vorlage erstellen {#proxmox-ve-make-a-template} Erstellen Sie pro Betriebssystem auf jedem Bereitstellungsknoten eine Cloud-init-VM-Vorlage mit installierten Gastagenten und aktiviertem Root-Login, und registrieren Sie sie dann als `os-key=vmid`. Die vollständigen Befehle finden Sie unter [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/). Der CloudStack-Builder oben ist **nicht** für Proxmox gedacht: Er konfiguriert cloud-init für die CloudStack-Datenquelle. ### ISOs {#isos} Kunden binden ihre eigenen ISOs über das Modul **Images** (CloudStack) oder das Modul für dedizierte Server ein. Diese sind von den Betriebssystemvorlagen auf dieser Seite getrennt. Siehe [Modules](https://nexcmp.com/de/docs/infrastructure/modules/) und [Dedicated servers](https://nexcmp.com/de/docs/infrastructure/dedicated/). ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **Services › Virtual Machines › Template**. Klicken Sie auf **Sync now** oder warten Sie bis zu 15 Minuten. Die Synchronisierung fügt Vorlagen hinzu, die in CloudStack bereit und als Featured markiert sind. ![Die Vorlagenseite listet synchronisierte Vorlagen mit deren Bereitschaftsstatus und der Spalte für CPU-Hot-Plugging auf](https://nexcmp.com/de/docs/images/infrastructure/templates-01-list.webp) 2. Klicken Sie bei einer neuen Vorlage auf **Edit** und legen Sie fest, was Kunden sehen: | Feld | Beispielwert | |---|---| | Anzeigename für Kunden | `Ubuntu 24.04 LTS` | | Betriebssystemfamilie | `ubuntu` (Symbol und Standardbenutzer) | | Version | `24.04` | | Anmeldename | `ubuntu` (Windows: `Administrator`; andere: `root`) | | Symbol | Bild-URL, Pfad oder Name | | Reihenfolge | `10` | | Aktiv | An | | vCPU-/RAM-Hot-Plugging (Live-Skalierung) | **Auto by name (v6 or later)**, **Yes** oder **No (needs a restart)** | ![Dialogfeld zum Bearbeiten der Vorlage mit kundenbezogenem Namen, Betriebssystemfamilie, Anmeldebenutzer und Hot-Plug-Option](https://nexcmp.com/de/docs/images/infrastructure/templates-02-edit.webp) 3. Schalten Sie die Vorlage ein. Eine Vorlage, die von CloudStack nicht mehr aufgelistet wird, wird automatisch ausgeblendet (und Sie werden bei entsprechender Konfiguration in Telegram benachrichtigt); sie wird niemals aus NexCMP gelöscht. ### Ein Template durch einen neueren Build ersetzen {#replace-a-template-with-a-newer-build} Verwenden Sie **More › Replace with new version** beim verkauften Template. Wählen Sie das neue, bereits vorbereitete und aktuell deaktivierte Template aus. Der verkaufte Eintrag verweist dann auf den neuen Build und behält seinen Namen, seine Reihenfolge und sein Icon bei; das alte wird als Rückweg deaktiviert (um zurückzugehen, verwenden Sie **Replace** beim neuen Eintrag). Laufende VMs sind davon nicht betroffen. Wenn der neue Build eine andere Betriebssystemfamilie aufweist, aktivieren Sie zuvor das Bestätigungskästchen. ## Verifizierung {#verify} 1. Die Zeile zeigt **ready** und für Builds mit der Endung `vN` mit N von 6 oder mehr **CPU hot-plug: supported** an. 2. Deployen Sie eine Test-VM aus dem Template und überprüfen Sie diese innerhalb der VM: - Sie können sich mit dem im Portal angezeigten Passwort anmelden; - `df -h /` zeigt die Festplattengröße des Tarifs an; - nach einer Live-Skalierung (**Change plan** ohne Neustart) wachsen `nproc` und `free -m`; - `swapon --show` listet `/swapfile` auf (Datenträger mit weniger als Swap plus 2 GiB freiem Speicher überspringen dies); - `systemctl is-active qemu-guest-agent` gibt `active` aus. 3. Wenn Sie den Agenten integriert haben, erscheint die VM eine Minute nach dem ersten Start in den überwachten Hosts des Panels. Die VM benötigt eine eigene öffentliche IP: Das Panel erkennt sie an ihrer öffentlichen Quell-IP. ## Grenzwerte und Hinweise {#limits-and-notes} - Der Builder ist nur für Linux verfügbar und erstellt Linux-Images. Andere Images (zum Beispiel Windows) können auf anderem Wege in CloudStack registriert werden; NexCMP listet auf, was CloudStack meldet. - Es wird nur der amd64-Agent ausgeliefert; andere Architekturen überspringen die Agenteninstallation. - Das Image wird mit `guestfish` überprüft, aber niemals vom Builder gebootet. Deployen Sie vor dem Verkauf eines neuen Images stets eine Test-VM. - Überspringen Sie den Agenten auf einer VM vor dem ersten Start mit `touch /etc/cmp-agent.disabled`. Entfernen Sie ihn später mit `systemctl disable --now cmp-agent cmp-agent-install; rm -rf /etc/cmp-agent /usr/local/bin/cmp-agent` und löschen Sie den Agenten anschließend in der Admin-Konsole. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | `virt-customize` kann Pakete nicht herunterladen | Die Build-Maschine hat keinen Netzwerkzugriff nach außen | Beheben Sie DNS oder Proxy auf dieser Maschine oder erstellen Sie den Build mit `--offline` auf einem Basis-Image, das die Pakete bereits enthält. | | `libguestfs: error: /usr/bin/supermin exited with error status 1` | Der Host-Kernel ist für den aktuellen Benutzer nicht lesbar (Ubuntu) | `sudo chmod +r /boot/vmlinuz*` oder führen Sie den Build als root aus. | | Prüfsumme weicht ab oder das Hersteller-Image existiert nicht mehr | Hersteller verschieben ihre „latest“-Dateien | Laden Sie das Image selbst herunter, überprüfen Sie es anhand der Prüfsummendatei des Herstellers und übergeben Sie es mit `--base`. | | Rocky: Ein neueres XFS kann nicht gemountet werden | Der Host-Kernel ist zu alt | Erstellen Sie den Build auf einer Maschine mit einem aktuellen Kernel. | | `--version must be v6 or higher` | Der Name muss `vN` mit N von 6 oder mehr sein | Verwenden Sie `--version v7`. | | `--panel-url must be a plain https:// URL` | Der Agent wird heruntergeladen und als root ausgeführt, weshalb unverschlüsseltes HTTP abgelehnt wird | Verwenden Sie eine `https://`-URL ohne Leerzeichen, Anführungszeichen oder Abfragezeichenfolge. | | Template bleibt **not ready** | CloudStack hat den Download noch nicht abgeschlossen | Warten Sie auf **Download Complete** und überprüfen Sie, ob die Secondary-Storage-VM die URL erreichen kann. | | Zeile zeigt **no-pass** | Das Template wurde ohne `passwordenabled=true` registriert | Registrieren Sie es erneut mit diesem Flag. | | CPU-Hotplug wird als **unsupported** angezeigt | Der Name endet nicht auf `vN` (N von 6 oder mehr) | Benennen Sie das Template um oder setzen Sie **vCPU/RAM hot-plug** unter Edit auf **Yes**, sofern das Image die udev-Regel enthält. | | „Empty template list“ nach der ersten Verbindung | Die Synchronisierung wurde noch nicht ausgeführt | Klicken Sie auf **Sync now** (erfordert einen laufenden Worker) oder warten Sie auf den 15-minütigen Zyklus. | --- # Dedizierte Server (Bare Metal) {#dedicated-servers-bare-metal} > **Wo im Admin-Bereich:** Infrastructure › Bare Metal (Servers `/infra/baremetal`, IP Pools, Stock / iDRAC import, Operations, Templates, Customer ISOs, Safety). Tarife und Abonnements: Services › Dedicated Server (`/dedicated`). Aktivieren Sie das Modul unter System › Admin › License & updates (`/license`). ## Funktion {#what-it-does} NexCMP verwaltet physische Server **direkt über deren iDRAC** per Redfish API. Kunden mieten einen kompletten Server: Sie schalten ihn ein und aus, öffnen eine Browserkonsole, binden eine ISO ein oder installieren ein Betriebssystem über eine Template und sehen Hardware sowie Metriken. Sie bekommen niemals die iDRAC-Adresse, den Benutzernamen oder das Passwort zu Gesicht. Nutzen Sie dies, um dedizierte Server aus Ihren eigenen Racks weiterzuverkaufen. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Hardware | Dell-Server mit **iDRAC 9** und der Redfish API. | | Management-Netzwerk | **Wird von Ihnen bereitgestellt.** Der Panel-Server muss jeden iDRAC über **HTTPS 443** (sowie den iDRAC-VNC-Port, standardmäßig **5901**, für die Konsole) erreichen können, und jeder iDRAC muss den unten genannten ISO-Webserver erreichen können. Die iDRAC-Adresse muss eine **IPv4-Adresse in einem privaten Bereich** sein (RFC 1918, ein Präfix von /16 oder kleiner), die Sie in der Einstellung `dedicated_bmc_cidrs` hinterlegen. DNS-Namen und IPv6 werden abgewiesen. NexCMP erstellt dieses Netzwerk nicht und kann es nicht für Sie testen. | | iDRAC-Konto | Ein Konto mit **Administrator**-Berechtigung auf jedem iDRAC. NexCMP verwendet es, um den Server auszulesen und die wenigen zulässigen Befehle zu senden (Stromversorgung, virtuelle Medien, einmaliges Booten, Konsole). Es erstellt niemals iDRAC-Konten für Ihre Kunden. | | Tools auf dem Panel-Server | `xorriso` und `genisoimage` (erstellen das Installations-ISO jedes Servers) sowie `novnc` (die Browser-Konsolenseite). Installieren Sie sie mit `sudo apt-get install -y xorriso genisoimage novnc` oder überlassen Sie dies dem Installer: Führen Sie ihn mit `--baremetal` aus oder übergeben Sie ihm die ISO-Server-Optionen; ein Update installiert sie ebenfalls, wenn das Bare-Metal-Modul bereits aktiv ist. Fehlt eines davon, listet **Safety** dies in einem roten Hinweis auf, **live ops** lässt sich nicht aktivieren (Fehler `tools_missing`), und Konsole sowie Betriebssysteminstallation melden, dass ein Tool fehlt, anstatt später fehlzuschlagen. | | ISO-Webserver | Ein einfacher **HTTP**-Server im Management-Netzwerk, der den NexCMP-ISO-Ordner für die iDRACs bereitstellt. Seine Adresse ist eine private IPv4-Adresse und ein optionaler Port, zum Beispiel `http://10.20.0.2:8080`, **ohne Pfad**, gespeichert in `dedicated_iso_base_url`. Er muss Byte-Ranges unterstützen. Da der Ordner vom Worker des Panels beschrieben wird, läuft der Webserver normalerweise auf dem **Panel-Server selbst** und lauscht auf einer Adresse, die dieser Server im Management-Netzwerk besitzt. NexCMP liefert dafür eine fertige nginx-Site und einen Ein-Schritt-Befehl mit (siehe unten). | | ISO-Ordner | Ein Ordner für ISO-Dateien und darin `pub` (was die iDRACs lesen) sowie `server` (Kunden-ISOs). Der Ein-Schritt-Befehl verwendet `/srv/nexcmp-iso`; ohne ihn gelten die Standardwerte der Installation (Einstellungen `dedicated_iso_lib_dir`, `dedicated_iso_pub_dir`, `dedicated_iso_server_dir`). Der NexCMP-Worker muss darauf **schreibend** zugreifen können. Er läuft mit einem schreibgeschützten Dateisystem mit Ausnahme von `/var/lib/nexcmp`; daher erfordert ein Ordner an anderer Stelle ein systemd-Drop-in (der Ein-Schritt-Befehl richtet dieses ein). | | Rückruf-Adresse (Callback) | `dedicated_callback_base`, eine `https://`, die der installierende Server erreichen kann und die auf Ihr Panel verweist. | | Storage | Freier Festplattenspeicher für die ISO-Bibliothek und vom Kunden bereitgestellte ISOs. | | Abhängig von | Das Modul **Bare Metal**, eine Zone und die IP-Pools der Server. | ::: warning Beispielwerte sind keine Konfiguration Eine Neuinstallation enthält Beispielwerte in `dedicated_bmc_cidrs`, `dedicated_iso_base_url` und `dedicated_callback_base` (ein privates Beispielnetzwerk und `https://example.com`). Diese entsprechen nicht Ihrem Netzwerk. Solange einer davon noch ein Beispielwert ist, zeigen die Bare-Metal-Seiten einen roten Hinweis **Management network not configured** an, das Importieren eines iDRAC schlägt bei der Allowlist-Prüfung fehl und der Schalter **live ops** lässt sich nicht aktivieren (Fehler `config_placeholder`). Hinterlegen Sie die drei Werte unter **Infrastructure › Bare Metal › Safety › Management network connection** (siehe unten). ::: ## Infrastruktur vorbereiten {#prepare-the-infrastructure} 1. **Verlegen Sie jeden iDRAC in ein Management-Netzwerk**, das für Kunden unerreichbar ist, und weisen Sie jedem eine feste private IPv4-Adresse zu. Überprüfen Sie die Redfish API vom Panel-Server aus: ```bash curl -sk -u 'nexcmp-admin:XXXX' https://10.20.0.11/redfish/v1/Systems | head ``` 2. **Erstellen Sie ein Administrator-Konto auf dem iDRAC** für NexCMP (iDRAC Web-UI oder `racadm`). Verwenden Sie ein sicheres, eindeutiges Passwort. Verwenden Sie niemals das integrierte Standardkonto des iDRAC wieder. 3. **ISO-Ordner für die iDRACs freigeben – ein Befehl.** Auf dem Panel-Server als root mit der Adresse, die dieser Server im Management-Netzwerk hat, und dem iDRAC-Netzwerk: ```bash sudo nexcmp dedicated-setup-iso --listen 10.20.0.2:8080 --allow 10.20.0.0/24 ``` `--listen` muss eine Adresse dieses Servers sein (private IPv4, Port 8080, falls weggelassen). `--allow` listet die iDRAC-Netzwerke auf (private CIDRs, /16 oder kleiner, bis zu 8, kommagetrennt); nur diese dürfen herunterladen, und der Befehl verwendet sie auch als `dedicated_bmc_cidrs`, wenn diese Einstellung noch der Beispielwert ist. `--dir /path` wählt einen anderen ISO-Ordner (Standardwert `/srv/nexcmp-iso`). Der Befehl: - erstellt den Ordner mit `pub` und `server` darin, mit dem NexCMP-Dienstbenutzer als Eigentümer; - erstellt die Gruppe `nexcmp-iso` und fügt den nginx-Benutzer hinzu, sodass nginx ein ISO lesen kann, während ein iDRAC es eingebunden hat, und sonst niemand; - installiert die nginx-Site `nexcmp-iso` (wird nur beibehalten, wenn `nginx -t` sie akzeptiert; nginx wird installiert, falls fehlend) und ein systemd-Drop-in `nexcmp-vmd.service.d/iso.conf` (`ReadWritePaths` für den Ordner, `SupplementaryGroups=nexcmp-iso`); - schreibt die ISO-Einstellungen (`dedicated_iso_base_url`, die drei Ordner, die Gruppe) und startet den NexCMP-Worker neu. Er kann mit anderen Werten erneut ausgeführt werden, und `sudo nexcmp dedicated-setup-iso --remove` entfernt die nginx-Site und das Drop-in wieder (ISO-Dateien bleiben erhalten). Er kann auch während der Installation ausgeführt werden: Fügen Sie dem Installationsbefehl `--iso-listen`, `--iso-allow` (und `--iso-dir`) hinzu. Der Befehl erstellt das Management-Netzwerk **nicht** und kontaktiert keinen iDRAC; falls die Werte falsch sind, die Adresse nicht auf diesem Server liegt oder der Port belegt ist, bricht er mit einer Meldung ab, bevor Änderungen vorgenommen werden, und eine von `nginx -t` abgewiesene nginx-Site wird nicht beibehalten. 4. **Was der ISO-Webserver bereitstellt.** Die nginx-Site beantwortet `GET` (und `HEAD` mit Byte-Bereichen) für `/pub/.iso` und sonst nichts: kein Directory-Listing, kein anderer Pfad unterhalb des Ordners (die Bibliothek und `server/` sind nicht erreichbar), keine andere Methode und nur aus den `--allow`-Netzwerken (alle anderen erhalten 403). NexCMP stellt jedes ISO, das ein iDRAC lesen muss, als Datei oder kurzlebigen Link in `pub` bereit; nginx folgt einem Link nur, wenn der Link und sein Ziel denselben Eigentümer haben (den Service-Benutzer), sodass ein Link zu einer Systemdatei verweigert wird. Prüfen Sie dies von einem anderen Host im Verwaltungsnetzwerk aus: ```bash curl -I http://10.20.0.2:8080/ # 403 or 404, never a listing curl -I http://10.20.0.2:8080/pub/ # 403 or 404 ``` Eine Testdatei in `pub` sollte eine `Range`-Anfrage mit 206 beantworten. *Stattdessen manuell ausführen:* Die nginx-Site und das Drop-in werden als Vorlagen im Release-Paket mitgeliefert (`share/dedicated/nginx-iso.conf` und `share/dedicated/vmd-iso.conf` unter `/opt/nexcmp/releases//`). Kopieren Sie diese, ersetzen Sie die `__...__`-Platzhalter (Listen-Adresse, Ordner, Allow-Zeilen, Gruppe) und beachten Sie die oben genannten Regeln. 5. **Halten Sie die OS-Images bereit.** Legen Sie selbstinstallierende ISOs im Bibliotheksordner ab (siehe **Templates** unten). Kunden können ISOs auch über einen Link hinzufügen; diese werden auf den Server heruntergeladen und niemals als URL an das iDRAC übergeben. ## In NexCMP verbinden {#connect-in-nexcmp} ### 1. Modul einschalten {#_1-turn-the-module-on} Schalten Sie unter **System › Admin › License & updates** den Punkt **Bare Metal** ein. Die Kategorie **Bare Metal** erscheint unter Infrastructure. Siehe [Modules](https://nexcmp.com/de/docs/infrastructure/modules/). ### 2. Verbindung zum Verwaltungsnetzwerk einrichten {#_2-set-the-management-network-connection} Öffnen Sie **Infrastructure › Bare Metal › Safety**. Die Karte **Management network connection** enthält die drei Werte, die darüber entscheiden, ob überhaupt etwas funktionieren kann: | Feld | Einstellung | Eingabewert | |---|---|---| | iDRAC network (CIDR) | `dedicated_bmc_cidrs` | Das/die private(n) Netzwerk(e) Ihrer iDRACs, zum Beispiel `10.20.0.0/24`. Nur private CIDRs, /16 oder kleiner, bis zu 8, kommagetrennt. Nur iDRACs in diesen Bereichen können importiert werden. | | ISO-Server für die iDRACs | `dedicated_iso_base_url` | `http://[:port]`, kein Pfad: die Adresse des ISO-Webservers aus dem vorherigen Abschnitt, zum Beispiel `http://10.20.0.2:8080`. Der One-Step-Befehl trägt dies automatisch für Sie ein. | | Panel callback address | `dedicated_callback_base` | `https://`, kein Pfad: die Adresse, die der zu installierende Server aufruft, um den Abschluss zu melden. Sie muss aus dem Netzwerk dieses Servers erreichbar sein. `example.com`, `localhost` und ähnliche werden abgewiesen. | Das Formular prüft das Format bereits bei der Eingabe und der Server erneut beim Speichern; ein falscher Wert wird mit Begründung abgelehnt und der gespeicherte Wert bleibt unverändert. Ein Feld, das noch den mitgelieferten Beispielwert enthält, ist mit einem roten **Not configured**-Label versehen, und jede Bare-Metal-Seite zeigt den roten Hinweis **Management network not configured** an, bis alle drei Werte reale Werte sind. Änderungen werden mit Ihrer Begründung im Audit-Log protokolliert. Das erneute Speichern des Beispielwerts gilt nicht als Konfiguration, es sei denn, Sie haben ihn manuell eingetippt. ### 3. Sicherheits-Gate prüfen (vorerst geschlossen lassen) {#_3-check-the-safety-gate-leave-it-closed-for-now} Öffnen Sie **Infrastructure › Bare Metal › Safety**. **Live ops** ist der systemweite Schalter für jeden Schreibbefehl an ein iDRAC (Stromversorgung, virtuelle Medien, Konsole und Betriebssysteminstallation). Er ist standardmäßig auf **off** und kann nicht aktiviert werden, solange die obige Verbindung zum Verwaltungsnetzwerk noch Beispielwerte enthält (der Schalter antwortet mit `config_placeholder` und nennt die Felder). Schreibvorgänge werden an der API und nochmals im Worker abgewiesen, während das Auslesen des Status weiterhin funktioniert. Eine zweite Sperre, **ops_locked**, schützt jeden Server: Neu importierte Server sind immer gesperrt, auch wenn Live Ops aktiviert ist. ![Die Sicherheitsseite mit deaktiviertem Live ops und der Liste blockierter Aktionen](https://nexcmp.com/de/docs/images/infrastructure/dedicated-01-safety.webp) ### 4. Server importieren {#_4-import-servers} 1. Öffnen Sie **Infrastructure › Bare Metal › Stock / iDRAC import**. 2. Geben Sie unter **Add one server** die iDRAC-Adresse, das Konto und das Passwort ein und klicken Sie auf **Test connection**. Der Test sendet ausschließlich Lesebefehle und speichert nichts. | Feld | Beispielwert | |---|---| | iDRAC-Adresse (URL oder Host) | `10.20.0.11` | | Konto | `nexcmp-admin` | | Passwort | `XXXX` | | Bezeichnung | `rack1-01` (leer: generiert) | | IP aus Pool zuweisen | optional; wählen Sie den Service-IP-Pool des Servers | | In Verkaufsliste aufnehmen | aus, bis Sie bereit sind | ![Lager- und iDRAC-Import mit einer Beispieladresse und einem erfolgreichen Nur-Lese-Test](https://nexcmp.com/de/docs/images/infrastructure/dedicated-02-import-server.webp) 3. Klicken Sie auf **Save to stock**. NexCMP liest Modell, CPU, RAM, Festplatten, Netzwerkkarten und Service-Tag aus dem iDRAC aus. Der Server wird mit dem Status **locked** in das Lager aufgenommen. 4. Für viele Server verwenden Sie **Bulk import**: ein Server pro Zeile, Felder getrennt durch Komma, Semikolon oder Tabulator. Die **Preview** prüft die Whitelist, Duplikate der iDRAC-Adresse oder des Service-Tags und liest die Hardware aus (bis zu vier Server gleichzeitig). ### 5. Kunden-ISOs und die ISO-Webadresse {#_5-customer-isos-and-the-iso-web-address} Öffnen Sie **Infrastructure › Bare Metal › Customer ISOs**. - **HTTP address serving ISOs to iDRAC** ist `dedicated_iso_base_url`, derselbe Wert wie in der Safety-Karte (an beiden Stellen bearbeitbar). Geben Sie die Verwaltungsnetzwerk-Adresse Ihres ISO-Webservers ein. - **Customer ISO limits** legen die maximale Größe eines ISOs, den gesamten ISO-Speicherplatz, den minimalen freien Speicher, die Aufbewahrungsdauer von ISOs (in Stunden), die maximale Download-Zeit und die Anzahl gleichzeitiger Downloads fest. ![Kunden-ISOs mit der HTTP-Adresse für die iDRACs und den ISO-Limits](https://nexcmp.com/de/docs/images/infrastructure/dedicated-03-iso-settings.webp) ### 6. Betriebssystem-Vorlagen {#_6-os-templates} Öffnen Sie **Infrastructure › Bare Metal › Templates**. Hier werden im Bibliotheksordner gefundene, selbstinstallierende ISOs aufgelistet. Klicken Sie bei einer Datei auf **Register**, um Betriebssystemfamilie, Version und Konto auszufüllen (aus dem Dateinamen vorausgefüllt), und aktivieren Sie dann das Template über **Enable**. Das Aktivieren eines Templates startet noch keine Installation; jede Installation durchläuft weiterhin das Sicherheitsgatter. **Unregister** entfernt lediglich den Tabelleneintrag des Templates, niemals die Datei selbst. ![Bare-Metal-Templates mit einem registrierten und einem unregistrierten ISO](https://nexcmp.com/de/docs/images/infrastructure/dedicated-04-os-templates.webp) ### 7. IP-Pools {#_7-ip-pools} Öffnen Sie **Infrastructure › Bare Metal › IP Pools** und fügen Sie die IPv4-Bereiche hinzu, die Server als Service-Adressen erhalten. Jeder Server erhält genau eine Adresse; **Assign an IP from a pool** beim Import verwendet automatisch die nächste freie Adresse. Freie Adressen werden pro Pool gezählt. ![Bare-Metal-IP-Pools mit Beispielbereichen und Anzahl freier Adressen](https://nexcmp.com/de/docs/images/infrastructure/dedicated-05-ip-pools.webp) ### 8. Tarife und Verkauf {#_8-plans-and-sale} 1. Öffnen Sie **Services › Dedicated Server › Plans & pricing**. Bearbeiten Sie die vier Beispielpläne (in 1.6.1 als `BM-40C-` benannt) oder erstellen Sie eigene Pläne: Preis, Abrechnungszyklen und Einrichtungsgebühr. **Bei einer Neuinstallation werden Preise centgenau in US-Dollar eingegeben, und das Wallet wird exakt damit belastet: Es ist kein Wechselkurs erforderlich.** Eine Installation, bei der Pläne bereits in vietnamesischen Dong bepreist waren, behält Dong bei und benötigt weiterhin einen Wechselkurs in den Einstellungen (ohne diesen werden Bestellungen mit `dedicated_fx_unavailable` abgelehnt). Die Beispielpläne starten mit einem Preis von 0 und sind **deaktiviert**: Ein Plan im Verkauf erfordert einen Preis größer als 0. Gleichen Sie jeden Plan mit der tatsächlich importierten Hardware ab; der Name eines Beispielplans erkennt oder ändert die Hardware eines Servers nicht. 2. Öffnen Sie den Server (Infrastructure › Bare Metal › the server › **Sales**), **weisen Sie den Tarif zu** und schalten Sie **Sellable** ein. 3. Schalten Sie den **Live-Betrieb** ein (Sicherheitsseite mit typisierter Bestätigung) und entsperren Sie die Server, die Sie betreiben möchten (über die Registerkarte **Lock** des Servers, mit einem Grund, der in das Audit-Log geschrieben wird). 4. Schalten Sie unter **Services › Dedicated Server** den Verkauf ein. Dies erfordert zwei Schritte: Lesen Sie die Konsequenzen und tippen Sie dann `ENABLE SALES` ein. Bis dahin sehen Kunden keine Bestellseite und werden nicht belastet. ![Dedicated-Server-Tarife mit deaktiviertem Verkaufsschalter](https://nexcmp.com/de/docs/images/infrastructure/dedicated-06-plans.webp) ### Möglichkeiten für Kunden auf ihrer Serverseite {#what-customers-can-do-on-their-server-page} Die Serverseite eines Kunden umfasst sechzehn Tabs in sieben Gruppen (Overview, Control, Network, Hardware, Billing, Activity, Settings). Die Gruppe **Billing** enthält: - **Plan & renewal**: Zahlen Sie 1 bis 24 Monate im Voraus in einem Schritt; das neue Datum wird ab dem aktuellen Verlängerungsdatum berechnet und das Guthaben einmalig belastet. Auto-renew kann ein- oder ausgeschaltet werden. - **Billing cycle**: Wählen Sie einen anderen Abrechnungszeitraum (beispielsweise vierteljährlich); er gilt ab der **nächsten** Verlängerung, und es wird jetzt weder etwas berechnet noch erstattet. - **Change plan**: Ein Kunde kann einen anderen Tarif **anfragen**. Durch die Anfrage wird nichts berechnet. Sie genehmigen oder lehnen sie unter **Services › Dedicated Server › Plan changes** ab, nachdem Sie die Hardware aktualisiert oder den Server verschoben haben. Bei einem genehmigten Upgrade wird die Differenz für den verbleibenden, bereits bezahlten Zeitraum berechnet; ein Downgrade erstattet nichts und gilt ab dem nächsten Zeitraum. - **Invoices**: Jede Rechnung dieses Servers (Bestellung, Verlängerungen, Upgrades). Unter **Plan changes** können Sie Anfragen nach ID, Datum, Status, Plänen oder Server sortieren; die Sortierung umfasst das gesamte Ergebnis auf dem Server. Die Aktionsspalte bleibt sichtbar, wenn Sie auf einem schmalen Bildschirm horizontal scrollen. Oben in der **Overview** zeigen vier Live-Kacheln **CPU**, **RAM**, **Disk** und **Network**, zusammen mit einem kleinen Diagramm für die letzten 24 Stunden. CPU, RAM und Disk sind Auslastungswerte in Prozent aus der letzten iDRAC-Abfrage (Disk gibt die I/O-Aktivität an, nicht den freien Speicherplatz); Network zeigt die aktuelle eingehende und ausgehende Geschwindigkeit sowie den Monatssummenwert aus dem Traffic-Zähler. Eine Kachel zeigt **—** und eine kurze Begründung, wenn der Server ausgeschaltet ist, das iDRAC nicht erreichbar ist oder die Maschine diesen Wert nicht meldet; es wird nie eine erfundene 0 angezeigt. Diese Messwerte stammen von Dell iDRAC, und ohne Traffic-Zähler bleibt die Kachel Network bei **—**. Die Kacheln aktualisieren sich bei geöffneter Seite minütlich, und ein Klick öffnet den Tab **Hardware** oder **Bandwidth**. In der **Overview** zeigt die Karte **Access** den Benutzernamen und das Passwort des von Ihnen installierten Betriebssystems an, standardmäßig ausgeblendet mit den Schaltflächen **Show** und **Copy**. Sie ist nach jeder Installation verfügbar, nicht nur einmal, und ein neuer Eigentümer des Servers sieht niemals das Passwort eines früheren Eigentümers. Wird das Betriebssystem-Passwort innerhalb des Servers geändert, zeigt die Karte weiterhin das bei der Installation festgelegte an. Der Tab **Bandwidth** wird nur angezeigt, wenn ein Traffic-Zähler Daten liefert (siehe Limits). Es gibt keinen **Subnet**-Tab: Das Verwenden eigener IP-Präfixe auf einem gemieteten Server ist nicht Bestandteil von NexCMP. ### Was Kunden tun können und was nicht {#what-customers-can-and-cannot-do} | Kunden können | Niemals möglich | |---|---| | Inventar, Status, Stromstatus und Metriken einsehen | iDRAC-Adresse, Benutzernamen oder Passwort einsehen | | Einschalten, ordnungsgemäß herunterfahren, neu starten, erzogen ausschalten, zurücksetzen | iDRAC-Konten oder iDRAC-Netzwerkeinstellungen ändern | | Eine Browser-Konsole öffnen (eine Sitzung zur Zeit) | BIOS oder RAID ändern, Protokolle löschen, Firmware aktualisieren, iDRAC zurücksetzen | | Eine ISO oder einen eigenen ISO-Link einbinden, Einmal-Boot festlegen, das Betriebssystem über eine aktivierte Vorlage neu installieren | Roh-Redfish-Aufrufe ausführen (die Funktionen sind in NexCMP nicht vorhanden) | NexCMP erstellt keine iDRAC-Konten für Kunden: Diese nutzen ausschließlich die Bedienelemente des Portals, und iDRAC-Adresse sowie Login werden ihnen niemals angezeigt. ## Verifizierung {#verify} 0. Unter **Safety** zeigt die Karte **Management network connection** keine rote Kennzeichnung und die Bare Metal-Seiten zeigen keinen roten Hinweis. Von einem Host im Management-Netzwerk listet `curl -I http:///` keine Dateien auf. 1. **Test connection** im Importformular liefert Modell, CPU, RAM und Servicetag. 2. Der Server erscheint mit seiner Hardware unter **Servers**. Bei **ausgeschaltetem Live-Betrieb** wird eine Stromaktion mit der Meldung „Server control is temporarily disabled system-wide“ abgelehnt. 3. Nach dem Einschalten des Live-Betriebs und dem Entsperren eines Testservers schalten Sie den Server über **Operations** oder die Serverseite aus und wieder ein und öffnen die Konsole. 4. Geben Sie eine Testbestellung mit einem Testtarif auf: Der Server wird zugewiesen, das Betriebssystem wird installiert und die Installation endet damit, dass der Server an das Panel zurückmeldet. ## Grenzwerte und Hinweise {#limits-and-notes} - Jeder physische Server hat maximal ein aktives Abonnement. - Ein Schreibbefehl wird nur gesendet, wenn **sowohl** der Live-Betrieb eingeschaltet **als auch** die Sperre des Servers aufgehoben ist. Die Überprüfung wird im Worker unmittelbar vor jedem Befehl wiederholt. - Der Status **Installing** wartet, bis das neue Betriebssystem auf seinem Port (SSH 22, Windows 3389, Proxmox 8006) antwortet, bevor die Bestellung abgeschlossen wird; eine Installation hat ein Zeitlimit (`dedicated_install_timeout_min`, Standard 150 Minuten). - Die Bandbreite für dedizierte Server wird über einen Traffic-Counter-Agenten erfasst, der nicht Teil der Standardinstallation ist. Ohne ihn wird nichts aufgezeichnet, das Portal blendet den Bandwidth-Tab aus und die API meldet `capabilities.bandwidth` als `false`. - Admin-Aktionen für eine Miete (Sperren, Entsperren, Kündigen mit oder ohne Erstattung) sind dieselben einheitlichen Aktionen wie für jeden anderen Service, wobei Rückerstattungen dem Guthaben gutgeschrieben werden, aus dem sie bezahlt wurden. - Server werden nicht über Reseller weiterverkauft: Dedicated wird ausschließlich über die Hauptseite verkauft. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Test schlägt mit Adressfehler fehl | Die Adresse ist kein IPv4-Literal in `dedicated_bmc_cidrs` (privat, /16 oder kleiner) oder der Port ist nicht zulässig | Verwenden Sie die IPv4-Adresse des iDRAC und fügen Sie dessen Netzwerk unter Safety › Management network connection (`dedicated_bmc_cidrs`) hinzu. DNS-Namen und IPv6 werden abgelehnt. | | Roter Hinweis „Management network not configured“ oder der Live-Ops-Schalter antwortet mit `config_placeholder` | Einer der Werte `dedicated_bmc_cidrs`, `dedicated_iso_base_url`, `dedicated_callback_base` enthält noch den mitgelieferten Beispielwert | Geben Sie die tatsächlichen Werte unter Safety › Management network connection ein. | | Ein Feld wird beim Speichern abgelehnt | Falsches Format (CIDR nicht privat oder größer als /16, ISO-Adresse nicht `http://[:port]`, Callback nicht `https://`) oder eine Beispieladresse wie `example.com` | Lesen Sie die Meldung unter dem Feld; der gespeicherte Wert bleibt unverändert. | | `nexcmp dedicated-setup-iso` stoppt, bevor Änderungen vorgenommen werden | `--listen` ist keine Adresse dieses Servers, der Port wird bereits verwendet oder ein Wert ist ungültig | Verwenden Sie die Adresse, die dieser Server im Management-Netzwerk hat, einen anderen Port oder korrigieren Sie den in der Meldung genannten Wert. | | „The iDRAC TLS certificate differs from the pinned one - polling and write actions have stopped“ | Das iDRAC-Zertifikat wurde ersetzt (neues Zertifikat, iDRAC ersetzt) | Öffnen Sie den Server, Registerkarte **Access**, vergleichen Sie die beiden Fingerabdrücke und klicken Sie bei beabsichtigter Änderung auf **Repin certificate**. | | „Server control is temporarily disabled system-wide“ | Live-Operationen sind deaktiviert | Turn it on in **Safety**. | | „This server is locked for operations“ | Die serverspezifische Sperre ist aktiv | Entsperren Sie den Server im Tab **Lock** unter Angabe eines Grundes. | | „Another operation is still running on this server“ | Ein vorheriger Vorgang ist noch nicht abgeschlossen | Wait; check **Operations**. | | „Another console session is already open on this server“ | Nur eine Konsole gleichzeitig | Schließen Sie die andere Sitzung. | | „The server's controller is temporarily unavailable“ | Die iDRAC antwortet nicht | Überprüfen Sie das Management-Netzwerk und die iDRAC. | | Ein ISO-Mount schlägt mit einem 403 oder 404 des iDRAC fehl | Der Webserver kann die Datei nicht lesen oder die Basisadresse ist falsch | Überprüfen Sie die Berechtigungen des ISO-Webservers und die **HTTP address serving ISOs to iDRAC**. | | "Dieser Tarif ist im ausgewählten Standort ausverkauft" | Kein verkaufsfähiger Server mit diesem Tarif in der Zone | Weisen Sie den Tarif einem Server zu und aktivieren Sie **Sellable**. | | "Aktuell ist keine IPv4-Adresse zur Zuweisung verfügbar" | Der IP-Pool ist leer | Fügen Sie dem Pool Adressen hinzu. | | "Die automatische Betriebssysteminstallation ist derzeit nicht verfügbar" | Install prerequisites missing | Stellen Sie sicher, dass eine Vorlage aktiviert und die ISO-Ordner beschreibbar sind; Kunden können weiterhin über ISO und Konsole installieren. | | Installation stalls | Der installierende Server kann die Callback-Adresse nicht erreichen | Überprüfen Sie `dedicated_callback_base` und ob das Netzwerk des Server Ihr Panel über HTTPS erreichen kann. | --- # VPN- und IPv6-Proxy-Nodes {#vpn-and-ipv6-proxy-nodes} > **Wo im Admin-Bereich:** Infrastructure › VPN & Proxy nodes › Agents & external nodes (`/agents`), VPN IP pools (`/vpn/pool`), IPv6 Proxy nodes (`/vpn/proxy6/nodes`). Die Dienste selbst befinden sich unter Services › VPN und Services › IPv6 Proxy. Beide Module werden unter System › Admin › License & updates eingeschaltet. ## Funktion {#what-it-does} NexCMP vertreibt VPN- und Proxy-Zugriffe, die über **Ihnen gehörende IP-Adressen** auf von Ihnen betriebenen Servern ausgehen. Es gibt zwei Arten von Nodes: - **VPN-Node.** Ein kleines Go-Programm, `cmp-agent`, läuft auf Ihrem Linux-Host. Es ermittelt die öffentlichen IPv4-Adressen auf dem Host, öffnet auf jeder verkauften Adresse einen SOCKS5-, einen HTTP- und einen UDP-Listener und leitet den Datenverkehr über **dieselbe IP** aus, mit der sich der Kunde verbunden hat (Same-IP-Egress). Es meldet sich alle paar Sekunden beim Panel. - **IPv6-Proxy-Node.** Ein Proxy-Dienst, der Kunden Adressen aus einem IPv6-Präfix bereitstellt, das Sie zu dem Host routen. Das Panel installiert diesen automatisch über SSH für Sie. Nutzen Sie diese, um saubere IP-Adressen in Ländern weiterzuverkaufen, in denen Sie Server betreiben. ## Anforderungen {#requirements} ### VPN node {#vpn-node} | Komponente | Anforderung | |---|---| | Betriebssystem | Eine Linux-Distribution mit systemd und Kernel 4.15 oder neuer (Unterstützung für IPv6 free-bind). Das mitgelieferte Agent-Binary ist ausschließlich für **x86_64** (amd64) verfügbar. | | Berechtigungen | root, für die Installation. Der Dienst behält nur `CAP_NET_ADMIN`, `CAP_NET_RAW` und `CAP_DAC_READ_SEARCH` bei. | | Tools | `curl` oder `wget` sowie `sha256sum` (der Installer verweigert die Fortsetzung, wenn die Datei nicht geprüft wurde). | | Öffentliche Adressen | Öffentliche IPv4-Adressen, die auf einer Schnittstelle des Hosts zugewiesen sind (jeweils eine `/32`), **oder** ein an den Host geroutetes Präfix, das Sie als zusätzliches Subnetz hinzufügen (IPv4 /16 bis /32, IPv6 /48 bis /128). Private, CGNAT- und Dokumentationsbereiche werden ignoriert. | | Netzwerk, eingehend | Kunden verbinden sich mit jeder verkauften öffentlichen IP auf den **Ports 65001-65535** (TCP für SOCKS5 und HTTP, UDP für UDP Associate). Jeder Endpunkt verwendet eine Reihe von drei aufeinanderfolgenden Ports. | | Netzwerk, ausgehend | HTTPS (443) zu der Domain Ihres Panels. Der Agent ermittelt zudem sein eigenes Land über `ip-api.com` (HTTP) und `ipinfo.io` (HTTPS) mit einem Limit von 3.5 Sekunden. | | E-Mail | Ausgehende Verbindungen zu Port 25 sind grundsätzlich blockiert; es gibt keine Einstellung, um diesen freizugeben. | | Docker, VPN und virtuelle Schnittstellen | Schnittstellen mit den Namen `docker*`, `veth*`, `br-*`, `cni*`, `flannel*`, `virbr*`, `cali*`, `tun*`, `tap*`, `wg*` und `tailscale*` steuern keine Adressen bei. | | Abhängig von | Das Modul **VPN**, eine Zone (die automatisch aus dem Land des Hosts erstellt wird) und das über HTTPS erreichbare NexCMP-Panel. | ### IPv6-Proxy-Knoten {#ipv6-proxy-node} | Komponente | Anforderung | |---|---| | Betriebssystem | Linux mit systemd auf **x86_64**. Die Befehle `systemctl`, `nft`, `ip`, `ss`, `sysctl` und `useradd` müssen vorhanden sein; andernfalls bricht die Installation ab und nennt den fehlenden Befehl. | | Zugriff für die Installation | Eine öffentliche IPv4-Adresse (private, Loopback- und CGNAT-Adressen werden abgelehnt), der SSH-Port, ein Konto mit Root- oder `sudo`-Rechten sowie das dazugehörige **Passwort**. Das Passwort wird nur für die Installation verwendet und nicht gespeichert. | | Freie Ports | **80, 443 und jeder Port über 60000** müssen frei sein. Der Installer stoppt oder ändert keine bereits laufenden Dienste; er meldet die belegten Ports und bricht ab. | | IPv6 | Ein öffentliches Präfix zwischen **/32 und /64** innerhalb von `2000::/3`, das der Host als Quelle für ausgehenden Datenverkehr verwenden kann, entweder **geroutet** an den Host geliefert oder **on-link** mit NDP-Proxy (siehe unten). | | Netzwerk | Kunden verbinden sich mit der IPv4 des Nodes über Port 80 (HTTP-Proxy), Port 443 (SOCKS5) und die Ports 60001-65535 (ein Port pro statischer IP). Der Node besitzt kein Zertifikat, daher gibt es keinen HTTPS-Proxy. Der Datenverkehr verlässt den Node ausschließlich über IPv6 und nur zu Zielen mit einer IPv6-Adresse. Der Node ruft seine Konfiguration über HTTPS vom Panel ab. | | Knoten-Software auf dem Panel-Server | Der Node-Daemon und sein Netzwerk-Skript sind im NexCMP-Release-Paket enthalten. Das Panel kopiert sie während der Installation aus seinem Installationsordner (`/opt/nexcmp/releases//bin` bzw. `/opt/nexcmp/bin` bei einem Custom Build) auf jeden Node. Der Panel-Server benötigt zudem `sshpass` und einen SSH-Client; das Installationsprogramm fügt `sshpass` hinzu, und auf einem vor Version 1.4.2 installierten Server fügen Sie es mit `sudo apt-get install -y sshpass` hinzu. | | Abhängig von | Das Modul **IPv6 Proxy** sowie die Panel-URL, an die Nodes zurückmelden (**IPv6 Proxy › Settings › Panel URL for nodes**, Standard `https://`). | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} ### VPN node {#vpn-node-1} 1. **Stellen Sie den Host bereit** mit einem unterstützten Linux und den öffentlichen IPv4-Adressen, die Sie verkaufen möchten, entweder auf der Netzwerkschnittstelle konfiguriert oder an den Host geroutet. 2. **Wenn Sie einen gerouteten Block verkaufen**, planen Sie ein, diesen beim Hinzufügen des Nodes als **Extra subnet** einzutragen. Der Agent richtet eine Route `local dev lo` ein, damit der Host Datenverkehr für jede Adresse im Block akzeptiert, und meldet anschließend die gefundenen Adressen. Der Agent liest zudem die reale Routing-Tabelle des Hosts aus und verkauft oder erfasst niemals eine **Gateway**-Adresse: Enthält der Block den Next-Hop einer der Routen des Hosts (beispielsweise die Router-Adresse eines On-Link-Blocks), richtet der Agent `local` Routen nur für die Teile des Blocks um diese herum ein, meldet das Gateway an das Panel, und das Panel hält diese Adresse aus dem Pool und jeder Zuweisung heraus. Er entfernt die eingerichteten Routen, wenn sich das zusätzliche Subnetz ändert oder der Agent gestoppt wird. 3. **Öffnen Sie die Firewall.** Erlauben Sie eingehenden TCP- und UDP-Datenverkehr auf **65001-65535** an den öffentlichen Adressen sowie ausgehendes HTTPS zum Panel. 4. **Optional: Byte-Zähler pro IP.** Die Conntrack-Abrechnung (`net.netfilter.nf_conntrack_acct = 1`) ermöglicht es der Überwachungsrolle, Bytes pro IP zu zählen. Das Panel kann sie aktivieren, indem es dem Agenten einen `acct`-Befehl sendet, wodurch auch `/etc/sysctl.d/99-cmp-agent.conf` geschrieben wird. Die VPN-Rolle selbst benötigt dies nicht. 5. **Überprüfen Sie das Panel vom Knoten aus:** ```bash curl -fsS -o /dev/null -w '%{http_code}\n' https://cloud.example.com/install.sh ``` ### IPv6-Proxy-Knoten {#ipv6-proxy-node-1} Ein IPv6-Präfix erreicht den Knoten auf eine von zwei Arten. Der Installer testet beide mit echten ausgehenden Verbindungen und behält das bei, was funktioniert. | Art | Bedeutung | Konfiguration | |---|---|---| | **Geroutet** | Ihr Upstream leitet ein Präfix (zum Beispiel ein /48 oder /56) **auf die eigene Adresse des Knotens** weiter. Ausgehende Pakete können jede Adresse im Präfix als Absender verwenden, und Antworten kommen zum Knoten zurück. | Bitten Sie Ihren Provider um ein geroutetes Präfix, dessen Next Hop der Knoten ist. Nichts Weiteres auf dem Knoten: Der Proxydienst verwendet transparente Sockets, eine feste Policy-Routing-Tabelle und `nft`. | | **On-link** | Das /48 bzw. /64 befindet sich im selben LAN wie der Knoten. Antworten funktionieren nur, wenn der Knoten die Neighbor Discovery für jede verwendete Adresse beantwortet (**NDP-Proxy**). | Der Dienst setzt auf dieser Schnittstelle allein `net.ipv6.conf..accept_ra=2`, `forwarding=1` und `proxy_ndp=1`, merkt sich die alten Werte, stellt sie beim Stoppen wieder her und blockiert das Forwarding der Pool-Adressen, damit der Knoten nicht zum Router für den Pool wird. | So funktioniert die Prüfung: Der Knoten versucht innerhalb von 6 Sekunden eine TCP-Verbindung zu einer öffentlichen IPv6-Adresse (Port 443) von einer zufälligen Adresse des Kandidatenpräfixes herzustellen. Kandidaten sind globale Adressen auf Schnittstellen mit einem Präfix von /64 oder kürzer sowie Routen vom Typ `local`, `unreachable` oder `blackhole` zwischen /16 und /64. Ein Präfix, das kürzer als /64 ist, wird als **geroutet** akzeptiert, wenn ein zufälliges /64 darin funktioniert. ::: warning Dasselbe Präfix nicht doppelt verwenden Ein Präfix darf sich nicht mit dem Präfix eines anderen Knotens überschneiden und nicht breiter sein als ein Präfix, das bereits zum IPv6-Pool des Panels selbst gehört. Ein /64 **innerhalb** des Pools des Panels ist zulässig. Überschneidungen werden im Installationsergebnis als „assign range … (node …)“ gemeldet, und das Präfix wird übersprungen. ::: Einschränkungen, die der Knoten selbst anwendet: Kunden können von den Pool-Adressen aus keine E-Mails senden (Ports 25, 465, 587, 2525), und der eigene IPv4-Traffic des Daemons ist auf Antworten sowie auf das Panel und DNS beschränkt. ## In NexCMP verbinden {#connect-in-nexcmp} ### VPN node {#vpn-node-2} 1. Schalten Sie unter **System › Admin › License & updates** den Schalter **VPN** ein. Siehe [Modules](https://nexcmp.com/de/docs/infrastructure/modules/). ![Die Modulkarte mit den Schaltern für VPN und IPv6-Proxy](https://nexcmp.com/de/docs/images/infrastructure/vpn-proxy-nodes-01-modules.webp) 2. Öffnen Sie **Infrastructure › VPN & Proxy nodes › Agents & external nodes**. Sie haben zwei Möglichkeiten, einen Knoten hinzuzufügen. **a. Über SSH installieren.** Klicken Sie auf **+ Add server (SSH)** und füllen Sie Folgendes aus: | Feld | Beispielwert | |---|---| | Server-IPv4-Adresse | `192.0.2.50` | | SSH-Port | `22` | | SSH-Benutzer | `root` | | SSH-Passwort | `XXXX` | | Anzeigename | `node-ny-1` (leer: benannt nach der IP) | | Server-Rolle | External VPN / Proxy Node | | Zonenzuordnung | Auto by GeoIP (Zone erstellen / zuweisen) oder eine bestehende Zone | | Zusätzliches Subnetz (optional) | leer, um die Schnittstellen automatisch zu scannen, oder ein gerouteter Block wie `203.0.113.0/24` | | Nach der Installation zum Verkauf freigeben | aktivieren, um jede erkannte Adresse als verkaufbar zu markieren | Klicken Sie auf **Connect & install**. Das Panel verbindet sich über SSH, führt den Einzeilen-Installer mit einem Einmal-Ticket auf dem Knoten aus und zeigt den Knotennamen, den GeoIP-Standort und die erkannten Bereiche an. ![Dialogfeld „Add Node via SSH“ mit einer beispielhaften Serveradresse und Rolle](https://nexcmp.com/de/docs/images/infrastructure/vpn-proxy-nodes-02-add-server-ssh.webp) **b. Manuelle Installation.** Klicken Sie auf **Generate manual install token**. Der Befehl wird **einmalig** angezeigt; kopieren Sie ihn und führen Sie ihn auf dem Node aus: ```bash curl -fsSL https://cloud.example.com/install.sh | sudo sh -s -- --token XXXX --name node-ny-1 ``` Eine Token-Installation registriert die Maschine ausschließlich für das Monitoring: Aus Sicherheitsgründen erlaubt das Panel einer Maschine mit dem geteilten Token nicht, sich selbst die VPN-Rolle zuzuweisen (das Hinzufügen von `--roles vpn` zum Befehl ist wirkungslos). Sobald die Maschine in der Liste erscheint, öffnen Sie sie und weisen Sie die Rolle **VPN** selbst zu. Bei einer Installation über SSH (Option a) erhält der Node die VPN-Rolle von Beginn an. Ein neues Token macht das alte ungültig; bereits registrierte Hosts funktionieren weiterhin, da sie ihren eigenen Schlüssel verwenden. ![Dialogfeld für den Installationsbefehl mit dem einmaligen Token-Befehl](https://nexcmp.com/de/docs/images/infrastructure/vpn-proxy-nodes-03-install-command.webp) Was der Installer tut: Er lädt `cmp-agent-linux-amd64` von Ihrem Panel herunter, **überprüft dessen SHA-256**, installiert es unter `/usr/local/bin/cmp-agent`, registriert sich mit dem Token, schreibt `/etc/cmp-agent/agent.json` und startet den systemd-Dienst `cmp-agent`. Zum Entfernen: `curl -fsSL https://cloud.example.com/install.sh | sudo sh -s -- --uninstall`. 3. Nach dem ersten Heartbeat erscheint die Node in der Liste. Ihr Land wird per GeoIP ermittelt (zuerst die eigene Abfrage der Node, dann die Datenbank des Panel); falls keine existiert, wird eine **Zone** für dieses Land erstellt und öffentlich geschaltet, und die auf dem Host gefundenen Adressen werden zu Pool-Bereichen. 4. Öffnen Sie **Infrastructure › VPN & Proxy nodes › VPN IP pools**, um die Bereiche, deren Zone und Node einzusehen und die Zone, die Node oder den **Sellable**-Schalter jedes Bereichs zu ändern. **Enable range** erlaubt neuen Bestellungen die Nutzung freier IPs; **Disable range** stoppt lediglich neue Zuweisungen, bereits gemietete IPs bleiben aktiv. ![VPN-IP-Pools mit von einer Node gemeldeten Bereichen](https://nexcmp.com/de/docs/images/infrastructure/vpn-proxy-nodes-04-vpn-pool.webp) 5. Öffnen Sie **Services › VPN**, legen Sie die Preisliste fest und aktivieren Sie den Verkauf. Der Schalter **Sell VPN** unter **Subscriptions** entspricht dem Schalter für das VPN-Modul in License & updates. 6. **Optional: Dienst umbenennen.** Unter **Settings › Branding** ändert **VPN service display name**, wie der VPN-Dienst im Kundenmenü, auf der Bestellseite, Detailseite und in der Deploy-Liste benannt wird (z. B. `IPv4 Proxy`, `Datacenter Proxy` oder `Static Residential Proxy`; bis zu 40 Zeichen, leer behält `VPN` bei). Es ändert nur Bezeichnungen: Routen, Daten und die API ändern sich nicht. ### IPv6-Proxy-Knoten {#ipv6-proxy-node-2} 1. Schalten Sie unter **System › Admin › License & updates** die Option **IPv6 Proxy** ein. 2. Öffnen Sie **Infrastructure › VPN & Proxy nodes › IPv6 Proxy nodes** und klicken Sie auf **Add node (SSH)**. Geben Sie die IPv4-Adresse der Node, den SSH-Port, Benutzer, Passwort, einen optionalen Namen sowie einen **Grund** (dieser wird im Audit-Log vermerkt) ein und klicken Sie auf **Install**. ![Dialog zum Hinzufügen einer IPv6-Node mit Beispieladresse und Grund](https://nexcmp.com/de/docs/images/infrastructure/vpn-proxy-nodes-05-proxy6-add-node.webp) 3. Das Panel führt nacheinander folgende Schritte aus: Überprüfung der Maschine und der Ports, Kopieren des Daemons, des Netzwerkskripts, der Service-Unit und einer knotenspezifischen Umgebungsdatei (einem Knotentoken und einem Passwort-Signierschlüssel), Ausführen des **probe** für nutzbare Präfixe, Aufzeichnen der Präfixe im Pool, Starten des Dienstes und Warten von bis zu 90 Sekunden auf den ersten Bericht. **Install log** zeigt jeden Schritt. 4. Ein neuer Knoten erstellt seine Zone im Status **off** (basierend auf der GeoIP der IPv4 des Knotens). Schalten Sie die Zone unter **Infrastructure › Datacenter › Zone** ein, damit Kunden sie auswählen können. 5. Legen Sie ein **Mbps cap** pro Knoten fest (10 bis 100000 pro Richtung). Legen Sie unter **Services › IPv6 Proxy** die Preisliste fest und aktivieren Sie den Verkauf. 6. Prüfen Sie **IPv6 Proxy › Settings › Panel URL for nodes**. Nodes rufen diese Adresse auf (`https://host`, ohne Pfad), um ihre Konfiguration abzurufen und Berichte zu senden. Leer bedeutet `https://`. Es muss sich um einen Host handeln, dessen Adresse direkt auf das Panel zeigt, damit die eigene IPv4 des Nodes dieses unverändert erreicht. ::: tip Rotationszeitplan Kunden können ein automatisches Rotationsintervall von 30 bis 600 Sekunden einrichten. In NexCMP führt das Panel diesen Zeitplan (sowie die stündliche Bereinigung der Verbindungsprotokolle) aus; Nodes übernehmen eine neue Adresse innerhalb von etwa 5 Sekunden. ::: ### Wie ein Knoten Berichte sendet {#how-a-node-reports} | | VPN-Knoten (`cmp-agent`) | IPv6-Proxy-Knoten | |---|---|---| | Registrierung | Einmaliges Ticket oder Token über HTTPS, danach ein eigener Schlüssel | Einmalige SSH-Installation, danach ein Knotentoken | | Heartbeat | Alle **5 Sekunden** (10 s für einen reinen Überwachungsagenten); das Panel kann 3 bis 300 s einstellen. Nach einem Fehler erfolgt ein Backoff in Schritten von 5 s bis zu 60 s | Der Knoten sendet etwa alle 60 Sekunden einen Bericht und ruft die Konfiguration ab | | Als online angezeigt | Ein Heartbeat innerhalb der letzten **60 Sekunden** | **alive** innerhalb der letzten **120 Sekunden**, andernfalls **missed heartbeat** | | Konfigurationsänderung | Wird beim nächsten Heartbeat angewendet | Wird innerhalb von ca. 5 Sekunden angewendet | | Updates | Das Panel kann einen `upgrade`-Befehl mit der neuen Version, der URL und der SHA-256 senden | Neuinstallation über die Knotenzeile | ### Datenvolumen auf einem VPN-Node {#data-allowance-on-a-vpn-node} Ab NexCMP **1.5.1** sendet der VPN-Node-Agent das übertragene Datenvolumen mit jedem Heartbeat, und das Panel rechnet es dem Verbrauch des Tarifs für den aktuellen Zeitraum hinzu. Derselbe Wert wird dem Kunden (Reiter Overview und Bandwidth) und Ihnen (VPN › Subscriptions, Spalte Used sowie die Node-Zeile) angezeigt. - **Abschaltung.** Sobald ein Tarif sein GB-Volumen für den Zeitraum aufgebraucht hat, sendet das Panel die Endpunkte dieses Tarifs nicht mehr an den Agenten; neue Verbindungen werden abgewiesen und bestehende getrennt. Die Abschaltung erfolgt innerhalb eines Heartbeats, daher kann ein Tarif sein Limit minimal überschreiten. Tarife mit einer Unlimited-Stufe werden nie getrennt. - **Wiederfreigabe.** Der Tarif wird innerhalb eines Heartbeats wieder bedient, nachdem der Kunde mehr Bandbreite kauft oder wenn der nächste Zeitraum beginnt. - **Not measured.** Ein Node, dessen Agent keine Nutzung übermittelt hat (beispielsweise ein älterer Agent), wird als **Not measured** angezeigt, und seine Pläne werden nie aufgrund von GB gedrosselt. - **Agent aktualisieren.** Verwenden Sie Agent **1.5.1** auf den Nodes. Ältere Agents werden weiterhin erfasst, können jedoch die Bytes eines fehlgeschlagenen Heartbeats, eines gestoppten Endpunkts oder eines Neustarts verlieren und trennen offene Verbindungen nicht, wenn ein Tarif gekappt wird. Aktualisieren Sie über die Node-Zeile (Reinstall) oder mit dem Befehl `upgrade`. - Gezählt wird die Nutzlast, die den Proxy durchläuft, weshalb der Wert etwas niedriger ausfällt (ca. 1 %) als die Bytes auf der Leitung. ### Eingestellte VPN-Add-ons {#retired-vpn-add-ons} High IP Reputation, High Concurrency und High Priority Network werden bei Neubestellungen nicht mehr angeboten. Bestehende Abonnements behalten ihre Add-on-Auswahl, jedoch werden die eingestellten Gebühren aus den Verlängerungsbeträgen entfernt. Für bereits bezahlte Zeiträume erfolgt keine Rückerstattung. Die Anpassung verwendet den aktuellen Katalogpreis des Add-ons; falls Sie diesen Preis geändert oder das Add-on gelöscht haben, überprüfen Sie den Verlängerungsbetrag des Abonnements vor der nächsten Verlängerung. ## Verifizierung {#verify} 1. Die Knotenzeile ist online. Für einen VPN-Knoten zeigt **Agents & external nodes** dessen Zone, Land, Rolle und erkannte Bereiche an. 2. **VPN IP pools** listet die Bereiche mit freien IPs auf; die Detailseite der Zone zeigt die VPN-Infrastruktur. 3. Bestellen Sie einen Test-VPN- oder -Proxy-Tarif. Der Kunde erhält einen Endpunkt `ip:port`, einen Benutzernamen und ein Passwort; stellen Sie eine Verbindung darüber her und überprüfen Sie, ob die sichtbare öffentliche IP der des Knotens entspricht (z. B. `curl --proxy socks5h://USER:XXXX@IP:PORT https://ifconfig.me`). 4. Führen Sie auf einem IPv6-Knoten auf dem Host Folgendes aus: ```bash systemctl is-active nft list tables | grep proxy6 ss -ltn | grep -E ':(80|443|6[0-9]{4})\b' ``` ## Grenzwerte und Hinweise {#limits-and-notes} - Windows-Hosts können den Überwachungsagenten ausführen, jedoch nicht die VPN-Rolle. - Datenvolumen (GB pro Zeitraum) eines VPN-Tarifs: Ab NexCMP 1.5.1 summiert das Panel den vom VPN-Node-Agent gemeldeten Traffic und trennt die Proxys des Tarifs, sobald das GB-Kontingent des Zeitraums aufgebraucht ist (siehe „Data allowance on a VPN node“ unten). IPv6-Proxy-Tarife haben kein GB-Kontingent; sie begrenzen die Bandbreite in Mbps pro Tarif. - IPv4-Adressen eines VPN-Tarifs rotieren nicht. Meldet ein Kunde eine IP auf einer Blacklist, genehmigen Sie oder der Reseller einen Ersatz aus derselben Zone. Nur IPv6 Proxy rotiert. - Pro Heartbeat werden maximal 64 Bereiche gemeldet. - Ein VPN-Endpoint-Set verwendet drei Ports pro verkaufter IP. Mit den Ports 65001-65535 bedient jede IP eine begrenzte Anzahl an Endpoints (178 Port-Sets); das Panel überspringt Sets, die bereits verwendet wurden. - Das Löschen eines IPv6-Proxy-Nodes ist nur zulässig, wenn kein Tarif eine IP darauf hält. Dabei werden die Bereiche und das Token des Nodes entfernt; die Software auf dem Host wird nicht deinstalliert. - Das Weiterverkaufen eines Bereichs, der auch Ihre eigenen VMs enthält, ist möglich: VPN nutzt ausschließlich die Ports 65001-65535, wodurch sich die IP den Dienst mit anderen Diensten teilt. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "Registrierung fehlgeschlagen (ungültiges Token oder Server nicht erreichbar)" | Falsches oder bereits verwendetes Token oder das Panel ist nicht erreichbar | Generieren Sie ein neues Token oder wiederholen Sie die SSH-Installation. | | "Dateisignatur stimmt nicht überein - STOP" | Der heruntergeladene Agent weicht vom veröffentlichten SHA-256 ab | Überprüfen Sie den `/dl/`-Ordner des Panels und stellen Sie sicher, dass der Download unterwegs nicht überschrieben wird. | | "Dieser Installer ist nur für Linux" / "Architektur … wird noch nicht unterstützt" | Windows oder eine andere Architektur als x86_64 (das Release enthält den Agent nur für x86_64) | Verwenden Sie einen x86_64-Linux-Host. | | Node erscheint nicht | Der Node kann das Panel nicht über HTTPS erreichen | Testen Sie `curl https:///install.sh` vom Node aus; prüfen Sie DNS und die Firewall. | | Node erscheint mit dem falschen Land | Die Länderabfragen sind fehlgeschlagen, daher wurde die Adressdatenbank des Panels verwendet | Erlauben Sie ausgehenden Zugriff auf `ip-api.com` und `ipinfo.io` oder wählen Sie die Zone explizit im SSH-Formular aus. | | Keine Bereiche erkannt | Keine öffentliche IPv4 auf einer nicht-virtuellen Schnittstelle | Fügen Sie eine öffentliche Adresse hinzu oder geben Sie den gerouteten Block als **Extra subnet** ein. | | VPN funktioniert, Traffic geht über eine andere IP ein | Die verkaufte IP ist dem Host nicht zugewiesen oder nicht darauf geroutet | Stellen Sie sicher, dass sich die IP auf einer Schnittstelle befindet oder durch `local … dev lo` abgedeckt wird. | | "Der Panel-Server verfügt nicht über sshpass" | Der Panel-Host kann sich nicht per Passwort an den Nodes anmelden | Führen Sie `sudo apt-get install -y sshpass openssh-client` auf dem Panel-Server aus und installieren Sie den Node anschließend erneut. | | "not found in the installed package" bei der Installation eines IPv6-Nodes | Das Panel ist älter als 1.4.2 oder ein Custom Build ohne die Node-Dateien | Aktualisieren Sie NexCMP auf 1.4.2 oder höher; verwenden Sie bei einem Custom Build `build.sh`, wodurch nun `brandy-proxy6d` und `brandy-proxy6-net` gepackt werden. | | "SSH: …" am Anfang einer IPv6-Installation oder "SSH to internal/loopback addresses is not allowed" | Falscher Port, falscher Benutzer oder falsches Passwort, SSH blockiert oder die Adresse ist privat | Verwenden Sie die öffentliche IPv4 des Nodes und prüfen Sie den Zugriff manuell mit `ssh -p PORT USER@IP`. | | "Architektur … nicht unterstützt (nur x86_64)" | Der Node ist nicht x86_64 | Verwenden Sie einen x86_64-Host. | | "Auf Node fehlt Befehl: …" | `nft`, `ip`, `ss`, `sysctl`, `systemctl` oder `useradd` nicht installiert | Installieren Sie die Pakete und führen Sie die Installation dann erneut aus. | | "Ports werden von anderem Dienst auf Node belegt: … — 80, 443, 60001-65535 müssen frei sein" | 80, 443 oder ein Port über 60000 ist belegt | Verschieben Sie den anderen Dienst; der Installer stoppt diesen nicht. | | "Kein IPv6-Präfix mit Internetzugriff von Node gefunden (echter Egress-Test fehlgeschlagen)" | Kein geroutetes Präfix, NDP-Proxy nicht möglich oder kein ausgehendes IPv6 | Prüfen Sie, ob das Präfix zum Node geroutet wird, die Schnittstelle über IPv6-Konnektivität verfügt und kein Filter den ausgehenden Datenverkehr blockiert. | | "Alle erkannten Bereiche gehören bereits zu einem anderen Node" | Das Präfix wird bereits von einem anderen Node verwendet | Entfernen Sie es vom anderen Node oder wählen Sie ein anderes Präfix. | | Installation endet mit "no initial report received from node" | Der Dienst wurde gestartet, erreichte das Panel jedoch nicht innerhalb von 90 Sekunden | Überprüfen Sie die den Nodes zugewiesene Panel-URL und den HTTPS-Pfad des Nodes dorthin; siehe **Install log**. | | Node-Zeile zeigt **missed heartbeat** | Kein Bericht seit 120 Sekunden | Überprüfen Sie den Dienst auf dem Node, dessen Uhrzeit und dessen Pfad zum Panel. | | Kunden sehen keinen IPv6-Standort | Die Zone ist deaktiviert | Aktivieren Sie die Zone unter **Zone**. | --- # AI Models {#ai-models} > **Wo im Admin:** System › Admin › License & updates (`/license`), um das Modul zu aktivieren. Dann Services › AI Models: Providers (`/ai/providers`), Models (`/ai/models`), Profit (`/ai/profit`) und Audit (`/ai/audit`). Kunden nutzen AI › API im Kundenportal. ## Funktion {#what-it-does} AI Models ist ein Gateway und Billing-Layer auf Ihrem eigenen Panel. Ihre Kunden erhalten API-Keys und rufen **einen Endpoint auf Ihrer Domain** im OpenAI- oder Anthropic-kompatiblen Format auf. Sie bestimmen, welche Modelle Sie anbieten und wie viel jedes pro 1 Million Tokens kostet. NexCMP prüft den Schlüssel, die Limits sowie das Wallet, leitet die Anfrage an einen von Ihnen hinzugefügten Provider weiter, erfasst die Tokens und rechnet sie über das Prepaid-Wallet des Kunden ab. **Sie stellen die Modellquellen bereit.** NexCMP wird ohne Provider, ohne Modell, ohne Standardadresse und ohne Preise ausgeliefert. Es stellt weder Modelle noch API-Keys, Tokens oder Provider-Accounts zur Verfügung. ::: warning Prüfen Sie zuerst die Bedingungen Ihrer Quellen Viele Modellquellen schränken den Wiederverkauf oder die Weitergabe des Zugriffs an Dritte ein. Nutzen Sie nur Quellen, zu deren Nutzung und Wiederverkauf Sie berechtigt sind, und befolgen Sie deren Bedingungen sowie das für Sie geltende Recht. Diese Seite stellt keine Rechtsberatung dar. ::: AI Models ist ein separates Produkt neben **AI Chat and AI Agent** (Modul **AI**, siehe [AI-Provider](https://nexcmp.com/de/docs/ai/ai-providers/)). Die beiden Module sind voneinander unabhängig. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Modul | **AI Models** unter License & updates, Modules aktiviert. Standardmäßig ist es deaktiviert. | | Provider | Eine oder mehrere Modellquellen, zu deren Weiterverkauf Sie berechtigt sind, jeweils mit einer OpenAI-kompatiblen API (`/chat/completions`), einer Anthropic-kompatiblen API (`/messages`) oder beiden. Jede benötigt eine Base-URL und einen API-Key. | | Netzwerk | Das Panel muss jeden Provider über **HTTPS auf Port 443** unter einem öffentlichen Domainnamen erreichen können. Ein Provider auf einem internen Host, einem anderen Port oder über unverschlüsseltes HTTP muss unter **Allowed internal hosts** (Einstellung `ai_endpoint_allow`) aufgeführt sein. | | Kunden | Ein Kundenkonto mit verifizierter E-Mail-Adresse und einem Wallet-Guthaben. | | Hardware | Keine. NexCMP leitet Anfragen nur weiter: keine GPU und keine Modelldateien. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} 1. Beschaffen Sie sich einen API-Key von jeder Modellquelle, die Sie nutzen möchten, und notieren Sie deren Basis-URL (beispielsweise `https://api.example.com/v1`). 2. Prüfen Sie die Bedingungen der Quelle hinsichtlich des Wiederverkaufs. 3. Wenn eine Quelle innerhalb Ihres Netzwerks betrieben wird, bestimmen Sie deren Adresse, beispielsweise `http://10.0.0.5:8000/v1`. Sie tragen `10.0.0.5:8000` unter **Allowed internal hosts** ein. ## In NexCMP verbinden {#connect-in-nexcmp} ### 1. Modul einschalten {#_1-turn-the-module-on} Öffnen Sie **System › Admin › License & updates**, suchen Sie die Karte **Module** und schalten Sie **AI Models** ein. Das Menü lädt neu und **Services › AI Models** erscheint. Solange das Modul deaktiviert ist, antworten die Kundenseiten, die Admin-Seiten und das Gateway jeweils mit `404 module_disabled`, und es wird kein Provider kontaktiert. ![Die Karte Module mit aktiviertem Schalter AI Models](https://nexcmp.com/de/docs/images/infrastructure/ai-models-01-modules.webp) ### 2. Provider hinzufügen {#_2-add-a-provider} 1. Öffnen Sie **AI Models › Providers** und wählen Sie **Add provider**. 2. Geben Sie einen kurzen **Slug**, einen **Namen** (nur für Sie sichtbar), den **Typ** (OpenAI-compatible, Anthropic-compatible oder Both), die **Basis-URL** und den **API key** sowie eine **Priorität** ein (eine niedrigere Zahl wird zuerst versucht). 3. Speichern Sie. Der Schlüssel wird verschlüsselt gespeichert und anschließend werden nur seine letzten vier Zeichen angezeigt. Ein Schlüssel kann nur über eine angemeldete Administratorsitzung eingegeben werden. Verwenden Sie **Both** nur für ein Gateway, das tatsächlich beide Formate bereitstellt. NexCMP übersetzt **nicht** zwischen den beiden Formaten: Ein von einem OpenAI-kompatiblen Provider bereitgestelltes Modell wird unter `/ai/v1/chat/completions` erreicht und eines von einem Anthropic-kompatiblen Provider unter `/ai/v1/messages`. ![Die Seite Providers mit drei Beispiel-Providern samt Typ, Priorität und Status](https://nexcmp.com/de/docs/images/infrastructure/ai-models-02-providers.webp) ### 3. Verbindung testen {#_3-test-the-connection} Wählen Sie **Test connection** beim Provider. NexCMP liest `GET /models` mit dem Schlüssel aus und meldet **ok** oder den Grund für den Fehler: **auth** (falscher Schlüssel), **blocked**, **billing** oder **unreachable**. Tests sind auf 6 pro Minute begrenzt. ### 4. Modelle synchronisieren {#_4-sync-the-models} Wählen Sie **Sync models**. NexCMP liest die Modellliste des Providers aus und fügt jedes neue Modell **deaktiviert und ohne Preis** hinzu. Modelle, die der Provider nicht mehr auflistet, werden gekennzeichnet. Solange das Modul aktiviert ist, wird die Liste zudem alle 6 Stunden automatisch synchronisiert (Einstellung `ai_models_sync_hours`). ### 5. Preise festlegen und Modelle aktivieren {#_5-set-prices-and-switch-models-on} 1. Öffnen Sie **AI Models › Models**. 2. Legen Sie für jedes Modell, das Sie verkaufen möchten, den **Verkaufspreis** in US-Dollar pro 1 Million Tokens fest: **Input**, **Cached Input** und **Output**. 3. Geben Sie optional Ihre **Kosten** für das Modell ein. Anschließend stellt **Profit** Einnahmen und Kosten nach Tag und Modell gegenüber, und ein Verkaufspreis unter Ihren Kosten zuzüglich der Mindestmarge (Einstellung `ai_min_margin_pct`, standardmäßig 10) wird abgelehnt, es sei denn, Sie bestätigen einen bewussten Verlust. **Set price from cost** verwendet einen von Ihnen gewählten Aufschlag; es gibt keinen Standardaufschlag. 4. Schalten Sie das Modell ein. Ein Modell ohne Verkaufspreis kann nicht eingeschaltet werden. Bleibt der Cached-Input-Preis bei null, wird der reguläre Eingabepreis berechnet. ![Die Seite „Models“ mit den Verkaufspreisen für Input, Cached Input und Output sowie den Ein-/Ausschaltern](https://nexcmp.com/de/docs/images/infrastructure/ai-models-03-models.webp) ### 6. Routes und Failover {#_6-routes-and-failover} Bei einem Modell listet **Routes** die Anbieter auf, die es bereitstellen, geordnet nach Priorität. Fügen Sie einen zweiten Anbieter als Fallback hinzu, legen Sie die Reihenfolge fest und geben Sie optional für jeden Anbieter einen abweichenden Modellnamen an (der an den Anbieter gesendete Name kann sich von dem von Ihnen veröffentlichten Namen unterscheiden). Gibt ein Anbieter einen Serverfehler, einen Autorisierungs- oder Abrechnungsfehler, ein fehlendes Modell oder ein Rate-Limit zurück, versucht NexCMP die nächste Route. Läuft ein Lesezugriff nach dem Senden der Anfrage in ein Timeout, wird sie **nicht** an einen anderen Anbieter gesendet, damit Sie nicht doppelt zahlen. Jeder Anbieter ist auf `ai_provider_rpm` Anfragen pro Minute gedrosselt (standardmäßig 50). Gibt ein Anbieter wiederholt Autorisierungs- oder Abrechnungsfehler zurück, benachrichtigt NexCMP den Administrator über Telegram, sofern Telegram eingerichtet ist. ### 7. Verkaufsschalter aktivieren {#_7-open-the-sale-switch} Oben auf den Seiten für AI Models ist der **Verkaufsschalter** (Einstellung `feature_ai_models`) standardmäßig deaktiviert. Solange er ausgeschaltet ist, sehen Kunden, dass der Dienst noch nicht verfügbar ist, und die öffentliche Preisliste weist ihn als nicht verfügbar aus. Stellen Sie sicher, dass mindestens ein Modell aktiviert ist, einen Verkaufspreis sowie eine Route mit einem Schlüssel besitzt, und schalten Sie ihn anschließend ein. ### Was Kunden tun können {#what-customers-can-do} Im Kundenportal unter **AI › API**: - **Models** zeigt Ihre Modelle und Preise, die Basis-URL sowie vorgefertigte Beispielbefehle. - **API Keys**: Erstellen, Umbenennen, Rotieren, Deaktivieren und Löschen von Schlüsseln. Ein Secret wird nur einmal angezeigt; gespeichert wird lediglich ein Hash. Pro Schlüssel: erlaubte Modelle, Ablaufdatum, ein Soft-Budget (warnt) und ein Hard-Budget (blockiert mit `402`), Anfragen pro Minute sowie Tokens pro Minute. - **Usage** nach Modell, Schlüssel und Tag, mit Exportfunktion. - **Logs**: filterbare Anfrageprotokolle (Zeitpunkt, Schlüssel, Modell, Tokens, Kosten, Status, Latenz). **Prompts und Antworten werden nicht aufgezeichnet.** Logs werden standardmäßig 90 Tage aufbewahrt (`ai_log_retention_days`). - **Settings**: ein Kontobudget und die E-Mail-Adresse für Budgetwarnungen. - **Playground**: Chatten Sie mit einem Modell, vergleichen Sie Modelle im Direktvergleich und kopieren Sie den passenden Code. ![Die Kundenseite „API Keys“ mit den Basis-URLs für beide API-Formate](https://nexcmp.com/de/docs/images/infrastructure/ai-models-04-keys.webp) Die Gateway-Endpunkte auf Ihrer Domain: ```text POST /ai/v1/chat/completions OpenAI-compatible POST /ai/v1/messages Anthropic-compatible (also /ai/v1/messages/count_tokens) GET /ai/v1/models model list GET /ai/v1/models/pricing public price list, no key needed ``` ### Wallet und Abrechnung {#wallet-and-billing} Die AI-Nutzung wird über dasselbe Prepaid-Wallet wie alle anderen Dienste abgerechnet. Bevor eine Anfrage an einen Anbieter weitergeleitet wird, reserviert NexCMP den Maximalbetrag, den die Anfrage kosten könnte. Liegt das Guthaben unter dem Mindestbetrag (`ai_min_balance_cents`, standardmäßig 20 Cent) oder reicht es nicht aus, wird die Anfrage mit `402 insufficient_balance` abgelehnt und **kein Anbieter aufgerufen**. Die Nutzung wird pro Konto erfasst und stündlich in Wallet-Buchungseinträgen abgerechnet, mit einem Bereinigungslauf alle 5 Minuten. Noch nicht abgerechnete Nutzung wird bereits von dem Guthaben abgezogen, das das Gateway sieht. Reseller können AI Models über ihre eigene Domain verkaufen: Ihr Aufschlag oder Rabatt gilt für Ihren Verkaufspreis, und ihr Wholesale-Wallet wird mit dem Wholesale-Preis belastet. Ein AI-Schalter pro Reseller, der standardmäßig aktiviert ist, steuert, wer den Dienst verkaufen darf. ## Verifizierung {#verify} 1. Nach Schritt 3 zeigt **Test connection** **ok** und die Modellanzahl an. 2. Nach Schritt 4 werden die neuen Modelle deaktiviert und ohne Preis aufgeführt. 3. Erstellen Sie als Kunde mit aufgeladenem Wallet einen Schlüssel und rufen Sie das Gateway auf: ```bash curl https://your-domain/ai/v1/chat/completions \ -H "Authorization: Bearer sk-ai-…" -H "Content-Type: application/json" \ -d '{"model":"model-one","messages":[{"role":"user","content":"hello"}]}' ``` Eine `200`-Antwort enthält die Ausgabe des Modells. **Usage** zeigt die Anfrage an, und **Profit** weist sie aus, falls Sie Kosten hinterlegt haben. 4. Ist das Wallet leer, gibt derselbe Aufruf `402 insufficient_balance` zurück. ## Grenzwerte und Hinweise {#limits-and-notes} - Das Modul enthält keine vordefinierten Anbieter, Modelle oder Preise, und es wird zu keinem Zeitpunkt eine Preisliste von einem Anbieter abgerufen. - Tools, die anbieterseitig ausgeführt und pro Aufruf abgerechnet werden (wie z. B. Websuche), werden abgelehnt, da sie nicht gemessen werden können. Es wird nur eine kurze Liste von Anfrageparametern weitergeleitet. - Die Token-Nutzung wird aus der Antwort des Providers übernommen; enthält eine Antwort keine Angaben, schätzt NexCMP den Verbrauch und kennzeichnet den Datensatz als geschätzt. - Fehler eines Providers werden bereinigt, bevor sie den Kunden erreichen (Namen, Hosts, Adressen und der Modellname des Providers werden entfernt). Kunden sehen niemals, welcher Provider eine Anfrage verarbeitet hat. - Kunden erreichen das Gateway über die Domain Ihres Panels, daher muss TLS für diese Domain ordnungsgemäß funktionieren. - NexCMP bietet für dieses Modul kein Service-Level-Agreement, Fine-Tuning oder GPU-Hosting. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache und Behebung | |---|---| | Jede AI Models-Seite und das Gateway antworten mit `404 module_disabled` | Das Modul ist deaktiviert. Aktivieren Sie **AI Models** unter License & updates, Modules. | | Das Hinzufügen eines Providers schlägt mit `endpoint_host_not_allowed`, `endpoint_must_be_https` oder `invalid_endpoint_port` fehl | Die Basis-URL muss HTTPS auf Port 443 unter einem öffentlichen Domainnamen verwenden. Tragen Sie für einen internen Host, einen anderen Port oder reines HTTP `host:port` unter **Allowed internal hosts** ein. | | `blocked_endpoint` | Die Adresse ist eine IP oder der Name löst auf eine private Adresse auf. Tragen Sie sie unter **Allowed internal hosts** ein, falls dies gewünscht ist. | | **Test connection** meldet `auth` | Der Schlüssel ist ungültig oder verfügt über keinen Zugriff. Geben Sie den Schlüssel erneut ein. | | Ein Modell kann nicht aktiviert werden (`no_price`) | Legen Sie zuerst einen Verkaufspreis fest. | | Kunden erhalten `503 ai_unavailable` | Der Verkaufsschalter ist deaktiviert oder der AI-Schalter des Resellers ist deaktiviert. | | Kunden erhalten `503 upstream_unavailable` | Keine aktivierte Route mit einem Schlüssel bedient dieses Modell im angeforderten Format. Überprüfen Sie die Routen des Modells und den Provider-Typ. | | Kunden erhalten `402 insufficient_balance` | Das Wallet-Guthaben liegt unter dem Minimum oder reicht für die Anfrage nicht aus. Bitten Sie den Kunden um eine Aufladung. | --- # Object Storage (S3, Ceph RGW) {#object-storage-s3-ceph-rgw} > **Wo im Administratorbereich:** Infrastructure › Cloud provider › Ceph S3 (RGW) (`/infra/s3`). Konten: Services › Object Storage › S3 accounts (`/s3`). Preise: Services › Object Storage › PAYG pricing (`/s3/policy`). Aktivieren Sie das Modul unter System › Admin › License & updates. ## Funktion {#what-it-does} Kunden erstellen S3-Konten über das Portal und erhalten Zugriffsschlüssel. NexCMP erstellt und löscht die entsprechenden Benutzer auf Ihrem **Ceph RADOS Gateway (RGW)** über die RGW Admin Ops API, liest die Nutzung für die Abrechnung aus und berechnet die verbrauchsabhängige Nutzung: Speicher über ein kostenloses Kontingent pro GB und Monat (stündlich abgerechnet) und Download-Traffic pro GB. Uploads sind kostenlos. Verwenden Sie dies, wenn Sie einen Ceph-Cluster mit RGW betreiben und Objektspeicher weiterverkaufen möchten. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Ceph | Ein Cluster mit mindestens einem RGW-Daemon, bei dem die **Admin Ops API** aktiviert ist (die Standardeinstellung `rgw_enable_apis` enthält `admin`). | | Admin-Benutzer | Ein RGW-Benutzer für NexCMP mit den unten aufgeführten Berechtigungen. Verwenden Sie keinen Benutzer, der Kundendaten besitzt. | | Endpoints | Der von Kunden verwendete S3-Endpoint und der Admin Ops-Endpoint. Beide werden als `https://host` geschrieben, **ohne Pfad, nur Port 443**, und müssen zu einer **öffentlichen** Adresse aufgelöst werden: Loopback-, Link-Local-, Multicast-, Private- und Unique-Local-Adressen werden abgelehnt. | | Zertifikat | Ein gültiges Zertifikat für den Endpoint-Host. | | Nutzungsprotokoll | Aktivierte RGW-Nutzungsprotokollierung (`rgw_enable_usage_log = true`), damit die Usage-API Traffic melden kann. | | Zone | Eine Master-Zone, bei der der Dienst **Object Storage (S3)** ausgewählt ist. Siehe [Zones](https://nexcmp.com/de/docs/infrastructure/zones/). | | Storage | Kapazität in Ceph für die von Ihnen verkauften Quotas. | | Abhängig von | Das Modul **Object Storage**. Download-Traffic zählt ebenfalls zu [Bandwidth](https://nexcmp.com/de/docs/catalog/bandwidth/). | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Auf einem Ceph-Admin-Node: 1. Erstellen Sie den Admin-Benutzer und weisen Sie ihm die erforderlichen Admin Ops-Berechtigungen zu: ```bash radosgw-admin user create --uid=nexcmp-admin --display-name="NexCMP admin" radosgw-admin caps add --uid=nexcmp-admin --caps="users=*;buckets=*;usage=read;metadata=read" radosgw-admin user info --uid=nexcmp-admin ``` Kopieren Sie `access_key` und `secret_key` aus der Ausgabe. Dies sind der **Admin access key** und der **Admin secret key** in NexCMP. 2. Aktivieren Sie das Nutzungsprotokoll und starten Sie die Gateways neu: ```bash ceph config set client.rgw rgw_enable_usage_log true ``` 3. Platzieren Sie die Gateways hinter HTTPS auf Port 443 (ein Reverse Proxy oder das RGW-eigene TLS), veröffentlichen Sie den DNS-Namen und testen Sie vom Panel-Server aus: ```bash curl -fsS -o /dev/null -w '%{http_code}\n' https://s3.example.com/ ``` Sie sollten eine S3-XML-Antwort (HTTP 200 oder 403) erhalten, kein Zeitüberschreitung (Timeout). ## In NexCMP verbinden {#connect-in-nexcmp} 1. **Weisen Sie einer Zone den S3-Dienst zu.** Öffnen Sie **Infrastructure › Datacenter › Zone**, bearbeiten Sie die Zone und aktivieren Sie **Object Storage (S3)**. Nur Master-Zones mit dem S3-Dienst werden im Backend-Formular angezeigt. 2. Öffnen Sie **Infrastructure › Cloud provider › Ceph S3 (RGW)** und klicken Sie auf **Add backend**: | Feld | Beispielwert | |---|---| | Backend name | `Ceph RGW 1` | | Zone | die Zone aus Schritt 1 | | RGW Admin Ops endpoint | `https://s3.example.com` | | S3-Endpunkt für Kunden | `https://s3.example.com` | | S3-Signierregion | `default` | | Admin-Access-Key | `XXXX` | | Admin-Secret-Key | `XXXX` | | Aktiv | on | | Verkauf aktivieren (erfordert zuerst einen Verbindungstest) | **off** vorerst | | Änderungsgrund | `initial setup` | ![Backend-S3-Dialog mit Beispielendpunkten, Region und maskierten Schlüsseln](https://nexcmp.com/de/docs/images/infrastructure/s3-02-backend-dialog.webp) 3. Klicken Sie auf **OK** (speichern) und danach in der Zeile auf **Check**. NexCMP ruft die Admin Ops API mit dem Adminschlusskel auf. **Ceph connection successful** und das Tag **Verified** bedeuten, dass es funktioniert. 4. Klicken Sie auf **Edit**, schalten Sie **Enable sales** ein und speichern Sie. NexCMP verweigert den Verkauf, bis ein Test erfolgreich war. 5. Öffnen Sie **Services › Object Storage › PAYG pricing** und legen Sie die Preise fest: | Feld | Bedeutung | |---|---| | Speicher über der Free Tier (VND/GB/Monat) | Speicherpreis; wird stündlich als Monatspreis geteilt durch 730 abgerechnet. | | Download (VND/GB) | Preis für ausgehenden Datenverkehr. | | Upload (VND/GB) | Immer 0. | | Free Tier mit laufender VM (GB) | Fest auf 100 GB pro Konto, solange der Kunde mindestens eine laufende VM besitzt, nach Größe auf seine S3-Konten aufgeteilt. | | Schuldenlimit (VND) | Wie viel unbezahlte Nutzung zulässig ist. | | Abrechnungsschwelle (VND) | Die Nutzung wird in einer Rechnung zusammengefasst, sobald dieser Betrag überschritten wird. | | Min. Guthaben zum Erstellen von S3 (VND) | Für die Erstellung eines Kontos erforderliches Guthaben im Wallet. | | Max. S3-Konten pro Kunde, Standard-technisches Kontingent (GB) | Grenzwerte für neue Konten. | ![S3-PAYG-Preisformular](https://nexcmp.com/de/docs/images/infrastructure/s3-04-pricing.webp) S3-Preise werden in VND eingegeben. Sie werden für die Anzeige und Wallet-Belastungen zum jeweils gültigen Wechselkurs umgerechnet; siehe [Currency and exchange rates](https://nexcmp.com/de/docs/catalog/currency-and-exchange-rates/). ## Verifizierung {#verify} 1. **Check** gibt „Ceph connection successful“ aus. 2. Erstellen Sie als Kunde (oder mit einem Testkonto) ein S3-Konto. Auf Ceph zeigt `radosgw-admin user list` einen neuen Benutzer und **S3 accounts** führt diesen auf. 3. Erstellen Sie mit einem beliebigen S3-Client und den Kundenschlüsseln am Kundenendpunkt einen Bucket. Laden Sie eine Datei hoch. 4. Nach dem Abrechnungstakt der nächsten Stunde zeigt **S3 accounts** die Nutzung an. ## Grenzwerte und Hinweise {#limits-and-notes} - Ein Backend, dem bereits Konten zugeordnet sind, behält seine **Zone, seinen Endpunkt und seine Region**; um diese zu ändern, erstellen Sie ein neues Backend. - Eine Zone kann ein eigenes Backend haben; Konten und Backends sind dauerhaft an eine Zone gebunden. - Das Free Tier und „Uploads sind kostenlos“ sind feste Regeln und keine Optionen. - Schlüssel werden verschlüsselt gespeichert; die Konsole zeigt nur ein Feld mit der Beschriftung „leer lassen, um den aktuellen Schlüssel beizubehalten“. Ein Schlüsselpaar wird immer gemeinsam eingegeben. - Die Secret Keys der Kunden werden einmal bei der Erstellung angezeigt und danach nie wieder. Ein verlorener Schlüssel wird durch Rotation ersetzt. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "Endpoint requires HTTPS" | Der Endpunkt verwendet unverschlüsseltes HTTP | HTTPS auf Port 443 bereitstellen. | | "Endpoint-Port nicht zulässig" | Ein anderer Port als 443 | Den Standard-HTTPS-Port verwenden. | | "Endpoint-Adresse nicht zulässig" | Der Name wird zu einer privaten, Loopback-, Link-Local- oder Unique-Local-Adresse aufgelöst | Verwenden Sie eine öffentliche Adresse. | | "Endpoint darf nur Protokoll und Host enthalten" | Die URL enthält einen Pfad, eine Abfrage oder Benutzerinformationen | Verwenden Sie nur `https://host`. | | "Endpoint konnte nicht aufgelöst werden" | DNS wird vom Panel-Server aus nicht aufgelöst | Beheben Sie das DNS-Problem. | | "Failed to connect to Ceph" | Firewall- oder TLS-Fehler | Testen Sie mit `curl` vom Panel-Server aus. | | "Ceph returned HTTP 403 AccessDenied" | Falsche Schlüssel oder fehlende Berechtigungen | Überprüfen Sie die Schlüssel und führen Sie `radosgw-admin caps add` erneut aus. | | "Invalid Ceph response" | Der Endpunkt ist keine RGW Admin Ops API | Verweisen Sie darauf auf das RGW, nicht auf eine Webseite. | | "Verbindungstest muss vor Aktivierung des Verkaufs erfolgreich sein" | Sie haben den Verkauf vor einem erfolgreichen **Check** aktiviert | Führen Sie **Check** aus und aktivieren Sie dann den Verkauf. | | "Alle neuen Schlüssel für den Endpoint sind erforderlich" | Endpunkt ohne beide Schlüssel geändert | Geben Sie den Access Key und den Secret Key zusammen ein. | | "Backend enthält bereits verknüpfte Ressourcen; erstellen Sie ein neues Backend, um Zone oder Endpoint zu ändern" | Auf diesem Backend existieren Konten | Erstellen Sie ein neues Backend. | | "Master-Zone mit S3-Dienst auswählen" | Die Zone ist keine Master-Zone oder verfügt über keinen S3-Dienst | Wählen Sie **Object Storage (S3)** für die Zone aus. | | "Invalid region" | Die Region enthält andere Zeichen als Buchstaben, Ziffern, `-` und `_` | Verwenden Sie `default` oder Ihren RGW-Zonegroup-Namen. | | "Ceph-Nutzungsübersicht fehlt; nicht abgerechnet" | Nutzungsprotokoll deaktiviert | Aktivieren Sie `rgw_enable_usage_log`. | --- # Kubernetes und Private Cloud {#kubernetes-and-private-cloud} > **Where in the admin:** Kubernetes: Infrastructure › Cloud provider › CloudStack › Kubernetes (CKS) (`/infra/cloudstack?tab=k8s`), dann Services › Kubernetes (Overview, Clusters, Versions, Policy). Private Cloud: Services › Private Cloud (Overview `/vpc`, VPC `/vpc/list`, Plans & pricing `/vpc/plans`). Schalten Sie beide Module unter System › Admin › License & updates frei. ## Funktion {#what-it-does} - **Kubernetes.** Kunden erstellen verwaltete Kubernetes-Cluster auf Ihrem CloudStack mit dem CloudStack Kubernetes Service (CKS). Die Steuerungsebene ist kostenlos; Kunden zahlen für **Worker**-Knoten. NexCMP erstellt ein separates Netzwerk und eine öffentliche IP für jeden Cluster und hält die Cluster der Kunden getrennt voneinander. - **Private Cloud.** Kunden erhalten ein privates Netzwerk (eine CloudStack VPC) mit einem Router, Subnetzen (Tiers), Firewall-Regeln (Network ACLs) und virtuellen Maschinen darin. Der Vertrieb erfolgt nach **Bandbreiten-Tarif** mit dedizierter, unlimitierter Geschwindigkeit (zum Beispiel 50, 100, 500 Mbps, 1 und 3 Gbps). Standardmäßig kann jeder Kunde eine VPC haben. Beide basieren auf [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/) und nutzen dessen API über dieselbe Verbindung. ## Anforderungen {#requirements} ### Kubernetes {#kubernetes} | Komponente | Anforderung | |---|---| | CloudStack | 4.23 (getestet). CKS muss **aktiviert** sein (`cloud.kubernetes.service.enabled = true`). | | Konto | Ein **Domain Admin**-Konto in der dedizierten Domain, damit NexCMP für jeden Kunden ein CloudStack-Projekt und Ressourcenlimits darin erstellen kann. Siehe [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/#create-a-dedicated-account-and-api-key). | | `endpoint.url` | Die globale CloudStack-Einstellung muss auf Ihre Management-API verweisen, die von den Cluster-VMs aus erreichbar ist. NexCMP zeigt den Wert und das Ergebnis einer Endpunktprüfung an. | | Versionen | Mindestens ein für Kubernetes unterstützter Versionsbucheintrag mit zugehörigem Binärdateien-ISO im Status **Enabled**. Versionen, deren Lebensdauer abgelaufen ist, können nicht zum Verkauf angeboten werden. | | Control-Plane-Angebot | Ein kostenloses Service-Angebot mit **genau 2 vCPU, 2048 MB RAM und einem CPU-Cap** (`limitcpuuse = true`), das für das Konto sichtbar ist. Der Server weist alles andere mit `cp_offering_invalid` zurück. | | Netzwerk | Ein aktiviertes CKS-fähiges isoliertes Netzwerkangebot. | | IPs | Kostenlose öffentliche IPv4-Adressen im verkäuflichen Bereich; jedes Cluster verwendet eine. | | Kapazität | Jedes Cluster kostet Sie 2 bis 4 GB RAM für die Control Plane und eine kleine Router-VM. Behalten Sie die Kapazitäts-Tabs im Auge. | ### Private Cloud {#private-cloud} | Komponente | Anforderung | |---|---| | CloudStack | 4.23 (getestet) mit aktiviertem VPC. | | VPC-Angebot | Ein VPC-Angebot. Ein Dual-Stack-Angebot versorgt zudem jede Ebene mit einer IPv6-/64-Adresse. | | Ebenen-Netzwerkangebote | **Ein Netzwerkangebot pro Bandbreitenplan**, erstellt für VPC, wobei die **Netzwerkrate** (Mbit/s) dem Plan entspricht, plus ein **gesperrtes** Angebot von **1 Mbit/s**, das angewendet wird, wenn ein VPC wegen ausbleibender Zahlung gesperrt wird. | | Konto | Das dedizierte Konto (Domain Admin empfohlen). VPC-Netzwerke verbleiben im Konto, nicht in Projekten. | | IPs | Kostenlose öffentliche IPv4-Adressen (jedes VPC verwendet eine für Source NAT). | | Adressraum | Jedes VPC erhält ein /16 aus `10.128.0.0/9`. Halten Sie diesen Bereich in Ihren eigenen Netzwerken ungenutzt. | | Abhängig von | CloudStack verbunden; das Modul **Private Cloud**. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} ### Kubernetes: CKS aktivieren und Versionen hinzufügen {#kubernetes-enable-cks-and-add-versions} 1. Aktivieren Sie den Service, legen Sie den Endpunkt fest und starten Sie dann den Management-Server neu: ```bash cmk update configuration name=cloud.kubernetes.service.enabled value=true cmk update configuration name=endpoint.url value=https://cloudstack.example.com/client/api sudo systemctl restart cloudstack-management ``` `endpoint.url` wird vom Controller des Clusters zurückgerufen, daher muss es sich um eine Adresse handeln, die die Cluster-VMs erreichen können. 2. Erstellen Sie ein Kubernetes-Binärdateien-ISO für die Version, die Sie verkaufen möchten, mit dem Skript `create-kubernetes-binaries-iso.sh` aus dem CloudStack-Quellbaum, hosten Sie es auf einem Webserver und registrieren Sie es: ```bash cmk add kubernetessupportedversion name="Kubernetes 1.35.0" semanticversion=1.35.0 \ url=https://files.example.com/setup-v1.35.0-calico-amd64.iso zoneid= \ mincpunumber=2 minmemory=2048 cmk list kubernetessupportedversions filter=name,semanticversion,state,isostate ``` Warten Sie, bis der ISO-Status **Ready** lautet und die Version auf **Enabled** steht. 3. Erstellen Sie das Control-Plane-Angebot, beschränkt auf die NexCMP-Domain: ```bash cmk create serviceoffering name=K8S-CP-2-2 displaytext="Kubernetes control plane" \ cpunumber=2 cpuspeed=1000 memory=2048 limitcpuuse=true offerha=false domainid= ``` 4. Überprüfen Sie, ob ein CKS-Netzwerkangebot aktiviert ist: ```bash cmk list networkofferings state=Enabled forvpc=false filter=id,name ``` ### Private Cloud: Angebote erstellen {#private-cloud-create-the-offerings} In der CloudStack-Benutzeroberfläche (**Service Offerings › Network Offerings › Add network offering**) oder mit `cmk`: 1. Listen Sie auf, was Sie haben: ```bash cmk list vpcofferings filter=id,name,state cmk list networkofferings forvpc=true filter=id,name,networkrate,state ``` 2. Verwenden Sie ein aktiviertes VPC-Angebot (Dual-Stack, falls Sie IPv6 wünschen). Wenn Sie ein neues benötigen, klonen Sie das Standard-VPC-Angebot von CloudStack und aktivieren Sie es. 3. Erstellen Sie für **jeden** Bandbreitenplan, den Sie verkaufen, ein Netzwerkangebot **für VPC** (klonen Sie das Standardangebot „isolated network offering for VPC networks“) und setzen Sie **Network rate (Mb/s)** auf die Geschwindigkeit des Plans: `50`, `100`, `500`, `1000`, `3000`. Aktivieren Sie jedes Angebot. 4. Erstellen Sie ein weiteres Angebot mit der **Netzwerkrate 1** (`VPC-LOCKED-1M`) für gesperrte VPCs: Kunden können ihre Server weiterhin über SSH erreichen, aber die Geschwindigkeit ist begrenzt. 5. Notieren Sie die UUID jedes Angebots. NexCMP benötigt diese im nächsten Abschnitt. ::: warning Die mitgelieferten Angebots-IDs existieren nicht in Ihrer Cloud Das Formular für die Private Cloud ist mit Angebots-UUIDs vorab ausgefüllt, die zu einer anderen CloudStack-Installation gehören. Ersetzen Sie **jederlei** davon durch Ihre eigenen, da sonst die erste VPC-Bestellung fehlschlägt. ::: ## In NexCMP verbinden {#connect-in-nexcmp} ### Kubernetes {#kubernetes-1} 1. Öffnen Sie **Infrastructure › Cloud provider › CloudStack** und wählen Sie den Tab **Kubernetes (CKS)**. Die rechte Karte **CKS status on CloudStack (read-only)** zeigt `kubernetesserviceenabled`, `endpoint.url` mit **Endpoint check**, das CKS-Netzwerkangebot, die `cloud.kubernetes.*`-Einstellungen sowie die Liste der ISOs und Versionen. Klicken Sie auf **Recheck**, nachdem Sie etwas behoben haben. 2. Wählen Sie unter **Sales config** das **Control plane Offering** (eine Warnung erscheint, falls es nicht exakt 2 vCPU / 2048 MB / CPU-Limit entspricht), legen Sie **Max workers per cluster** fest (1 bis 9: CKS erlaubt 10 Nodes einschließlich des Control-Nodes), schalten Sie **Enable CKS for this backend** ein und klicken Sie auf **Save**. Der Schalter bleibt deaktiviert, bis ein Angebot ausgewählt wird. ![Der Kubernetes (CKS)-Tab mit ausgewähltem Control-Plane-Angebot und der CKS-Statuskarte](https://nexcmp.com/de/docs/images/infrastructure/kubernetes-and-private-cloud-01-cks.webp) 3. Öffnen Sie **Services › Kubernetes › Versions** und klicken Sie auf **Sync from CloudStack**. Schalten Sie **Available for new clusters** für die Versionen ein, die Sie verkaufen möchten, legen Sie den Standard und optional ein **End of life (EOL)**-Datum fest. 4. Öffnen Sie **Services › Kubernetes › Policy**. Fügen Sie unter **Worker plans** Pläne mit einem **Plan code** hinzu (A-Z, 0-9, Bindestrich, bis zu 16 Zeichen). Legen Sie **NVMe per worker (GB)**, **Min and max workers** sowie die Cluster-Limits fest (aktive Cluster pro Account, Erstellungen pro 24 Stunden, globales Limit, gleichzeitige CKS-Vorgänge). Schalten Sie dann **Sell Kubernetes (CKS)** ein. Mindestens ein Plan muss zum Verkauf angeboten werden. ![Kubernetes-Richtlinie mit Worker-Plänen und dem Verkaufsschalter](https://nexcmp.com/de/docs/images/infrastructure/kubernetes-and-private-cloud-03-policy.webp) ### Private Cloud {#private-cloud-1} 1. Öffnen Sie **Services › Private Cloud** (Übersicht). Ersetzen Sie in der Richtlinienkarte **VPC offering** und **Locked offering tier** durch Ihre eigenen UUIDs. Überprüfen Sie die Limits (VPCs pro Account, Tiers, VMs und ACL-Regeln pro VPC, erforderliches Guthaben in Stunden der Plangebühr für die Erstellung, Planänderungen pro 24 Stunden, gleichzeitige Operationen, wobei 0 ein Notstopp ist) und die DNS-Server. Klicken Sie auf **Save** (ein Grund wird abgefragt). ![Private-Cloud-Übersicht mit den Feldern für das VPC-Angebot und gesperrte Angebote](https://nexcmp.com/de/docs/images/infrastructure/kubernetes-and-private-cloud-04-vpc-policy.webp) 2. Öffnen Sie **Services › Private Cloud › Plans & pricing**. Klicken Sie für jeden Plan auf **Edit** und legen Sie den **VND price per month**, **On sale** sowie die UUID des **CloudStack tier offering** fest, dessen Netzwerkrate der Mbps des Plans entspricht. Die Zeile zeigt Kosten und Gewinn bei Vollauslastung, sodass Sie sehen können, welche Pläne unter Ihren Kosten liegen. ![Dialog zum Bearbeiten eines Plans für einen Private-Cloud-Bandbreitenplan](https://nexcmp.com/de/docs/images/infrastructure/kubernetes-and-private-cloud-05-vpc-plan.webp) 3. Schalten Sie **Sell Private Cloud** ein. Um es zuerst zu testen, fügen Sie Test-Account-IDs zu **Beta accounts** hinzu: Diese Accounts können den Dienst nutzen, während der Verkaufsschalter ausgeschaltet ist. ## Verifizierung {#verify} 1. Kubernetes: Die Statuskarte zeigt `kubernetesserviceenabled: true`, einen erfolgreichen Endpunkt-Check und eine aktivierte Version. Erstellen Sie als Kunde einen Test-Cluster mit einem Worker; dieser sollte den Status „running“ erreichen und `kubectl get nodes` sollte ihn als bereit anzeigen. Löschen Sie ihn anschließend: Das Netzwerk und die IP gehen zurück in den Pool. 2. Private Cloud: Erstellen Sie als Testkunde eine VPC mit dem kleinsten Plan. Die VPC wird als aktiv angezeigt, ein Tier erhält sein Subnetz, eine VM im Tier erreicht das Internet über den VPC-Router, und **Change plan** auf einen größeren Plan greift innerhalb von ca. 20 Sekunden ohne Verbindungsabbrüche. ## Grenzwerte und Hinweise {#limits-and-notes} - Kubernetes: Worker werden wie VMs zu den Planpreisen abgerechnet und zählen als VMs in den VM-Limits. Ein Cluster kann aufgrund des CKS-Limits von 10 Nodes höchstens 9 Worker haben. - Kubernetes: Control Plane, Router und öffentliche IP eines Clusters sind für den Kunden kostenlos; Sie tragen deren Kosten. - Private Cloud: Alle Pläne sind **unmetered** (unlimitiert). Die Preise im Formular sind in vietnamesischen Dong pro Monat angegeben; die Kostenspalte verwendet einen Referenzpreis, der nicht Ihrer ist, verwenden Sie daher Ihre eigenen Zahlen. - Eine gesperrte VPC ist auf 1 Mbps begrenzt, wird nicht abgerechnet und nicht automatisch gelöscht. - Private Cloud verwendet einen Router pro VPC, kein redundantes Paar. Wenn dessen Host ausfällt, baut CloudStack ihn in wenigen Minuten neu auf. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | `cp_offering_invalid` / "Dieses Offering entspricht nicht 2 vCPU / 2048 MB / limitcpuuse" | Das Control-Plane-Offering hat andere Größen oder kein CPU-Limit | Erstellen Sie das Offering wie in Schritt 3 und wählen Sie es erneut aus. | | **Enable CKS**-Schalter ist deaktiviert | Kein Control-Plane-Offering ausgewählt | Wählen Sie zuerst eines aus. | | `kubernetesserviceenabled: false` | CKS ist in CloudStack deaktiviert | Aktivieren Sie es und starten Sie den Verwaltungsserver neu. | | Endpunktprüfung fehlgeschlagen | `endpoint.url` ist von den Cluster-VMs aus nicht erreichbar | Legen Sie eine erreichbare URL fest, starten Sie den Verwaltungsserver neu und klicken Sie auf **Recheck**. | | "EOL: Kann nicht für den Verkauf aktiviert werden" | Das End-of-Life-Datum der Version ist überschritten | Registrieren Sie eine neuere Version. | | "Keine Versionen: Klicken Sie auf Sync from CloudStack" | Keine Kubernetes-Version registriert | Registrieren Sie eine Version und synchronisieren Sie diese. | | "CKS-Backend ist OFF: Kunden können keine Cluster erstellen, selbst wenn das Sales-Flag aktiviert ist" | Der Verkaufsschalter ist an, aber das CKS-Backend ist aus | Aktivieren Sie CKS auf dem CloudStack-Tab. | | "Mindestens 1 Plan muss im Verkauf sein" | Letzter Worker-Tarif entfernt | Behalten Sie mindestens einen Tarif bei oder schalten Sie den Kubernetes-Verkauf aus. | | Cluster beim Erstellen hängen geblieben | Nicht genügend Kapazität oder eine fehlende ISO | Überprüfen Sie die Kapazitäts-Tabs und den ISO-Status der Version. | | Ein neuer VPC schlägt im ersten Schritt fehl | Die VPC-Offering- oder Tier-Offering-ID ist ungültig | Ersetzen Sie jede Offering-UUID durch eine aus Ihrem CloudStack. | | "cs_offering_id muss eine UUID sein" | Eine Offering-ID ist keine UUID | Fügen Sie die ID aus `cmk list networkofferings` ein. | | Tarifänderung fehlgeschlagen | Das neue Tier-Offering existiert nicht oder die Netzwerkrate ist falsch | Überprüfen Sie die Offering-UUID und dessen Netzwerkrate. | --- # Tarife und Preise {#plans-and-pricing} > **Where in the admin:** Services › Virtual Machines › Plans & pricing (`/vm/catalog`), mit den Reitern Plan, Custom plan, Cycle und Offering CloudStack. Templates finden Sie auf der separaten Seite Services › Virtual Machines › Template (`/vm/templates`). ## Funktion {#what-it-does} Ein **Plan** ist eine Konfiguration, die Kunden erwerben können: vCPU, RAM, Root-Disk und ein Preis in einer Zone von einer Quelle (CloudStack oder ein Proxmox VE-Cluster). Der Kunde wählt einen Plan, ein Betriebssystem und einen **Abrechnungszeitraum** (stündlich, monatlich oder eine längere Prepaid-Laufzeit). Pläne werden im Kundenportal, über die API und auf Reseller-Websites verkauft. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Source | CloudStack verbunden (ein Plan verweist auf ein CloudStack-Service-Offering) oder ein mit der Zone verknüpftes Proxmox VE-Cluster. Siehe [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/) und [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/). | | Zone | Eine Zone, in der virtuelle Maschinen verkauft werden. Siehe [Zones](https://nexcmp.com/de/docs/infrastructure/zones/). | | Vorlagen | Mindestens ein aktiviertes, einsatzbereites Template. Siehe [OS templates](https://nexcmp.com/de/docs/infrastructure/templates/). | | Wechselkurs | Nur wenn Sie Preise in VND eingeben. Siehe [Currency and exchange rates](https://nexcmp.com/de/docs/catalog/currency-and-exchange-rates/). | | Berechtigungen | Ein Administrator; bei jeder Preisänderung wird ein Grund abgefragt. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} - **CloudStack:** Erstellen Sie die Service-Offerings, die Sie verkaufen möchten (öffentlich oder geteilt mit der NexCMP-Domain). Ein Tarif verweist auf ein Offering. Der Tab **Offering CloudStack** listet die Offerings und Disk-Offerings live von CloudStack auf (wird 60 Sekunden lang zwischengespeichert). Wenn die Tariftabelle leer ist, erstellt der Worker automatisch sechs Tarife aus Ihren echten Offerings. - **Proxmox VE:** Nichts in Proxmox; ein Tarif bringt seine eigene CPU, RAM und Festplatte mit. Die Festplatte darf nicht kleiner sein als die des Templates. ## In NexCMP verbinden {#connect-in-nexcmp} ### Wie Preise gespeichert werden {#how-prices-are-stored} NexCMP speichert jeden Preis in **Mikrodollar pro Stunde** (µ$/Stunde; 1 µ$ entspricht 1/1,000,000 USD). Sie können den Preis in der gewünschten Einheit eingeben und das Formular rechnet ihn um: | Einheit | Hinweise | |---|---| | USD / Stunde (6 Dezimalstellen) | Wird unverändert gespeichert. | | USD / Monat | Geteilt durch die Einstellung für Stunden pro Monat (730). | | VND / Monat | Wird einmal zum aktuellen Wechselkurs umgerechnet und dann in µ$/Stunde gespeichert. Erscheint nur, wenn ein Kurs vorhanden ist. | Das Formular zeigt das Ergebnis: µ$/Stunde, USD/Stunde, den Monatspreis und jeden Abrechnungszeitraum. **Monatspreis = Stundenpreis × 730**; ein längerer Zyklus ist **Monatspreis × Monate × (1 − Rabatt)**. ### Einen Tarif hinzufügen {#add-a-plan} 1. Öffnen Sie **Services › Virtual Machines › Plans & pricing** und klicken Sie auf **Add plan**. 2. Füllen Sie das Formular aus: | Feld | Beispielwert | |---|---| | Tarifname | `VM-2-4` | | Slug | leer: wird aus dem Namen erstellt | | Zone | Ihre Standardzone | | Infrastrukturquelle | leer für CloudStack oder ein Proxmox-Cluster | | Service-Offering CloudStack (live) | auswählen (wird nur für CloudStack angezeigt) | | CPU (Kerne), RAM (MB), Root-Disk (GB) | `2`, `4096`, `40` | | Disk-Offering | optional, für eine benutzerdefinierte Root-Größe | | Preis eingeben nach / Preis | `USD / month`, `12` | | Kurzbeschreibung | `2 vCPU, 4 GB RAM, 40 GB NVMe` | | Reihenfolge | `10` | | Aktiv | Ein: Kunden können kaufen | | Sichtbarkeit | Im Katalog sichtbar | | Grund für Preisänderung | `initial price` | 3. Klicken Sie auf **OK**. Der Tarif erscheint in der Tabelle mit seinem Stunden- und Monatspreis sowie einer Spalte für jeden aktivierten Abrechnungszeitraum. ![Tariftabelle mit Stunden-, Monats- und zyklusbezogenen Preisen](https://nexcmp.com/de/docs/images/catalog/plans-02-list.webp) ### Abrechnungszeiträume {#billing-cycles} Öffnen Sie den Tab **Cycle**, um festzulegen, welche Zyklen Kunden wählen können und welche Rabatte gewährt werden. | Zyklus | Standard | Hinweise | |---|---|---| | Stündlich | immer an | Wird stündlich abgerechnet. | | Monatlich | aktiv, 0% | | | 1 Jahr | aktiv, 10% | | | 2 Jahre | aktiv, 15% | | | 3 Jahre | aktiv, 20% | | Sie können einen Abrechnungszeitraum umbenennen, seinen Rabatt (0 bis 90 %) anpassen sowie ihn ein- oder ausschalten. Eine Änderung gilt für VMs, die **nach** dem Speichern gekauft oder verlängert werden; laufende VMs behalten ihren fixierten Preis. ![Registerkarte „Zyklus“ mit Rabatten pro Abrechnungszeitraum](https://nexcmp.com/de/docs/images/catalog/plans-03-cycles.webp) ### Basis-Tarif festlegen und andere ableiten {#set-a-base-plan-and-derive-the-others} **Basis-Tarif festlegen + andere Tarife ableiten** berechnet die gesamte Tabelle anhand eines einzelnen Preises neu. Wählen Sie den Basis-Tarif und dessen Preis, und behalten Sie entweder die **aktuellen Preisverhältnisse** zwischen den Tarifen bei oder berechnen Sie diese aus den **Komponentenpreisen** (µ$/Stunde pro vCPU, pro GB RAM und pro GB NVMe, mit einem optionalen Paketrabatt von 0 bis 50 %). Eine Vorschautabelle zeigt alte und neue Preise an, bevor Daten gespeichert werden. Klicken Sie auf **Apply** und geben Sie einen Grund an. Wenn Sie neue Preise anwenden: Laufende **stündliche** VMs erhalten ab der nächsten Abrechnungsstunde einen **günstigeren** Preis, und Prepaid-VMs erhalten diesen bei der Verlängerung. Wenn ein Preis **steigt**, behalten laufende VMs ihren alten Preis. ### Benutzerdefinierte Tarife {#custom-plans} Über die Registerkarte **Custom plan** können Kunden ihre vCPU-, RAM- und NVMe-Größe frei wählen. Legen Sie den stündlichen Stückpreis für eine vCPU, ein GB RAM und ein GB NVMe (leer lassen, um ihn aus einem prozentualen Rabatt abzuleiten), das Minimum, Maximum und die Schrittweite für jeden Wert sowie die geltenden Abrechnungszeiträume fest. Ein **benutzerdefinierter** Tarif sollte mehr kosten als ein fester Tarif gleicher Größe, da Kunden sonst den festen Tarif überspringen würden; die Seite markiert Zeilen, in denen die benutzerdefinierte Variante günstiger ist. Aktivieren Sie **Enable custom plans for customers**, um diese anzubieten; andernfalls wird im Portal „Coming soon“ angezeigt. Jede benutzerdefinierte VM erhält eine eigene versteckte Tarifzeile, die während der Existenz der VM weder bearbeitet noch gelöscht werden kann. ### Ändern, ausblenden, klonen, löschen {#change-hide-clone-delete} | Aktion | Funktion | |---|---| | **Edit** | Ändert Name, Beschreibung, Reihenfolge, Preis, Aktivstatus und Sichtbarkeit. | | **Ein/Aus** | **Off**: Kunden können nicht kaufen; laufende VMs sind nicht betroffen. | | **Ausblenden / Anzeigen** | Ein ausgeblendeter Tarif ist nicht im Katalog enthalten, aber bestehende VMs behalten ihn und ein Administrator kann ihn zuweisen. | | **Clone** | Erstellt einen neuen Tarif in derselben Zone mit einer neuen Quelle, Größe oder einem neuen Preis und blendet optional den alten aus. Um dieselbe Konfiguration über CloudStack und Proxmox anzubieten, klonen Sie diese und wählen die andere Quelle aus. | | **Nach oben/unten verschieben** | Ändert die Reihenfolge. | | **Delete** | Entfernt den Tarif aus dem Verkauf und aus der Tabelle. VMs, die ihn bereits nutzen, behalten ihn. | ::: warning Genutzte Tarife sind gesperrt Sobald ein Tarif VMs zugeordnet sind, sind **Zone, Angebot, CPU, RAM, Speicher und Quelle** gesperrt, damit laufende VMs nicht unbemerkt verändert werden. Verwenden Sie **Clone**, um die neue Konfiguration zu erstellen; der alte Tarif behält seine VMs. ::: ## Verifizierung {#verify} 1. Der Tarif erscheint in der Tabelle mit dem erwarteten Stunden- und Monatspreis. 2. Starten Sie im Kundenportal eine Bestellung: Die Zone bietet den Tarif an und die Zykluspreise entsprechen der Registerkarte **Cycle**. 3. Geben Sie eine Testbestellung auf, überprüfen Sie die Guthabenabbuchung anhand des angezeigten Preises und löschen Sie die VM. ## Grenzwerte und Hinweise {#limits-and-notes} - Ein Tarif gehört zu **einer** Zone und **einer** Quelle. - Preise werden in µ$/Stunde gespeichert; der angezeigte VND-Preis wird anhand des **VND-Rundungsschritts** (siehe Währungsseite) berechnet und gerundet. Das Guthaben lautet immer auf USD. - Reseller erhalten einen Groß- und Einzelhandelspreis, der sich vom Listenpreis ableitet; das Ändern eines Preises für einen bestehenden Tarif kopiert keine benutzerdefinierten Reseller-Preise auf einen Klon, dessen Konfiguration Sie geändert haben. - Minimale, maximale und Schrittweiten-Limits von benutzerdefinierten Tarifen werden gegen die Limits von CloudStack geprüft; ein maximaler Speicher, der über dem von CloudStack liegt`storage.max.volume.size`, führt dazu, dass Bereitstellungen fehlschlagen und erstattet werden. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "Tarifname erforderlich" / "Serviceangebot erforderlich" | Fehlendes Feld | Namen eingeben; für CloudStack ein Offering auswählen. | | "CPU/RAM/Disk müssen > 0 sein" | Eine Grösse ist leer oder null | Alle drei eingeben. | | "Ungültiger Preis (µ$/hr muss 1 … 100,000,000 sein)" | Der Preis liegt außerhalb des zulässigen Bereichs | Einheit und Betrag überprüfen. | | "Preisänderung erfordert einen Grund" | Grund beim Bearbeiten leer | Einen Grund eingeben (mindestens 3 Zeichen). | | "Offering "X" ist 4c/8192, aber Plan legt 2c/4096 fest – CloudStack stellt nach Offering bereit. Speichern?" | Die Werte des Plans weichen von denen des Offerings ab | Übereinstimmung herstellen oder bestätigen, dass die CloudStack-Grösse beibehalten werden soll. | | "Fehler beim Abrufen der Offerings von CloudStack" | Die Verbindung ist getrennt oder der Schlüssel hat keine Berechtigung | Siehe [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/). | | "Template ist auf CloudStack noch nicht bereit – Bereitstellung schlägt fehl. Trotzdem aktivieren?" | Sie haben ein unvollständiges Template aktiviert | Warten, bis das Template bereit ist. | | Plan kann nicht bearbeitet werden ("hat VMs – gesperrt") | VMs verwenden den Plan | Klonen Sie ihn. | | Der Plan wird für Kunden nicht angezeigt | Ausgeschaltet, ausgeblendet oder Zone nicht bereit | Überprüfen Sie **Active**, **Visibility** und das Zonentag. Siehe [Zones](https://nexcmp.com/de/docs/infrastructure/zones/). | | "Mindestens 1 Abrechnungszeitraum auswählen" | Kein Zeitraum für benutzerdefinierte Pläne ausgewählt | Mindestens einen auswählen. | | "Paketrabatt muss zwischen 0 und 50% liegen" | Ausserhalb des Bereichs | Verwenden Sie Werte von 0 bis 50. | | VND-Preisoption fehlt | Noch kein Wechselkurs vorhanden | Aktualisieren Sie zuerst den Kurs. | --- # Bandbreitenquoten und Add-ons {#bandwidth-quotas-and-add-ons} > **Wo im Admin-Bereich:** Services › Bandwidth: Summary (`/bandwidth`), Add-on (`/bandwidth/addons`) sowie Quotas, pricing & policy (`/bandwidth/policy`). Der Modulschalter befindet sich unter System › Admin › License & updates. ## Funktion {#what-it-does} Bandbreite weist jedem gemessenen Dienst eine monatliche Traffic-**Quote** zu. NexCMP misst die Nutzung, warnt den Kunden bei 80% sowie 100% und agiert bei Überschreitung der Quote gemäss Ihrer **Überschreitungsrichtlinie**. Kunden können **Add-ons** mit zusätzlichen Terabyte über ihr Guthaben erwerben; Sie können Add-ons auch kostenlos gewähren. | Dienst | Quote | |---|---| | Virtual Machines | Pro VM und Monat (Standard 2048 GB, d. h. 2 TB) | | Kubernetes | Die VM-Quote multipliziert mit der Anzahl der Worker | | Object Storage | Download-Traffic pro Kunde und Monat (Standard 100 GB); darüber hinaus gilt der normale Pay-as-you-go-Preis | | VPN | Behält die Quote des Plans bei; Bandbreite auf der VPN-Seite upgraden | | Private Cloud | **Unmetered** | ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Modul | **Bandwidth** ist standardmäßig aktiviert. Deaktivieren Sie diese unter License & updates, um sie auszublenden. | | Messquelle | Mit der Standardquelle: **CloudStack VM statistics**. Lassen Sie die VM-Statistikerfassung in CloudStack aktiviert; die Standardaufbewahrungsdauer von 720 Minuten ist ausreichend. | | Proxmox VE | VMs auf Proxmox VE werden **nicht gemessen**. | | Wechselkurs | Der Add-on-Preis wird in VND eingegeben. Siehe [Currency and exchange rates](https://nexcmp.com/de/docs/catalog/currency-and-exchange-rates/). | | Abhängig von | [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/) für VM- und Kubernetes-Traffic, [S3](https://nexcmp.com/de/docs/infrastructure/s3/) für Storage-Downloads. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Nicht erforderlich, solange CloudStack verbunden ist. NexCMP liest `listVirtualMachinesUsageHistory` für alle VMs des Kontos in einem Aufruf alle 5 Minuten in Fenstern von höchstens zwei Stunden aus. Jede Stichprobe umfasst eine Minute und wird **aufaddiert**. Die Stichproben werden drei Minuten in der Vergangenheit genommen, damit sie Zeit haben einzutreffen. Eine Lücke, die länger ist als die Aufbewahrungsdauer von CloudStack (ca. 12 Stunden), wird übersprungen und aufgezeichnet. ::: info Was die Zahlen bedeuten Die Nutzung wird auf der Netzwerkschnittstelle jeder VM gezählt, umfasst also auch den Traffic zwischen VMs und nicht nur den Traffic zum Internet. Sie kann etwas höher sein als die Zählung eines Edge-Routers. ::: ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **Services › Bandwidth › Quotas, pricing & policy**. 2. Legen Sie die Werte fest und klicken Sie auf **Save**; ein Grund wird abgefragt und aufgezeichnet. Der Worker wendet die Änderung innerhalb von etwa 30 Sekunden an. | Feld | Standard | Bedeutung | |---|---|---| | Bandwidth aktivieren (Kundenmenü und Kauf von Add-ons) | on | Der Schalter für die Vertriebsseite des Moduls. | | VM, GB/Monat (Kubernetes = dieser Wert × Worker) | 2048 | Kontingent pro VM und Abrechnungszeitraum. | | S3, GB Download/Monat pro Kunde | 100 | Darüber hinaus gilt das normale S3-Pay-as-you-go-Modell. | | Kontingentrichtung (VM, Kubernetes) | Eingehend + ausgehend | Oder **Outbound only**. | | +1 TB Preis (VND) | 100,000 | Wird zum Kurs zum Angebotspreis in Cent umgerechnet. | | Maximum pro Kauf (TB) | 50 | | | Überschreitungsrichtlinie | suspend | **notify**, **throttle** oder **suspend** (siehe unten). | | Tatsächliche Sperrung erzwingen ab | Migrierungsdatum + 24 Stunden | Vor diesem Datum wird nichts gesperrt; Kunden werden lediglich gewarnt. | | Drosselungslimit (Mbps) | | Wird nur bei Drosselung verwendet. | ![Bandbreitenrichtlinie: Standardkontingente, Add-on-Preis und Richtlinie bei Überschreitung](https://nexcmp.com/de/docs/images/catalog/bandwidth-01-policy.webp) ### Überschreitungsrichtlinien {#overage-policies} | Richtlinie | Was passiert, wenn ein Dienst 100% überschreitet | |---|---| | **notify** | Der Kunde wird benachrichtigt. Sonst nichts. | | **throttle** | Derzeit wie notify: Der Geschwindigkeitsbegrenzer ist in dieser Version nicht angebunden. | | **suspend** (Standard) | Die VM, der Cluster oder das S3-Konto wird gesperrt, bis der Kunde ein Add-on kauft oder der nächste Zeitraum beginnt. Wirksam erst ab dem Datum **suspend-from**. | Die Benachrichtigungen bei 80% und 100% (Glocke und E-Mail) werden immer einmal pro Schwellenwert, Zeitraum und Dienst ausgeführt. Wenn Sie einen Dienst entsperren, der wegen Bandbreite gesperrt wurde, während er sich immer noch über dem Kontingent befindet, wird er bei der nächsten Prüfung (innerhalb von 5 Minuten) erneut gesperrt. Um ihn weiter laufen zu lassen, **gewähren Sie ein Add-on**. ### Nutzung überwachen und Add-ons gewähren {#watch-usage-and-grant-add-ons} Öffnen Sie **Services › Bandwidth › Summary**. Dort werden alle Services mit ihrer Nutzung im aktuellen Abrechnungszeitraum, dem Kontingent inklusive Add-ons, dem verbleibenden Kontingent sowie den 80-%- und 100-%- Marken aufgelistet. KPI-Kacheln zeigen die Anzahl der Services, die in den letzten 30 Tagen verkauften Add-ons und den Collector-Status (running, cursor). Die Tabelle **Daily** zeigt den aktuellen Zeitraum Tag für Tag. ![Bandbreitenübersicht mit Collector-Status und Nutzung pro Service](https://nexcmp.com/de/docs/images/catalog/bandwidth-02-summary.webp) Um einem Kunden mehr Spielraum zu geben, verwenden Sie **Grant** bei einem Service (einem kostenlosen Add-on im Umfang von ganzen Terabytes). Öffnen Sie **Add-on** für den Verlauf von Käufen und Zuweisungen (neueste zuerst), gefiltert nach Typ. ![Add-on-Verlauf mit Käufen und kostenlosen Zuweisungen](https://nexcmp.com/de/docs/images/catalog/bandwidth-03-addons.webp) ### Was Kunden sehen {#what-customers-see} Das Kundenportal erhält ein **Bandwidth**-Menü mit der Nutzung, dem verbleibenden Kontingent und einer Aktion **buy +1 TB**, die über das Guthaben bezahlt wird (bis zu Ihrem Maximum pro Kauf). Add-ons sind für den laufenden Abrechnungszeitraum gültig. ## Verifizierung {#verify} 1. Der Collector unter **Summary** läuft und sein Cursor bewegt sich alle paar Minuten vorwärts. 2. Eine VM mit Datenverkehr zeigt die Nutzung nach etwa 10 bis 15 Minuten an. 3. Um die Benachrichtigungen zu sehen, reduzieren Sie das VM-Kontingent auf einer **Test**-Installation auf wenige GB und erzeugen Sie etwas Datenverkehr. Tun Sie dies nicht in einer Produktionsumgebung: Das Kontingent gilt für jede VM. ## Grenzwerte und Hinweise {#limits-and-notes} - Die Nutzung wird pro Abrechnungszeitraum (einem Monat) gezählt. Add-ons und Kontingente gelten für den laufenden Zeitraum. - "Enforce actual suspend from" schützt Sie davor, Kunden in dem Moment zu sperren, in dem das Modul zum ersten Mal aktiviert wird. - Die Drosselungsrichtlinie (Throttle) löst in dieser Version nur Benachrichtigungen aus. - Eine Änderung des Kontingents gilt für alle Standorte, einschließlich Reseller-Standorte. Die Endkunden- und Reseller-Preise für Add-ons richten sich nach deren Rabatt oder Aufschlag. - Bandbreite für **Dedicated servers** ist ein separates Thema; siehe [Dedicated servers](https://nexcmp.com/de/docs/infrastructure/dedicated/). ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Nutzung bleibt bei einer laufenden VM bei Null | Der Worker ist gestoppt, CloudStack ist getrennt oder die VM-Statistiken sind deaktiviert | Überprüfen Sie `sudo nexcmp status` und **Test connection** unter [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/); aktivieren Sie die CloudStack-VM-Statistiken. | | Nutzung weist Lücken auf | Die CloudStack-Aufbewahrungsfrist wurde überschritten oder der Worker war länger als etwa 12 Stunden offline | Nicht wiederherstellbar; die Lücke wird aufgezeichnet. | | Nutzung ist etwas höher als erwartet | Datenverkehr zwischen VMs und anderer Schnittstellen-Traffic ist enthalten | Erwartet; erklären Sie dies den Kunden. | | Ein gesperrter Service ist nach dem Entsperren wieder gesperrt | Er überschreitet nach wie vor das Kontingent | Gewähren Sie ein Add-on oder erhöhen Sie das Kontingent. | | Nichts wird gesperrt, obwohl die Richtlinie auf **suspend** steht | Das Datum für die Sperrung liegt in der Zukunft | Setzen Sie es auf „jetzt“ (die Seite zeigt "ACTIVE", wenn es aktiv ist). | | "bw_over_policy muss notify, throttle oder suspend sein" | Ungültige Richtlinie über die API übergeben | Verwenden Sie einen der drei Werte. | | Proxmox-VMs zeigen keine Nutzung an | Sie werden nicht erfasst | Erwartet. | | Kunden können keine Add-ons kaufen | Bandbreite ist deaktiviert oder das Guthaben ist leer | Überprüfen Sie den Schalter und das Guthaben. | --- # Währungen und Wechselkurse {#currency-and-exchange-rates} > **Wo im Administratorbereich:** Finance › Payment channels › Exchange rates (`/payments/fx`) für die Kurse. System › Settings › Brand (`/settings/branding`) für den Schalter **Site currency**. ## Funktion {#what-it-does} NexCMP führt Wallets und Rechnungen in USD. Preise für VM-Pläne werden in Mikrodollar pro Stunde gespeichert. Anzeigewährungen ermöglichen es Kunden, USD-Beträge zu einem veröffentlichten Wechselkurs in ihrer eigenen Währung einzusehen; sie verändern das Wallet-Guthaben nicht. Einige Dienste akzeptieren in VND eingegebene Preise, darunter Bandbreiten-Add-ons, S3, Private Cloud und bestehende Bare-Metal-Pläne, die ihre VND-Preise beibehalten. Banküberweisungen über Sepay werden in VND beglichen. Kurse werden **von einem Administrator veröffentlicht**. Nichts aktualisiert sich automatisch; die von Ihnen gespeicherten Kurse bleiben exakt so bestehen, bis Sie die Aktualisierungsschaltfläche betätigen. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Internetverbindung | Der Panel-Server muss `open.er-api.com` (für USD/VND) und `api.frankfurter.dev` (für die anderen Währungen) erreichen können, wenn Sie **Update exchange rates** betätigen. | | Berechtigungen | Ein Administrator für Änderungen; jede Änderung erfordert die Angabe eines Grundes. | | Abhängig von | Keine. [Plans](https://nexcmp.com/de/docs/catalog/plans/), [Bandwidth](https://nexcmp.com/de/docs/catalog/bandwidth/), [S3](https://nexcmp.com/de/docs/infrastructure/s3/) und VND-Banküberweisungen verwenden den Kurs. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Nicht erforderlich. Wenn Ihr Server ausgehenden Datenverkehr filtert, erlauben Sie HTTPS für die beiden vorgenannten Dienste. ## In NexCMP verbinden {#connect-in-nexcmp} ### 1. Site-Währung auswählen {#_1-choose-the-site-currency} Öffnen Sie **System › Settings › Brand** und stellen Sie **Site currency** ein: | Auswahl | Was Kunden sehen | |---|---| | **Language-based (auto)** (Standard bei einer Neuinstallation) | Das Portal wählt anhand der Sprache eine Anzeigewährung (Tabelle unten). Der Kunde kann stattdessen USD wählen. | | **USD** | Preise und Salden ausschließlich in USD. Kein Währungsumschalter und keine konvertierten Beträge. | | **VND** | Legacy-Einstellung; folgt denselben sprachbasierten Anzeigeregeln wie Auto. | Speichern. Die Kundenseiten werden innerhalb von etwa einer Minute aktualisiert. Wenn sich die Website nach der Sprache des Kunden richtet: | Sprache | Anzeigewährung | |---|---| | Englisch | USD | | Vietnamesisch | VND | | Chinesisch (vereinfacht / traditionell) | CNY / TWD | | Japanisch, Koreanisch | JPY, KRW | | Französisch, Deutsch, Spanisch, Italienisch | EUR | | Portugiesisch, Russisch | BRL, RUB | | Arabisch, Hindi | SAR, INR | | Indonesisch, Thailändisch | IDR, THB | Eine Währung, deren Kurs nicht veröffentlicht wurde, wird nicht angeboten: Das Portal greift auf USD zurück. ### 2. Kurse veröffentlichen {#_2-publish-the-rates} 1. Öffnen Sie **Finance › Payment channels › Exchange rates**. 2. Die Karte **Currency by language** listet die 11 Anzeigewährungen samt Kurs pro USD, der Quelle (Frankfurter) und dem Zeitpunkt der letzten Aktualisierung auf. Klicken Sie auf **Update exchange rates**. Die Schaltfläche führt zwei Aktionen in einem Schritt aus: Sie liest die öffentliche Markttabelle für **USD/VND** aus und ruft die anderen 11 Kurse ab. Beide Abfragen werden validiert, bevor Änderungen gespeichert werden. Schlägt eine davon fehl, wird nichts geändert und die bisherigen Kurse bleiben bestehen. 3. Die Karte **Active exchange rate** zeigt den geltenden USD/VND-Kurs, dessen Quell-Tag (public market oder fixed), die Marge sowie die Marktreferenzwerte samt Zeitstempeln an. 4. Die Karte **Config** (mit einer Begründung speichern): | Feld | Bedeutung | Bereich | |---|---|---| | Marge (Bp., 100 = 1 %) | Wird auf den Marktreferenzkurs aufgeschlagen. Der effektive Kurs entspricht dem Referenzkurs zuzüglich der Marge, aufgerundet. | 0 bis 1000 | | Fester Kurs (VND pro USD, 0 = Markt folgen) | Ein Kurs, den Sie selbst festlegen. Er ersetzt den Marktwert. | 0 oder 15,000 bis 50,000 | | Sprungschwelle (Bp.) | Ein neuer Marktkurs, der um mehr als diesen Wert vom aktuellen abweicht, wird **zurückgehalten**, bis Sie ihn bestätigen. | 50 bis 2000 (Standard 500) | | VND-Rundungsschritt | Rundet VND-Preise und Banküberweisungsbeträge. | 1, 100, 1,000 (default) oder 10,000 | 5. Weicht ein neuer Marktkurs um mehr als den Schwellenwert ab, erscheint die Karte **Pending exchange rate** und der Kurs wird **nicht übernommen**. Gleichen Sie ihn mit Ihrer gewählten Referenz ab und klicken Sie auf **Apply this rate**. Ein Marktkurs außerhalb von 15,000 bis 50,000 VND pro USD wird als unplausibel abgelehnt. Manuelle Aktualisierungen sind auf eine Anfrage alle fünf Minuten beschränkt, sodass die Schaltfläche Sie bitten kann zu warten. 6. Die Tabelle **Exchange rate history** führt jeden abgerufenen oder bestätigten Kurs mit Zeitpunkt, effektivem Kurs, Marktreferenz, Quelle, Übernahmestatus, ausführender Person und einer Notiz auf (zurückgehaltene Sprünge sind als **held** markiert). ## Wie ein Kurs verwendet wird {#how-a-rate-is-used} | Ort | Regel | |---|---| | Guthaben und Rechnungen | USD-Cents. Der Kurs ändert niemals einen Kontostand. | | In VND erfasste VM-Tarife | Werden beim Speichern **einmalig** zum aktuellen Kurs umgerechnet und danach in USD gespeichert. Spätere Kursänderungen wirken sich nicht auf die Preise dieser VM-Tarife aus. | | Banküberweisung über Sepay | Der Kunde zahlt `ceil(USD × rate)`, aufgerundet auf den Rundungsschritt. Sepay ist **gesperrt**, bis ein USD/VND-Kurs vorliegt. | | Bare-Metal-Tarife | Neuinstallationen verwenden direkt USD. Bestehende VND-Tarife behalten ihre Preiseinheit und benötigen bei der Abrechnung einen Kurs; siehe [Dedicated servers](https://nexcmp.com/de/docs/infrastructure/dedicated/). | | Andere in VND eingegebene internationale Zahlungen | Auf den nächsten Cent gerundet. | | Anzeige im Portal | USD multipliziert mit dem veröffentlichten Kurs der Anzeigewährung, formatiert für die jeweilige Sprache. | ## Verifizierung {#verify} 1. **Active exchange rate** zeigt einen USD/VND-Wert mit einer aktuellen „fetched“-Zeit. 2. Das Raster **Currency by language** zeigt nicht-leere Kurse. 3. Wechseln Sie im Kundenportal die Sprache auf Vietnamesisch (Site-Währung Auto): Preise werden in Dong angezeigt; bei Japanisch: Yen. Bei der Site-Währung USD werden ausschließlich Dollar angezeigt. 4. Auf einem Tarifenformular (Plans & pricing) bietet die Liste **Enter price by** die Option **VND / month** an. ## Grenzwerte und Hinweise {#limits-and-notes} - Keine automatische Aktualisierung. Drücken Sie auf **Update exchange rates**, wenn Sie neue Kurse wünschen, und stellen Sie eine Erinnerung ein, falls Kurse für Sie wichtig sind. - Für USD/VND wird der öffentliche Marktkurs verwendet; es handelt sich um einen Referenzkurs und keinen An- oder Verkaufskurs einer Bank. Die weiteren Anzeigewährungen stammen von Frankfurter; ein Datum, das älter als 14 Tage ist, oder eine unvollständige Tabelle wird abgewiesen. - Marge und fester Kurs betreffen nur USD/VND. Die 11 Anzeigewährungen enthalten keine Marge. - Jede Kundensprache hat eine Währung. Das Ändern der Sprache setzt die Währung auf die dieser Sprache zurück, es sei denn, der Kunde hat USD für dieselbe Sprache gewählt. - Reseller-Sites folgen denselben Kursen. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "Neuer Wechselkurs weicht über Schwellenwert ab – ANGEHALTEN, erfordert manuelle Bestätigung" | Die Abweichung ist größer als der Schwellenwert | Überprüfen Sie den Wert und klicken Sie auf **Apply this rate** oder ändern Sie den Schwellenwert. | | "Server hat neuen Wechselkurs abgelehnt" | Der Marktwert liegt außerhalb von 15,000 bis 50,000 oder ist fehlerhaft | Warten Sie und versuchen Sie es erneut, oder legen Sie einen festen Kurs fest. | | Aktualisierung fordert zum Warten vor einem erneuten Versuch auf | Zu häufige Aktualisierungen | Warten Sie und versuchen Sie es erneut. | | "Kurs konnte nicht abgerufen werden: …" | Der Panel-Server kann die Kursdienste nicht erreichen | Erlauben Sie ausgehendes HTTPS und versuchen Sie es erneut. | | **Sepay blocked**-Tag | Es wurde noch kein USD/VND-Kurs veröffentlicht | Klicken Sie auf **Update exchange rates** oder legen Sie einen festen Kurs fest. | | Eine Währung fehlt im Portal | Ihr Kurs fehlt | Klicken Sie auf **Update exchange rates**. | | Kunden sehen Preise nur in USD | Die Währung der Website ist USD oder der Kurs fehlt | Setzen Sie **Site currency** auf Auto und veröffentlichen Sie die Kurse. | | "Fx unvollständige Kurstabelle; vorherige Kurse beibehalten" | Frankfurter hat weniger als 11 Währungen zurückgegeben | Versuchen Sie es später erneut; es wurde nichts geändert. | | Die VND-Option fehlt im Tarifformular | Kein USD/VND-Kurs | Veröffentlichen Sie zuerst einen Kurs. | --- # Zahlungskanäle {#payment-channels} > **Im Admin-Bereich:** Finance › Payment channels (`/payments`). Schalter und Gebühren: Finance › Payment channels › Fees & limits (`/payments/fees`). NexCMP verwendet ein **Prepaid-Guthaben in USD**. Kunden laden Geld über einen Zahlungskanäle auf das Guthaben; alle Dienste werden anschließend davon bezahlt. Ein Kanal wird Kunden nur angezeigt, wenn er sowohl **aktiviert** als auch **konfiguriert** ist. ## Funktion {#what-it-does} Zahlungskanäle verbinden Ihre Zahlungskonten (Stripe, PayPal, Binance, eine vietnamesische Bank) mit dem Kundenkonto. Eine bestätigte Zahlung wird exakt zu einer Guthabenbuchung — jede Buchung ist über die Gateway-Zahlungs-ID eindeutig, sodass ein wiederholter Webhook niemals doppelt Geld hinzufügen kann. Auf dieser Seite sehen Sie, welche Kanäle bereit sind, wie sie in den letzten 30 Tagen abgeschnitten haben und welche Aufmerksamkeit erfordern. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Öffentliche HTTPS-Adresse | Gateways senden Webhooks an `https:///v1/billing/...`, daher muss Ihr Panel über ein gültiges TLS-Zertifikat aus dem Internet erreichbar sein (siehe [DNS and Cloudflare](https://nexcmp.com/de/docs/getting-started/dns-and-cloudflare/)). | | Konten | Ihr eigenes Konto bei jedem gewünschten Anbieter. Zugangsdaten werden im Admin-Bereich eingegeben und niemals erneut angezeigt (nur die letzten 4 Zeichen). | | Admin-Rolle | Ein Administrator-Konto. | | Abhängigkeiten | Keine. Der VN-Bank-Kanal benötigt zusätzlich einen [Wechselkurs](https://nexcmp.com/de/docs/catalog/currency-and-exchange-rates/). | ## Die Kanäle {#the-channels} | Kanal | Was der Kunde sieht | Einrichtung in | Artikel | |---|---|---|---| | Karte (Stripe) | Kartenformular, gespeicherte Karte | Payment channels › Stripe | [Stripe](https://nexcmp.com/de/docs/billing/stripe/) | | Apple Pay, Google Pay, Link | Wallet-Schaltflächen (Stripe Express Checkout) | Stripe sowie Domain-Registrierung | [Stripe](https://nexcmp.com/de/docs/billing/stripe/#apple-pay-google-pay-and-link) | | Alipay | Weiterleitung zu Alipay (Abrechnung in JPY über Stripe) | Stripe sowie Fees & limits | [Stripe](https://nexcmp.com/de/docs/billing/stripe/#alipay) | | PayPal | PayPal-Schaltflächen, gespeichertes PayPal-Konto | Payment channels › PayPal | [PayPal](https://nexcmp.com/de/docs/billing/paypal/) | | USDT | Einzahlungsadresse und genauer Betrag | Payment channels › USDT | [USDT](https://nexcmp.com/de/docs/billing/usdt/) | | VN-Banküberweisung | QR-Code und Überweisungsdetails (nur vietnamnesische Oberfläche) | Payment channels › VN bank transfer | [Banküberweisung (Vietnam)](https://nexcmp.com/de/docs/billing/bank-transfer-vn/) | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Nicht erforderlich. Alles wird im Admin-Bereich konfiguriert; auf dem Server muss nichts installiert werden. ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **Finance › Payment channels** (`/payments`). Die Übersichtstabelle listet jeden Kanal mit seinem Status auf. 2. Öffnen Sie die Kanaltab (**Stripe**, **PayPal**, **USDT**, **VN bank transfer**) und folgen Sie dem dazugehörigen Artikel. Jedes Tab endet mit einer **Save**-Schaltfläche und – sofern verfügbar – einer **Test**-Schaltfläche. 3. Öffnen Sie **Fees & limits** (`/payments/fees`), suchen Sie die Karte **Payment gateways & fees (wallet top-up)**, aktivieren Sie den Kanal mit dem Schalter und klicken Sie auf **Save channels & fees**. ![Übersicht der Zahlungskanäle mit Gateways sowie deren Status (aktiviert, konfiguriert) und 30-Tage-Statistiken](https://nexcmp.com/de/docs/images/billing/payment-channels-01-overview.webp) ![Seite für Gebühren und Limits mit den Kanalschaltern und den Gebührenfeldern](https://nexcmp.com/de/docs/images/billing/payment-channels-02-fees.webp) ### Schalter und Gebühren (Fees & limits) {#switches-and-fees-fees-limits} | Einstellung | Standard | Bedeutung | |---|---|---| | Karte (Stripe) | An | Kartenformular auf dem Einzahlungsbildschirm. Bis zur Hinterlegung eines Stripe-Geheimschlüssels ausgeblendet. | | Apple Pay, Google Pay, Link | An | Wallet-Schaltflächen. Diese werden nur angezeigt, wenn die Domain bei Stripe verifiziert ist. | | Alipay | Aus | Erfordert ein in Ihrem Stripe Dashboard aktiviertes Alipay. | | PayPal | Aus | Wird nur angezeigt, wenn PayPal konfiguriert ist. | | USDT (Binance) | Aus | Der Schalter ist gesperrt, bis die Einzahlungsadresse gegen Binance verifiziert wurde. | | Stripe-Gebühr % / fix (Cents) | 3.6 % und 0 | Wird verwendet, um dem Kunden die Gebühr anzuzeigen und den gutzuschreibenden Betrag zu berechnen. Stellen Sie hier Ihren tatsächlichen Stripe-Tarif ein. | | PayPal-Gebühr % / fix | 4.4 % und 30 Cent | Entsprechend für PayPal. | | USDT-Gebühr % | 1 % | Entsprechend für USDT. | | Kunde zahlt Aufladegebühr | Aus | **On**: Der Kunde zahlt Betrag + Gebühr und das Guthaben erhält den vollen Betrag. **Off**: Die Gebühr wird abgezogen und das Guthaben erhält den Betrag abzüglich der Gebühr. | Der Kunde sieht vor der Zahlung stets die Gebühr und das finale Guthaben. Das Deaktivieren eines Kanals blendet den Button aus und der Server verweigert neue Zahlungen mit `method_disabled` (HTTP 403). ::: tip Aufladelimits Der Mindest- und Höchstbetrag pro Aufladung befinden sich auf derselben Seite — siehe [Mindestaufladung](https://nexcmp.com/de/docs/billing/minimum-top-up/). ::: ## Verifizierung {#verify} 1. In der Übersichtstabelle zeigt der Kanal **Enabled** und **Configured** an; die Spalte **Last test** wird ausgefüllt, nachdem Sie auf dem Reiter des Kanals auf **Test** geklickt haben. 2. Melden Sie sich als Testkunde im Portal an und öffnen Sie **Billing › Deposit**. Der Kanal-Button ist vorhanden. 3. Tätigen Sie eine kleine Zahlung (siehe Artikel des Kanals für Testkarten oder Sandbox-Konten). Der Kontostand steigt, eine Benachrichtigung **Top-up received** erscheint und die Zahlung wird unter **Finance › Billing › Top-ups** (`/billing/deposits`) aufgeführt. ## Limits & Hinweise {#limits-notes} - **Übersichtsspalten:** *30 days* (Anzahl der Zahlungen, erfolgreiche und fehlgeschlagene Zahlungen sowie Volumen), *Stuck 24h* (Zahlungen, die nach einem Tag noch ausstehen) und *Unmatched* (USDT- oder Banküberweisungen, die eingegangen sind, aber zu keiner Bestellung passen). Die KPI-Zeile ergänzt das 30-Tage-Volumen, die Anzahl fehlerhafter Kanäle (aktiviert, aber nicht konfiguriert oder hängende Zahlungen) sowie die Summe der nicht zugeordneten Beträge. - **Webhook-Ereignisse** sind unter **Payment channels › Gateway events** (`/payments/events`) aufgelistet. Stripe hat einen eigenen Reiter; PayPal und USDT teilen sich einen. Ein fehlgeschlagenes Ereignis kann erneut abgespielt werden – das Kontobuch ist idempotent, sodass eine Wiederholung niemals doppelt gutgeschrieben wird. - **Resellers** können eigene Stripe-, PayPal-, USDT- und Bankkanäle nutzen. Ihre Zeilen erscheinen ebenfalls hier, und die Site-Auswahl im Header filtert diese. Siehe [Resellers](https://nexcmp.com/de/docs/customers/resellers/). - **Rückerstattungen:** Stripe- und PayPal-Zahlungen können aus der Zahlungsliste heraus erstattet werden; USDT-Zahlungen können nicht an die Quelle erstattet werden (der Server antwortet mit `usdt_no_refund`). - **Wartungsmodus** akzeptiert weiterhin Gateway-Webhooks, sodass eine kurz vor der Wartung getätigte Zahlung nicht verloren geht. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Kanal auf dem Einzahlungsbildschirm des Kunden fehlt | Ausgeschaltet, nicht konfiguriert oder (bei vietnamesischen Banken) die Benutzeroberfläche ist nicht auf Vietnamesisch eingestellt | Überprüfen Sie **Fees & limits** und den Kanalreiter; siehe [Bank transfer (Vietnam)](https://nexcmp.com/de/docs/billing/bank-transfer-vn/). | | Der KPI **Faulty channels** ist größer als 0 | Ein Kanal ist ohne Anmeldedaten aktiviert oder Zahlungen sind seit mehr als 24 Stunden ausstehend | Öffnen Sie die Zeile und klicken Sie auf **Configure**; öffnen Sie bei hängenden Zahlungen **Gateway events** und spielen Sie diese erneut ab. | | Kunde hat bezahlt, aber das Guthaben hat sich nicht geändert | Der Webhook ist nicht eingetroffen | Überprüfen Sie die Webhook-URL auf dem Kanalreiter und spielen Sie das Ereignis dann unter **Gateway events** erneut ab. | | Server antwortet mit `method_disabled` | Der Schalter ist ausgeschaltet | Schalten Sie ihn unter **Fees & limits** ein und speichern Sie. | | USDT-Schalter ist ausgegraut | Einzahlungsadresse nicht verifiziert | Klicken Sie auf dem USDT-Reiter auf **Test & verify address**. | --- # Stripe > **Wo im Admin:** Finance › Payment channels › Stripe (`/payments/stripe`). Schalter und Gebühren: Finance › Payment channels › Fees & limits (`/payments/fees`). ## Funktion {#what-it-does} Stripe wickelt Kartenzahlungen für Guthabenaufladungen ab. Mit demselben Konto können Sie auch **Apple Pay**, **Google Pay**, **Link** und **Alipay** anbieten und Kunden eine **Karte speichern** lassen für [automatic top-up](https://nexcmp.com/de/docs/billing/auto-top-up/). Verwenden Sie dies als primären Kanal für internationale Kunden. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Stripe-Konto | Ein Stripe-Konto, das Zahlungen in **USD** akzeptieren kann. Alipay wird in JPY belastet und muss von Stripe für Ihr Konto freigeschaltet werden. | | Schlüssel | Ein geheimer Schlüssel (`sk_live_...` oder `sk_test_...`) und ein öffentlicher Schlüssel (`pk_live_...` oder `pk_test_...`). Das Formular akzeptiert nur Schlüssel mit diesen Präfixen. | | Netzwerk | Ihr Panel muss aus dem Internet über HTTPS erreichbar sein (Stripe ruft den Webhook auf) und `api.stripe.com` über Port 443 erreichen können. | | Domain (nur Guthaben) | Die kundenorientierte Domain muss `/.well-known/apple-developer-merchantid-domain-association` bereitstellen – NexCMP erledigt dies für Sie. | | Abhängigkeiten | Keine. | ::: info Gemeinsam genutzte Stripe-Konten NexCMP verarbeitet nur Webhook-Ereignisse für Zahlungen, die es selbst erstellt hat, sodass Sie ein Stripe-Konto verwenden können, das auch eine andere Anwendung bedient. ::: ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Aufseiten von Stripe: 1. Melden Sie sich im [Stripe Dashboard](https://dashboard.stripe.com) an. Schalten Sie **Test mode** ein oder aus, um zu bestimmen, ob Sie einen Probelauf durchführen oder den Live-Betrieb starten. Schlüssel des einen Modus funktionieren niemals mit dem anderen. 2. Öffnen Sie **Developers › API keys**. Kopieren Sie den **Publishable key**, und blenden Sie den **Secret key** ein, um ihn zu kopieren. Halten Sie den geheimen Schlüssel unter Verschluss. 3. (Optional) Öffnen Sie **Settings › Payment methods**, und aktivieren Sie **Alipay**, falls Sie dies anbieten möchten. 4. Sie müssen den Webhook **nicht** manuell erstellen — NexCMP kann dies für Sie erledigen (siehe Schritt 5 unten). Wenn Sie es lieber manuell tun möchten, erstellen Sie einen Endpunkt unter **Developers › Webhooks** mit der URL und den in [Webhook](#webhook) aufgelisteten Ereignissen. ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **Finance › Payment channels › Stripe** (`/payments/stripe`). 2. Wählen Sie in der Karte **API keys** den **Mode** (`live` oder `test`), fügen Sie den **Secret key** sowie den **Publishable key** ein. 3. Klicken Sie auf **Save**. Die Schlüssel werden in eine Konfigurationsdatei auf dem Server geschrieben, die nur das NexCMP-Dienstkonto lesen kann. Sie werden niemals an den Browser zurückgesendet; danach zeigt die Seite nur noch die letzten 4 Zeichen an. 4. Klicken Sie auf **Check**. Ein Dialog meldet die Verbindung, den Modus, das verfügbare und ausstehende Guthaben, die Konto-ID, ob Belastungen aktiviert sind, ob ein Webhook existiert und ob Alipay verfügbar ist. Eine rote Zeile bedeutet, dass dieser Teil Aufmerksamkeit erfordert. 5. Klicken Sie in der Karte **Webhook** auf **Create webhook**, und bestätigen Sie dies. NexCMP fordert Stripe auf, den Endpunkt mit jedem erforderlichen Ereignis zu erstellen, und füllt das **Webhook signing secret** (`whsec_...`) automatisch aus. Die im Feld vorausgefüllte URL ist `https:///v1/billing/stripe/webhook`, zum Beispiel `https://cloud.example.com/v1/billing/stripe/webhook`. 6. Öffnen Sie **Fees & limits** (`/payments/fees`), lassen Sie **Card (Stripe)** eingeschaltet, stellen Sie **Stripe fee %** sowie **Stripe fixed fee (cents)** auf Ihren echten Tarif ein, und klicken Sie auf **Save channels & fees**. Siehe [Payment channels](https://nexcmp.com/de/docs/billing/payment-channels/#switches-and-fees-fees-limits). ![Stripe-Seite mit dem Modus, dem Secret Key und dem Publishable Key mit Beispielwerten ausgefüllt](https://nexcmp.com/de/docs/images/billing/stripe-01-keys.webp) ### Webhook {#webhook} Das rote Banner "Missing webhook_secret" bleibt bestehen, bis ein Signierungsgeheimnis gespeichert wurde. Ohne dieses werden Stripe-Guthabenaufladungen **nicht erfasst**, obwohl Stripe das Geld eingezogen hat. | Komponente | Wert | |---|---| | URL | `https:///v1/billing/stripe/webhook` | | Ereignisse | `checkout.session.completed`, `payment_intent.succeeded`, `payment_intent.payment_failed`, `charge.refunded`, `charge.dispute.created`, `charge.dispute.closed`, `radar.early_fraud_warning.created`, `refund.updated`, `refund.failed` | | Signatur | Stripe `Stripe-Signature`-Header, HMAC-SHA256, 300 Sekunden Toleranz. Anfragen mit einer ungültigen Signatur erhalten HTTP 400. | | Idempotenz | Jede Ereignis-ID wird einmal gespeichert; eine wiederholte Zustellung führt niemals zu einer doppelten Gutschrift. | Wenn Sie von einer Version aktualisiert haben, die weniger Ereignisse registriert hat, klicken Sie erneut auf **Create webhook** — der alte Endpunkt bleibt erhalten, löschen Sie diesen daher im Anschluss manuell im Stripe Dashboard. Die Zeilen **24h events** und **Latest event** in der Webhook-Karte zeigen Ihnen an, ob Stripe das Panel erreicht. Einzelne Ereignisse sind unter **Payment channels › Gateway events** (`/payments/events`, Registerkarte Stripe) aufgelistet, wo jedes Ereignis eingesehen (**Payload**) oder erneut abgespielt (**Replay**) werden kann. ### Apple Pay, Google Pay und Link {#apple-pay-google-pay-and-link} 1. In der Karte **Wallets (Apple Pay · Google Pay · Link) & Alipay** ist das Feld **Customer app Domain registered with Stripe** mit dem Hostnamen Ihrer Website vorausgefüllt (zum Beispiel `cloud.example.com`). 2. Klicken Sie auf **Register / verify domain**, und bestätigen Sie dies. NexCMP registriert die Domain in den Zahlungsmethoden-Domains von Stripe und bittet Stripe, diese zu validieren. 3. Das Ergebnis zeigt den Status von **Apple Pay**, **Google Pay** und **Link**. Apple Pay wird nur angezeigt, wenn der Status `active` ist. 4. Lassen Sie unter **Fees & limits** **Apple Pay · Google Pay · Link** eingeschaltet. ![Wallet-Karte mit der registrierten Domain sowie den Status von Apple Pay, Google Pay und Link](https://nexcmp.com/de/docs/images/billing/stripe-03-wallets.webp) ::: tip Apple Pay bleibt inaktiv Apple Pay benötigt die Domain-Assotiationsdatei, um HTTP 200 auf Ihrer öffentlichen Domain zu beantworten. Wenn Sie Cloudflare oder einen anderen Proxy davor schalten, blockieren Sie `/.well-known/` nicht. ::: ### Alipay {#alipay} Alipay ist optional. Aktivieren Sie es in **Stripe Dashboard › Settings › Payment methods**, klicken Sie auf **Check** und warten Sie, bis der Dialog anzeigt, dass Alipay verfügbar ist. Schalten Sie dann **Alipay (Stripe, JPY display)** unter **Fees & limits** ein. Legen Sie **Alipay fee %**, **Alipay fixed fee**, den **¥/USD rate** (50–500) und den **FX spread %** (0–20) fest. Aktualisieren Sie den ¥/USD-Kurs regelmäßig; die Seite warnt, wenn er älter als 7 Tage ist. ## Verifizierung {#verify} 1. Melden Sie sich im Testmodus als Testkunde im Portal an, öffnen Sie **Billing**, klicken Sie auf **Deposit**, wählen Sie **Card** und bezahlen Sie den Mindestbetrag mit der Stripe-Testkarte `4242 4242 4242 4242` (ein beliebiges zukünftiges Datum, ein beliebiger CVC). 2. Das Guthaben erhöht sich innerhalb von Sekunden und die Zahlung erscheint unter **Finance › Billing › Top-ups** mit dem Status *Completed*. 3. Öffnen Sie **Payment channels › Gateway events › Stripe**: Sie sollten `checkout.session.completed` oder `payment_intent.succeeded` mit einer Verarbeitungszeit sehen. 4. Wieder auf der Stripe-Seite ist **24h events** größer als 0. Schalten Sie vor dem Live-Gang **Mode** auf `live`, fügen Sie die Live-Schlüssel ein und klicken Sie erneut auf **Create webhook** (Webhooks für Test- und Live-Modus sind getrennt). ## Limits & Hinweise {#limits-notes} - **Beträge und Währung.** Wallets lauten auf USD. Karten-, Wallet- und Link-Zahlungen werden in USD belastet; Alipay wird dem Kunden in JPY angezeigt und zu Ihrem Kurs umgerechnet. - **Gebühren.** Die tatsächliche Gebühr von Stripe wird nicht automatisch ausgelesen; der von Ihnen festgelegte Prozentsatz bestimmt, was der Kunde sieht und dem Guthaben gutgeschrieben wird. Wählen Sie **Customer pays top-up fee** unter *Fees & limits*, um die Gebühr zusätzlich zu erheben. - **Gespeicherte Karten.** Wenn der Kunde *Save card for auto top-up* ankreuzt, wird die Karte bei Stripe gespeichert, nicht auf Ihrem Server. Siehe [Saved payment methods](https://nexcmp.com/de/docs/billing/saved-payment-methods/). - **Rückerstattungen.** Eine Rückerstattung auf die Karte erfolgt in zwei Schritten: Ein Administrator erstellt eine Rückerstattungsanfrage für eine abgeschlossene Zahlung (**Finance › Billing › Top-ups**, Rückerstattungsaktion für die Zahlung) und genehmigt sie dann unter **Finance › Payouts › Card refunds** (`/billing/payouts`). Alipay-Rückerstattungen erfolgen asynchron; eine fehlgeschlagene (`refund.failed`) erstattet den einbehaltenen Betrag an das Wallet zurück. - **Streitfälle.** Bei `charge.dispute.created` sperrt NexCMP das Kundenkonto, stoppt dessen Prepaid-Dienste (es wird nichts gelöscht) und sendet eine Admin-Benachrichtigung. Wenn Sie gewinnen (`charge.dispute.closed`), wird der Betrag dem Wallet wieder gutgeschrieben. - **Ausstehende Zahlungen.** Wenn ein Webhook niemals eintrifft, gleicht NexCMP Zahlungen, die länger als 10 Minuten im Status ausstehend verbleiben, eigenständig mit Stripe ab und schließt sie ab. Zahlungen, die älter als 7 Tage sind, werden ignoriert. - **Resellers** können ihr eigenes Stripe-Konto verknüpfen (Webhook `https:///v1/billing/stripe/webhook/r/`); siehe [Resellers](https://nexcmp.com/de/docs/customers/resellers/). ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "Secret Key muss mit sk_live_/sk_test_ beginnen" | Falscher Schlüssel eingefügt | Fügen Sie den Secret Key aus **Developers › API keys** ein. | | "Secret Key stimmt nicht mit dem Live-/Test-Modus überein" | Modus und Schlüssel stimmen nicht überein | Passen Sie **Mode** an das Präfix des Schlüssels an. | | "Publishable Key muss mit pk_ beginnen" | Falscher Schlüssel | Verwenden Sie den veröffentlichbaren Schlüssel. | | Prüfung meldet fehlgeschlagene Verbindung | Falscher Schlüssel, widerrufener Schlüssel oder der Server kann `api.stripe.com` nicht erreichen | Fügen Sie den Schlüssel erneut ein; testen Sie mit `curl -I https://api.stripe.com` vom Server aus. | | Rotes Banner „Missing webhook_secret“ | Das Signierungsgeheimnis ist nicht gespeichert | Klicken Sie auf **Create webhook** oder fügen Sie das `whsec_...`-Geheimnis aus dem Stripe-Dashboard ein und klicken Sie auf **Save**. | | Geld abgebucht, aber das Guthaben hat sich nicht geändert | Webhook nicht zugestellt oder Signaturprüfung fehlgeschlagen | Überprüfen Sie, ob die URL auf `/v1/billing/stripe/webhook` endet, das Geheimnis zum Endpunkt passt und spielen Sie das Ereignis unter **Gateway events** erneut ab. Öffnen Sie in Stripe den Endpunkt und prüfen Sie die Zustellungsversuche (HTTP 400 bedeutet ein falsches Signierungsgeheimnis). | | "Create webhook" schlägt fehl | Die URL ist kein HTTPS oder nicht erreichbar | Verwenden Sie Ihre öffentliche `https://`-Domain. | | Apple-Pay-Status nicht aktiv | Domain nicht validiert | Klicken Sie erneut auf **Register / verify domain**, nachdem die Domain-Zuordnungsdatei mit 200 antwortet. | | Alipay im Prüfdialog nicht verfügbar | Bei Stripe nicht aktiviert | Aktivieren Sie es im Stripe-Dashboard und klicken Sie dann auf **Check**. | | Kunde sieht kein Kartenformular | **Card (Stripe)** ist deaktiviert oder kein geheimer Schlüssel vorhanden | Aktivieren Sie es unter **Fees & limits** und speichern Sie die Schlüssel. | --- # PayPal > **Wo im Admin:** Finance › Payment channels › PayPal (`/payments/paypal`). Der Ein-/Ausschalter und die Gebühren befinden sich unter Finance › Payment channels › Fees & limits (`/payments/fees`). ## Funktion {#what-it-does} Ermöglicht Kunden, ihr USD-Guthaben mit ihrem PayPal-Guthaben, Bankkonto oder ihrer bei PayPal hinterlegten Karte aufzuladen. Kunden können NexCMP auch ihr PayPal-Konto für [automatic top-up](https://nexcmp.com/de/docs/billing/auto-top-up/) merken lassen. Verwenden Sie dies zusammen mit [Stripe](https://nexcmp.com/de/docs/billing/stripe/) für Kunden, die PayPal bevorzugen. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | PayPal-Konto | Ein PayPal-**Business**-Konto, das USD empfangen kann. | | REST-App | Eine REST-App im PayPal Developer Dashboard (**Apps & Credentials**), die eine **Client ID** und ein **Client secret** bereitstellt. Verwenden Sie den Tab **Sandbox** zum Testen und **Live** für die Produktion. | | Netzwerk | HTTPS aus dem Internet erreichbar (PayPal ruft den Webhook auf) und ausgehender Zugriff auf `api-m.paypal.com` (Live) oder `api-m.sandbox.paypal.com` (Sandbox), Port 443. | | Berechtigungen | Die REST-App benötigt die Berechtigungen für Rückerstattungen und Webhooks. Der **Check**-Dialog zeigt an, ob beide Scopes vorhanden sind. | | Abhängigkeiten | Keine. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} 1. Melden Sie sich mit Ihrem Business-Konto bei [developer.paypal.com](https://developer.paypal.com) an und öffnen Sie **Apps & Credentials**. 2. Wählen Sie **Sandbox** (Testen) oder **Live** und klicken Sie dann auf **Create App**. Benennen Sie sie beispielsweise „NexCMP“. 3. Kopieren Sie die **Client ID** und das **Secret** der App. 4. Verwenden Sie zum Testen **Testing Tools › Sandbox Accounts**, um ein *Personal*-Sandbox-Konto (Käufer) zu finden oder zu erstellen. 5. Sie müssen den Webhook nicht selbst erstellen; NexCMP erstellt ihn über die Schaltfläche **Create webhook**. ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **Finance › Payment channels › PayPal** (`/payments/paypal`). 2. Wählen Sie unter **API keys** die Option **Mode**: `live` (Echtgeld, `api-m.paypal.com`) oder `sandbox` (`api-m.sandbox.paypal.com`). 3. Fügen Sie die **Client ID** (mindestens 20 Zeichen) und das **Client secret** ein. 4. Klicken Sie auf **Check**. Dadurch werden die eingegebenen Anmeldedaten getestet (ein Speichern ist nicht erforderlich), und die Verbindung, die App-ID, der Modus, das Vorhandensein der Scopes für Rückerstattungen und Webhooks sowie die Gültigkeitsdauer des Tokens werden ausgegeben. 5. Klicken Sie auf **Save**. 6. Vergewissern Sie sich in der Karte **Webhook**, dass die URL `https:///v1/billing/paypal/webhook` lautet (sie muss `https` sein), klicken Sie dann auf **Create webhook** und bestätigen Sie den Vorgang. NexCMP fordert PayPal auf, den Webhook mit 11 Ereignissen zu erstellen oder zu aktualisieren, und speichert die zurückgegebene **Webhook ID**. Die Schaltfläche verwendet die **gespeicherten** Schlüssel — speichern Sie diese zuerst, wenn Sie sie gerade bearbeitet haben. 7. Klicken Sie erneut auf **Check**: In der Zeile **Webhook** sollte „exists, 11 events“ stehen. 8. Öffnen Sie **Fees & limits**, schalten Sie **PayPal** ein, setzen Sie **PayPal fee %** (Standard 4.4) und **PayPal fixed fee (cents)** (Standard 30) auf Ihren Tarif und klicken Sie auf **Save channels & fees**. ![PayPal-Seite mit Sandbox-Modus und eingegebenen Zugangsdaten als Beispiel](https://nexcmp.com/de/docs/images/billing/paypal-01-keys.webp) ### Webhook-Ereignisse {#webhook-events} NexCMP registriert diese 11 Ereignisse: `CHECKOUT.ORDER.APPROVED`, `PAYMENT.CAPTURE.COMPLETED`, `PAYMENT.CAPTURE.PENDING`, `PAYMENT.CAPTURE.DECLINED`, `PAYMENT.CAPTURE.REFUNDED`, `PAYMENT.CAPTURE.REVERSED`, `CUSTOMER.DISPUTE.CREATED`, `CUSTOMER.DISPUTE.UPDATED`, `CUSTOMER.DISPUTE.RESOLVED`, `RISK.DISPUTE.CREATED`, `CHECKOUT.PAYMENT-APPROVAL.REVERSED`. Jeder Webhook wird durch Aufruf der Signaturverifizierungs-API von PayPal überprüft, einmalig gespeichert und idempotent verarbeitet. NexCMP vertraut niemals dem Betrag im Webhook-Body: Bevor eine Erfassung gutgeschrieben wird, ruft das System die Erfassung direkt von PayPal ab. ## Verifizierung {#verify} 1. Belassen Sie **Mode** auf `sandbox`. Öffnen Sie im Portal **Billing › Deposit**, wählen Sie **PayPal**, klicken Sie auf **Continue on PayPal** (oder auf die PayPal-Schaltfläche) und melden Sie sich mit dem Sandbox-Käuferkonto an. 2. Genehmigen Sie die Zahlung. Sie kehren zum Portal zurück, das Guthaben erhöht sich und die Zahlung erscheint unter **Finance › Billing › Top-ups** als *Completed*. 3. Öffnen Sie **Payment channels › Gateway events › PayPal & USDT**: Das Ereignis `PAYMENT.CAPTURE.COMPLETED` wird aufgelistet. 4. Wenn alles funktioniert, schalten Sie **Mode** auf `live` um, geben Sie die Live-Zugangsdaten ein, klicken Sie auf **Save** und anschließend erneut auf **Create webhook** (Sandbox- und Live-Webhooks sind getrennt). ## Limits & Hinweise {#limits-notes} - **Wie eine Zahlung abgeschlossen wird.** Die Bestellung wird in USD erstellt; nachdem der Kunde sie genehmigt hat, erfasst der **Server** den Betrag (idempotente Anforderungs-ID) und schreibt ihn dem Guthaben genau einmal gut. Der Webhook und ein alle 10 Minuten ausgeführtes Abgleichungsjob dienen als Sicherheitsnetz, falls der Kunde den Browser schließt. - **Ausstehende und abgebrochene Bestellungen.** Eine Bestellung kann 12 Stunden lang offen bleiben. Ein Kunde kann maximal 5 ausstehende Bestellungen haben (der Server antwortet mit `too_many_pending`, HTTP 429). Eine Bestellung, die nach 24 Stunden noch nicht erfasst wurde, wird als fehlgeschlagen markiert. - **Kein Webhook konfiguriert.** Das Panel antwortet auf jeden PayPal-Webhook mit HTTP 503, bis eine Webhook ID gespeichert ist. Über das Portal und den 10-Minuten-Abgleich getätigte Erfassungen schreiben dem Guthaben zwar etwas gut, aber alles, was PayPal per Webhook meldet (Streitfälle, Rückbuchungen, verspätete Erfassungen), wird nicht angewendet — klicken Sie auf **Create webhook**. - **Gespeichertes PayPal-Konto.** Wenn sich der Kunde dafür entscheidet, PayPal zu speichern (oder die erste Einzahlung tätigt, wodurch die [automatische Aufladung](https://nexcmp.com/de/docs/billing/auto-top-up/) aktiviert wird), speichert PayPal das Zahlungstoken in seinem Vault. NexCMP speichert lediglich eine Kennung und die PayPal-E-Mail-Adresse. Siehe [Saved payment methods](https://nexcmp.com/de/docs/billing/saved-payment-methods/). - **Rückerstattungen und Streitfälle** werden wie bei Stripe gehandhabt: Rückerstattungsanträge werden unter **Finance › Payouts › Card refunds** genehmigt; ein Streitfall sperrt das Konto des Kunden und stoppt dessen Prepaid-Dienste, bis Sie den Fall klären. - **Gebühren.** Die Gebühr von PayPal wird nicht ausgelesen; der von Ihnen konfigurierte Prozentsatz und die Fixgebühr bestimmen, was der Kunde sieht und was gutgeschrieben wird. Der tatsächliche Tarif hängt von Ihrem Land ab (das Formular gibt als Hinweis 4.4 % für Vietnam und 3.49 % für die USA an). ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "Client ID zu kurz" | Es wurden weniger als 20 Zeichen eingefügt | Kopieren Sie die vollständige Client ID. | | "Webhook URL muss https sein" | URL mit `http://` eingegeben | Verwenden Sie Ihre öffentliche `https://`-Domain. | | Prüfung meldet einen Verbindungsfehler | Falscher Modus (Live-Schlüssel in Sandbox oder umgekehrt), falsches Secret, kein ausgehender Zugriff | Passen Sie **Mode** an den Schlüsseltyp an; testen Sie `curl -I https://api-m.paypal.com` vom Server aus. | | Bereich Refund / Webhooks zeigt "no" | Der REST-App fehlen die Funktionen | Aktivieren Sie die Funktionen für die App im PayPal Developer Dashboard. | | Banner "PayPal-Schlüssel gesetzt, KEIN Webhook" | Webhook-ID fehlt | Klicken Sie auf **Create webhook**. | | "Webhook not found" bei der Prüfung | Der Webhook wurde bei PayPal gelöscht oder gehört zu einer anderen App | Klicken Sie erneut auf **Create webhook**. | | Dem Kunden wird mitgeteilt, dass PayPal die Zahlung abgelehnt hat | PayPal hat diese Zahlungsquelle abgelehnt | Bitten Sie den Kunden, eine andere Zahlungsquelle zu wählen. | | Kunde sieht "Too many pending requests" | 5 offene Bestellungen | Warten Sie, bis sie ablaufen, oder schließen Sie sie ab. | | PayPal-Schaltfläche fehlt | PayPal unter **Fees & limits** deaktiviert oder nicht konfiguriert | Aktivieren Sie es und speichern Sie die Zugangsdaten. | --- # USDT (Binance) {#usdt-binance} > **Wo im Admin:** Finance › Payment channels › USDT (`/payments/usdt`). Schalter und Gebühr: Finance › Payment channels › Fees & limits (`/payments/fees`). Nicht zugeordnete Einzahlungen: Finance › Payment channels › Gateway events › PayPal & USDT (`/payments/events?tab=gateways`). ## Funktion {#what-it-does} Kunden senden USDT an **Ihre Binance-Einzahlungsadresse**; NexCMP liest den Einzahlungsverlauf über einen **Nur-Lese**-Binance-API-Schlüssel aus und schreibt das Guthaben gut, wenn eine Einzahlung mit einer offenen Anfrage übereinstimmt. Auf Ihrer Seite fallen keine Zahlungsdienstleistergebühren an, außer den von Binance berechneten, und es werden niemals private Schlüssel von NexCMP gespeichert. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Binance-Konto | Ein verifiziertes Binance-Konto mit aktivierten USDT-Einzahlungen im von Ihnen gewählten Netzwerk. | | API-Schlüssel | Ein Binance-API-Schlüssel mit ausschließlicher **Enable Reading**-Berechtigung. Enable Withdrawals, Internal Transfer und Spot/Margin Trading müssen auf **off** stehen. | | IP-Beschränkung | Dringend empfohlen: Beschränken Sie den Schlüssel auf die ausgehende IP des Servers (der Dialog **Test & verify address** zeigt sie an). | | Netzwerk | Ausgehendes HTTPS zu `api.binance.com`. Es ist kein eingehender Port erforderlich. | | Unterstützte Netzwerke | `TRX` (Tron, TRC20), `BSC` (BNB Smart Chain, BEP20), `SOL` (Solana), `ETH` (Ethereum, ERC20). Die Coin ist fest auf USDT eingestellt. | | Abhängigkeiten | Keine. | ::: warning Netzwerk einmalig wählen Kunden, die über das falsche Netzwerk senden, verlieren die Mittel. Wählen Sie das Netzwerk mit niedrigen Gebühren, das die Börsen Ihrer Kunden unterstützen (TRX und BSC sind die übliche Wahl), und ändern Sie es nicht häufig. ::: ## Infrastruktur vorbereiten {#prepare-the-infrastructure} 1. Öffnen Sie in Binance **Account › API Management** und erstellen Sie einen neuen API-Schlüssel (systemgeneriert). Vergeben Sie ein Label wie "NexCMP". 2. Bearbeiten Sie die Berechtigungen: Lassen Sie nur **Enable Reading** aktiviert. Aktivieren Sie keine Auszahlungen, Überweisungen oder den Handel. 3. Fügen Sie unter **Restrict access to trusted IPs only** die öffentliche IP-Adresse Ihres NexCMP-Servers hinzu. Wenn Sie diese noch nicht kennen, erstellen Sie den Schlüssel ohne Einschränkung, führen Sie den ersten Test in NexCMP aus (dieser gibt die ausgehende IP aus) und fügen Sie die IP anschließend hinzu. 4. Kopieren Sie den **API key** und den **Secret key** (das Secret wird nur einmal angezeigt). 5. Öffnen Sie **Wallet › Deposit › Crypto**, wählen Sie **USDT** und das zu verwendende **Netzwerk** aus und kopieren Sie die **Einzahlungsadresse** (zum Beispiel eine `T...`-Adresse auf TRX oder `0x...` auf BSC/ETH). ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **Finance › Payment channels › USDT** (`/payments/usdt`). 2. Fügen Sie in **API key (Binance › API Management)** den **API key** und das **API secret** ein. Beide müssen zusammen eingegeben werden. 3. Wählen Sie unter **Deposit address** das **Network** aus und fügen Sie die **USDT-Einzahlungsadresse im ausgewählten Netzwerk** ein. Das Format wird gegen das Netzwerk geprüft (`T` + 33 Zeichen für TRX, `0x` + 40 Hex-Zeichen für BSC und ETH, base58 für SOL). 4. Klicken Sie auf **Save**. Das Ändern der Adresse oder des Netzwerks setzt die Verifizierung zurück und pausiert den Kanal, bis Sie ihn erneut verifizieren; die Seite fordert Sie zur Bestätigung auf. 5. Klicken Sie auf **Test & verify address**. (Nicht gespeicherte Änderungen werden abgelehnt – die Prüfung erfolgt anhand der gespeicherten Konfiguration.) Der Dialog zeigt: - Schlüsselberechtigungen (Lesen, Auszahlungen, interne Überweisung, Handel, IP-Einschränkung) – rote Warnungen für gefährliche Berechtigungen; - die ausgehende IP des Servers (zur Eingabe bei Binance); - das Netzwerk (Einzahlungen offen oder geschlossen, erforderliche Bestätigungen, Dust); - die von Binance für dieses Netzwerk ausgegebene Adresse und ob sie mit Ihrer **übereinstimmt**. 6. Wenn die Adresse übereinstimmt, protokolliert NexCMP die Verifizierungszeit. Erst danach können Sie **Fees & limits** öffnen, **USDT (Binance)** aktivieren, **USDT fee %** (Standard 1) sowie **USDT request expires after (mins)** (5–180, Standard 30) überprüfen und auf **Save channels & fees** klicken. ## Wie eine Zahlung zugeordnet wird {#how-a-payment-is-matched} 1. Der Kunde gibt in **Billing › Deposit › USDT** einen Betrag ein und klickt auf **Get deposit address**. 2. NexCMP erstellt eine Anfrage und zeigt die Adresse, das Netzwerk und einen **genauen Betrag** mit sechs Dezimalstellen an – zum Beispiel `19.173742`. Die letzten vier Dezimalstellen sind eine zufällige Nonce, die den Betrag für diese Anfrage eindeutig macht. 3. Der Kunde muss **genau** diesen Betrag in diesem Netzwerk senden. Eine Zahlung, die nicht übereinstimmt (gerundeter Betrag, falsches Netzwerk), kann nicht automatisch zugeordnet werden. 4. Alle 60 Sekunden liest NexCMP die Binance-Einzahlungen der letzten 24 Stunden ein. Eine übereinstimmende Zahlung verschiebt die Anfrage in den Status *confirming* und schreibt das Guthaben gut, sobald Binance die erforderlichen Bestätigungen vorliegen hat. Eine Anfrage, für die bereits Gelder eingegangen sind, läuft während ausstehender Bestätigungen niemals ab. 5. Eine Anfrage, die nicht innerhalb der Ablaufzeit (Standard 30 Minuten) bezahlt wird, wird als abgelaufen markiert. ## Verifizierung {#verify} 1. Melden Sie sich nach der Verifizierung der Adresse und der Aktivierung von USDT als Testkunde an und fordern Sie eine kleine Einzahlung an (die Mindesteinzahlung). 2. Senden Sie den genauen Betrag von einer anderen Wallet oder Börse. Warten Sie einige Minuten. 3. Das Portal zeigt *Transfer seen — confirming*, gefolgt von *USDT received — balance updated* an. 4. Die USDT-Seite zeigt eine aktuelle **Last poll**-Zeit und **Unmatched** bei 0 an. ## Limits & Hinweise {#limits-notes} - **Wechselkurs.** 1 USDT = 1.00 USD. Die Gebühr in **USDT fee %** wird dem Kunden angezeigt und je nach **Customer pays top-up fee** entweder abgezogen oder dem Betrag hinzugefügt. - **Keine Rückerstattungen.** USDT-Zahlungen werden von NexCMP niemals an die Quelle zurückerstattet (HTTP 409 `usdt_no_refund`). Erstatten Sie den Betrag bei Bedarf manuell außerhalb des Systems. - **Ausstehende Anfragen (Limit).** Ein Kunde hat eine begrenzte Anzahl offener Anfragen; darüber hinaus antwortet der Server mit `too_many_pending` (HTTP 429). - **Resellers** können ihr eigenes Binance-Konto verwenden; siehe [Resellers](https://nexcmp.com/de/docs/customers/resellers/). - **Wenn Sie das Binance-Konto** mit einem anderen System teilen, weisen Sie jedem System ein eigenes Netzwerk zu, damit niemals zwei Poller dieselbe Einzahlung sehen. ### Nicht zugeordnete Einzahlungen {#unmatched-deposits} Eine Einzahlung, die zu keiner Anfrage passt (falscher Betrag, falsches Netzwerk, abgelaufene Anfrage), erzeugt ein `deposit.unmatched`-Ereignis und eine Administratorwarnung. Öffnen Sie **Payment channels › Gateway events › PayPal & USDT**, suchen Sie das Ereignis, prüfen Sie die Transaktion auf Binance und klicken Sie auf die Aktion zum Zuordnen, um sie dem richtigen Kunden gutzuschreiben. Der Zähler **Unmatched** auf der USDT-Seite und in der Kanalübersicht sinkt danach auf 0. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "API-Key und Secret müssen zusammen eingegeben werden" | Nur ein Feld ausgefüllt | Beide ausfüllen. | | "Adresse entspricht nicht dem Netzwerkformat ..." | Adresse passt nicht zum ausgewählten Netzwerk | Kopieren Sie sie von Binance für dasselbe Netzwerk erneut. | | "Ungespeicherte Änderungen — Zuerst Save, dann Test" | Test läuft mit gespeicherten Einstellungen | Klicken Sie auf **Save** und testen Sie dann. | | Warnung "key has Enable Withdrawals" | Zu weitreichende Berechtigung | Entfernen Sie diese in der Binance-API-Verwaltung. | | Warnung "key not restricted to IP" | `ipRestrict` ist deaktiviert | Fügen Sie die im Dialog angezeigte ausgehende IP-Adresse des Servers hinzu. | | Warnung "key lacks Enable Reading" | Berechtigung fehlt | Aktivieren Sie das Lesen. | | Warnung "Binance has deposits disabled for USDT on the network" | Netzwerk ausgesetzt | Wählen Sie ein anderes Netzwerk oder warten Sie. | | "GEFAHR: Konfigurierte Adresse weicht von der von Binance ausgegebenen Adresse ab" | Falsche Adresse oder falsches Netzwerk | Kopieren Sie die Adresse von Binance für dieses Netzwerk erneut. | | USDT-Schalter in Fees & limits ausgegraut | Adresse nicht verifiziert | Führen Sie **Test & verify address** aus, bis sie übereinstimmt. | | Kunde hat bezahlt, nichts gutgeschrieben | Gerundeter Betrag oder falsches Netzwerk | Finden Sie das Ereignis in Gateway events und ordnen Sie es manuell zu. | | Einzahlung erkannt, wartet aber lange | Noch nicht genügend Bestätigungen | Warten Sie; die Anfrage läuft während der Bestätigung nicht ab. | --- # Banküberweisung (Vietnam) {#bank-transfer-vietnam} > **Wo im Admin:** Finance › Payment channels › VN bank transfer (`/payments/bank`). Wechselkurs: Finance › Payment channels › Exchange rates (`/payments/fx`). ## Funktion {#what-it-does} Ermöglicht Kunden das Aufladen des USD-Guthabens durch eine normale Banküberweisung in vietnamesischen Dong. NexCMP zeigt einen VietQR-Code, die Kontodaten und einen eindeutigen **Überweisungsverwendungszweck** an; [Sepay](https://sepay.vn) überwacht Ihr Bankkonto und ruft einen Webhook auf, wenn das Geld eintrifft, woraufhin NexCMP das Guthaben gutschreibt. Verwenden Sie dies, wenn Sie an Kunden in Vietnam verkaufen. ::: info Wird nur in der vietnamesischen Oberfläche angezeigt Die vietnamesische Bankoption wird einem Kunden nur angeboten, wenn das Portal auf **Vietnamese** angezeigt wird. Kunden in jeder anderen Sprache sehen sie niemals. ::: ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Bankkonto | Ein vietnamesisches Bankkonto (oder ein virtuelles Sepay-Konto, **VA**), das mit einem Sepay-Konto unter [my.sepay.vn](https://my.sepay.vn) verbunden ist. | | Sepay | Ein Sepay-Konto mit aktivierter Webhook-Integration. | | Wechselkurs | Es muss ein USD-zu-VND-Kurs existieren: Aktualisieren Sie diesen zuerst unter **Exchange rates**. Ohne einen Kurs antwortet der Kanal mit `fx_unavailable` und Kunden können keine Überweisung starten. | | Netzwerk | Ihr Panel muss über HTTPS erreichbar sein, damit Sepay `https:///v1/billing/sepay/webhook` aufrufen kann. | | Abhängigkeiten | [Währung und Wechselkurse](https://nexcmp.com/de/docs/catalog/currency-and-exchange-rates/). | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Auf Sepay-Seite: 1. Verbinden Sie in [my.sepay.vn](https://my.sepay.vn) Ihr Bankkonto (oder erstellen Sie eine VA) und stellen Sie sicher, dass Transaktionen angezeigt werden. 2. Llegen Sie das **Memo-Präfix** fest — 2 bis 5 Großbuchstaben, zum Beispiel `PAY`. NexCMP generiert den Verwendungszweck als Präfix gefolgt von 8 zufälligen Ziffern (zum Beispiel `PAY48210937`). Das Präfix darf kein `ORD` enthalten und sollte von keinem anderen System verwendet werden, das Geld auf dasselbe Konto empfängt. 3. Wenn Ihr Sepay-Konto eine *Zahlungscodestruktur* verwendet, registrieren Sie dort dasselbe Präfix, damit Sepay den Verwendungszweck erkennt. 4. Erstellen Sie den Webhook später, nachdem Ihnen die NexCMP-Seite die URL und den Schlüssel (Schritt 7 unten) bereitgestellt hat. ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **Finance › Payment channels › Exchange rates** und klicken Sie auf **Update exchange rates**, falls noch kein Kurs gespeichert wurde. 2. Öffnen Sie **Finance › Payment channels › VN bank transfer** (`/payments/bank`). 3. Füllen Sie unter **Receiving account** Folgendes aus: | Feld | Beispiel | Regel | |---|---|---| | Bank | `VCB` Vietcombank | Wählen Sie aus der Liste; die BIN wird automatisch ausgefüllt. | | Kontonummer | `0123456789` | 4–24 Ziffern oder Großbuchstaben. | | Virtuelles Konto (VA — optional) | | Falls festgelegt, überweisen Kunden auf das VA und der QR-Code zeigt es an. | | Kontoinhaber | `NGUYEN VAN A` | Keine Umlaute/Akzente, GROSSBUCHSTABEN, 2–60 Zeichen. | | Überweisungs-Memo-Präfix | `PAY` | 2–5 Großbuchstaben, kein `ORD`. | 4. Wählen Sie unter **Webhook authentication** die **Auth method**: **HMAC-SHA256** (empfohlen) oder **API key**, und geben Sie den **Webhook key / HMAC secret** (8–200 Zeichen) ein. Optional können Sie das **userapi token** von Sepay eingeben; es wird nur verwendet, um Überweisungen abzugleichen, deren Webhook verloren ging. 5. Legen Sie unter **Channel & limits** die Limits fest (Standardwerte in Klammern): **Min / order** (10,000 VND), **Max / order** (200,000,000 VND), **Order expiry** (120 Minuten, 15–1440), **Max pending orders / account** (3, 1–10), **Reconcile every** (10 Minuten) sowie optional **Allowed webhook IPs** (kommagetrennt; leer bedeutet, dass die IP nur protokolliert wird). 6. Klicken Sie auf **Save**. Das rote Banner „Sepay not configured“ verschwindet, sobald Konto, Name, Präfix und Schlüssel gültig sind. 7. Kopieren Sie **Webhook URL to paste into my.sepay.vn** (beginnt mit `https:///v1/billing/sepay/webhook`) über **Copy**. Öffnen Sie in SePay die Webhook-Integration, fügen Sie die URL ein, wählen Sie denselben Authentifizierungstyp sowie Schlüssel und aktivieren Sie das Ereignis „money in“. 8. Klicken Sie auf **Test connection**. Schalten Sie dann **Enable Sepay for clients (main site)** ein und klicken Sie auf **Save**. ![VN-Banküberweisungsseite mit Empfängerkonto, Memo-Präfix und Webhook-Authentifizierung, ausgefüllt mit Beispielwerten](https://nexcmp.com/de/docs/images/billing/bank-transfer-vn-01-config.webp) ![Kanal- und Limitkarte mit aktiviertem Sepay-Schalter und den Standardlimits](https://nexcmp.com/de/docs/images/billing/bank-transfer-vn-02-limits.webp) ### Webhook-Sicherheit {#webhook-security} | Methode | Was Sepay senden muss | |---|---| | HMAC-SHA256 | Header `X-SePay-Signature: sha256=`, berechnet über `"."`; der Zeitstempel kann um maximal 300 Sekunden abweichen. | | API-Schlüssel | Header `Authorization: Apikey `. | Es werden nur die Header überprüft (niemals der Body oder Query-String) und der Vergleich erfolgt in konstanter Zeit. Es werden ausschließlich eingehende Überweisungen (`transferType = in`) auf Ihr konfiguriertes Konto oder VA verwendet. Jede Sepay-Transaktion wird einmal gespeichert, sodass ein wiederholter Webhook niemals doppelt gutgeschrieben wird. NexCMP antwortet mit `200 {"success":true}`, selbst wenn eine Transaktion bewusst ignoriert wird, und mit HTTP 5xx nur bei vorübergehenden Fehlern, damit Sepay es erneut versucht. ## Wie der Kunde bezahlt {#how-the-customer-pays} 1. Unter **Billing › Deposit** (vietnamesische Benutzeroberfläche) wählt der Kunde die Option für vietnamesische Banküberweisungen sowie einen Betrag aus und klickt dann auf die Schaltfläche zum Erstellen der Überweisung. 2. NexCMP rechnet den USD-Betrag zum gespeicherten Kurs um (einschließlich der Marge und des Rundungsschritts, die Sie unter **Exchange rates** festgelegt haben) und **rundet den VND-Betrag auf** den Rundungsschritt auf. 3. Der Kunde sieht einen QR-Code (VietQR, lokal generiert) mit Kontonummer, Bank, Betrag und Verwendungszweck. 4. Nach der Überweisung ruft Sepay den Webhook auf, NexCMP schreibt `floor(VND received × 100 / rate)` Cent gut. Der Kurs wird beim Erstellen der Bestellung fixiert; geht das Geld nach Ablauf der Bestellung ein, wird der höhere Wert aus fixiertem und aktuellem Kurs verwendet. 5. Bestellungen laufen nach **Order expiry** ab; der Abgleich läuft alle **Reconcile every** Minuten als Sicherheitsnetz (erfordert das userapi-Token). ## Verifizierung {#verify} 1. Erstellen Sie als Kunde auf der vietnamesischen Benutzeroberfläche eine Testbestellung. Überprüfen Sie, ob Betrag, Konto und Verwendungszweck korrekt sind. 2. Überweisen Sie den kleinsten zulässigen Betrag mit dem exakten Verwendungszweck. 3. Innerhalb einer Minute zeigt das Portal die Einzahlung als abgeschlossen an und das Guthaben steigt; die **State**-Karte auf der Bankseite zeigt die Zeit des letzten Webhooks an. 4. Öffnen Sie **Finance › Billing › Top-ups** und überprüfen Sie, ob die Zahlung mit dem eingegangenen VND-Betrag aufgeführt ist. ## Limits & Hinweise {#limits-notes} - **Minimum.** Das VND-Minimum, das ein Kunde sieht, ist der größere Wert aus **Min / order** und dem VND-Wert der [minimum top-up](https://nexcmp.com/de/docs/billing/minimum-top-up/). - **Ausstehende Bestellungen.** Ein Kunde kann nur **Max pending orders / account** offene Bestellungen haben (Standard: 3). - **Gleicher Verwendungszweck doppelt.** Eine zweimalige Überweisung mit demselben Verwendungszweck erstellt eine zweite abgeschlossene Zahlung zum aktuellen Kurs. - **Keine automatische Rückerstattung** auf ein Bankkonto. - **Gebühr.** Der Kanal hat keine feste Gebührenzeile in **Fees & limits**; die Kursmarge ist die einzige Anpassung. - **Resellers** können ihr eigenes Konto konfigurieren; ihre Webhook-URL endet mit `/v1/billing/sepay/webhook/r/`. ### Nicht zugeordnete Überweisungen {#unmatched-transfers} Geld, das auf dem Konto eingegangen ist, aber keinen gültigen Verwendungszweck trägt, erscheint unter **Unmatched transactions** unten auf der Seite (Filter *All channel owners* oder *Master*). Überprüfen Sie die Bankreferenz mit dem Kunden, klicken Sie dann auf **Assign** und wählen Sie das Konto aus. Das Guthaben wird zum aktuellen Kurs gutgeschrieben. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Banner "SePay nicht konfiguriert" | Bank, Konto, Inhabername, Präfix oder Schlüssel fehlt oder ist ungültig | Füllen Sie die Karten **Receiving account** und **Webhook authentication** aus. | | Banner "USD/VND-Kurs blockiert" (`fx_unavailable`) | Kein Wechselkurs gespeichert | **Exchange rates › Update exchange rates** ausführen. | | `prefix: 2–5 capital letters, no ORD` | Präfix ungültig | Verwenden Sie 2–5 Großbuchstaben ohne `ORD`. | | `account_name`-Fehler | Akzente oder Kleinbuchstaben | Verwenden Sie unakzentuierte GROSSBUCHSTABEN, Ziffern, Leerzeichen, Punkte oder Bindestriche. | | `webhook_secret: 8–200 characters` | Schlüssel zu kurz | Verwenden Sie mindestens 8 druckbare Zeichen. | | Kunde kann die Option nicht sehen | Nicht auf der vietnamesischen Oberfläche, ausgeschaltet oder kein Tarif | Überprüfen Sie die Sprache, den Schalter und den Tarif. | | Kunde hat bezahlt, aber es wurde nichts gutgeschrieben | Webhook kam nicht an, Verwendungszweck geändert, falscher Betrag | Überprüfen Sie Sepays Webhook-Protokoll; der Transfer wird unter **Unmatched transactions** aufgeführt, wenn der Verwendungszweck falsch war. | | Webhook gibt 401 oder 403 zurück | Authentifizierungsmethode oder Schlüssel stimmt nicht überein | Verwenden Sie dieselbe Methode und denselben Schlüssel in Sepay und NexCMP. | | Kunde sieht "Too many pending requests" | Limit für ausstehende Bestellungen erreicht | Warten Sie, bis sie abgeschlossen sind oder ablaufen. | --- # Mindestaufladung {#minimum-top-up} > **Wo im Admin:** Finance › Payment channels › Fees & limits (`/payments/fees`), Karte **Wallet & top-up (Billing › Policy)**. ## Funktion {#what-it-does} Jeder Zahlungskanal lehnt Beträge unter der **Mindestaufladung** oder über der **maximalen Aufladung pro Transaktion** ab. Die Standardwerte betragen **$10.00** und **$5,000.00**. Nutzen Sie den Mindestbetrag, um winzige Zahlungen zu vermeiden, deren Gateway-Gebühren höher sind als ihr Wert. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Rolle | Ein Administrator. | | Abhängigkeiten | Keine. | ## Limits festlegen {#set-the-limits} 1. Öffnen Sie **Finance › Payment channels › Fees & limits** (`/payments/fees`). 2. Bearbeiten Sie in der Karte **Wallet & top-up (Billing › Policy)** die Felder **Min top-up (USD)** und **Max top-up per transaction (USD)**. 3. Klicken Sie auf **Save Wallet & top-up**. ![Wallet- und Aufladekarte mit der Mindestaufladung 10.00 und dem Maximum 5000.00](https://nexcmp.com/de/docs/images/billing/minimum-top-up-01-limits.webp) | Einstellung | Standard | Zulässiger Bereich | Regel | |---|---|---|---| | Min top-up (USD) | $10.00 | $0 bis $10,000 | Muss kleiner oder gleich dem Maximum sein. | | Max. Aufladung pro Transaktion (USD) | $5,000.00 | $1 bis $1,000,000 | Muss mindestens dem Minimum entsprechen. | Die Werte werden in Cent gespeichert (`min_topup_cents`, `max_topup_cents`). ## Wo die Limits gelten {#where-the-limits-apply} | Ort | Verhalten | |---|---| | Karte, Apple/Google Pay, Link, Alipay, PayPal, USDT | Beträge außerhalb des Bereichs werden vom Server abgelehnt. Das Portal zeigt „Enter an amount between {min} and {max}“ an. | | VN-Banküberweisung | Der VND-Betrag muss innerhalb der Sepay-Limits **und** sein USD-Wert (was das Wallet erhält) innerhalb von Minimum und Maximum liegen. Das Portal zeigt den größeren der beiden VND-Mindestwerte an. Siehe [Bank transfer (Vietnam)](https://nexcmp.com/de/docs/billing/bank-transfer-vn/). | | [Automatische Aufladung](https://nexcmp.com/de/docs/billing/auto-top-up/) | Jede automatische Belastung beträgt mindestens das Minimum und höchstens das Maximum. Im Modus mit festem Betrag muss der Betrag des Kunden zwischen dem Minimum und $1,000 liegen. | | Aufladecodes ([Vouchers](https://nexcmp.com/de/docs/billing/promotions/)) | Nicht betroffen. | | Admin-Gutschrift / -Belastung | Nicht betroffen. | | Reseller-Wallet-Aufladung | Ein separates Minimum (`rs_topup_min_cents`, Standard $20) unter Resellers › Defaults. | ## Zugehörige Grenzen {#related-floors} Die Mindestaufladung ist nicht die einzige Guthabenregel. Diese befinden sich unter **Services › Virtual Machines › Policy** (`/vm/policy`): | Regel | Standard | Bedeutung | |---|---|---| | Mindestguthaben (`min_balance_cents`) | $5.00 | Das geringste Wallet-Guthaben, das ein Kunde benötigt, um eine VM zu erstellen. | | Quotas | Aus | Wenn **Quotas** aktiv sind, wird beim Erstellen einer VM zudem ein Guthaben benötigt, das eine Anzahl von Stunden dieser VM abdeckt. Siehe [Quotas](https://nexcmp.com/de/docs/billing/quotas/). | ## Verifizierung {#verify} 1. Öffnen Sie im Portal **Billing › Deposit** und geben Sie einen Betrag ein, der knapp unter Ihrem Minimum liegt. Die Zahlungsschaltfläche wird deaktiviert und die Bereichsmeldung erscheint. 2. Geben Sie das Minimum ein und bestätigen Sie, dass die Zahlung gestartet wird. ## Limits & Hinweise {#limits-notes} - Eine Änderung gilt für neue Zahlungen. Bereits erstellte Aufträge behalten die Beträge, mit denen sie erstellt wurden. - Der kundenfokussierte Hinweis („Mindestens $10.00, höchstens $5,000.00“) und die Schnellwahl-Schaltflächen übernehmen die neuen Limits automatisch. - Wenn Sie VND anzeigen (auf der Seite **Exchange rates**), wird das Minimum zum gespeicherten Kurs nur zu Anzeigezwecken umgerechnet; das Guthaben und die Limits bleiben in USD. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "Mindestaufladung muss kleiner oder gleich dem Maximalbetrag sein" | Werte vertauscht | Verringern Sie das Minimum oder erhöhen Sie das Maximum. | | Kunde kann keinen kleinen Betrag per vietnamesischer Banküberweisung bezahlen | Sepay-VND-Minimum oder das USD-Minimum ist höher | Verringern Sie **Min / order** auf der Bankseite oder das USD-Minimum. | | Serverfehler `invalid_argument` bei einer Aufladung | Betrag außerhalb des Bereichs | Fordern Sie einen Betrag innerhalb des angezeigten Bereichs an. | --- # Gespeicherte Zahlungsmethoden {#saved-payment-methods} > **Im Portal:** Billing › Settings (`/billing?settings=1`). **Im Adminbereich:** Customers › List › a customer › Overview (`/customers/`), Karte **Payment**, zeigt die gespeicherte Methode und den Verlauf automatischer Aufladungen. ## Funktion {#what-it-does} Eine gespeicherte Zahlungsmethode ermöglicht es NexCMP, einen Kunden **ohne dessen Anwesenheit** zu belasten, sodass dessen Dienste nie wegen eines leeren Guthabens angehalten werden. Sie wird ausschließlich für die [automatische Aufladung](https://nexcmp.com/de/docs/billing/auto-top-up/) verwendet. Es gibt zwei Arten: eine bei Stripe gespeicherte **Karte** (einschließlich Karten, die über Apple Pay, Google Pay oder Link genutzt werden, sofern Stripe eine wiederverwendbare Karte zurückgibt) und ein im PayPal-Vault gespeichertes **PayPal-Konto**. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Kanäle | [Stripe](https://nexcmp.com/de/docs/billing/stripe/) und/oder [PayPal](https://nexcmp.com/de/docs/billing/paypal/) konfiguriert und aktiviert. | | Site | Die Hauptsite oder eine Reseller-Site, deren Zahlungskanal von der Plattform abgerechnet wird. Eine Reseller-Site, die ihr eigenes Stripe-Konto verwendet, kann keine Karten speichern. | | Kunde | Ein Kundenkonto, das eine Aufladung mit der Karte oder PayPal durchgeführt hat. | ## Wie eine Methode gespeichert wird {#how-a-method-gets-saved} 1. Der Kunde öffnet **Billing**, klickt auf **Deposit** und bezahlt mit **Card** oder **PayPal**. 2. Die Zahlung wird so erstellt, dass die Methode später wiederverwendet werden kann: Stripe speichert die Karte beim Kunden in Stripe (Nutzung off-session), PayPal speichert ein Vault-Token. NexCMP speichert nur Referenzen (eine Stripe-Zahlungsmethoden-ID und Kunden-ID oder die PayPal-Vault-ID) sowie ein Anzeigelabel wie `visa •••• 4242` oder die PayPal-E-Mail-Adresse. **Kartennummern berühren niemals Ihren Server.** 3. Wenn die Zahlung abgeschlossen ist, wird die [automatische Aufladung](https://nexcmp.com/de/docs/billing/auto-top-up/) einmalig eingeschaltet, falls der Kunde zuvor keine Einstellungen ausgewählt hat. Es gibt kein zusätzliches Kontrollkästchen oder eine Meldung auf dem Bildschirm. Der Server protokolliert die Uhrzeit, die IP-Adresse des Kunden und die Methode als Nachweis. 4. Beim nächsten Mal bietet der Einzahlungsbildschirm **Saved card ...** im Karten-Dropdown und **Saved PayPal ...** für PayPal an. ## Verwalten und Entfernen {#manage-and-remove} 1. Gehen Sie im Portal auf **Billing** und klicken Sie auf **Settings**. Das Panel zeigt die gespeicherten Methoden (Stripe-Karte und/oder PayPal) sowie die Optionen für automatische Aufladungen. 2. Um eine Karte zu entfernen, klicken Sie auf **Remove card** und bestätigen Sie dies. Stripe trennt die Karte und **Auto top-up is turned off**. 3. Um PayPal zu entfernen, klicken Sie auf **Remove saved PayPal** und bestätigen Sie dies. ### Admin-Ansicht {#admin-view} Öffnen Sie den Kunden in **Customers › List**. Die Karte **Payment** auf dem Tab **Overview** zeigt die Labels der gespeicherten Methoden (**Saved cards**), das für automatische Belastungen verwendete Gateway, den gespeicherten Einverständnisnachweis (Zeitpunkt, IP, Methode) sowie die letzten 20 automatischen Belastungsversuche mit ihrem Status und Grund (**Auto top-up history**). ## Verifizierung {#verify} 1. Zahlen Sie als Testkunde den Mindestbetrag per Karte ein. Öffnen Sie nach Abschluss der Zahlung **Billing › Settings**: Die Karte und der Auto Top-up-Schalter (aktiviert) sind sichtbar. 2. Starten Sie eine weitere Einzahlung: Das Dropdown-Menü bietet die gespeicherte Karte an. 3. Im Admin-Bereich zeigt die **Payment**-Karte des Kunden dasselbe Kartenlabel an. ## Limits & Hinweise {#limits-notes} - **Stripe Link und Wallets.** Link, Apple Pay und Google Pay sind Stripe-Funktionen. NexCMP speichert keine Link-spezifischen Daten; es wird lediglich die von Stripe zurückgegebene Kartenreferenz aufbewahrt. - **PayPal.** Jede vom Kunden gestartete PayPal-Einzahlung erfordert einen Klick; gespeichertes PayPal wird ausschließlich für das automatische Aufladen verwendet, niemals für andere Funktionen. - **Reseller-Websites.** Wenn ein Reseller sein eigenes Stripe- oder PayPal-Konto verwendet, werden gespeicherte Methoden ausgeblendet und das automatische Aufladen ist für diese Website nicht verfügbar. - **Streitfälle.** Ein Streitfall zu einer Zahlung blockiert das Konto und stoppt dessen Prepaid-Dienste; siehe [Stripe](https://nexcmp.com/de/docs/billing/stripe/). - **Das Entfernen der letzten Methode** schaltet das automatische Aufladen aus; das Guthaben im Kunden-Wallet bleibt erhalten. - **Nachweis.** Der Einwilligungseintrag wird vom Server geschrieben (kann vom Kunden nicht bearbeitet werden) und für die Bearbeitung von Streitfällen aufbewahrt. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Kunde sieht keine Settings-Schaltfläche oder gespeicherte Karte | Die Website verwendet einen vom Reseller verwalteten Zahlungskanal oder es wurde noch keine Kartenzahlung getätigt | Führen Sie eine Karten- oder PayPal-Einzahlung über den Plattformkanal durch. | | "Saved card" fehlt nach einer Stripe-Zahlung | Die Zahlung wurde mit einer Methode durchgeführt, die nicht wiederverwendet werden kann (z. B. Alipay) | Zahlen Sie erneut mit einer Karte. | | PayPal: „Dieses Konto kann noch nicht gespeichert werden“ | PayPal hat kein Vault-Token zurückgegeben | Fahren Sie mit einer Einmalzahlung fort oder versuchen Sie es mit einem anderen PayPal-Konto. | | Auto top-up nach dem Entfernen der Karte gestoppt | Erwartetes Verhalten: Das Entfernen der Karte deaktiviert die Funktion | Speichern Sie bei der nächsten Einzahlung eine neue Methode. | --- # Auto top-up {#auto-top-up} > **Im Admin-Bereich:** Finance › Payment channels › Fees & limits (`/payments/fees`), Karte **Wallet & top-up (Billing › Policy)**, Abschnitt **Auto top-up (Stripe / PayPal)**. **Im Portal:** Billing › Settings (`/billing?settings=1`). ## Funktion {#what-it-does} Wenn das Wallet-Guthaben eines Kunden zu niedrig wird, belastet NexCMP seine [saved payment method](https://nexcmp.com/de/docs/billing/saved-payment-methods/) und schreibt das Guthaben auf dem Wallet gut, sodass laufende Dienste nicht mangels Funds ausgesetzt werden. Ein Hintergrundprozess überprüft alle aktivierten Kunden **alle 5 Minuten**. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Kanal | [Stripe](https://nexcmp.com/de/docs/billing/stripe/) und/oder [PayPal](https://nexcmp.com/de/docs/billing/paypal/) konfiguriert. | | Saved method | Der Kunde verfügt über eine gespeicherte Karte oder ein PayPal-Konto. | | Site | Hauptwebsite oder Reseller-Website, deren Stripe-/PayPal-Kanal über die Plattform abgewickelt wird. | | Global switch | **Auto top-up enabled** ist eingeschaltet (standardmäßig aktiv). | ## Wie es funktioniert {#how-it-works} Nach der **ersten Stripe- oder PayPal-Aufladung** eines Kunden speichert der Server die Zahlungsmethode und aktiviert die automatische Aufladung im Modus **By usage** — jedoch nur, wenn der Kunde die automatische Aufladung nicht zuvor selbst konfiguriert hat. Auf dem Einzahlungsbildschirm gibt es kein zusätzliches Kontrollkästchen; der Server protokolliert Uhrzeit, IP-Adresse und Methode als Nachweis. Schaltet der Kunde die automatische Aufladung später aus, wird sie von selbst nie wieder eingeschaltet. | Modus | Auslöser (wenn das Guthaben unter ... liegt) | Belasteter Betrag | |---|---|---| | **By usage** (Standard nach der ersten Aufladung) | die Kosten für die nächsten 24 Stunden laufender Dienste (stündliche VMs plus in 24 Stunden fällige Prepaid-Verlängerungen), jedoch nie unter **$5** | die auf einen ganzen Dollar aufgerundeten 24-Stunden-Kosten, mindestens die [minimum top-up](https://nexcmp.com/de/docs/billing/minimum-top-up/), höchstens die maximale Aufladung und das Tageslimit | | **Fixed amount** | die eigene Schwelle des Kunden ($1 bis $500) | der vom Kunden gewählte Betrag (vom Mindestaufladebetrag bis zu $1,000 und über dem Schwellenwert) | Wenn im Modus **By usage** keine Dienste laufen, erfolgt keine Belastung. Das mit der Schwelle verglichene Guthaben ist das **echte Geld im Wallet**. Dienstguthaben aus Gutscheincodes werden separat verwahrt und fließen nicht ein (siehe [Promotions](https://nexcmp.com/de/docs/billing/promotions/)). Die Gebühr wird wie eine normale Aufladung behandelt: Bei aktiviertem **Customer pays top-up fee** wird der Karte der Betrag zuzüglich Gebühr belastet und dem Wallet der volle Betrag gutgeschrieben; bei Deaktivierung erhält das Wallet den Betrag abzüglich der Gebühr. ## Globale Limits konfigurieren {#configure-the-global-limits} 1. Öffnen Sie **Finance › Payment channels › Fees & limits** (`/payments/fees`). 2. Legen Sie unter **Auto top-up (Stripe / PayPal)** Folgendes fest: | Einstellung | Standard | Bereich | Bedeutung | |---|---|---|---| | Auto top-up enabled | An | ein oder aus | „Aus“ stoppt jede Hintergrundbelastung sofort. | | Standard-Schwelle für automatische Aufladungen (USD, Fallback für festen Modus) | $5.00 | $0 bis $10,000 | Wird im Festbetrag-Modus nur als Startschwelle verwendet. | | Max. automatische Aufladungen pro 24 h und Kunde | 3 | 1 bis 50 | Zählt erfolgreiche und ausstehende Versuche. | | Obergrenze für automatische Aufladungen pro 24 h und Kunde (USD) | $500.00 | $0 bis $1,000,000 | Summe der automatischen Belastungen an einem rollierenden Tag. | 3. Klicken Sie auf **Save Wallet & top-up**. ![Bereich für das automatische Aufladen auf der Seite Gebühren und Limits mit dem globalen Schalter und täglichen Limits](https://nexcmp.com/de/docs/images/billing/auto-top-up-01-limits.webp) ## Was der Kunde sieht {#what-the-customer-sees} 1. Im Portal öffnet der Kunde **Billing** und klickt auf **Settings**. 2. Das Panel zeigt die gespeicherte(n) Methode(n), den Ein/Aus-Schalter, den Modus (**By usage** oder **Fixed amount**), die geschätzte aktuelle Nutzung sowie die nächste Belastung und die **Recent automatic top-ups**. 3. Ein Wechsel zu **Fixed amount** ermöglicht die Eingabe von Schwelle und Betrag. Das Ausschalten des Schalters stoppt Belastungen. ![Abrechnungseinstellungen des Kunden mit automatischem Aufladen im Nutzungsmodus und den letzten automatischen Aufladungen](https://nexcmp.com/de/docs/images/billing/auto-top-up-02-portal.webp) ## Verifizierung {#verify} 1. Führen Sie als Testkunde eine erste Aufladung mit einer Testkarte durch ([Stripe](https://nexcmp.com/de/docs/billing/stripe/#verify)). Öffnen Sie **Billing › Settings**: Die automatische Aufladung ist aktiv. 2. Starten Sie eine kleine VM, um Nutzung zu erzeugen, und senken Sie das Guthaben unter den Schwellenwert (z. B. über **Customers › customer › Credit / debit**). 3. Innerhalb von ca. 5 Minuten erfolgt eine Belastung. In der Karte **Overview › Payment** des Kunden zeigt **Auto top-up history** den Versuch mit dem Status *Done* an, und eine Benachrichtigung *Top-up received* wird versendet. ## Limits & Hinweise {#limits-notes} - **Eine Belastung pro Unterschreitung.** Nach einer Belastung wartet der Job, bis der Saldo wieder über den Schwellenwert gestiegen ist oder die Wartezeit abläuft: 1 Stunde nach einem Erfolg, 24 Stunden nach einer ausstehenden Belastung, 30 Minuten nach einem Systemfehler. - **Tägliche Limits.** Wenn eines der täglichen Limits erreicht ist, erfolgt keine Belastung und es wird eine Zeile *Tägliches Limit erreicht* geschrieben (höchstens alle 6 Stunden). - **Fehler.** Eine abgelehnte Karte, eine abgelaufene Karte oder unzureichende Guthaben gelten als Kartenfehler. Der Job versucht es nach 1 Stunde, dann nach 6 Stunden und dann nach 24 Stunden erneut. **Nach 3 aufeinanderfolgenden Kartenfehlern wird die automatische Aufladung abgeschaltet** und der Kunde wird benachrichtigt (*Automatische Aufladung fehlgeschlagen*). Eine Zahlung, die eine Bestätigung des Kunden erfordert (zum Beispiel 3-D Secure), gilt nicht als Fehler; der Kunde wird aufgefordert, sie zu bestätigen. - **Keine Doppelbelastungen.** Jede Belastung wird pro Unterschreitung des Schwellenwerts atomar beansprucht und verwendet einen Idempotenzschlüssel beim Gateway. - **Das Entfernen der Karte** schaltet die automatische Aufladung aus. - **Reseller.** Wenn ein Reseller seinen eigenen Zahlungskanal verwendet, kann der Kunde die automatische Aufladung nicht aktivieren (HTTP 403 `feature_disabled`). ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Kunde kann es nicht einschalten: "Einmalig mit Karte oder PayPal aufladen" | Keine gespeicherte Methode | Führen Sie zuerst eine Karten- oder PayPal-Aufladung durch. | | Fehler `no_card` (422) | Das gewählte Gateway hat keine gespeicherte Methode | Wählen Sie das Gateway, das eine hat, oder speichern Sie eine Methode. | | Fehler `invalid_argument` beim Betrag | Fester Modus außerhalb der zulässigen Bereiche | Schwellenwert $1–$500, Betrag zwischen dem Mindestguthaben und $1,000, Betrag größer als der Schwellenwert. | | Es wird nichts belastet, obwohl der Saldo niedrig ist | Globaler Schalter aus, kein laufender Dienst im Modus Nach Nutzung, tägliches Limit erreicht oder die vorherige Belastung wartet noch | Prüfen Sie den Schalter, den Verlauf und die Limits. | | "N aufeinanderfolgende fehlgeschlagene Versuche — automatische Aufladung schaltet sich nach 3 ab" | Karte schlägt weiterhin fehl | Der Kunde ersetzt die Karte durch eine neue Einzahlung. | | Status *Benötigt Ihre Bestätigung* | Die Bank erfordert 3-D Secure | Der Kunde führt einmalig eine normale Aufladung aus. | --- # Rechnungen und Hauptbuch {#invoices-and-ledger} > **Wo im Admin:** Finance › Billing (`/billing`) mit den Tabs Overview, Transactions (`/billing/ledger`), Invoices (`/billing/invoices`), Top-ups (`/billing/deposits`), Payouts (`/billing/payouts`), Vouchers (`/billing/vouchers`) und Reports (`/billing/reports`). **Wo im Portal:** Billing (`/billing`). ## Funktion {#what-it-does} Jeder Betrag in NexCMP wird als USD-Cent gespeichert und einmal erfasst. Die Kernidee: Das **Wallet-Hauptbuch** ist die Single Source of Truth für Salden; Rechnungen, Aufladezahlungen und Berichte sind Ansichten, die daraus erstellt werden. Das Hauptbuch ist **nur zum Anhängen** — ein Fehler wird durch Hinzufügen eines Stornierungsbuungssatzes behoben, niemals durch Bearbeiten der Historie. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Rolle | Ein Administrator. | | Verkäuferdetails | Legen Sie den rechtlichen Namen, die Steuernummer, die Adresse, die Kontakt-E-Mail und das Rechnungsnummernpräfix in **System › Settings › General** im Tab **Seller & invoicing** (`/settings?tab=seller`) unter der Karte **Seller details (printed on invoices)** fest. | | Abhängigkeiten | [Payment channels](https://nexcmp.com/de/docs/billing/payment-channels/) für eingehende Gelder. | ## Die Bestandteile {#the-pieces} | Admin-Tab | Was aufgelistet wird | Typischer Einsatz | |---|---|---| | **Overview** | Umsatz heute und diesen Monat, Ledger-Summen nach Art (Guthaben, Belastung, Erstattung, Anpassung, Gutschein), Rechnungen nach Status, ausstehende Erstattungen, Verknüpfungen, Ausgaben pro Dienst in den letzten 30 Tagen | Tägliche Prüfung | | **Transactions** | Das Wallet-Ledger, eine Zeile pro Bewegung | Das Guthaben eines Kunden erklären | | **Invoices** | Rechnungen und eine zweite Ansicht **Orders** mit jedem Kauf jedes Dienstes | Dokument finden, erneut senden, als bezahlt markieren | | **Top-ups** | Über die Gateways empfangene Zahlungen | Zahlung prüfen, erstatten | | **Payouts** | Kartenrückerstattungen, Affiliate-Auszahlungen, Reseller-Auszahlungen | Ausgehenden Zahlungen zustimmen | | **Vouchers** | Aufladecodes | Siehe [Promotions](https://nexcmp.com/de/docs/billing/promotions/) | | **Reports** | Umsatz, nach Dienst, nach Reseller | Buchhaltung | ### Transactions (Ledger) {#transactions-ledger} Spalten: Uhrzeit, Kunde, **Art**, Dienst, Betrag (mit Vorzeichen), VM, Referenz, Akteur, Notiz. Filter: Art, Dienst, Kunden-ID, Site (wenn Sie Reseller haben), Datumsbereich und ein VM-Link. | Art | Bedeutung | |---|---| | `deposit` | Aufladung über ein Gateway | | `charge` | Für einen Dienst eingezogenes Geld (Bestellung, Verlängerung, stündlicher Verbrauch ...) | | `refund` | An das Wallet zurückerstattetes Geld | | `adjust` | Guthaben oder Belastung durch den Administrator sowie Aufladecodes (Referenz beginnt mit `vch:`) — die Übersicht zeigt Gutscheine als eigene Zeile | Jede Zeile hat eine Referenz wie `dep:stripe:`; dieselbe Referenz kann niemals zweimal geschrieben werden, weshalb ein wiederholter Webhook nicht doppelt gutschreiben kann. Verwenden Sie **Customers › List › customer › Credit / debit**, um eine manuelle Anpassung hinzuzufügen: Ein Grund ist obligatorisch, ein positiver Betrag versucht auch, für mangelnde Mittel gesperrte VMs entsperren, und die Aktion wird in zwei Schritten bestätigt. ![Transactions-Tab mit Wallet-Ledger-Zeilen inklusive Art, Dienst, Betrag und Referenz](https://nexcmp.com/de/docs/images/billing/invoices-and-ledger-01-ledger.webp) ### Invoices {#invoices} Eine Rechnung wird automatisch erstellt, wenn ein Kunde etwas kauft oder verlängert, das aus dem Wallet bezahlt wird, oder für eine Aufladung. Nummern sehen aus wie `-<000001>` (zum Beispiel `NX202610-000042`); Reseller-Sites verwenden ein eigenes Präfix und eine eigene Sequenz. Bestehende Nummern ändern sich nie, wenn Sie das Präfix ändern. | Feld | Werte | |---|---| | Art | Receipt, Renewal, Top-up, Manual, Refund | | Status | Unpaid, Paid, Overdue, Cancelled, Refunded | Aktionen für eine Zeile: | Aktion | Effekt | |---|---| | **View** / **Print** | Öffnet die Rechnung; das Portal kann diese auch drucken oder als PDF speichern. | | **Mark paid** (nur bei unbezahlt oder überfällig) | Markiert sie als bezahlt, **ohne Guthaben zu bewegen** — verwenden Sie dies, wenn der Kunde Sie außerhalb von NexCMP bezahlt hat. Ein Grund ist erforderlich. Bei einer Verlängerungsrechnung verlängert und entsperrt dies auch die gesperrte VM. | | **Abbrechen** (nur bei unbezahlten oder überfälligen) | Annulliert die Rechnung. Ein Grund ist erforderlich. | | **Erneut senden** | Sendet die Rechnung per E-Mail nochmals. | **Manuelle Rechnung erstellen** (Schaltfläche oben auf der Registerkarte): Kunden-ID, 1 bis 50 Positionen (Beschreibung, Menge, Einzelpreis), optionale VM-ID, optionale Fälligkeitstage (0 bis 365, Standard 7), optionaler Hinweis. Sie wird als unbezahlt erstellt; der Kunde sieht sie unter **Billing › Invoice History**. Unbezahlte Rechnungen für Dienste werden **automatisch über das Guthaben beglichen**, sobald Geld vorhanden ist, sodass der Kunde lediglich eine Aufladung vornehmen muss. ### Top-ups (payments) {#top-ups-payments} Eine Zeile pro Versuch: Zeitpunkt, Kunde, **Gateway und Methode**, Art (Aufladung oder automatische Aufladung), Status (ausstehend, abgeschlossen, fehlgeschlagen, erstattet, strittig, storniert), vom Kunden gezahlter Betrag, Gebühr, dem Guthaben gutgeschriebener Betrag, Gateway-Referenz und Abschlusszeitpunkt. Abgeschlossene Stripe- und PayPal-Zahlungen verfügen über eine **Refund**-Aktion. Nutzen Sie die Seiten zu Gateway-Ereignissen, um Webhooks einzusehen ([Payment channels](https://nexcmp.com/de/docs/billing/payment-channels/)). ### Payouts {#payouts} Drei Unterregisterkarten: **Card refunds** (Erstattungsanfragen genehmigen oder ablehnen; die Anfrage wird aus einer abgeschlossenen Zahlung erstellt), **Affiliate payouts** (Provisionauszahlungen) und **Reseller withdrawals**. Jede Entscheidung wird protokolliert. ### Reports {#reports} **Revenue** (30-Tage-Trend, Monat für Monat, Top-Kunden), **By service** und **By reseller**. ![Reports-Registerkarte mit Umsatz-KPIs und dem 30-Tage-Trend](https://nexcmp.com/de/docs/images/billing/invoices-and-ledger-03-reports.webp) ## Was der Kunde sieht {#what-the-customer-sees} Unter **Billing** verfügt der Kunde über **Balance**, **Deposit**, **Redeem code**, **Settings** (automatische Aufladung) sowie eine Historie mit den Registerkarten **Invoice History**, **Payment Order**, **Ledger** und **Orders** (jeder Dienst in einer Liste mit Filtern nach Dienst und Typ). Jede Rechnung bietet **View**, **Print** und **Save as PDF**; Beträge sind in USD und werden optional in der Anzeigewährung dargestellt. ## Verifizierung {#verify} 1. Führen Sie eine kleine Aufladung als Testkunde durch. 2. **Transactions** zeigt eine `deposit`-Zeile, **Top-ups** zeigt die Zahlung als *Completed* und die Umsätze in **Overview** steigen. 3. Etwas kaufen: Eine `charge`-Zeile erscheint und **Invoices** zeigt eine *Receipt*- oder *Renewal*-Rechnung mit den von Ihnen konfigurierten Verkäuferdetails. ## Limits & Hinweise {#limits-notes} - **Nur zum Anhängen.** Es gibt keine Möglichkeit, eine Ledger-Zeile zu bearbeiten oder zu löschen; fügen Sie stattdessen eine Korrekturbuchung mit Begründung hinzu. - **Währung.** Beträge sind in USD; die Anzeigewährung dient nur der Optik (siehe [Currency and exchange rates](https://nexcmp.com/de/docs/catalog/currency-and-exchange-rates/)). - **Refund to card** erfolgt in zwei Schritten (Anfrage und anschließende Genehmigung unter Payouts); USDT- und Banküberweisungen werden nicht auf die Quelle zurückerstattet. - **Alles wird protokolliert** unter System › Logs › Admin actions mitsamt dem von Ihnen eingegebenen Grund. - **Bestellungen vs. Rechnungen.** Stündliche Nutzung wird nicht stündlich abgerechnet; die Ansicht „Orders“ fasst sie tageweise zusammen, damit Sie sie dennoch einsehen können. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Guthaben des Kunden scheint falsch zu sein | Eine unerwartete Belastung, Anpassung oder Gutschrift | Filtern Sie **Transactions** nach der Kunden-ID und lesen Sie die Referenzen und Notizen. | | "Rechnung ist bereits bezahlt" (409) | Markierung als bezahlt für eine bereits bezahlte Rechnung | Keine Aktion erforderlich. | | Rechnung kann nicht storniert werden | Nur unbezahlte oder überfällige Rechnungen können storniert werden | Verwenden Sie bei bereits bezahlten Rechnungen eine Erstattung oder Korrekturbuchung. | | Verkäuferdetails auf Rechnungen fehlen | Nicht ausgefüllt | Füllen Sie **Seller details** unter System › Settings › General › Seller & invoicing aus. | | Kreditkarte / Lastschrift abgelehnt | Betrag ist null oder über $100,000 | Verwenden Sie einen Betrag zwischen 1 Cent und $100,000. | | Eine Zahlung bleibt lange auf dem Status *Pending* | Webhook fehlt | Siehe **Gateway events** und erneut abspielen. | --- # Gutscheine {#promotions} > **Im Adminbereich:** Finance › Billing › Vouchers (`/billing/vouchers`). **Im Portal:** Billing › Redeem code (auch im Einzahlungs-Drawer). ## Funktion {#what-it-does} Ein **Gutscheincode** (Voucher) ist ein einmal verwendbarer Code, den Sie an Kunden weitergeben. Je nach Erstellung kann er Folgendes bewirken: | Typ | Was der Kunde erhält | Wohin der Wert fließt | |---|---|---| | **Bonus credit** für alle Services | Dem Guthabenkonto hinzugefügtes Geld | Guthabens saldo. Für alles verwendbar. | | **Bonus credit** für ausgewählte Services | Ein Dienstguthaben | Ein separates Guthaben, das nur für diese Dienste verwendet werden kann. | | **Discount %** | Ein Prozentsatz Rabatt auf die erste Bestellung ausgewählter Dienste | Es wird kein Guthaben gutgeschrieben; der Rabatt wird beim Checkout angewendet. | Verwenden Sie sie für Kampagnen, Entschädigungsguthaben, Partnerangebote oder Erstbestellungsrabatte. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Rolle | Ein Administrator. | | Kunden | Kunden lösen Codes im angemeldeten Zustand im Portal ein (nicht als Gast). Standardmäßig muss der Kunde eine verifizierte E-Mail-Adresse haben. | | VND-Codes | Ein in VND erstellter Code wird zum Einlösungszeitpunkt anhand des gespeicherten Wechselkurses in USD umgerechnet (siehe [Currency and exchange rates](https://nexcmp.com/de/docs/catalog/currency-and-exchange-rates/)). | ## Batch erstellen {#create-a-batch} 1. Öffnen Sie **Finance › Billing › Vouchers** und klicken Sie auf **Create vouchers**. 2. Füllen Sie das Formular aus. Beispielwerte stehen in Klammern. | Feld | Hinweise | |---|---| | Batch-Name | 1–80 Zeichen (`Spring welcome`). | | Ziel | **Main site clients**, **Single reseller's customers** (benötigt eine Kundenliste) oder **Reseller wallet**. | | Berechtigte Benutzer | **All in target audience** oder **Specified** — eine E-Mail oder Kunden-ID pro Zeile, bis zu 1,000. Für Kunden eines Resellers muss es auf *Specified* stehen. | | 1 Code pro Ziel | Bei *Specified* wird ein Code pro aufgelistetem Kunden erstellt. | | Codetyp | **Bonus credit** oder **Discount %**. | | Gültig für | Wählen Sie einen oder mehrere Dienste aus; leer = **All services**. | | Währung, Nennwert | USD ab $1.00 oder VND ab 10,000 in Vielfachen von 1,000 (nur Bonusguthaben). | | Rabatt (%) | 1 bis 100 (nur Rabatt %). | | Maximaler Rabattbetrag (USD) | Erforderlich für Rabatt %, ab $1.00. Dies ist zudem der maximal mögliche Verlust pro Einlösung. | | Mindestbestellwert (USD) | `0` = keiner. Die erste Bestellung muss mindestens diesen Betrag erreichen. | | Anzahl der Codes | 1 bis 1,000 zufällige Codes. | | Verwendungen pro Code | 1 bis 100,000. `1` bedeutet eine Person pro Code; erhöhen Sie den Wert für einen geteilten Code. | | Max. Verwendungen pro Konto | Mindestens 1. Für Rabatt % muss es `1` sein. | | Startzeit (optional), Läuft ab | Das Ablaufdatum muss nach dem heutigen Tag und nach dem Start liegen, maximal 2 Jahre in der Zukunft. | | Code-Präfix (0–6 Zeichen) | Nur Buchstaben; wenn leer, wird das Präfix der Website verwendet. | | Benutzerdefinierter Code (nur wenn Anzahl = 1) | 6 bis 32 Zeichen A–Z und 0–9. Leicht zu teilen, aber leicht zu erraten: Halten Sie die Verwendungen niedrig. | | Verifizierte E-Mail erforderlich | Standardmäßig aktiv. | | Interne Notiz, Grund | Der Grund ist obligatorisch und wird im Audit-Log protokolliert. | 3. Das Formular zeigt das **Maximale Risiko** (Nennwert x Codes x Verwendungen), damit Sie den Worst Case kennen. Klicken Sie auf **Generate codes**. 4. **Kopieren Sie die Codes jetzt.** Sie werden nur einmal angezeigt: NexCMP speichert nur einen Hash und die letzten 4 Zeichen. Verwenden Sie **Copy all** oder **Download CSV**, haken Sie die Bestätigung ab und schließen Sie das Fenster. ## Verhalten der einzelnen Typen {#how-each-type-behaves} ### Wallet-Bonus (kein Dienst ausgewählt) {#wallet-bonus-no-service-selected} Das Wallet wird mit einer **Anpassungsbuchung** (Referenz `vch:...`) gutgeschrieben. Sie ist nicht auf eine Karte auszahlbar, bringt keine Affiliate-Provision, erzeugt keine Rechnung und zählt als Guthaben für Quotas. VND-Codes verwenden den Wechselkurs zum Zeitpunkt der Einlösung. ### Dienstgutschrift (Dienste ausgewählt) {#service-credit-services-selected} - Das Guthaben liegt in einem **separaten Topf**, kann nur Gebühren der gewählten Dienste bezahlen (neue Bestellungen, Verlängerungen, stündliche oder tägliche Gebühren, Upgrades) und wird **vor** dem Wallet ausgegeben. - Es kann nicht ausgezahlt, übertragen oder in Geld umgewandelt werden und verfällt mit dem Code. - Das Hauptbuch zeigt die volle Gebühr plus eine entsprechende Gutschriftzeile, sodass der Umsatz pro Dienst korrekt bleibt, während sich das Wallet nur um den Betrag verringert, den der Kunde tatsächlich bezahlt hat. - Es erhöht **keine** [quota](https://nexcmp.com/de/docs/billing/quotas/)-Stufe und wird bei der [auto top-up](https://nexcmp.com/de/docs/billing/auto-top-up/) ignoriert. - Wenn eine mit Guthaben oder Rabatt bezahlte Gebühr erstattet wird, wird der durch den Code bezahlte Teil von der Wallet-Erstattung abgezogen und in den Guthabentopf zurückgelegt. ### Rabatt % {#discount} 1. Der Kunde gibt den Code ein: er wird **aktiviert**. Ein prozentualer Code kann nur einmal pro Konto verwendet werden. 2. Die **erste Belastung** eines ausgewählten Dienstes, bei der es sich nicht um eine stündliche Gebühr handelt, wird um den Prozentsatz rabattiert, jedoch niemals um mehr als den **Maximum discount cap** und mindestens in Höhe der **Minimum order**. 3. Der Rabatt wird zum Abrechnungszeitpunkt vom Server neu berechnet; der Betrag im Browser wird ignoriert. Der Einlösungseintrag wird bei tatsächlicher Nutzung des Codes mit dem realen Rabatt geschrieben. 4. Stündliche Nutzungsgebühren verwenden den Code niemals. ## Was der Kunde tut {#what-the-customer-does} 1. Öffnen Sie **Billing** im Portal und klicken Sie auf **Redeem code** oder verwenden Sie **Have a top-up code?** im Einzahlungsfenster. 2. Geben Sie den Code ein (Groß-/Kleinschreibung wird nicht beachtet; Bindestriche optional) und klicken Sie auf **Check**. Das Portal zeigt an, was er gewährt, zum Beispiel *Valid code: +$5.00*, *$5.00 credit for VPN* oder *20% off voucher for Virtual Machines (up to $5.00)* sowie *Valid for orders from $10.00*. 3. Klicken Sie auf **Redeem** und bestätigen Sie. Jeder Code kann einmal pro Konto verwendet werden. Codes sind an die Website gebunden: Ein Code von einer Website ist auf einer anderen „ungültig“, ohne Hinweis darauf, dass er anderswo existiert. Falsche Eingaben werden gedrosselt, und nach mehreren Versuchen wird das Konto für einige Minuten gesperrt („N attempts left before a temporary lock“). ## Verfolgen und stoppen {#track-and-stop} - **Batches** listet jeden Batch mit seinem Status auf (*active*, *disabled*, *expired*, *used up*), zusammen mit der Anzahl der Einlösungen und dem Risiko. Öffnen Sie einen Batch für die Registerkarten **Codes** (maskiert) und **Redemptions** sowie **Export CSV**. - **Redemptions** listet jede Einlösung über alle Batches hinweg auf; **Reseller quotas** zeigt, wie viel vom monatlichen Ausgabelimit jedes Resellers verbraucht ist; **Settings** schaltet Reseller-Codes ein oder aus und legt das standardmäßige monatliche Limit fest. - **Disable batch** stoppt alle ungenutzten Codes; bereits vorgenommene Einlösungen bleiben erhalten. Ein einzelner Code kann ebenfalls deaktiviert werden. ## Verifizierung {#verify} 1. Erstellen Sie einen Batch mit 1 Code: Discount % 20, Cap $5, Mindestbestellwert $10, Dienst Virtual Machines. 2. Lösen Sie ihn als Testkunde ein. Das Portal meldet, dass er aktiviert ist. 3. Bestellen Sie eine VM, die mindestens $10 kostet (monatlicher Zyklus): Die Rechnung weist den Rabatt aus (maximal $5). 4. Im Batch zeigt der Code 1 Einlösung mit dem realen Rabatt. ## Limits & Hinweise {#limits-notes} - Codes sind bei der Erstellung an die **audience** und die **site** gebunden; sie können später nicht verschoben werden. - Reseller können Codes innerhalb eines monatlichen Ausgabelimits an ihre eigenen Kunden ausgeben; siehe [Resellers](https://nexcmp.com/de/docs/customers/resellers/). - Die Promo-Folien in der Seitenleiste für Kunden (**Marketing › Promo slides**) sind eine separate Funktion und gewähren keinen Rabatt. - Da der Code im Klartext niemals gespeichert wird, kann ein verlorener Batch nicht wiederhergestellt werden: Deaktivieren Sie ihn und erstellen Sie einen neuen. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | „Percent codes: one use per account“ (`percent_one_per_account`) | Max uses per account größer als 1 für Discount % | Setzen Sie diesen Wert auf `1`. | | Das Formular meldet, dass das Cap erforderlich ist | Discount % ohne Maximum discount cap | Geben Sie mindestens $1.00 ein. | | Kunden nicht gefunden | Eine E-Mail oder ID in der Liste ist nicht vorhanden | Korrigieren Sie die Liste (der Fehler benennt die unbekannten Einträge). | | Kunde meldet „invalid code“ | Falsche Website, abgelaufen, deaktiviert, aufgebraucht, nicht der Zielkunde oder E-Mail nicht verifiziert | Überprüfen Sie den Batch und den Kunden. | | Guthaben wurde nicht verwendet | Die Gebühr gehört zu einem anderen Dienst | Guthaben begleicht nur die im Batch ausgewählten Dienste. | | Rabatt nicht angewendet | Bestellung unter dem Minimum, stündliche Gebühr oder der Code wurde für einen anderen Dienst aktiviert | Geben Sie eine qualifizierende Erstbestellung auf. | | Kunde kann nichts mehr einlösen | Zu viele falsche Versuche | Warten Sie, bis die Sperre ablauft. | --- # Quotas {#quotas} > **Im Admin-Bereich:** Services › Virtual Machines › Policy › Quota tab (`/vm/policy?tab=quota`). Pro Kunde: Customers › List › a customer › Overview (`/customers/`), Karte **Quota**. **Im Portal:** Client › Quotas (`/client/quotas`). ## Funktion {#what-it-does} Quoten schützen Sie vor Missbrauch durch neue Konten: Je mehr echtes Geld ein Kunde in sein Guthaben eingezahlt hat, desto mehr Ressourcen darf er erstellen. Es gibt zwei Ebenen: - **VM- und Kubernetes-Ressourcen**: Gesamte vCPU, RAM und Festplatte sowie die Anzahl der VMs. Tiers sind Ihre festen Tarife. - **Service-Quotas**: Anzahl von IPs, Clustern, VPCs, GB Speicher usw. in fünf Tiers (L0 bis L4), basierend auf dem eingezahlten Guthaben. Quotas werden **vor** jeder Belastung überprüft. Eine Anfrage über dem Limit wird mit HTTP 403 `quota_exceeded` und einer Nachricht abgelehnt, die dem Kunden mitteilt, wie viel er aufladen muss. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Rolle | Ein Administrator. | | Schalter | **Enable quota** (`quota_enabled`) ist standardmäßig **aus**. Nichts davon greift, bis Sie es einschalten. | | Feste Tarife | Mindestens ein Tarif ohne benutzerdefinierte Tarife (siehe [Plans](https://nexcmp.com/de/docs/catalog/plans/)) – die Ressourcentiers sind Ihre festen Tarife. Ohne Tarife gilt nur die VM-Anzahl-Regel. | | Abhängigkeiten | Service-Quota-Zeilen existieren nur für Produkte, die in Ihrer Installation aktiviert sind (VPN, IPv6-Proxy, Kubernetes, Private Cloud, Images, Object Storage, Dedicated). | ## Wie die Basis berechnet wird {#how-the-basis-is-calculated} NexCMP betrachtet nicht nur Kartenzahlungen. Die **Basis** ist das **gebuchte Guthaben** des Kunden: Gateway-Aufladungen, Administrator-Guthaben (**Credit / debit**) und eingelöste Gutscheine zählen über das Guthabenkonto jeweils einmal. Bestelldrabatte und Serviceguthaben aus Aktionscodes sind kein Guthaben und zählen nicht. Die höchste Basis, die ein Kundenkonto jemals erreicht hat, bleibt **erhalten** (pro Website) – Ausgaben oder Rückerstattungen senken ein bereits freigeschaltetes Tier niemals. ### VM- und Kubernetes-Ressourcen {#vm-and-kubernetes-resources} 1. Die Tiers sind die festen Tarife der Website, sortiert nach den Kosten für ihren 24-Stunden-Betrieb. 2. Ein Kunde befindet sich im höchsten Tier, dessen 24-Stunden-Kosten seine Basis nicht übersteigen. Das Limit entspricht vCPU, RAM und Festplatte dieses Tarifs. Ein Kunde, der sich nicht einmal den günstigsten Tarif leisten kann, erhält dennoch die Ressourcen des günstigsten Tarifs. 3. Als Nutzung gegen das Limit zählt jede aktive VM (einschließlich gesperrter), gekaufte Datenträger (auch im getrennten Zustand) sowie Kubernetes-Worker und Control Planes (Worker zählen ebenfalls als VMs). 4. **VM-Anzahl:** bis zu **Max VMs at 24h tier** (Standard: 2). Ab der nächsten VM muss das *aktuelle* Guthaben des Kunden **30 Tage (720 Stunden)** aller bestehenden VMs plus der neuen VM abdecken, bis zu **Max VMs when meeting 30-day threshold** (Standard: 10). 5. **Das Erstellen einer VM** erfordert zudem ein Guthaben von mindestens **N Stunden** dieser VM (**Create VM: balance ≥ N hours**, Standard: 2) und das Plattform-Mindestguthaben. 6. Das Verkleinern einer VM wird niemals blockiert. Es wird nur die wachsende Dimension geprüft, sodass ein Kunde, der über dem Festplattenlimit liegt, dennoch vCPU hinzufügen kann, sofern das vCPU-Limit dies zulässt. ## Konfigurieren {#configure} 1. Öffnen Sie **Services › Virtual Machines › Policy** und wählen Sie den Tab **Quota**. 2. Schalten Sie **Enable quota** ein. 3. Überprüfen Sie die drei Zahlen (alle bearbeitbar): | Feld | Standard | Bereich | |---|---|---| | VM erstellen: Guthaben ≥ N Stunden | 2 | 1 bis 720 | | Max VMs at 24h tier | 2 | 1 bis 100 | | Max. VMs bei Erreichen der 30-Tage-Schwelle | 10 | 1 bis 1000 (nicht unter dem vorherigen Feld) | 4. Bearbeiten Sie in **Tier-based service quotas** die Tabelle (unten). 5. Klicken Sie auf **Save**. NexCMP fragt nach einem **Grund**, der zusammen mit den alten und neuen Werten im Audit-Log gespeichert wird. Die Änderung gilt für alle Kunden. ![Quota-Tab mit Aktivierungsschalter, den VM-Limits und der Tabelle für tierbasierte Service-Quotas](https://nexcmp.com/de/docs/images/billing/quotas-01-policy.webp) ### Service-Quota-Tabelle {#service-quota-table} Die Tabelle hat fünf Stufen. Die Kopfzellen **L0** bis **L4** enthalten die **Einzahlungsschwelle in Cent**: Die Standardwerte `0, 1000, 5000, 20000, 100000` bedeuten L0 für ein neues Konto, L1 ab $10, L2 ab $50, L3 ab $200 und L4 ab $1,000. Die erste Schwelle muss `0` bleiben. Jede Zeile legt die Quote eines Schlüssels pro Stufe fest; **-1 bedeutet unbegrenzt**. | Schlüssel | Bedeutung | L0 | L1 | L2 | L3 | L4 | |---|---|---|---|---|---|---| | `vpn.ips` | VPN-IPs | 2 | 10 | 30 | 100 | 500 | | `proxy6.ips` | IPv6-Proxy-IPs | 500 | 2000 | 10000 | 50000 | -1 | | `dedicated.servers` | Bare-Metal-Server | 1 | 2 | 5 | 20 | 50 | | `s3.storage_gb` | Zugewiesener Object Storage in GB | 2048 | 4096 | 10240 | 51200 | -1 | | `k8s.clusters` | Kubernetes-Cluster | 1 | 2 | 5 | 10 | 30 | | `k8s.workers` | Kubernetes-Worker-Knoten | 3 | 9 | 18 | 50 | 200 | | `vpc.count` | Private Cloud-Netzwerke | 1 | 2 | 5 | 10 | 30 | | `images.gb` | Speicher für benutzerdefinierte Images in GB | 50 | 100 | 200 | 500 | 2000 | Die Tabelle führt auch einige Zeilen für Produkte auf, die nicht Teil dieses Releases sind; lassen Sie diese unverändert. Ein Schlüssel, dessen Produkt deaktiviert ist, wird ausgeblendet und niemals durchgesetzt. Ein Wert muss `-1` sein oder zwischen `0` und `10,000,000` liegen. Dienstquoten folgen der **Guthabenbasis**, genau wie die VM-Stufen: dem höchsten erreichten Guthabenstand, nicht der Summe der Kartenzahlungen. Reseller-Kunden verwenden dieselben Standardwerte und der Reseller kann sie nur einsehen. ## Kundenbezogene Ausnahmen {#per-customer-overrides} 1. Öffnen Sie **Customers › List**, dann den Kunden. Unter **Overview** finden Sie die Karte **Quota**. 2. **VM-Ressourcen:** Klicken Sie auf **Quota override** und wählen Sie eine der folgenden Optionen aus: - **Nach Guthabenstand (Ausnahme aufheben)** — Standardverhalten; - **Unbegrenzt (einschließlich VM-Anzahl)** — hebt alle Limits für diesen Kunden auf; - eine **Tarifstufe** — legt die Obergrenze der Ressourcen auf diesen Tarif fest; die Regel für die VM-Anzahl gilt weiterhin. Geben Sie einen Grund ein. Plattformadministratoren können jede Stufe festlegen; eine von einem Reseller festgelegte Ausnahme darf die Basis des Kunden nicht überschreiten. 3. **Dienste:** Die Tabelle unter *Service quotas* zeigt jeden Schlüssel mit *In use*, dem effektiven Limit und dessen *Source* (Stufe oder Ausnahme). Klicken Sie in einer Zeile auf **Edit**, geben Sie die **New quota** (`-1` = unbegrenzt, leer = zurück zum Tarif-Standardwert) sowie einen Grund ein. ![Kunden-Quotenkarte mit Tarif, Ressourcennutzung und Dienstquotentabelle mit einer Ausnahme](https://nexcmp.com/de/docs/images/billing/quotas-02-customer.webp) Jede Ausnahme wird im Audit-Log mit Administrator, Grund sowie Vorher-/Nachher-Werten protokolliert. ## Was der Kunde sieht {#what-the-customer-sees} **Client › Quotas** (`/client/quotas`) zeigt die **aktuelle Stufe** des Kunden, verwendete und gesamte vCPU, RAM, Speicher und VM-Anzahl (aufgeteilt zwischen VMs und Kubernetes), das **anrechenbare Guthaben**, die **gehaltene Ressourcenbasis** (sie verringert sich nicht bei Ausgaben) sowie den Betrag für die nächste Stufe zum Aufladen. Ein Regler lässt Kunden eine Zielstufe auswählen und direkt zur Einzahlungsseite wechseln. Die Karte **Service Quotas** listet jeden Service mit Quota, verwendetem Betrag, Stufe (L0 bis L4), dem erforderlichen Aufladebetrag für die nächste Stufe und einer Schaltfläche **Request increase** auf, die einen Support-Ticket-Entwurf öffnet. Eine Schaltfläche **Quota policy** erklärt die Regeln. ![Portal-Quota-Seite mit aktueller Stufe, Ressourcennutzung und Service-Quotas](https://nexcmp.com/de/docs/images/billing/quotas-03-portal.webp) ## Verifizierung {#verify} 1. Aktivieren Sie **Enable quota** und verwenden Sie einen neuen Testkunden mit einem Guthaben von $0. 2. Versuchen Sie, eine VM zu erstellen, die größer ist als Ihr günstigstes Paket. Die Anfrage wird mit `quota_exceeded` und der Meldung „Exceeds the resources of tier ... Top up $X more to unlock tier ...“ abgelehnt. 3. Laden Sie den angezeigten Betrag auf. Die Stufe ändert sich sofort und dieselbe Anfrage wird erfolgreich ausgeführt. 4. Kaufen Sie VPN-IPs über dem L0-Limit: HTTP 403 `quota_exceeded` mit `"scope":"service"` und einem Link zu `/client/quotas`. 5. In der Quota-Karte des Kunden zeigt **Source** *tier*; legen Sie eine Ausnahme fest und sehen Sie, wie sich dies zu *override* ändert. ## Limits & Hinweise {#limits-notes} - **Aus ist aus.** Bei ausgeschaltetem `quota_enabled` begrenzt die alte Regel `new_account_max_vms` (**Services › Virtual Machines › Policy › Sales**) neue Konten auf 2 VMs, bis ihre Einzahlungen $10 erreichen. Wenn die Quota aktiv ist, gilt diese Regel nicht mehr. - **Von Administratoren erstellte VMs werden nicht blockiert.** - **Fehler schlagen fehl (Fail closed).** Wenn der Quota-Status nicht gelesen werden kann, wird die Anfrage mit `quota_unavailable` abgelehnt, anstatt sie zu erlauben. - **API-, CLI- und MCP-**Anfragen verwenden dieselben Handler, sodass dieselben Limits gelten. - **Guthaben durch Werbeaktionen** hebt eine Stufe nicht an (siehe [Promotions](https://nexcmp.com/de/docs/billing/promotions/)). - **Die Schwellenwerte für Stufen sind Centbeträge**, keine Dollar. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | `quota_exceeded`, Grund `resources` | Die neue Gesamtzahl an vCPUs/RAM/Festplattenspeicher liegt über der Stufe. | Laden Sie den Betrag aus der Meldung auf oder legen Sie eine Ausnahme fest. | | `quota_exceeded`, Grund `vm_30d` | Mehr als die 24-Stunden-Stufen-VM-Anzahl und das Guthaben deckt den Betrieb der Flotte noch nicht für 30 Tage ab. | Laden Sie den angezeigten Betrag auf. | | `quota_exceeded`, Grund `vm_max` | Das absolute VM-Limit ist erreicht. | Erhöhen Sie **Max VMs when meeting 30-day threshold** oder verwenden Sie eine Ausnahme. | | `quota_exceeded`, `scope: service` | Ein dienstbezogenes Limit wurde erreicht. | Erhöhen Sie den Tabellenwert oder überschreiben Sie diesen Schlüssel für den Kunden. | | `quota_unavailable` | Der Quota-Status konnte nicht verifiziert werden. | Wiederholen Sie den Vorgang; prüfen Sie das Serverprotokoll, falls das Problem weiterhin besteht. | | "quota_max_vms_30d must be >= quota_max_vms_24h" beim Speichern | Werte vertauscht | Machen Sie den 30-Tage-Wert mindestens so groß wie den 24-Stunden-Wert. | | Kunde gibt an, dass die Stufe herabgestuft wurde | Sie wird nicht herabgestuft; vergleichen Sie die **Basis gehaltene Ressourcen** mit den Plankosten. | Überprüfen Sie die Plankostenliste: Eine Preiserhöhung eines Plans kann die Schwellenwerte verschieben. | --- # Kunden verwalten {#managing-customers} > **Wo im Admin-Bereich:** Customers › Customers › List (`/customers`), Deletion requests (`/customers/requests`), Service transfers (`/customers/transfers`) und API keys (`/customers/apikeys`). ## Funktion {#what-it-does} Im Bereich „Kunden“ schlägt Support-Personal ein Konto nach, sieht dessen Guthaben, Dienste, Tickets sowie Anmeldehistorie ein und kann Aktionen darauf ausführen: sperren, entsperren, E-Mail verifizieren, Passwort zurücksetzen, Guthaben hinzufügen oder entfernen, sich als der Kunde ausgeben, eine VM erstellen oder das Konto schließen. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Rolle | Ein Administrator. Jede Schreibaktion erfordert die Angabe eines Grundes und wird im Audit-Log protokolliert (System › Logs › Admin actions). | | E-Mail | Passwort-zurücksetzen- und Einladungs-E-Mails erfordern eine funktionierende [SMTP configuration](https://nexcmp.com/de/docs/administration/smtp-and-emails/). | ## Die Kundenliste {#the-customer-list} Öffnen Sie **Customers › List**. Kunden sind Konten Ihrer Hauptseite; Konten von Resellern werden ebenfalls angezeigt und können nach Seite gefiltert werden. ![Kundenliste mit den Filtern sowie den Spalten für Land, Empfehlungsquelle, Guthaben und VM-Anzahl](https://nexcmp.com/de/docs/images/customers/managing-customers-01-list.webp) | Spalte | Bedeutung | |---|---| | **Email** (und Name) | Klicken Sie hier, um den Kunden zu öffnen. | | **State** | *Active*, *Locked* oder *Deleted* sowie eine *verifizierte* oder *unverifizierte* E-Mail. Bewegen Sie den Mauszeiger über ein Sperrsymbol, um den Grund zu lesen. | | **Login** | Anmeldemethoden, über die der Kunde verfügt: Passwort, Google, GitHub, Passkey. | | **Country** | Flagge und Name abgeleitet von der **IP-Adresse**: Das Land der Registrierungs-IP oder, falls diese unbekannt ist, der letzten Anmelde-IP. Der Tooltip gibt an, welche verwendet wurde. | | **Referral source** | *Referral* mit einem Link zum Werbenden und dem Empfehlungscode, wenn sich der Kunde über einen Affiliate-Link registriert hat; andernfalls „Nicht erfasst“. | | **Balance**, **VMs** | Guthaben (negative Werte in Rot) und Anzahl der aktiven VMs. | | **IP registriert / zuletzt** | Die bei der Registrierung und beim letzten Login verwendete IP mit zweistelligem Ländercode. Dient dem Erkennen mehrerer Konten von derselben Adresse. | | **Mandant** | Die interne Mandanten-ID des Kunden. | | **Erstellt**, **Letzter Login** | Relative Zeitangaben. | | **Site** | Wird angezeigt, wenn Sie Reseller haben. | **Suche** akzeptiert E-Mail, Name oder IP. **Filter:** Status (alle, aktiv, gesperrt, gelöscht), Anmeldemethode (beliebig, Google, GitHub, Passkey, noch kein Passwort) und Standort. Filter bleiben in der URL erhalten, sodass eine gefilterte Liste mit einem Lesezeichen versehen oder mit Kollegen geteilt werden kann. **Die Sortierung erfolgt global.** Ein Klick auf die Kopfzeile von *Email*, *State*, *Balance*, *VMs*, *Created* oder *Last login* sortiert den **gesamten** Kundenbestand auf dem Server und nicht nur die aktuell angezeigte Seite, wobei die Seitenzahl auf 1 zurückgesetzt wird. **Die Liste aktualisiert sich von selbst.** Sie aktualisiert sich alle paar Sekunden, während Sie sie ansehen (sie pausiert, während ein Dialog geöffnet ist oder Sie tippen), sodass neue Registrierungen und Guthabenänderungen ohne Neuladen angezeigt werden. Die Kundenseite aktualisiert sich etwa alle 30 Sekunden, während sie sichtbar ist; jeder Tab lädt beim ersten Öffnen seine eigenen Daten. ### Kunden erstellen {#create-a-customer} 1. Klicken Sie auf **Create customer**. 2. Geben Sie die **E-Mail-Adresse**, einen optionalen **Anzeigenamen** sowie ein optionales **Passwort** ein (leer = der Kunde legt es über den Einladungslink fest) und wählen Sie aus, ob die **Einladungs-E-Mail gesendet** werden soll. 3. Bestätigen. Ein manuell erstelltes Konto gilt beim Senden der Einladung als verifiziert. ## Kundenseite {#a-customer-s-page} Klicken Sie auf eine Zeile. Die Seite enthält acht Tabs; der ausgewählte Tab bleibt in der URL erhalten, sodass Sie ein Lesezeichen setzen können. Tabs werden beim ersten Öffnen geladen und behalten ihren Zustand bei, wenn Sie zu einem anderen wechseln. | Registerkarte | Inhalt | |---|---| | **Overview** | Identität, Registrierungs- und letzte Anmeldeinformationen, Wallet- und Serviceübersicht | | **Services** | Eine Tabelle für die Services des Kunden mit Filtern nach Typ und Status, Suche, serverseitiger Sortierung und Paginierung | | **Billing** | Wallet und Guthaben, Ledger, Rechnungen, Zahlungen, Rückerstattungen, gespeicherte Zahlungsmethode und automatisches Aufladen | | **Quota** | Ressourcenlimits und Überschreibungen; siehe [Quotas](https://nexcmp.com/de/docs/billing/quotas/) | | **Sicherheit** | Sitzungen, Authentifizierung, Anmeldemethoden, Anmeldeverlauf und API-Schlüssel; siehe [API keys](https://nexcmp.com/de/docs/developers/api-keys/) | | **Support** | Letzte Tickets | | **Affiliate** | Status des Empfehlungsprogramms | | **Log** | Audit- und Aktivitätsverlauf | Aktionsschaltflächen im Header (bei gelöschten Konten ausgeblendet): | Schaltfläche | Funktion | |---|---| | **Lock account** / **Unlock** | Blockiert die Anmeldung und den API-Zugriff. Optional werden auch alle VMs gestoppt (ohne sie zu löschen). Prepaid-Dienste, die keine VMs sind (Kubernetes, Private Cloud, VPN usw.), werden ebenfalls gestoppt. Von einem Administrator gesperrte VMs müssen auf der VM-Seite separat entsperrt werden. | | **E-Mail verifizieren** | Markiert die E-Mail-Adresse als verifiziert, ohne dass der Kunde auf einen Link klicken muss. | | **Send reset link** | Sendet einen Link zum Zurücksetzen des Passworts per E-Mail (gültig für 1 Stunde, einmalig verwendbar). Ist SMTP nicht konfiguriert, wird der Link einmal angezeigt, damit Sie ihn selbst versenden können. Ein Administrator sieht das Passwort zu keinem Zeitpunkt. | | **Impersonate** | Meldet sich für eine Stunde als der Kunde an. Siehe [Log in as a customer](https://nexcmp.com/de/docs/customers/login-as/). | | **Credit / debit** | Fügt Guthaben hinzu oder entfernt es über eine Kontenkorrektur. Siehe [Invoices and ledger](https://nexcmp.com/de/docs/billing/invoices-and-ledger/). | | **Revoke sessions** | Meldet den Kunden überall ab; App-Token funktionieren nicht mehr. | | **Create VM** | Erstellt eine VM für den Kunden. | | **Soft delete** | Schließt das Konto. Sie müssen die E-Mail-Adresse zur Bestätigung eingeben. | ### Einzelnen Service verwalten {#manage-an-individual-service} Öffnen Sie den Tab **Services** des Kunden, suchen Sie einen Service nach Name, ID, IP oder Konfiguration und nutzen Sie dessen Zeilenaktionen. Dieselben Aktionen sind auch in der eigenen Admin-Liste des Services verfügbar. Der Dialog bietet nur Aktionen an, die von diesem Service und seinem aktuellen Status unterstützt werden. | Aktion | Effekt | |---|---| | **Lock** | Stoppt den Service unter Beibehaltung seiner Daten. Der Kunde sieht ihn als gesperrt und kann ihn nicht bedienen. Eine Aufladung hebt die Sperre eines Administrators nicht auf; automatische Verlängerungen sind während der Sperrung blockiert. | | **Unlock** | Hebt die Administratorsperre auf. Eine davon unabhängige Abuse- oder andere Schutzsperre wird dadurch nicht entfernt. | | **Cancel without refund** | Kündigt den Service ohne Erstattungsbuchung im Ledger. Die Bestätigung warnt davor, dass die Kündigung nicht rückgängig gemacht werden kann. | | **Cancel and refund** | Zeigt die ursprünglichen Zahlungen, deren Zuordnung zu Wallet/Guthaben, bisherige Erstattungen und den maximal erstattungsfähigen Betrag an. Prüfen Sie den Betrag vor der Bestätigung. | Geben Sie für jede Aktion einen Grund an. Der Grund ist für Administratoren bestimmt; der Kunde erhält ein neutrales Service-Ereignis oder eine Benachrichtigung. Erstattetes Wallet-Guthaben wird dem Wallet wieder gutgeschrieben, und Guthaben- oder Aktionszuweisungen kehren zum Guthaben zurück. Diese Aktion sendet kein Geld über Stripe, Banküberweisung oder PayPal zurück. Wählen Sie bei mehreren Diensten desselben Typs bis zu 50 Zeilen aus und wählen Sie eine Massenaktion. Das Ergebnis listet Erfolg oder Fehlschlag für jede Zeile auf. Massenerstattungen verwenden den jeweils vorgeschlagenen Betrag des Dienstes; Dienste, deren vorgeschlagene Erstattung null beträgt, werden im Erstattungsmodus übersprungen und erfordern eine individuelle Prüfung oder Kündigung ohne Erstattung. DDoS Shield, Festplatten und Backups sind hier schreibgeschützte Zeilen. Bandbreiten-Add-ons folgen ihrem übergeordneten Dienst. Der Zugriff auf AI Models kann gesperrt werden, verfügt jedoch über kein zu kündigendes Abonnement. Um einen gemieteten Bare-Metal-Server zu sperren, bearbeiten Sie dessen Abonnement statt seiner Bestellung. ### Kontoschließung (Soft-Delete) {#closing-an-account-soft-delete} Das Konto wird auf *gelöscht* gesetzt, gesperrt, seine Sitzungen werden widerrufen und noch nicht ausgezahlte Provisionsgutschriften werden storniert. Rechnungen und das Hauptbuch bleiben für die Buchhaltung erhalten. Die Aktion wird verweigert, solange der Kunde noch **einen aktiven Dienst** (VM, Kubernetes, Private Cloud, Dedicated, VPN, IPv6-Proxy), ein S3-Konto oder unbeglichene S3-Nutzung besitzt. Löschen Sie diese zuerst. ## Löschanträge {#deletion-requests} Ein Kunde kann auf seiner Kontoseite die Löschung beantragen. Anträge erscheinen unter **Customers › Deletion requests** (Standardfilter: ausstehend) mit Kunde, Grund, Anzahl der aktiven VMs, Guthaben und Antragszeitpunkt. - **Approve deletion** ist nur möglich, wenn der Kunde keine aktive VM besitzt. Geben Sie die E-Mail-Adresse zur Bestätigung ein. Das Konto wird per Soft-Delete gelöscht; **das verbleibende Guthaben wird nicht automatisch erstattet** — erstellen Sie vorab eine Gutschrift, falls Sie Beträge schulden. - **Reject** erfordert die Angabe eines Grundes. ## Dienstübertragungen {#service-transfers} **Customers › Service transfers** listet Anträge auf die Übertragung einer **VM oder eines VPN-Abonnements** von einem Konto auf ein anderes Konto **auf derselben Site** auf. - Der Bildschirm dient ausschließlich dem Anzeigen und Erstellen: Sie können im Auftrag eines Kunden einen Antrag erstellen oder einen abbrechen. Es gibt absichtlich **keine** Schaltfläche zur Genehmigung durch den Besitzer oder Empfänger. - Ablauf: Der Besitzer bestätigt über einen einmaligen E-Mail-Link (gültig für 30 Minuten, mit TOTP, falls aktiviert), anschließend meldet sich der Empfänger an und akzeptiert (der Empfänger übernimmt die Zahlungsverpflichtungen). Ein nicht innerhalb von 7 Tagen akzeptierter Antrag verfällt. - Regeln: Der Dienst muss aktiv sein, ohne unbezahlte Rechnung und ohne laufenden Job; der Empfänger muss ein aktiver Kunde mit verifizierter E-Mail-Adresse auf derselben Site sein. Eine VM-Übertragung entfernt den SSH-Key und deaktiviert die automatische Verlängerung; eine VPN-Übertragung ändert die Verbindungspasswörter. - Bereits ausgestellte Rechnungen verbleiben beim vorherigen Besitzer; der neue Besitzer kann die Abrechnungshistorie des Dienstes einsehen, wobei die Daten des vorherigen Besitzers ausgeblendet sind. - Kunden können eigene Anträge unter **Transfers** im Portal erstellen (5 Anträge pro Stunde und maximal 3 offene gleichzeitig). ## Verifizierung {#verify} 1. Erstellen Sie einen Kunden mit einer Einladungs-E-Mail. Das neue Konto erscheint innerhalb weniger Sekunden ganz oben in der Liste. 2. Nach **Balance** sortieren: Die Reihenfolge umfasst alle Kunden. 3. Kunden sperren: Das Status-Tag wechselt zu *Locked* und der Kunde kann sich nicht mehr anmelden. Wieder entsperren. ## Limits & Hinweise {#limits-notes} - Die Spalte für das Land ist ein auf IP basierender Richtwert und kein Wohnsitznachweis. Private oder unbekannte Adressen liefern kein Land. - Das Sperren eines Konto erstattet keine Beträge und löscht keine VMs, es sei denn, Sie wählen zusätzlich deren Stoppen. - Das Entsperren des Kontos entsperrt keine VMs, die von einem Administrator gesperrt wurden; öffnen Sie diese separat auf der VM-Seite. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "Kunde hat noch aktive Services ... zuerst stoppen/löschen" | Der Kunde besitzt aktive Dienste oder ein S3-Konto | Entfernen Sie diese und führen Sie dann ein Soft-Delete aus. | | Freigabe zum Löschen meldet „N VMs alive“ | Gleicher Grund | Löschen Sie zuerst die VMs. | | Reset-Link statt „E-Mail in Warteschlange“ angezeigt | SMTP nicht konfiguriert | Konfigurieren Sie E-Mail oder senden Sie den Link selbst. | | Anmeldemethode kann nicht entfernt werden (`last_login_method`) | Dies ist die einzige Anmeldemethode des Kunden | Fügen Sie zuerst eine weitere Methode hinzu. | | Sperrung stoppt Prepaid-Dienste nicht | Stopp-Fehler wurden gemeldet | Lesen Sie die Meldung nach dem Sperren; das System versucht automatisch erneut, den Dienst zu stoppen. | | Ein Transfer kann nicht erstellt werden | Unbezahlte Rechnung, laufender Job, Empfänger auf anderer Site oder unbestätigt | Beheben Sie die Ursache und versuchen Sie es erneut. | --- # Als Kunde anmelden {#log-in-as-a-customer} > **Wo im Admin:** Customers › Customers › List › a customer › header button **Impersonate** (`/customers/`). ## Funktion {#what-it-does} **Impersonate** (Login-as) ermöglicht es einem Support-Administrator, das Portal genau so zu sehen wie ein einzelner Kunde, um ein Problem zu reproduzieren oder bei einer Bestellung zu helfen. Die Sitzung dauert eine Stunde und ist klar von einer normalen Sitzung getrennt: Alles, was dauerhaften Zugriff auf das Konto gewähren könnte, ist blockiert, und jede Nutzung wird protokolliert. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Rolle | Ein in der Admin-Konsole angemeldeter Administrator. | | Kunde | Das Konto muss **aktiv** sein. Ein gesperrtes oder gelöschtes Konto liefert die Antwort „Konto ist nicht aktiv“ (HTTP 409). | | Grund | Ein Grund ist obligatorisch; er wird in das Audit-Log geschrieben. | | Browser | Erlauben Sie Pop-ups für die Admin-Adresse: Das Portal öffnet sich in einem neuen Fenster. | ## Schritte {#steps} 1. Öffnen Sie **Customers › List** und klicken Sie auf den Kunden. 2. Klicken Sie auf **Impersonate**. Ein Dialog erklärt, dass die Website des Kunden für eine Stunde als dieser Kunde geöffnet wird und dass jede Aktion protokolliert wird. 3. Geben Sie den **Grund** ein (zum Beispiel „Ticket 1234 — VM kann nicht erstellt werden“) und klicken Sie auf **Open app**. 4. Ein neues Fenster öffnet sich auf der Website des Kunden und zeigt das Dashboard mit `?impersonated=1` an. Wenn der Browser das Fenster blockiert hat, erlauben Sie Pop-ups und klicken Sie erneut. ![Impersonate-Dialog mit ausgefülltem Grund-Feld](https://nexcmp.com/de/docs/images/customers/login-as-01-dialog.webp) Bei einem Kunden eines Resellers öffnet sich das Fenster auf der **eigenen Domain des Resellers**, da der Link nur auf der Website des Kunden selbst funktioniert. ## Wie es funktioniert {#how-it-works} 1. Die Admin-Aktion erstellt ein **einmalig verwendbares Token**, das eine Stunde lang gültig ist, und schreibt `customer.login_as` (Administrator, IP, Grund, Site) in das Audit-Log. 2. Das neue Fenster öffnet sich `https:///v1/portal/impersonate/`. Eine erste Anfrage zeigt nur eine kleine Seite und verbraucht das Token **nicht** (sodass Browser-Prefetching es nicht entwerten kann); die Seite bestätigt dies anschließend mit einem POST. 3. Der POST verbraucht das Token. Eine zweite Verwendung oder eine Verwendung nach einer Stunde liefert die Antwort „The impersonation link has expired or was already used“. 4. NexCMP erstellt eine Kundensitzung mit einer Dauer von **einer Stunde** (eine normale Sitzung dauert 30 Tage), zeichnet einen Anmeldeeintrag mit der Methode `impersonate` auf und protokolliert `customer.login_as.used`. 5. Das Token funktioniert nur auf der eigenen Website des Kunden; auf einem anderen Host antwortet es mit 404. ## Was in einer übernommenen Sitzung blockiert ist {#what-is-blocked-in-an-impersonated-session} Alles, was Zugriff über die Stunde hinaus gewährt oder die Sicherheit des Kunden selbst ändert, gibt HTTP 403 zurück `impersonate_forbidden`: | Blockiert | Grund | |---|---| | Ändern des Passworts, TOTP, Verknüpfen oder Trennen von Google/GitHub, Bearbeiten von Passkeys | Eigene Anmeldedaten des Kunden | | Löschen des Kontos | Irreversibel | | Erstellen oder Bearbeiten von **API keys** | Langlebiger Zugriff | | Genehmigen eines CLI-, Desktop- oder MCP-Logins (Geräteverknüpfung) | Langlebiger Zugriff | | Erstellen von Kubernetes-Zugriff, S3-Keys, SSH-Keys, Root-Passwörtern, Konsolenfreigabelinks, VPN- oder Proxy-Anmeldedaten | Geheimnisse, die die Sitzung überdauern | | Einlösen von Auflade-Codes | Geldaktionen | | Ausbezahlen oder Ändern der Auszahlung von Affiliate-Provisionen | Geld verlässt das System | | Bearbeiten von KI-Keys, Budgets oder Benachrichtigungs-E-Mails | Kundenkonfiguration | Alles andere funktioniert: Sie können die Seiten lesen, VMs erstellen oder verwalten, Bestellungen aufgeben und so weiter. Aktionen werden mit der Identität des Kunden ausgeführt und geben das Geld des Kunden aus; die obigen Audit-Einträge zeigen, dass ein Administrator hinter der Sitzung stand. ## Verifizierung {#verify} 1. Einen Testkunden übernehmen. Das Portal öffnet sich und zeigt die Daten dieses Kunden an. 2. Versuchen Sie, das Passwort zu ändern: Sie erhalten "forbidden" (Impersonation). 3. Finden Sie in **System › Logs › Admin actions** den Eintrag `customer.login_as` mit Ihrem Namen, dem Grund und der Site, gefolgt von `customer.login_as.used`. 4. Schließen Sie das Fenster und öffnen Sie denselben Link erneut: "link expired or already used". ## Limits & Hinweise {#limits-notes} - Das Einhundert-Minuten-Limit (3600 Sekunden) ist fest. Um fortzufahren, führen Sie die Übernahme erneut durch. - Bevorzugen Sie das Lesen und Reproduzieren; vermeiden Sie Aktionen, die Geld kosten, es sei denn, der Kunde hat Sie darum gebeten. - Widerrufen Sie die Sitzung vorzeitig mit **Revoke sessions** auf der Kundenseite (dies meldet den Kunden ebenfalls ab). - Reseller haben ihre eigene **Sign in to partner console**-Übernahme (60 Minuten) unter Resellers; siehe [Resellers](https://nexcmp.com/de/docs/customers/resellers/). ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "Konto ist nicht aktiv" | Konto gesperrt oder gelöscht | Entsperren Sie es zuerst oder rufen Sie stattdessen die Kundenseite auf. | | Browser blockiert das Fenster | Pop-up-Blocker | Erlauben Sie Pop-ups für die Admin-Adresse und versuchen Sie es erneut. | | "Link abgelaufen oder bereits verwendet" | Ein-Stunden-Limit oder Wiederverwendung | Erneut übernehmen. | | Öffnet "Not found" | Der Link wurde auf dem falschen Host verwendet | Verwenden Sie das Fenster, das der Dialog geöffnet hat; fügen Sie den Link nirgendwo anders ein. | | Eine Aktion gibt "forbidden" aus | In übernommenen Sitzungen blockiert | Bitten Sie den Kunden, dies zu tun, oder verwenden Sie die Admin-Masken. | --- # Reseller (White-Label) {#resellers-white-label} > **Im Administratorbereich:** Customers › Resellers › List (`/resellers`), Domains & SSL (`/resellers/domains`), Permissions & wholesale (`/resellers/entitlements`), Defaults (`/resellers/settings`). Reseller-Slots: System › Admin › License & updates (`/license`). ## Funktion {#what-it-does} Ein **Reseller** erhält eine gebrandete Kopie des Kundenportals auf **seiner eigenen Domain** mit eigenen Kunden, Guthaben, Preisen und (optional) Zahlungskanälen. Er kauft von Ihnen zu einem Großhandelspreis ein und verkauft zu seinen eigenen Preisen. Seine Kunden sehen niemals Ihre Marke, und die Reseller-Domain kann niemals Ihre Admin-Konsole öffnen. Der Reseller betreibt sein Geschäft über die **Partnerkonsole** unter `https://partner.`. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Lizenz | Ein **Reseller-Domain-Slot** auf Ihrer Lizenz für jede benutzerdefinierte Reseller-Domain. Die Lizenzseite zeigt `used/max` Slots und einen Link zum Kauf weiterer Slots. Ohne freien Slot schlägt das Hinzufügen einer Domain mit der Meldung "Out of license reseller domain slots" fehl. | | DNS | Jede Reseller-Domain muss auf Ihren Server verweisen (siehe unten). | | Webserver und TLS | Der Hostname muss das NexCMP-Panel über Ihren Reverse Proxy mit einem gültigen Zertifikat für diesen Namen erreichen. | | E-Mail | SMTP für die Einladungs- und Benachrichtigungs-E-Mails konfiguriert. | | Hauptschalter | **Reseller settings › General › `rs_enabled`** ist standardmäßig aktiviert. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} 1. Legen Sie die öffentliche Adresse des Servers fest: seine IPv4-Adresse und, falls Sie CNAMEs bevorzugen, einen Hostnamen, der darauf verweist (zum Beispiel `sites.cloud.example.com`). 2. Öffnen Sie **Customers › Resellers › Defaults** (`/resellers/settings`), die Gruppe **Domains & SSL** und legen Sie Folgendes fest: | Schlüssel | Bedeutung | |---|---| | `rs_server_ipv4` | Die öffentliche IPv4-Adresse, auf die die A-Records der Reseller verweisen müssen. | | `rs_cname_target` | Der Hostname, auf den die CNAME-Records der Reseller verweisen müssen. | | `rs_master_hosts` | Hostnamen, die zu Ihrer eigenen Hauptseite gehören (sie können nicht an Reseller vergeben werden). | | `rs_platform_domain` | Optionale übergeordnete Domain für **Plattform-Subdomains** (zum Beispiel `partners.cloud.example.com`, um Resellern `acme.partners.cloud.example.com` bereitzustellen). Leer lässt die Option deaktiviert. | | `rs_sites_stale_minutes` | Minuten, bevor der Zertifikatsdienst als veraltet gilt (Standard: 15). | | `rs_ssl_fail_hours` | Stunden fehlgeschlagener Versuche, bevor ein Fehler ausgegeben wird (Standard: 48). | ::: warning Überprüfen Sie diese Werte, bevor Sie Anweisungen senden `rs_server_ipv4`, `rs_cname_target` und `rs_master_hosts` enthalten Beispielwerte. Ersetzen Sie diese durch Ihren eigenen Server und Ihre eigene Domain, **bevor** Sie DNS-Anweisungen an einen Reseller übergeben, da die Anweisungen auf dem Bildschirm sonst auf den falschen Ort verweisen. ::: 3. Klicken Sie auf **Save** (ein Grund wird abgefragt). 4. Stellen Sie sicher, dass Ihr Reverse Proxy die Reseller-Hostnamen an das NexCMP-Panel weiterleitet und für jeden von ihnen ein Zertifikat bereitstellt. Der Installer konfiguriert Nginx und Let's Encrypt nur für die Hauptdomain (sowie die auflösbaren Namen `admin.` und `partner.`). Wenn Sie Cloudflare verwenden, leiten Sie den Hostnamen über den Proxy und verwenden Sie den Full-SSL-Modus. ## In NexCMP verbinden {#connect-in-nexcmp} ### Reseller erstellen {#create-the-reseller} 1. Öffnen Sie **Customers › Resellers › List** und klicken Sie auf **New reseller**. Der Assistent hat 8 Schritte und richtet am Ende alles ein; jeder Schritt kann sicher wiederholt werden. | Schritt | Ausfüllen | |---|---| | **Reseller** | Rechts- oder Handelsname, **Slug** (4–31 Zeichen a–z, 0–9 oder `-`, beginnt mit einem Buchstaben; dies ist auch das Rechnungskräfix), Ansprechpartner, E-Mail und Telefon, Standardsprache, Rechnungsdaten des Resellers (als Käufer von Guthabenaufladungen). | | **Konsolenkonto** | Benutzername, Konto-E-Mail, vollständiger Name; **Send a one-time invite link by e-mail** (72 Stunden gültig, empfohlen) oder einmalige Anzeige eines temporären Passworts. | | **Marke** | Markenname, Kurzname, Slogans, Primärfarben, Support-E-Mail und -Telefon, der auf Kundenrechnungen aufgedruckte Verkäufername, Logos (heller und dunkler Hintergrund), quadratisches Markenzeichen und Favicon: PNG, JPEG, WEBP oder ICO bis zu 256 KB, **kein SVG**. | | **Domains** | Die Kundendomain(s) **inklusive www**, welche davon primär ist, eine **Testdomain** (sslip.io) und die **Dry-Run**-Option oder eine Plattform-Subdomain. Der Assistent zeigt **DNS OK / DNS not ready** sowie die zu erstellenden Einträge. | | **Pricing & wallet** | Großhandelsrabatt (%), Untergrenze für den Einzelhandel (% des Listenpreises), Standardaufschlag (%), Kreditlimit, Anfangsguthaben, Warnung bei geringem Guthaben, Limits für Kunden, VMs und Domains, Website-Funktionen (Kundenregistrierung, DDoS-Schutz, Support-Tickets, benutzerdefinierter Tarif, Resize, Auto Scaling). | | **Payment channels** | Wer Kundenzahlungen einzieht (siehe unten) sowie optional ein eigenes PayPal und eine eigene vietnamesische Banküberweisung. | | **Email** | Absendername und Reply-To. Die From-Adresse bleibt die Plattformadresse, bis DKIM für die Reseller-Domain eingerichtet ist. | | **Review** | Überprüfen Sie alles und klicken Sie auf **Provision everything** oder **Save draft (provision later)**. | 2. Die Provisionierung läuft im Hintergrund weiter (alle 30 Sekunden). Öffnen Sie den Reseller, um den Fortschritt zu sehen, und verwenden Sie **Continue provisioning** oder **Retry**, falls ein Schritt fehlgeschlagen ist. ![Assistent für neue Reseller im ersten Schritt mit Beispielwerten](https://nexcmp.com/de/docs/images/customers/resellers-01-wizard.webp) ### DNS konfigurieren (führt der Reseller aus) {#point-dns-the-reseller-does-this} Der Reseller (oder Sie) erstellt die auf dem Tab **Domains & SSL** angezeigten Einträge: | Eintrag | Name | Wert | |---|---|---| | TXT (Inhaberschaft, nur beim ersten Mal) | `_site-verify.` | `sv=` auf dem Bildschirm angezeigt | | A (Apex-Domain wie `shop.example.net`) | die Domain | Ihre `rs_server_ipv4` | | CNAME (Subdomain wie `cloud.example.net`) | die Domain | Ihre `rs_cname_target` (oder ein A-Eintrag auf `rs_server_ipv4`) | | CNAME (optional) | `www.` | Ihre `rs_cname_target` | Außerdem: - Entfernen Sie alle **AAAA**-Einträge (IPv6), es sei denn, Ihr Server antwortet unter dieser IPv6-Adresse. - Schalten Sie den CDN-Proxy **aus** (graue Wolke), während die Domain verifiziert wird. - Wenn die Domain **CAA**-Einträge besitzt, erlauben Sie `letsencrypt.org`. Das Token im TXT-Eintrag ist für jede Domain unterschiedlich; kopieren Sie es vom Bildschirm. Das System überprüft das DNS in den ersten 48 Stunden alle 5 Minuten, danach stündlich, und gibt einen Namen frei, dessen TXT-Eintrag nach 72 Stunden noch immer fehlt. ### Domain-Status {#domain-states} Unter **Customers › Resellers › Domains & SSL** (alle Reseller) und im Tab **Domains & SSL** eines Resellers: | Status | Bedeutung | |---|---| | `pending_verify` | Wartet auf den TXT-Eintrag. | | `pending_dns` / `verifying` | Wartet darauf, dass A oder CNAME auf Sie verweist. | | `issuing` | Zertifikat wird ausgestellt. | | `active` | Bedient die Website des Resellers. | | `cert_expiring` | Zertifikat läuft bald ab; Erneuerung wird erwartet. | | `dns_lost` | DNS verweist nicht mehr auf Sie; nach 30 Tagen wird die Domain entfernt. | | `error` | Fehlercode anzeigen; **Retry** nach der Behebung. | | `removing` / `removed` | Wird entzogen; der Lizenzplatz wird zurückgegeben. | Zeilenaktionen: **Check now**, **Retry**, **Make primary**, **Test mode** (für eine Testdomain), **Remove**. ## Berechtigungen & Großhandel {#permissions-wholesale} **Customers › Resellers › Permissions & wholesale** (`/resellers/entitlements`) ist eine Matrix: eine Zeile pro Reseller mit **Rabatt** (Wholesale) und **Aufschlag** sowie einem Schalter pro Dienst (zum Beispiel DDoS Shield und VPN). Ein Schalter ist bearbeitbar, wenn das plattformweite Feature eingeschaltet ist; andernfalls ist die Zelle schreibgeschützt und verlinkt zur Einstellung. Die Registerkarte **Top-up codes** legt fest, wie viele Codes jeder Reseller pro Monat ausstellen darf (siehe [Promotions](https://nexcmp.com/de/docs/billing/promotions/)). Preisregeln: - Großhandelspreis = Listenpreis x (1 - Rabatt) und kann pro Tarif und Abrechnungszeitraum im Tab **Wholesale pricing** des Resellers überschrieben werden. - Der Reseller legt die Endkundenpreise fest und darf das **Limit** (Prozentsatz des Listenpreises) nicht unterschreiten. - Das **Wallet** des Resellers bezahlt den Großhandelspreis, wenn dessen Kunden kaufen. Das Wallet hat ein Kreditlimit, eine Nachfrist und eine Überziehungsobergrenze (siehe Standardwerte). ## Standardwerte {#defaults} **Customers › Resellers › Defaults** (`/resellers/settings`) sind die `rs_*`-Schlüssel, die für jeden Reseller gelten. Jede Änderung erfordert die Angabe eines Grundes und wird protokolliert. | Gruppe | Schlüssel | Standard | Bedeutung | |---|---|---|---| | Allgemein | `rs_enabled` | 1 | Reseller-Programm aktiviert. | | | `rs_platform_collect_enabled` | 0 | Ermöglicht der Plattform, Kundenzahlungen für Reseller einzuziehen. **Nur nach rechtlicher Prüfung aktivieren.** | | | `rs_totp_required` | 1 | Reseller-Konsolenkonten müssen die Zwei-Faktor-Authentifizierung verwenden. | | | `rs_agreement_version` | 1 | Version der Reseller-Vereinbarung, die diese akzeptieren müssen. | | Standardpreisgestaltung | `rs_default_discount_bp` | 2000 (20 %) | Großhandelsrabatt für neue Reseller (Basispunkte, 0 bis 9000). | | | `rs_default_markup_bp` | 2500 (25 %) | Standardaufschlag (0 bis 50000). | | | `rs_default_floor_bp` | 9000 (90 %) | Endkunden-Mindestpreis (0 bis 20000). | | | `rs_default_max_domains` | 3 | Erlaubte Domains pro Reseller. | | Wallet und Auszahlungen | `rs_grace_hours` | 72 | Nachfrist, bevor Kundendienste von einem leeren Reseller-Wallet beeinträchtigt werden. | | | `rs_overdraft_cap_cents` | 5000 | Erlaubte Überziehung des Wallets. | | | `rs_retention_days` | 14 | Tage, bevor die VMs eines geschlossenen Resellers gelöscht werden. | | | `rs_payout_hold_days` | 30 | Tage, die eine Provision gehalten wird, bevor sie ausgezahlt werden kann. | | | `rs_payout_min_cents` | 5000 | Kleinste Auszahlung. | | | `rs_topup_min_cents` | 2000 | Kleinste Wallet-Aufladung durch einen Reseller. | | Zahlungen und E-Mail | `rs_webhook_base` | leer | Öffentliche Basis-URL für Reseller-Gateway-Webhooks (leer = Site-URL verwenden). | | | `rs_mail_from` | leer | Absendertadresse für Reseller-E-Mails. | | | `rs_invoice_show_processor` | 1 | Zahlungsdienstleister auf Rechnungen anzeigen. | | | `rs_gw_stripe_enabled`, `rs_gw_usdt_enabled` | 1 | Ob Reseller ihr eigenes Stripe oder USDT konfigurieren dürfen. | ## Wer Kundenzahlungen einzieht {#who-collects-customer-payments} | Modus | Bedeutung | |---|---| | **Reseller zieht ein (eigene Kanäle)** — Standard | Der Reseller verbindet sein eigenes Stripe, PayPal, USDT oder Bankkonto. Seine Webhooks sind `https:///v1/billing//webhook/r/`. Gespeicherte Karten und [auto top-up](https://nexcmp.com/de/docs/billing/auto-top-up/) sind für diese Websites nicht verfügbar. | | **Plattform zieht ein** | Ihre Kanäle werden auf der Reseller-Website angezeigt. Gesperrt bis `rs_platform_collect_enabled = 1`. | | **Gemischt** | Eine pro Kanal gewählte Kombination. | ## Was der Reseller sieht {#what-the-reseller-sees} Die Partnerkonsole unter `https://partner.` bietet Übersicht, Berichte, Kunden, VMs, Tickets, Bestellungen, Zahlungen, Preise, Marke, Landingpage & Rechtliches, Domains & SSL, E-Mail, Wallet und Zahlungskanäle. Konsolenkonten haben die Rolle *reseller* (vollständig) oder *staff* (schreibgeschützt). Um sie selbst anzusehen, öffnen Sie den Reseller und klicken auf **Sign in to partner console**: Sie treten für 60 Minuten ein, jeder Schreibvorgang wird mit Ihrem Namen sowohl im Admin-Log als auch im Reseller-Log protokolliert, und Geldoperationen erfordern eine zweite Bestätigung. ## Verifizierung {#verify} 1. Nach der Bereitstellung zeigt die Zeile des Resellers *active* und eine grüne **Provisioning**-Spalte. 2. Öffnen Sie die Domain des Resellers in einem Browser: Die eigene Login-Seite des Resellers mit dessen Branding wird angezeigt. `https:///admin` liefert einen 404-Fehler. 3. Registrieren Sie einen Testkunden unter dieser Domain: Der Kunde erscheint unter **Customers › List** mit dem Reseller in der **Site**-Spalte. 4. Die Lizenzseite zeigt einen genutzten Slot mehr an. ## Limits & Hinweise {#limits-notes} - Ein Lizenz-Slot pro benutzerdefinierter Domain oder Test-Domain; Plattform-Subdomains verbrauchen keinen Slot. - Das Deaktivieren eines Resellers behält die Daten; **Close reseller** gibt alle Domain-Slots frei, und die VM-Löschung ist erst nach Ablauf der Aufbewahrungsfrist zulässig. - Reseller-Kunden erscheinen in Ihrer Kundenliste und können wie alle anderen übernommen werden (der Link öffnet sich auf der Domain des Resellers). - Reseller können weder Ihre Zahlungskanäle, Standard-Quotas noch andere Reseller sehen oder ändern. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "Lizenzkontingent für Reseller-Domains erschöpft" | Alle Slots belegt | Geben Sie einen Slot frei (entfernen Sie eine Domain) oder kaufen Sie weitere auf der Lizenzseite. | | Domain feststeckend in `pending_verify` | TXT-Eintrag fehlt | Erstellen Sie den TXT-Eintrag exakt wie angezeigt; verwenden Sie **Check now**. | | Domain feststeckend in `pending_dns` | A/CNAME verweist nicht auf Sie, ein AAAA-Eintrag ist vorhanden oder der CDN-Proxy ist aktiv | Beheben Sie das DNS, deaktivieren Sie den Proxy und klicken Sie dann auf **Check now**. | | `error`-Status | Siehe den Code in der Zeile (z. B. CAA blockiert Let's Encrypt, Rate-Limit) | Beheben Sie den Fehler und klicken Sie auf **Retry**. | | Browser meldet, dass der Host unbekannt ist oder "421" | Der Hostname ist nicht auf der Lizenz vorhanden oder wird nicht zum Panel geleitet | Fügen Sie die Domain über den Reseller hinzu (verbraucht einen Slot) und korrigieren Sie den Reverse Proxy. | | Anweisungen zeigen eine falsche IP oder einen falschen Host | `rs_server_ipv4` / `rs_cname_target` enthalten noch die Beispielwerte | Legen Sie diese in den Standardeinstellungen (Defaults) fest. | | Reseller kann Plattform-Einzug nicht aktivieren | Gesperrt | Legen Sie `rs_platform_collect_enabled` nach rechtlicher Prüfung fest. | --- # Branding {#branding} > **Wo im Admin:** System › Settings › Brand (`/settings/branding`). Verwandt: System › Settings › General (`/settings`) für URLs und auf Rechnungen gedruckte Verkäuferdetails. ## Funktion {#what-it-does} NexCMP ist White-Label: Das Produkt enthält keinen Herstellername, und alles, was Ihre Kunden sehen, ist **Ihr** Branding. Die Branding-Einstellungen gelten für Login- und Registrierungsseite, das Portal, die Admin-Konsole und E-Mails. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Rolle | Ein Administrator. | | Dateien | Logos: SVG, PNG, JPEG, WEBP oder ICO, **jeweils bis zu 512 KB**. | | Abhängigkeiten | Keine. | ## Schritte {#steps} 1. Öffnen Sie **System › Settings › Brand**. 2. Füllen Sie in der Karte **Identity** Folgendes aus: | Feld | Hinweise | |---|---| | **Brand name** (Pflichtfeld) | Bis zu 60 Zeichen. Wird im Portal, in E-Mails, Rechnungen und auf rechtlichen Seiten angezeigt. | | **Verkäufername auf Rechnungen** | Bis zu 120 Zeichen. Leer bedeutet den Brand-Namen. | | **Brand color** | Eine `#rrggbb`-Farbe; die kleine Schaltfläche neben dem Feld setzt sie auf die integrierte Farbe zurück. | | **Site currency** | **USD**: Preise und Guthaben werden nur in USD angezeigt, ohne Währungsumschalter. **VND**: zeigt zusätzlich den konvertierten Betrag zum gespeicherten Wechselkurs an (siehe [Currency and exchange rates](https://nexcmp.com/de/docs/catalog/currency-and-exchange-rates/)). | 3. Klicken Sie auf **Save**. 4. Laden Sie in der Karte **Logo & favicon** die drei Bilder — **Logo (heller Hintergrund)**, **Logo (dunkler Hintergrund)** und **Favicon** — über **Upload** (oder **Replace**) hoch; **Remove** löscht eines. ![Markenseite mit den Identitätsfeldern und den drei hochgeladenen Bildern](https://nexcmp.com/de/docs/images/customers/branding-01-brand.webp) ### Verwandte Einstellungen unter Allgemein {#related-settings-in-general} **System › Settings › General** enthält zwei Registerkarten, die das Bild abrunden: | Registerkarte | Felder | |---|---| | **Branding & URLs** | Markenname (E-Mail, Rechnungen), Standardsprache (Englisch oder Vietnamesisch), **Customer app URL**, **Console URL**, **Admin URL** (Reseller-Impersonierungslink) und **Partner console URL** (Einladungslinks, Reseller-E-Mails). Der Installationsassistent füllt diese mit `https://`, `https:///admin` und `https:///console` aus. | | **Seller & invoicing** | Name der juristischen Person, Steuernummer, Adresse, Kontakt-E-Mail und das Rechnungsnummernpräfix. Siehe [Invoices and ledger](https://nexcmp.com/de/docs/billing/invoices-and-ledger/). | Der **From name** von E-Mails wird unter **System › Settings › Email** ([SMTP and e-mails](https://nexcmp.com/de/docs/administration/smtp-and-emails/)) festgelegt. ## Hochgeladene Dateien werden überprüft {#uploaded-files-are-checked} - Rasterbilder werden anhand ihres Inhalts (nicht des Dateinamens) erkannt und vermessen. - **SVG-Dateien werden neu erstellt** anhand einer sicheren Liste von Formen. Eine Datei mit Skripten, `foreignObject`, Event-Attributen, externen Links, extern verweisenden `url(...)`, einem DOCTYPE oder Entitäten wird **abgelehnt** (`svg_unsafe`). - Eine zu große Datei wird mit `asset_too_large`, ein falscher Typ mit `asset_type` und fehlerhafte Abmessungen werden mit `asset_dimensions` abgelehnt. - Dateien werden mit strikten Sicherheitsheadern von Ihrer eigenen Domain ausgeliefert. ## Verifizierung {#verify} 1. Öffnen Sie die Portal-Anmeldeseite in einem privaten Fenster: Das Logo, der Name und die Farbe werden angezeigt. 2. Überprüfen Sie den Browser-Tab auf das Favicon (Browser cachen Favicons; laden Sie die Seite mit geleertem Cache neu, wenn Sie weiterhin das alte sehen). 3. Lösen Sie eine Test-E-Mail aus (zum Beispiel **Send reset link** für einen Testkunden) und überprüfen Sie den Markennamen im Betreff und in der Fußzeile. ## Limits & Hinweise {#limits-notes} - Das Logo für den dunklen Hintergrund wird verwendet, wenn der Kunde oder Administrator zum dunklen Design wechselt. - Reseller haben ihre eigene Marke; sie laden PNG, JPEG, WEBP oder ICO bis zu 256 KB hoch (kein SVG). Siehe [Resellers](https://nexcmp.com/de/docs/customers/resellers/). - Eine Änderung der Markenfarbe oder des Logos wird beim nächsten Laden der Seite angezeigt; bereits gesendete E-Mails werden nicht geändert. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Upload verweigert: `svg_unsafe` | Die SVG enthält Skripte, Links oder externe Verweise | Exportieren Sie eine reine SVG (kein Skript, keine externen Bilder) oder verwenden Sie PNG. | | `asset_too_large` | Datei größer als 512 KB | Komprimieren oder skalieren Sie das Bild. | | `asset_type` | Kein SVG, PNG, JPEG, WEBP oder ICO | Konvertieren Sie die Datei. | | `invalid_argument: primary` | Die Farbe ist nicht `#rrggbb` | Verwenden Sie einen sechsstelligen Hex-Wert. | | Altes Logo noch sichtbar | Browser-Cache | Hartes Neuladen; Favicons können länger dauern. | | Preise werden nur in USD angezeigt | Standortwährung ist USD | Wechseln Sie zu VND und stellen Sie sicher, dass ein Wechselkurs hinterlegt ist. | --- # Rechtliche Seiten {#legal-pages} > **Wo im Adminbereich:** System › Settings › Legal (`/settings/legal`). **Wo Kunden diese sehen:** `https:///terms` und `/privacy`, verlinkt bei Registrierung und Bezahlung. ## Funktion {#what-it-does} Ihre Installation veröffentlicht zwei Seiten: **Terms of Service** und **Privacy Policy**. Bis Sie eigene verfassen, zeigt NexCMP einen **neutralen Standardtext**, der den Softwareanbieter nicht erwähnt und keine bestimmten Dienste zusichert. Ersetzen Sie diesen vor Aufnahme des Verkaufs durch einen von Ihrem Anwalt geprüften Text. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Rolle | Ein Administrator. | | Inhalt | Einfaches Markdown, bis zu **50 KB** pro Seite und Sprache. | | Abhängigkeiten | Markenname und Verkäuferdetails ([Branding](https://nexcmp.com/de/docs/customers/branding/)) werden in den Standardtext eingefügt. | ## Schritte {#steps} 1. Öffnen Sie **System › Settings › Legal**. Jede der beiden Seiten verfügt über eine eigene Karte mit dem Tag *Using the default text* oder *Using your text*. 2. Wählen Sie die Sprachregisterkarte, **English** oder **Tiếng Việt**. 3. Geben Sie Ihren Text ein. Solange das Feld leer ist, wird der Standardtext schwach als Platzhalter angezeigt. Um von diesem aus zu starten, klicken Sie auf **Start from the default text** und bearbeiten Sie ihn. 4. Klicken Sie auf **Save**. Der Größenzähler zeigt `used / 50 KB` an. 5. Klicken Sie auf **View on the customer site**, um `/terms` oder `/privacy` zu öffnen. 6. Um für eine Sprache zum Standard zurückzukehren, klicken Sie auf **Clear, back to default** und speichern Sie. ![Rechtliche Einstellungen mit der Karte der Nutzungsbedingungen, die den Standardtext als Ausgangspunkt zeigt](https://nexcmp.com/de/docs/images/customers/legal-01-terms.webp) ## Inhalt der Standardseiten {#what-the-default-pages-contain} Der Standardtext ist im Produkt als `legal_default.json` gespeichert und wird mit Ihrem Markennamen, Verkäubernamen, der Site-URL und der Kontakt-E-Mail (aus **Seller & invoicing** unter System › Settings › General; ist keine E-Mail angegeben, verweist er auf Ihr Support-Team) befüllt. | Seite | Abschnitte | |---|---| | **Terms of Service** | 1 Der Dienst · 2 Konten und Verifizierung · 3 Preise und Abrechnung · 4 Rückerstattungen · 5 Ihre Daten · 6 Zulässige Nutzung · 7 Verfügbarkeit und Support · 8 Sperrung und Kündigung · 9 Haftung · 10 Änderungen und geltendes Recht (das Recht des Geschäftssitzes des Verkäufers) | | **Privacy Policy** | 1 Was wir erfassen · 2 Warum wir es nutzen · 3 Cookies und lokaler Speicher · 4 Wer es sonst noch sieht · 5 Aufbewahrung · 6 Ihre Rechte · 7 Kontakt | ::: warning Keine Rechtsberatung Der Standardtext ist eine neutrale Vorlage. Lassen Sie ihn vor der Verwendung mit echten Kunden überprüfen, insbesondere die Abschnitte zu Rückerstattungen, Haftung und geltendem Recht. ::: ## Markdown-Regeln {#markdown-rules} - Unterstützt: Überschriften (`# 1. Title`), Absätze, Aufzählungen und nummerierte Listen, **fett** sowie Links `[text](https://example.com)`. - Links müssen mit `http://` oder `https://` beginnen. - **Rohes HTML wird abgelehnt** (jedes ``, ` # Kundenportal-Übersicht {#customer-portal-overview} > **Wo im Portal:** `https:///` — Kunden melden sich unter `/login` an. Administratoren verwenden `/admin`; derselbe Login öffnet beides, wenn das Konto ein Administrator ist. Das Portal ist das, was Ihre Kunden täglich nutzen. Es ist mit Ihrem Namen, Logo und Ihren Farben versehen ([Branding](https://nexcmp.com/de/docs/customers/branding/)) und zeigt nur die Dienste an, die Sie aktiviert haben ([Modules](https://nexcmp.com/de/docs/infrastructure/modules/)). ## Das Dashboard {#the-dashboard} Nach der Anmeldung zeigt das **Dashboard** Folgendes an: | Block | Bedeutung | |---|---| | Guthaben | Aktuelles Guthaben und eine Schätzung, wie viele Tage es bei der aktuellen Verbrauchsrate reicht | | Diesen Monat ausgegeben | Bisherige Kosten und eine Prognose für das Monatsende | | Virtuelle Maschinen | Jede VM mit Status, IP, CPU und RAM sowie Schnellaktionen (Konsole, Neustart) | | Bandbreite | Eingehender/ausgehender Datenverkehr für 1 h, 6 h, 24 h, 7 d, 30 d | | Letzte Aktivitäten | Neueste Ereignisse im Konto | | Schnellstart | Eine Checkliste: VM erstellen, SSH-Schlüssel hinzufügen, aufladen, automatisches Aufladen aktivieren, E-Mail verifizieren | ![Das Kunden-Dashboard mit Guthaben, Kostenprognose, einer laufenden virtuellen Maschine und der Schnellstart-Checkliste](https://nexcmp.com/de/docs/images/portal/overview-01-dashboard.webp) ## Navigation {#navigation} Das Menü gruppiert Dienste nach Typ. Ein deaktivierter Dienst (oder dessen Quelle nicht verbunden ist) wird nicht angezeigt. | Bereich | Seite | |---|---| | Instances | [Virtual machines](https://nexcmp.com/de/docs/portal/virtual-machines/) und deren Detailseiten | | Bereitstellen | [Ordering](https://nexcmp.com/de/docs/portal/ordering/) — Ressource erstellen | | Storage | Snapshots, Backups und Volumes, wenn aktiviert — [Snapshots](https://nexcmp.com/de/docs/portal/snapshots/) | | Billing | [Wallet and top-ups](https://nexcmp.com/de/docs/portal/sign-up-and-wallet/), Rechnungen, Bestellungen, Kontingente | | Konto | Profil, Anmeldung und Sicherheit, Einstellungen, automatisches Aufladen | | Support | Chat-Widget und Tickets — [Support](https://nexcmp.com/de/docs/portal/support/) | | API-Doku | `/apidoc` — [API](https://nexcmp.com/de/docs/developers/api/) | ## Konto {#account} **Konto** hat vier Registerkarten: **Profil** (Name, E-Mail, Kunden-ID, Antrag auf Konto¨loschung), **Anmeldung & Sicherheit** (Passwort, Passkeys, verknüpftes Google/GitHub), **Preferences** (Sprache, Anzeige­währung) und **Autom. Aufladung** ([Auto top-up](https://nexcmp.com/de/docs/billing/auto-top-up/)). Ein Kunde kann das Konto nicht direkt löschen: Er klickt auf **Request account deletion**; nachdem alle virtuellen Maschinen gelöscht sind, prüft ein Mitarbeiter den Antrag (Customers › Deletion requests) und der Kunde kann ihn zurückziehen, solange er aussteht. ## Sprache und Währung {#language-and-currency} Das Portal ist in 16 Sprachen verfügbar und zeigt Preise in einer nach Sprache gewählten Anzeigewährung an; siehe [Currency and exchange rates](https://nexcmp.com/de/docs/catalog/currency-and-exchange-rates/). Kunden können beides unter **Preferences** umschalten. ## Kundenquoten {#customer-quotas} **Billing › Quotas** zeigt, wie viel von den einzelnen Ressourcen (CPU, Speicher, Storage, IP, VM) der Kunde gemäß seiner Zahlung nutzen darf — siehe [Quotas](https://nexcmp.com/de/docs/billing/quotas/). --- # Registrierung, Wallet und Aufladung {#sign-up-wallet-and-top-up} > **Wo im Portal:** `/register`, `/login`, Billing (`/billing`). ## Konto erstellen {#create-an-account} 1. Der Kunde öffnet `https:///register` und gibt E-Mail und Passwort ein (mindestens 10 Zeichen mit Buchstaben und Ziffern) oder nutzt **Google**, **GitHub** oder einen **Passkey**, sofern von Ihnen aktiviert — siehe [Security](https://nexcmp.com/de/docs/administration/security/#customer-sign-in). 2. Falls Captcha aktiviert ist, löst er dieses. 3. Eine Bestätigungs-E-Mail wird über Ihren [SMTP](https://nexcmp.com/de/docs/administration/smtp-and-emails/)-Dienst versendet. Die Verifizierung ist vor dem Erstellen einer VM erforderlich, wenn Ihre Verkaufs­einstellungen dies verlangen. ![Die Registrierungsseite mit E-Mail- und Passwortfeldern](https://nexcmp.com/de/docs/images/portal/sign-up-and-wallet-01-register.webp) ::: tip Ohne funktionierenden SMTP können Kunden ihre E-Mail nicht verifizieren oder ein Passwort zurücksetzen. Konfigurieren Sie zuerst [SMTP](https://nexcmp.com/de/docs/administration/smtp-and-emails/). ::: ## Das Wallet {#the-wallet} Alles wird aus einem **Wallet**-Guthaben in Ihrer Abrechnungswährung bezahlt. Die Seite **Billing** zeigt: | Bereich | Bedeutung | |---|---| | Verfügbares Guthaben | Guthaben plus ausstehende Aufladungen | | Anfallende Gebühren | Im laufenden Abrechnungszeitraum verbrauchte stündliche Dienste, noch nicht beglichen | | Ausstehender Saldo | Jeder geschuldete Betrag | | Abrechnungshistorie | Registerkarten **Invoice History**, **Payment Order**, **Ledger**, **Orders** | ![Die Billing-Seite mit verfügbarem Guthaben, anfallenden Gebühren und den Historie-Registerkarten](https://nexcmp.com/de/docs/images/portal/sign-up-and-wallet-02-billing.webp) ## Guthaben hinzufügen {#add-credit} 1. Klicken Sie auf **Deposit**. 2. Geben Sie den Betrag ein. Das Minimum ist Ihre [minimum top-up](https://nexcmp.com/de/docs/billing/minimum-top-up/). 3. Wählen Sie einen Zahlungskanal (Karte, PayPal, USDT oder Banküberweisung bei vietnamesischer Oberfläche) — die Kanäle entsprechen den von Ihnen unter [Payment channels](https://nexcmp.com/de/docs/billing/payment-channels/) aktivierten. 4. Bezahlen. Das Guthaben aktualisiert sich, sobald der Zahlungsanbieter es bestätigt. Gespeicherte Karten, Stripe Link und PayPal können wiederverwendet und für [auto top-up](https://nexcmp.com/de/docs/billing/auto-top-up/) genutzt werden; siehe [Saved payment methods](https://nexcmp.com/de/docs/billing/saved-payment-methods/). ## Code einlösen {#redeem-a-code} **Redeem code** fügt Guthaben von einem von Ihnen ausgegebenen Gutschein hinzu (Finance › Billing › Vouchers) oder wendet einen Aktionscode an — siehe [Promotions](https://nexcmp.com/de/docs/billing/promotions/). ## Invoices {#invoices} Jede bezahlte Bestellung erzeugt eine Rechnung, die Ihre Verkäuferdetails ([General settings](https://nexcmp.com/de/docs/administration/general-settings/)) enthält. Kunden öffnen sie unter **Invoice History** und drucken sie aus oder speichern sie direkt im Browser als PDF. ## Stündliche Gebühren {#hourly-charges} Stündliche Dienste werden für jede Stunde berechnet, in der die Ressource existiert; Beträge summieren sich, und eine einzelne Stunde kann auf $0.00 gerundet werden. Wenn das Guthaben nicht ausricht, werden Dienste gemäß Ihren Abrechnungsregeln gesperrt und der Kunde wird per E-Mail benachrichtigt (`low_balance`). --- # Einen Dienst bestellen {#ordering-a-service} > **Wo im Portal:** Deploy (`/deploy/vm`). **Wo im Admin-Bereich** Sie steuern, was hier angezeigt wird: Services (Tarife, Preise) und System › Admin › License & updates (Module). Die Bestellseite ist ein scrollendes Formular mit nummerierten Schritten. Die Auswahl eines anderen Dienstes in Schritt 1 behält die Seite bei und ändert die Schritte darunter. ## Schritte {#steps} 1. **Service** — Cloud-Server und die anderen von Ihnen aktivierten Dienste (Kubernetes, Object Storage, Images, Private Cloud, VPN …). 2. **Location** — die [Zone](https://nexcmp.com/de/docs/infrastructure/zones/). Preise und inbegriffener Traffic können je nach Standort variieren. 3. **Plan** — ein fester Tarif (vCPU, RAM, NVMe-Festplatte, Stundenenpreis) oder **Custom** (der Kunde wählt vCPU, RAM und Festplatte; Preis nach Ressourcen). Tarife stammen aus [Plans](https://nexcmp.com/de/docs/catalog/plans/). 4. **Billing cycle** — **Hourly** oder vorausbezahlte monatliche/jährliche Zyklen mit Rabatt (zum Beispiel 1 Jahr −10 %, 2 Jahre −15 %, 3 Jahre −20 %). 5. **Operating system** — eine Liste von Vorlagen, **My Images** (vom Kunden hochgeladene eigene Images) und die Version. 6. **Hostname & quantity** — ein Name (oder **Randomize**) und wie viele Server. ![Die Bestellseite mit den Schritten Dienst, Standort und Tarif](https://nexcmp.com/de/docs/images/portal/ordering-01-plan.webp) ![Die Schritte für Abrechnungszeitraum und Betriebssystem auf der Bestellseite](https://nexcmp.com/de/docs/images/portal/ordering-02-cycle-os.webp) ## Bestellung aufgeben {#placing-the-order} Die Zusammenfassung zeigt den Preis. Die Bestellung wird dem Guthaben **vor** der Bereitstellung belastet, nach Prüfung der Regeln für [Quotenprüfung](https://nexcmp.com/de/docs/billing/quotas/) und [Mindestguthaben](https://nexcmp.com/de/docs/billing/minimum-top-up/). Eine VM erreicht in der Regel nach etwa einer Minute den Status *Running*; der Kunde sieht die Bereitstellungsschritte im VM-Tab **Activity** und erhält die E-Mail „VM bereit“ mit dem initialen Passwort (einmalig für 10 Minuten sichtbar). ## Was eine Bestellung stoppen kann {#what-can-stop-an-order} | Meldung / Ursache | Behebung | |---|---| | Nicht genügend Guthaben | Guthaben aufladen — [Sign-up, wallet and top-up](https://nexcmp.com/de/docs/portal/sign-up-and-wallet/) | | Quote überschritten | Quote erhöhen — [Quotas](https://nexcmp.com/de/docs/billing/quotas/) | | E-Mail nicht verifiziert | Kunde verifiziert die E-Mail | | Kein Tarif für den gewählten Standort | Tarif in dieser Zone verfügbar machen — [Plans](https://nexcmp.com/de/docs/catalog/plans/) | | Lizenz ungültig | Kunden können keine neuen Dienste erstellen — [License](https://nexcmp.com/de/docs/getting-started/license-and-purchase/#if-the-license-is-not-valid) | --- # Virtuelle Maschinen {#virtual-machines} > **Wo im Portal:** Instances (`/vms`) und die VM-Seite (`/vms/`). **Instances** listet die VMs eines Kunden mit Name, OS, Status, IP, Spezifikationen und Kosten auf. Klicken Sie auf eine, um deren Seite zu öffnen. ## Die VM-Seite {#the-vm-page} Tabs: **Overview**, **Console**, **AI SSH Agent** (wenn das KI-Modul aktiv ist), **Monitoring**, **Storage**, **Network**, **Configuration**, **Billing**, **Activity**. ![Eine Übersicht der virtuellen Maschine mit Status, Spezifikationen, IP, Bandbreitendiagramm und Aktionsprotokoll](https://nexcmp.com/de/docs/images/portal/virtual-machines-01-overview.webp) ### Aktionen {#actions} | Aktion | Effekt | |---|---| | Konsole | Öffnet die Browser-Konsole — [Console](https://nexcmp.com/de/docs/portal/console/) | | Neustarten / Stoppen / Erzwingen des Stoppens | Energiesteuerung | | Reset password | Generiert ein neues Passwort (wird einmalig angezeigt) | | OS neu installieren | Setzt die Instanz aus einer Vorlage neu auf; Daten gehen verloren | | IP ändern | Ersetzt die öffentliche IP (sofern die Quelle dies unterstützt) | | Auto Scaling aktivieren | Skaliert CPU/RAM bei Last, wenn aktiviert | | Löschen | Zerstört die VM; stündliche Abrechnung stoppt | ### Angezeigte Informationen {#information-shown} Verfügbarkeit, Kosten diesen Monats, vCPU/RAM/Festplatte mit Live-Auslastung, öffentliche und private IP, Benutzername, Bandbreitendiagramm, Aktionsprotokoll sowie eine Abrechnungsübersicht (Tarif, Zyklus, Stunden, verbleibend). ::: info Felder hängen von der Quelle ab Eine VM-Seite zeigt nur an, was ihre Quelle unterstützt. Beispielsweise hat eine Proxmox VE VM keine Portweiterleitung oder IP-Änderung, und ihre OS-Liste richtet sich nach dem Vorlagensatz ihres Clusters. Siehe die Kompatibilitätstabelle unter [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/). ::: ## Registerkarte Abrechnung {#billing-tab} Zeigt Paket, Abrechnungszeitraum, Gesamtstunden, Restzeit und Abrechnungsprotokoll. Stündliche VMs laufen auf, bis sie gelöscht werden. Kunden können den **switch cycle** durchführen, um einen längeren Zeitraum rabattiert im Voraus zu bezahlen. ## Für Administratoren {#for-administrators} Dieselbe VM ist unter Services › Virtual Machines in der Admin-Konsole sichtbar, wo Sie im Namen des Kunden handeln oder sich [als Kunde anmelden](https://nexcmp.com/de/docs/customers/login-as/) können. --- # Konsole {#console} > **Wo im Portal:** Die Seite der VM → Registerkarte **Console**. **Wo im Admin-Bereich:** System › Admin › License & updates → Module (Web-SSH). ## Funktion {#what-it-does} Die Registerkarte **Console** öffnet eine grafische VNC-Sitzung zur VM im Browser, selbst wenn das Netzwerk innerhalb der VM gestört ist. Ein **Web-SSH**-Terminal steht als zweite Option zur Verfügung, wenn das SSH-Modul aktiviert ist. ## Anforderungen {#requirements} | Komponente | VNC-Konsole | Web-SSH | |---|---|---| | CloudStack | Console Proxy VM (CPVM) vom Panel aus erreichbar — siehe [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/) | Ein erreichbarer SSH-Port auf der VM | | Proxmox VE | Funktioniert über das Panel (noVNC über die Proxmox API; der TLS-Fingerabdruck ist gepinnt) — siehe [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/) | Gleich | | Panel | Konsolen-URL in den [General settings](https://nexcmp.com/de/docs/administration/general-settings/) festgelegt | Der `ssh-proxy`Dienst- und Modul-Flag`feature_ssh_web`; standardmäßig aus — siehe [Modules](https://nexcmp.com/de/docs/infrastructure/modules/) | Wenn das Web-SSH-Modul deaktiviert ist, zeigt die Registerkarte **VNC only** an. ## Verwendung {#use-it} 1. Öffnen Sie die VM → **Console**. 2. Klicken Sie auf **Console** (oder **Open in new window**). Ein kurzlebiges Ticket wird ausgestellt und die Konsole öffnet sich unter `https:///console`. 3. Melden Sie sich mit dem Benutzernamen und dem Passwort der VM an (sichtbar auf der Registerkarte Overview; bei Verlust zurücksetzen). ![Die Registerkarte „Console“ einer virtuellen Maschine](https://nexcmp.com/de/docs/images/portal/console-01-tab.webp) ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Sofort „Disconnected“ | Der Browser hat einen alten Konsolenpfad behalten | Website-Daten für die Domain löschen und erneut versuchen | | Schwarzer Bildschirm | VM ist gestoppt oder bootet | Starten Sie die VM und warten Sie | | Konsole öffnet sich auf CloudStack nicht | Console Proxy VM läuft nicht oder ist nicht erreichbar | System-VMs in CloudStack überprüfen | | Keine SSH-Option | Web-SSH-Modul ausgeschaltet | Aktivieren Sie es erst, nachdem `ssh-proxy` installiert ist | --- # Snapshots und Backups {#snapshots-and-backups} > **Wo im Portal:** Snapshots (`/snapshots`), Snapshot-Zeitpläne (`/snapshots/schedules`), Backups (`/backups`). Nur sichtbar, wenn die Funktion im Admin-Bereich aktiviert ist. ## Funktion {#what-it-does} Ein Snapshot speichert den Status einer VM-Disk, damit Kunden nach einer fehlerhaften Änderung einen Rollback durchführen können. Snapshots können manuell oder nach Zeitplan erstellt werden. ## Verfügbarkeit {#availability} | Source | Snapshots | Hinweise | |---|---|---| | CloudStack | Ja | Volume-Snapshots; Speicherberechnung gemäß Konfiguration | | Proxmox VE | Ja | Bis zu **5 pro VM**; erstellen, auflisten, wiederherstellen und löschen | Der Menüeintrag wird nur angezeigt, wenn die Snapshot-Funktion eingeschaltet ist und der Kunde eine VM besitzt, deren Quelle dies unterstützt. ## Verwendung {#use-it} 1. Öffnen Sie **Snapshots**, klicken Sie auf **Create**, wählen Sie die VM aus und vergeben Sie einen Namen. 2. Warten Sie, bis der Status *ready* lautet. 3. Um zurückzugehen, wählen Sie **Restore** beim Snapshot aus und bestätigen Sie — die VM wird in diesen Zustand zurückversetzt (und bei Bedarf neu gestartet). 4. Löschen Sie Snapshots, die Sie nicht mehr benötigen. ::: warning Das Wiederherstellen verwirft alles, was nach dem Snapshot geschrieben wurde. Geschützte VMs können im Portal weder wiederhergestellt noch gelöscht werden. ::: --- # Support für Kunden {#support-for-customers} > **Wo im Portal:** das Chat-Bläschen auf jeder Seite, `/chat` und Support-Tickets. **Wo im Admin-Bereich:** Customers › Support › Tickets (`/support/tickets`), Registerkarte **Settings**. ## Für Kunden {#for-customers} - **Chat-Bläschen** (untere Ecke jeder Seite): stellen Sie eine Frage; der [AI Chat](https://nexcmp.com/de/docs/ai/ai-chat/) antwortet anhand Ihrer Dokumentation und der Kontodaten des Kunden. **Expand** öffnet dasselbe Gespräch unter `/chat`. - **Mit Mitarbeiter sprechen**: übergibt das Gespräch an Ihr Team (über Ihre Admin-Telegram-Gruppe). - **Telegram- / Zalo-**Schaltflächen: werden erst angezeigt, nachdem Sie die Links in den Support-Einstellungen hinterlegt haben. - **Tickets**: für komplexere Probleme; Antworten werden per E-Mail gesendet (`ticket_reply`). ## Für Sie {#for-you} 1. Öffnen Sie **Customers › Support › Tickets**; neue Tickets und Chats erscheinen hier mitsamt dem Gesprächsverlauf. 2. Antworten Sie im Thread. Dem Kunden wird über Ihren [SMTP](https://nexcmp.com/de/docs/administration/smtp-and-emails/)-Dienst eine E-Mail gesendet. 3. Schalten Sie in der Registerkarte **Settings** das Chat-Widget ein oder aus, hinterlegen Sie den Telegram- und Zalo-Link (nur https) und legen Sie fest, ob die KI automatisch antwortet — siehe [AI Chat](https://nexcmp.com/de/docs/ai/ai-chat/). 4. Verbinden Sie [Telegram alerts](https://nexcmp.com/de/docs/administration/telegram-notifications/), damit Ihr Team über neue Chats benachrichtigt wird. --- # KI-Anbieter {#ai-provider} > **Wo im Admin-Bereich:** System › Settings › AI provider (`/settings/ai`). Der Schalter für das KI-Modul befindet sich dort sowie unter System › Admin › License & updates (`/license`), Karte **Module**. ## Funktion {#what-it-does} AI Chat (automatisierter Support-Chat) und der AI Agent (VM-Verwaltung in Klartext) werden ohne integriertes Modell ausgeliefert. Sie wählen **Ihren eigenen Anbieter**: jeden Dienst, der eine **OpenAI-kompatible** `chat/completions` API bereitstellt — zum Beispiel OpenAI, OpenRouter, ein LiteLLM-Gateway oder Ihren eigenen vLLM-Server. NexCMP speichert den Endpunkt und den API-Schlüssel (verschlüsselt) und verwendet sie für jede KI-Funktion. Sie bezahlen den Anbieter direkt. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Endpoint | Eine OpenAI-kompatible Basis-URL (`https://api.openai.com/v1`, `https://ai.example.com/v1`). NexCMP hängt `/chat/completions` an eine URL an, die auf `/v1` endet; bei jeder anderen URL wird `/v1/chat/completions` angehängt; eine URL, die bereits auf `/chat/completions` endet, wird unverändert übernommen. | | Modell | Ein Modell, das **Tool- (Funktions-) Aufrufe** unterstützt. Sowohl AI Chat als auch der Agent basieren darauf. | | API-Schlüssel | Ein Schlüssel für diesen Endpunkt. Bevorzugen Sie einen Schlüssel mit einem **Ausgabenlimit** beim Anbieter (zum Beispiel ein virtueller LiteLLM-Schlüssel mit monatlichem Budget). | | Netzwerk | Der Panel-Server muss den Endpunkt über HTTP(S) erreichen können. Eine im Formular eingegebene URL darf nur auf Port 80, 443, 8080 oder 8443 ins Internet zeigen; um eine interne Adresse zu verwenden, speichern Sie den Anbieter zuerst und testen Sie ihn dann. | | Abhängigkeiten | Das **AI**-Modul ist eingeschaltet. Informationen zum Agenten finden Sie unter [AI Agent](https://nexcmp.com/de/docs/ai/ai-agent/#requirements). | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} 1. Registrieren Sie sich beim Anbieter und erstellen Sie einen API-Key. Wenn der Anbieter Budgets oder Rate Limits unterstützt, legen Sie ein monatliches Limit fest. 2. Notieren Sie die **Basis-URL** und den exakten **Modellnamen** (sowie optional bis zu vier Fallback-Modelle). 3. Testen Sie ihn vor der Eingabe vom NexCMP-Server aus: ```bash curl -s https://ai.example.com/v1/chat/completions \ -H "Authorization: Bearer XXXX" -H "Content-Type: application/json" \ -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Reply with one word: OK"}]}' ``` Eine JSON-Antwort mit `choices[0].message.content` bedeutet, dass der Endpunkt funktioniert. ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **System › Settings › AI provider**. 2. Schalten Sie das Modul in der Karte **Module AI** **ein**. Solange es ausgeschaltet ist, sehen Kunden weder AI Chat noch den AI Agent im Portal. (Sie können es auch unter **License & updates** umschalten.) 3. Füllen Sie in der Karte **Connection** Folgendes aus: | Feld | Beispiel | Hinweise | |---|---|---| | Diesen Anbieter verwenden | on | Benötigt eine Basis-URL, ein Modell und einen Schlüssel zum Einschalten. | | Anzeigename | `LiteLLM` | Bis zu 60 Zeichen. | | Basis-URL (OpenAI-kompatibel) | `https://ai.example.com/v1` | `http://` oder `https://`, bis zu 300 Zeichen, keine Leerzeichen. | | API-Key des Anbieters | `sk-XXXX` | Verschlüsselt gespeichert; danach werden nur die letzten 4 Zeichen angezeigt. Leer lassen, um den gespeicherten Schlüssel beizubehalten. | | Standardmodell | `gpt-4o-mini` | Buchstaben, Ziffern und `- _ . / : @`. | | Fallback-Modelle | `gemini-2.5-flash` | Kommagetrennt, bis zu 4. Wird verwendet, wenn das Standardmodell ausfällt. | | Reasoning-Aufwand | Standard (nicht gesendet) | `Minimal`, `Low`, `Medium` oder `High`. Bei Reasoning-Modellen (Gemini, o-Serie) antwortet eine niedrige Stufe viel schneller. Bei normalen Modellen auf Standard belassen. | 4. Klicken Sie auf **Save** und dann auf **Test connection**. Der Test sendet eine kurze Frage und zeigt `Connected — , ms` oder den vom Anbieter zurückgegebenen Fehler an. ![AI provider-Seite mit eingeschaltetem AI-Modul und mit Beispielwerten ausgefülltem Verbindungsformular](https://nexcmp.com/de/docs/images/ai/ai-providers-01-connection.webp) ### Auswirkungen des Speicherns {#what-saving-does} - Die Anbietereinstellungen werden als einzelner Konfigurationseintrag gespeichert und der Schlüssel wird mit AES-256-GCM, gebunden an diesen Zweck, unter Verwendung des Masterschlüssels der Installation verschlüsselt. - Die Support-Einstellungen **Primary model** und **Fallback model** (die vom AI Chat verwendet werden) werden automatisch auf Ihr Standard- und erstes Fallback-Modell gesetzt. - Die Änderung wird in das Audit-Log geschrieben (Endpunkt, Modell, ob sich der Schlüssel geändert hat — niemals der Schlüssel selbst). ## Verifizierung {#verify} 1. **Test connection** wird grün angezeigt. 2. Melden Sie sich als Testkunde im Portal an: Das Menü bietet nun **AI Chat** (oder das Chat-Symbol) und **AI Agent** an. 3. Fragen Sie den AI Chat „What is my balance?“. Eine Antwort, die Ihr reales Guthaben nennt, zeigt, dass der Anbieter Tool-Aufrufe korrekt verarbeitet. ## Limits & Hinweise {#limits-notes} - **Ein Anbieter.** NexCMP verwendet einen einzigen konfigurierten Anbieter für Chat, Agent und Ticket-Untersuchungen. Fallback-Modelle sorgen für Ausfallsicherheit innerhalb dieses Anbieters. - **Schlüsselsicherheit.** Der gespeicherte Schlüssel wird nur an den gespeicherten Endpunkt gesendet. Wenn Sie die Basis-URL ändern, müssen Sie den Schlüssel vor dem Testen erneut eingeben. - **Limits pro Kunde.** AI Chat ist nur für angemeldete Kunden mit Nachrichtenlimits pro Minute und Chat verfügbar. Der Agent hat ein tägliches Aufruflimit pro Konto. Siehe [AI Chat](https://nexcmp.com/de/docs/ai/ai-chat/) und [AI Agent](https://nexcmp.com/de/docs/ai/ai-agent/). - **Datenschutz.** Kundenfragen und die vom KI-Agenten gelesenen Daten (schreibgeschützt) für diesen Kunden werden an Ihren Anbieter übermittelt. Weisen Sie in Ihrer [privacy policy](https://nexcmp.com/de/docs/customers/legal/) darauf hin. - **Kostenkontrolle.** NexCMP erfasst keine KI-Kosten; nutzen Sie die Budgetfunktionen des Anbieters. - Das Modul kann jederzeit abgeschaltet werden: Die AI-Menüeinträge verschwinden und AI-Routen antworten mit 404 `module_disabled`. Einige Hintergrundprojekte von AI Chat (Ticket-Untersuchung, verzögerte Antworten) übernehmen die Änderung beim nächsten Neustart des Panels. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | `base_url must be an http(s) URL` | Fehlendes Schema oder Leerzeichen | Verwenden Sie `https://host/v1`. | | `api_key is required to enable the provider` | Kein Schlüssel gespeichert | Geben Sie den Schlüssel ein und speichern Sie. | | `base_url and model are required to enable the provider` | Leeres Feld | Beide ausfüllen. | | "Base-URL blockiert: nur öffentliches http(s), Ports 80/443/8080/8443" | Testen einer nicht gespeicherten internen Adresse oder eines anderen Ports | Speichern Sie den Anbieter zuerst und testen Sie dann. | | `api_key is required (enter the key again when you change the endpoint)` | Die Base URL unterscheidet sich von der gespeicherten | Geben Sie den Schlüssel erneut ein. | | `model: letters, digits and - _ . / : @` | Ungültiges Zeichen | Verwenden Sie die exakte Modell-ID des Anbieters. | | `fallback_models: up to 4 model names` | Zu viele | Behalten Sie höchstens vier bei. | | Test schlägt mit 401 fehl | Falscher Schlüssel | Überprüfen Sie den Schlüssel und den Endpunkt. | | Test schlägt mit 404 oder "model not found" fehl | Falscher Pfad oder falsches Modell | Überprüfen Sie die Basis-URL (`/v1`) und die Modell-ID. | | `Too many tests — wait a minute` (429) | Mehr als 10 Tests pro Minute | Warten Sie. | | Portal zeigt weiterhin kein AI-Menü | Modul aus oder Anbieter nicht "in use" | Schalten Sie das Modul ein und aktivieren Sie den Anbieter. | --- # AI Chat {#ai-chat} > **Wo im Admin:** Customers › Support › Ticket, Reiter **AI settings** (`/support/tickets?tab=settings`). Anbieter und Modul: System › Settings › AI provider (`/settings/ai`). **Wo im Portal:** der schwebende Chat-Button und die Seite `/chat` (Modus **Ask AI**). ## Funktion {#what-it-does} AI Chat beantwortet Kundenfragen rund um die Uhr, ruft *deren eigene* Kontodaten ab (Guthaben, Dienste, Zahlungen, aktuelle Fehler) und kann in ihrem Namen handeln – eine VM erstellen, einen Tarif wechseln –, nachdem der Kunde dies bestätigt hat. Wenn der Assistent nicht weiterhelfen kann, klickt der Kunde auf **Talk to a human**: Der Chat geht an Ihr Team auf Telegram und wird zu einem Ticket, wenn niemand rechtzeitig antwortet. Dieselben AI-Einstellungen ermöglichen es dem System auch, **Tickets für Ihr Team zu untersuchen**. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Modul und Anbieter | Das Modul **AI** ist eingeschaltet und ein [AI provider](https://nexcmp.com/de/docs/ai/ai-providers/) ist gespeichert und in Verwendung. Ohne Anbieter gibt der Assistent an, dass er nicht konfiguriert ist. | | Kunden | **Nur für angemeldete Kunden.** In einem installierten NexCMP gibt es keine öffentliche Website, sodass Besucher, die nicht angemeldet sind, die Meldung "Sign in to use AI Chat" erhalten. | | Mitarbeiterkanal (optional) | Ein Telegram-Bot und Chat für Admin-Benachrichtigungen (siehe [Telegram notifications](https://nexcmp.com/de/docs/administration/telegram-notifications/)). Derselbe Kanal empfängt Chat-Weiterleitungen und Ticket-Entwürfe. | | Abhängigkeiten | [AI provider](https://nexcmp.com/de/docs/ai/ai-providers/). | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Über den AI provider hinaus nicht erforderlich. Wenn Sie eine Mitarbeiterweiterleitung wünschen: 1. Erstellen Sie einen Telegram-Bot mit @BotFather und notieren Sie das Token. 2. Erstellen Sie eine Gruppe oder nutzen Sie Ihren privaten Chat mit dem Bot und notieren Sie die Chat-ID. 3. Tragen Sie beide unter System › Settings › Admin alerts ein (siehe [Telegram notifications](https://nexcmp.com/de/docs/administration/telegram-notifications/)). Die Support-Funktionen nutzen diesen Bot und Chat wieder. ## In NexCMP verbinden {#connect-in-nexcmp} 1. Stellen Sie sicher, dass das KI-Modul eingeschaltet ist und der Anbieter grün testet ([AI provider](https://nexcmp.com/de/docs/ai/ai-providers/)). 2. Öffnen Sie **Customers › Support › Ticket** und wählen Sie den Tab **AI settings**. Ganz oben auf der linken Karte werden drei Tags angezeigt: *AI provider: configured*, *Telegram: channel present* sowie *On shift* oder *Off shift*. 3. Linke Karte **AI + Telegram**: | Schalter oder Feld | Standard | Bedeutung | |---|---|---| | KI untersucht Tickets automatisch | An | Bei einem neuen Ticket oder einer neuen Nachricht liest die KI die Kundendaten (nur lesend) und schreibt die wahrscheinliche Ursache sowie einen Antwortentwurf als **interne Notiz**. Sie sendet diese niemals an den Kunden. | | Telegram-Benachrichtigungen an Admin | An | Die Notiz kommt auf Telegram mit den Schaltflächen Send, Edit und Skip an. | | KI-automatische Antwort | Aus | Sendet einfache Anleitungen oder Vertriebsantworten selbstständig, wenn alle Sicherheitsbedingungen erfüllt sind (Konfidenz von 85 % oder mehr, keine Warnungen); wird nach 3 Minuten gesendet und ist auf Telegram abbrechbar. | | Für automatische Antworten erlaubte Kategorien | `how_to`, `sales` | Nur diese. | | Primäres Modell, Fallback-Modell | vom Anbieter festgelegt | Normalerweise so belassen, wie von der KI-Anbieterseite gespeichert. | | Für Aktionen erlaubte Telegram-Benutzer-ID | leer | Leer bedeutet den Chat des Benachrichtigungskanals. | 4. Rechte Karte **Live chat (customer widget)**: | Feld | Standard | Bedeutung | |---|---|---| | Chat-Widget aktivieren | An | Die Chat-Blase und die `/chat`-Seite. | | Support-Zeiten (vietnamesische Zeit) | `08:00-22:00` | Wann Mitarbeiter auf Telegram antworten sollen. Außerhalb dieser Zeiten oder wenn kein Telegram-Channel existiert, verwandelt **Talk to a human** den Chat sofort in ein Ticket. | | Max. Wartezeit für Mitarbeiter (Minuten), danach in Ticket umwandeln | 10 | 1 bis 240. | | KI-Anfragen / Tag / Kunde | 40 | 1 bis 1000. Nach Erreichen des Limits lädt der Assistent den Kunden ein, mit einem Menschen zu sprechen. | | Neue Chats / Stunde / IP | 20 | 1 bis 1000. | | **Zalo OA-Link** | leer | `https://zalo.me/...` Zeigt den Button **Chat on Zalo** (mit QR-Code) im Chat an. Leer blendet ihn aus. | | **Telegram-Link** | leer | `https://t.me/...` Zeigt einen **Telegram**-Button. Leer blendet ihn aus. | | Systemweites tagesweites Limit für KI-Anfragen, angemeldete Kunden | 2000 | | | Systemweites tagesweites Limit, Gäste | 500 | Eigener Pool; wird nicht verwendet, solange Gäste nicht chatten können. | | Systemweites tagesweites Limit für automatische Ticket-Untersuchungen | 200 | | | Admin-Pfad (der Telegram-Button "Open admin") | leer | Ihre Admin-URL, zum Beispiel `https://cloud.example.com/admin`. | Jeder Schalter und jedes Feld wird beim Ändern automatisch gespeichert. 5. Unten bieten **Reply templates** (Titel, Sprache VI/EN/ZH, Text bis zu 4,000 Zeichen) dem Personal vorgefertigte Antworten. ![Tab AI settings mit den KI- und Telegram-Schaltern sowie den Live-Chat-Limits und Verknüpfungen](https://nexcmp.com/de/docs/images/ai/ai-chat-01-settings.webp) ![Kunden-Chatseite mit dem Assistenten, den Zalo- und Telegram-Verknüpfungsschaltflächen und der Option, mit einem Mitarbeiter zu sprechen](https://nexcmp.com/de/docs/images/ai/ai-chat-02-portal.webp) ## Was der Assistent tun kann und was nicht {#what-the-assistant-can-and-cannot-do} - **Lesen:** Er durchsucht Ihre Wissensdatenbank und Ihre öffentliche Dokumentation und liest die Daten des angemeldeten Kunden über schreibgeschützte Tools. Er kann keinen anderen Kunden einsehen. - **Handeln:** Er nutzt die eigenen API-Berechtigungen des Kunden. Ein *Lesezugriff* wird sofort ausgeführt. Alles, was Änderungen vornimmt oder Geld kostet, erzeugt eine **Bestätigungskarte** („Benötigt Ihre Bestätigung“ mit den Tags *Kostet Geld* oder *Löschen*); es geschieht nichts, bis der Kunde auf **Confirm** klickt. Ein Chat kann maximal 3 ausstehende Karten und ein Konto maximal 10 bestätigte Schreibaktionen pro Stunde enthalten. - **Niemals:** Er kann keine Konsolen öffnen, keine SSH- oder Konsolen-Token erstellen, keine Kubernetes-Zugangsdateien herunterladen, keine Passwörter zurücksetzen und keine Geheimnisse wie Proxy-Passwörter oder S3-Geheimnisse anzeigen. Geheimnisse werden niemals in den Kontext des Modells oder den Chatverlauf übernommen. - **Sicherheit:** Seine Antworten durchlaufen einen Ausgabefilter; der Text des Kunden und die Tool-Ergebnisse werden als Daten behandelt, nicht als Anweisungen. - **Integritätsbanner:** Im Chat wird angezeigt: „Beantwortet von einem AI Agent — eventuell unvollständig. Bei kritischen Fragen bitte an einen Mitarbeiter wenden.“ ## Übergabe an das Team {#staff-hand-off} 1. Der Kunde klickt auf **Talk to a human** und kann optional eine E-Mail hinterlassen. 2. Eine Nachricht mit dem Gespräch geht im Telegram-Chat des Teams ein. Das Team antwortet, indem es auf diese Nachricht antwortet; die Antwort erscheint im Chat des Kunden als „[brand] Support“. 3. Wenn innerhalb der Wartezeit (Standard: 10 Minuten) niemand antwortet, wird der Chat unter **Customers › Support › Ticket** zu einem Ticket. Dasselbe geschieht sofort außerhalb der Supportzeiten oder wenn Telegram nicht konfiguriert ist, und der Kunde wird darüber informiert, dass ein Ticket eröffnet wurde. 4. Admins sehen laufende Chats auch im Tab **Live chat**. ## Verifizierung {#verify} 1. Melden Sie sich als Testkunde an, öffnen Sie den Chat und stellen Sie eine Frage zu Ihren Diensten. Der Assistent antwortet. 2. Fordern Sie ihn auf, etwas zu erstellen, das Geld kostet: Es erscheint eine Bestätigungskarte, und es wird erst dann etwas erstellt, wenn Sie auf **Confirm** klicken. 3. Klicken Sie auf **Talk to a human**. Die Nachricht erreicht Ihren Telegram-Chat (sofern konfiguriert) oder nach Ablauf der Wartezeit erscheint ein Ticket. 4. Wenn Zalo- und Telegram-Links hinterlegt sind, erscheinen beide Verknüpfungsschaltflächen im Chat. ## Limits & Hinweise {#limits-notes} - **Ratenlimits (pro IP):** 20 Nachrichten pro Minute und einige wenige Übergaben pro Stunde; **40 Nachrichten pro Unterhaltung**. Diese Werte sind fest. - **Kosten:** Jede AI Chat-Interaktion ruft Ihren Anbieter auf. Reduzieren Sie **AI turns / day / customer**, um die Ausgaben zu begrenzen. - **Die automatische Antwort ist standardmäßig deaktiviert.** Schalten Sie sie erst ein, nachdem Sie die Entwürfe eine Zeit lang beobachtet haben. - **Sprachen:** Der Assistent antwortet in der Sprache des Kunden; Vietnamesisch wird anhand des Textes erkannt. - **Reseller:** Reseller-Websites verwenden Tickets anstelle des Widgets. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Kunden sehen den Chat nicht | AI-Modul deaktiviert oder **Enable chat widget** deaktiviert | Beides aktivieren. | | „Sign in to use AI Chat“ | Besucher ist nicht angemeldet | In NexCMP erwartet: Zuerst anmelden. | | Der Assistent meldet, dass kein AI-Anbieter konfiguriert ist | Anbieter fehlt, wird nicht verwendet oder Schlüssel fehlt | [AI provider](https://nexcmp.com/de/docs/ai/ai-providers/) vervollständigen. | | AI Chat antwortet nach einigen Fragen mit „talk to a human“ | Tägliches Limit pro Kunde erreicht | **AI turns / day / customer** erhöhen. | | Telegram-Tag zeigt „Kein Kanal“ | Bot- oder Chat-ID nicht konfiguriert | Richten Sie [Telegram-Benachrichtigungen](https://nexcmp.com/de/docs/administration/telegram-notifications/) ein. | | Zalo- oder Telegram-Schaltfläche fehlt | Das Link-Feld ist leer | Füllen Sie den Link aus. | | „Zu viele Anfragen“ im Chat | Mehr als 20 Nachrichten pro Minute von einer IP | Warten Sie eine Minute. | | Chat-Konversation voll | 40 Nachrichten erreicht | Starten Sie eine neue Konversation. | --- # AI Agent {#ai-agent} > **Wo im Admin-Bereich:** System › Settings › AI provider (`/settings/ai`) — Modulschalter und Anbieter; System › Admin › License & updates (`/license`) — Modulschalter. **Wo im Portal:** AI Agent (`/ai/agent`) und die Seite `/chat/agent` oder der Modus **Agent** im Chat. ## Funktion {#what-it-does} Der AI Agent verbindet sich über SSH mit einer eigenen Linux-VM des Kunden und führt Aufgaben aus, die in natürlicher Sprache beschrieben werden: „Systemzustand prüfen“, „Docker installieren“, „aktuelle Fehler finden“, „Speicherplatz freigeben“. Er zeigt jeden von ihm vorgeschlagenen Befehl sowie dessen Ausgabe an. Lesende Befehle können automatisch ausgeführt werden; alles, was den Server verändert, wartet darauf, dass der Kunde **Run** drückt. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | KI-Modul und -Anbieter | Das Modul **AI** muss eingeschaltet sein und ein funktionierender [AI provider](https://nexcmp.com/de/docs/ai/ai-providers/) vorliegen. Der Agent benötigt zudem ein Modell, das Tool-Aufrufe unterstützt. | | `openssh-client` auf dem Panel-Server | Der Agent führt Befehle mit dem hauseigenen `ssh`-Programm (`/usr/bin/ssh`) des Panels aus. Das Installationsprogramm installiert `openssh-client`; prüfen Sie dies mit `ssh -V`. Ohne diesen meldet der Agent „ssh client is not installed on the panel server“. | | Kein separates SSH-Gateway | In der Standardinstallation wird das integrierte SSH verwendet und das `ssh-proxy`-Webterminal ist **nicht** erforderlich. Nur wenn die optionale *Web-SSH*-Funktion (`feature_ssh_web`) aktiviert und der `ssh-proxy`-Dienst installiert wurde, läuft der Agent stattdessen über `ssh-proxy`. | | Netzwerk | Der Panel-Server muss die IP der VM über deren SSH-Port (standardmäßig 22) erreichen können. Überprüfen Sie Firewalls und Sicherheitsgruppen zwischen dem Panel und dem Gastnetzwerk. | | VM | Kundenbesessen, **laufend**, nicht gesperrt, **Linux** (Windows-VMs werden abgelehnt), mit einer öffentlichen oder erreichbaren IP-Adresse. | | SSH-Anmeldedaten | Der von NexCMP gespeicherte Anmeldeuser und das Passwort der VM (bei der Erstellung oder dem Zurücksetzen des Passworts gespeichert, verschlüsselt) oder der Operations-Key des Panels, sofern installiert. Ist keines von beiden vorhanden, gibt der Agent an, dass er sich nicht anmelden kann. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} 1. Überprüfen Sie den SSH-Client auf dem Panel-Server: ```bash ssh -V sudo apt-get install -y openssh-client # only if missing ``` 2. Überprüfen Sie, ob der Panel-Server SSH zu einer Gast-VM öffnen kann: ```bash nc -vz 198.51.100.10 22 ``` Ersetzen Sie die Adresse durch die IP einer Test-VM. Wenn dies fehlschlägt, beheben Sie zuerst das Routing oder die Firewall. 3. Stellen Sie sicher, dass der Gast die Passwort-Anmeldung für den von NexCMP gespeicherten Benutzer erlaubt (einige Cloud-Images deaktivieren dies) oder dass der Operations-Key des Panels auf dem Gast installiert ist. ## In NexCMP verbinden {#connect-in-nexcmp} 1. Schließen Sie [AI provider](https://nexcmp.com/de/docs/ai/ai-providers/) ab: Modul ein, Anbieter gespeichert, **Test connection** grün. 2. Auf der Admin-Seite ist nichts weiter konfiguriert. Der Modulschalter lässt die Einträge für den **AI Agent** im Kundenportal erscheinen. 3. Als Kunde: Öffnen Sie **AI Agent**, wählen Sie einen laufenden Server aus und klicken Sie auf **Choose server**. Die Seite testet SSH zunächst mit einem festen, harmlosen Befehl (es wird kein KI-Aufruf verwendet) und zeigt *SSH connected* oder den Grund für das Fehlschlagen an. 4. Geben Sie eine Aufgabe ein oder wählen Sie einen Schnellstart (*Systemzustand prüfen*, *Docker installieren*, *Nginx installieren*, *Letzte Fehler finden*, *Sicherheitsprüfung*, *Speicherplatz freigeben*). ## Wie Befehle ausgeführt werden {#how-it-runs-commands} - **Herkunft:** Der Panel-Server führt mit dem System-`ssh`-Client jeweils einen nicht-interaktiven Befehl aus. Das Ziel ist immer die IP-Adresse der VM **aus der Datenbank**, niemals aus der Anfrage; es können nur laufende, entsperrte VMs des Eigentümers erreicht werden. - **Authentifizierung:** Das gespeicherte Passwort wird über einen einmaligen `SSH_ASKPASS`-Helper an die Prozessumgebung übergeben — es wird weder auf der Festplatte gespeichert noch in der Befehlszeile übergeben. Host-Schlüssel werden nicht gepinnt (VMs werden mit neuen Schlüsseln neu installiert). Die Ausgabe pro Befehl ist auf 200 KB begrenzt und jeder Befehl hat ein Zeitlimit (60 Sekunden). - **Agenten-Schleife:** Die KI schlägt Befehle vor und liest die Ausgaben; ein Durchgang endet nach maximal **10 Schritten**. - **Modi:** | Modus | Verhalten | |---|---| | **Confirm** | Jeder Befehl wartet auf **Run**. | | **Auto** | Nur Befehle, die eine strenge Read-only-Positivliste passieren, werden automatisch ausgeführt (zum Beispiel `df -h`, `ps`, `journalctl`). Alles andere sowie alles, was der Parser nicht mit Sicherheit analysieren kann (Variablen, Befehlssubstitution, Umleitungen in Dateien), wartet auf **Run**. | - **Risikokennzeichnungen:** Befehle, die Dateien überschreiben oder löschen, auf Festplatten schreiben, Konten oder SSH-Schlüssel ändern, Daten an einen externen Server senden, rohe Netzwerkverbindungen öffnen, verschleierten Code ausführen, ein Skript herunterladen und ausführen, die Maschine herunterfahren oder neu starten oder andere Server erreichen, zeigen immer **Needs confirmation** an, selbst im Auto-Modus. - **Nicht vertrauenswürdige Ausgabe:** Die Befehlsausgabe wird dem Modell als nicht vertrauenswürdige Daten angezeigt; darin enthaltene Anweisungen werden nicht ausgeführt. ## Verifizierung {#verify} 1. Wählen Sie eine laufende Test-VM aus. Die Seite zeigt *SSH connected* an. 2. Geben Sie "Check CPU, RAM and disk" ein. Im Auto-Modus werden die Nur-Lese-Befehle ausgeführt und die Antwort fasst sie zusammen. 3. Geben Sie "Install Nginx" ein. Der Befehl zur Installation erscheint mit **Run** und **Skip**; es wird erst etwas ausgeführt, wenn Sie auf **Run** drücken. 4. Der Zähler oben zeigt die Anzahl der heute verwendeten KI-Aufrufe an (zum Beispiel `3/300`). ## Limits & Hinweise {#limits-notes} - **Tägliches Limit:** 300 KI-Aufrufe pro Kunde und Tag (UTC); es wird um 00:00 UTC zurückgesetzt. Wenn es aufgebraucht ist, antwortet der Agent mit "Daily AI quota reached". - **Gleichzeitigkeit:** Höchstens 2 Agenten-Läufe pro Kunde zur gleichen Zeit; eine Sitzung führt jeweils einen Durchgang aus. - **Sitzungen:** bis zu 100 Nachrichten pro Sitzung, 4,000 Zeichen pro Nachricht. Eine Sitzung gehört zu einer VM; wird die VM gelöscht oder übertragen, wird die alte Sitzung schreibgeschützt. - **Gesperrte oder gestoppte VM oder Windows:** Die VM wird als *Locked*, *Stopped*, *Windows* oder *No address* angezeigt und kann nicht ausgewählt werden. - **Impersonierung:** Ein Administrator, der sich als Kunde ausgibt, kann die Anmeldeinformationsfunktionen des Agenten nicht verwenden (siehe [Log in as a customer](https://nexcmp.com/de/docs/customers/login-as/)). - **Verantwortlichkeit:** Der Agent kann Fehler machen. Das Portal weist Kunden an, Befehle vor der Ausführung zu überprüfen. Teilen Sie Ihren Kunden in Ihren AGB mit, dass sie für die von ihnen genehmigten Befehle verantwortlich sind. - Das Ausschalten des KI-Moduls entfernt die Agenten-Einträge und die Routen antworten mit 404 `module_disabled`. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | "SSH-Client ist auf dem Panel-Server nicht installiert (apt install openssh-client)" | Keine `ssh`-Binärdatei | `sudo apt-get install -y openssh-client`. | | "Der Agent konnte sich nicht anmelden" / `ssh: no saved credentials for this VM` | Kein gespeichertes Passwort und kein Operationsschlüssel | Setzen Sie das VM-Passwort im Portal zurück, damit es erneut gespeichert wird, oder installieren Sie den Operationsschlüssel. | | "Der Server hat nicht rechtzeitig geantwortet" | Firewall, SSH lauscht nicht, VM ausgelastet | Testen Sie `nc -vz 22` vom Panel-Server aus; starten Sie `sshd` in der VM. | | "SSH auf diesem Server nicht erreichbar" | Routing oder Sicherheitsgruppe | Erlauben Sie dem Panel-Server, die VM über Port 22 zu erreichen. | | "VM läuft nicht" / "Forbidden" | VM gestoppt, gesperrt, gelöscht oder gehört nicht dem Kunden | Starten oder entsperren Sie sie oder wählen Sie eine andere. | | "Nicht verfügbar: N (gestoppt, gesperrt oder Windows)" | Obergelistete Gründe | Die VM muss Linux sein und laufen. | | "Das SSH-Gateway ist vorübergehend nicht verfügbar" | Web-SSH-Funktion aktiviert, aber `ssh-proxy` ist offline | Starten Sie `ssh-proxy` oder schalten Sie die Web-SSH-Funktion aus, um das integrierte SSH zu nutzen. | | "Die KI antwortet zu langsam (über 90 Sekunden)" | Anbieter langsam | Verwenden Sie ein schnelleres Modell oder einen geringeren **Reasoning effort**. | | "Tägliches KI-Kontingent erreicht" | 300 Aufrufe verbraucht | Warten Sie bis 00:00 UTC. | | "Diese Sitzung läuft noch" | Ein anderer Durchlauf läuft gerade | Warten Sie oder drücken Sie **Stop**. | --- # REST API > **Wo im Portal:** API-Referenz unter `https:///apidoc` (öffentlich) und API-Schlüssel unter `/api-keys`. **Wo im Admin-Bereich:** Customers › API keys (`/customers/apikeys`) listet die von Kunden erstellten Schlüssel auf. ## Funktion {#what-it-does} Jede Aktion, die ein Kunde im Portal ausführen kann — VMs auflisten und steuern, Rechnungen lesen, SSH-Schlüssel, Kubernetes, Speicher sowie Support-Tickets verwalten —, ist über eine versionierte REST API unter `https:///v1/` verfügbar. Kunden rufen sie aus Skripten und CI mit einem begrenzten **API key** auf. Dieselbe API speist das [`cmp` Befehlszeilentool](https://nexcmp.com/de/docs/developers/cmp-cli/) und den [MCP server](https://nexcmp.com/de/docs/developers/mcp/), und die Referenz wird aus der laufenden Installation generiert, sodass sie immer genau die Funktionen auflistet, die Sie eingeschaltet haben. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Öffentliche HTTPS-Adresse | Die API wird auf Ihrer Hauptdomain (und auf der eigenen Domain jedes Resellers) bereitgestellt. | | Ein API-Schlüssel | Vom Kunden im Portal erstellt; siehe [API keys](https://nexcmp.com/de/docs/developers/api-keys/). | | Abhängigkeiten | Keine. Endpunkte eines Moduls, das Sie nicht aktiviert haben (zum Beispiel Kubernetes oder Object Storage), werden vor der Referenz verborgen und abgelehnt. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Nichts zu installieren. Wenn ein Reverse-Proxy vor NexCMP sitzt, leiten Sie `/v1/`, `/mcp`, `/cli/` und `/apidoc` an das Panel weiter (die Nginx-Konfiguration des Installateurs tut dies bereits). ## In NexCMP verbinden {#connect-in-nexcmp} ### Die interaktive Referenz {#the-interactive-reference} Öffnen Sie `https://cloud.example.com/apidoc` (ersetzen Sie den Host durch Ihre Domain; Kunden eines Resellers sehen die Referenz auf der Domain des Resellers mit dessen Namen). Sie bietet Endpunkt-Dokumentation mit Anfrage- und Antwortbeispielen in curl, der `cmp` CLI, JavaScript, Python und Go, ein Suchfeld (Strg oder Cmd + K) sowie ein **Try it**-Panel. Try it sendet Anfragen nur an dieselbe Website mit einem Schlüssel, den der Besucher einfügt (wird in der Browsersitzung gespeichert); es ist standardmäßig schreibgeschützt, und Schreib- oder kostenpflichtige Aufrufe erfordern einen zusätzlichen Schalter und eine Bestätigung. ### Downloads und maschinenlesbare Dokumente {#downloads-and-machine-readable-documents} Alle sind öffentlich, benötigen keinen Schlüssel und werden pro Website generiert: | URL | Inhalt | |---|---| | `/apidoc` | Interaktive Referenz. | | `/v1/public/openapi.json` | OpenAPI 3.1-Dokument. | | `/v1/public/openapi.yaml` | Ebenso, YAML. | | `/v1/public/postman.json` | Postman-Collection. | | `/v1/public/insomnia.json` | Insomnia-Export. | | `/v1/public/api.md` | Die Referenz als eine Markdown-Datei. | | `/v1/public/api-catalog` | Light JSON: Marke, Basis-URL, Schlüsselpräfix, jeder Scope und jeder Endpunkt mit Methode, Pfad, Scope und Angabe, ob eine `Idempotency-Key` erforderlich ist. | ```bash curl -s https://cloud.example.com/v1/public/api-catalog | python3 -m json.tool | head -40 curl -sO https://cloud.example.com/v1/public/openapi.yaml ``` Wählen Sie in Postman **Import › Link** und fügen Sie `https://cloud.example.com/v1/public/postman.json` ein. Die Referenzseite bietet zudem einteilige API-Clients für JavaScript und Python. ### Authentifizierung {#authentication} Senden Sie den Schlüssel im Header `Authorization`: ```bash curl -s https://cloud.example.com/v1/billing/wallet \ -H "Authorization: Bearer vk_XXXX" ``` - Kundenschlüssel beginnen mit `vk_`. Schlüssel sind **an die Website gebunden**: Ein auf `cloud.example.com` erstellter Schlüssel funktioniert auf einer Reseller-Domain nicht. - Browser-Session-Token (`pt_...`) sind nur für das Portal bestimmt; verwenden Sie für die Automatisierung einen Schlüssel. - Die **Scopes** des Schlüssels bestimmen, welche Aufrufe er tätigen darf; ein fehlender Scope führt zu HTTP 403 `scope_required`. Siehe [API keys](https://nexcmp.com/de/docs/developers/api-keys/). - Überprüfen Sie einen Schlüssel mit `GET /v1/apikeys/self`: Dies gibt den Namen, die Scopes, das Ablaufdatum des aufrufenden Schlüssels sowie das verbleibende Kontingent des Rate-Limits zurück (jeder Schlüssel kann dies aufrufen). ### Beispiele {#examples} ```bash # List virtual machines curl -s "https://cloud.example.com/v1/vm?page=1" -H "Authorization: Bearer vk_XXXX" # Start one (needs vm:write) curl -s -X POST https://cloud.example.com/v1/vm/3f2a1c9e-0000-4000-8000-000000000000/start \ -H "Authorization: Bearer vk_XXXX" # Create a VM (paid: needs vm:create and an Idempotency-Key) curl -s -X POST https://cloud.example.com/v1/vm \ -H "Authorization: Bearer vk_XXXX" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d @vm.json ``` Entnehmen Sie die genauen Anfragefelder jeder Operation aus `/apidoc`. ### Fehler {#errors} Jeder Fehler ist JSON mit einem stabilen `code` und einer menschenlesbaren `message`: ```json {"error": {"code": "scope_required", "message": "Key lacks scope vm:write"}} ``` | HTTP | Typischer `code` | Bedeutung | |---|---|---| | 401 | `unauthenticated`, `key_invalid`, `key_revoked`, `key_expired`, `key_ip_denied`, `site_mismatch`, `api_keys_disabled` | Fehlender oder unbekannter Schlüssel, widerrufen, abgelaufen, Aufrufer-IP außerhalb der Erlaubnisliste des Schlüssels, ein Schlüssel von einer anderen Website oder deaktivierte API-Schlüssel. | | 403 | `scope_required`, `endpoint_not_public`, `account_blocked`, `quota_exceeded`, `impersonate_forbidden` | Dem Schlüssel fehlt der Scope; der Endpunkt ist für Schlüssel nicht verfügbar; das Konto ist gesperrt; ein [quota](https://nexcmp.com/de/docs/billing/quotas/) wurde erreicht; Aktion in einer übernommenen Session nicht zulässig. | | 404 | `not_found` | Nicht gefunden — wird auch für Ressourcen zurückgegeben, die jemand anderem gehören. | | 422 | `invalid_argument` | Validierungsfehler (Feld in der Antwort benannt). | | 429 | `rate_limited` | Zu viele Anfragen; warten auf `Retry-After`. | | 503 | `maintenance` | Wartungsmodus ist aktiv: Lesevorgänge funktionieren, Schreibvorgänge werden abgelehnt. | ### Rate-Limits {#rate-limits} | Limit | Standard | |---|---| | Pro Schlüssel | 120 Anfragen pro Minute | | Pro Konto (alle Schlüssel zusammen) | 300 Anfragen pro Minute | Jede Antwort enthält `X-RateLimit-Limit`, `X-RateLimit-Remaining` und `X-RateLimit-Reset`; ein Status 429 fügt `Retry-After` hinzu. ### Idempotenz {#idempotency} Befehle, die Geld kosten oder nicht wiederholt werden können (Erstellen, Tarif wechseln, Kaufen, Löschen ...), **erfordern** einen `Idempotency-Key`-Header (beliebiger String bis zu 200 Zeichen; eine UUID eignet sich gut). Senden Sie denselben Schlüssel nach einer Zeitüberschreitung erneut, und der Server gibt das **ursprüngliche** Ergebnis zurück (mit `Idempotency-Replayed: 1`), anstatt die Operation zu wiederholen. Die Wiederverwendung eines Schlüssels für einen anderen Befehl ergibt 422; eine Anfrage, die noch verarbeitet wird, ergibt 409/`Retry-After`. Ohne den Header wird ein kostenpflichtiger Aufruf abgelehnt. ## Verifizierung {#verify} 1. Erstellen Sie im Portal einen Schlüssel mit dem Scope `vm:read` (**API keys › Create key**). 2. Führen Sie Folgendes aus: ```bash curl -i https://cloud.example.com/v1/apikeys/self -H "Authorization: Bearer vk_XXXX" ``` Sie erhalten HTTP 200 und die Rate-Limit-Header. 3. `curl -s https://cloud.example.com/v1/vm -H "Authorization: Bearer vk_XXXX"` listet die VMs des Kontos auf. Im Portal zeigen die Spalte **Last used** des Schlüssels und das **Key usage log** die Aufrufe an. ## Limits & Hinweise {#limits-notes} - **Niemals für einen Schlüssel verfügbar:** Guthaben aufladen, abheben, Karten oder automatisches Aufladen ändern, Passwort, E-Mail oder 2FA ändern, Konto löschen, andere Schlüssel erstellen, bearbeiten oder widerrufen. Dafür ist eine angemeldete Browsersession erforderlich. - **Ausgeblendete Module:** Die Referenz und das OpenAPI-Dokument listen nur Funktionen auf, die auf dieser Website aktiviert sind. - **Antwortgröße und Paginierung:** Listenendpunkte sind paginiert (`page`, `per_page`); lesen Sie das OpenAPI-Dokument für jeden Endpunkt. - **Zeit und Geld:** Beträge sind in USD-Cents angegeben, sofern der Feldname nichts anderes besagt. - **Admin-API:** Die Admin-Konsole verfügt über eine eigene Seite **System › Admin › API** und Administrator-Schlüssel (`ofw_...`) für die Administration; diese sind von der hier beschriebenen Kunden-API getrennt. - **Versionierung:** Das Pfadpräfix `/v1` ist stabil; Antworten können neue Felder hinzugefügt werden. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | 401 bei neuem Schlüssel | Schlüssel von einer anderen Domain, abgelaufen oder mit Leerzeichen eingegeben | Erstellen Sie den Schlüssel auf der aufgerufenen Domain; prüfen Sie den `Authorization: Bearer vk_...`-Header. | | 403 `scope_required` | Fehlender Scope | Bearbeiten Sie den Schlüssel im Portal und fügen Sie den Scope hinzu. | | 401 `key_ip_denied` oder `site_mismatch` | Schlüssel auf andere IPs beschränkt („erlaubte IPs“) oder auf einer anderen Domain erstellt | Fügen Sie die IP Ihres Servers zu den erlaubten IPs des Schlüssels hinzu oder rufen Sie die Domain auf, auf der der Schlüssel erstellt wurde. | | 404 bei einer existierenden VM | Die VM gehört zu einem anderen Account | Verwenden Sie einen Schlüssel des Eigentümers. | | 400/422 mit der Bitte um `Idempotency-Key` | Kostenpflichtiger Vorgang ohne den Header | Fügen Sie `Idempotency-Key: ` hinzu. | | 429 | Limit überschritten | Warten Sie ab; verwenden Sie `Retry-After`. | | `/apidoc` zeigt weniger als erwartet | Modul ausgeschaltet | Aktivieren Sie das Modul unter License & updates. | --- # API-Schlüssel und Scopes {#api-keys-and-scopes} > **Wo im Portal:** API keys (`/api-keys`). **Wo im Admin-Bereich:** Customers › Customers › API keys (`/customers/apikeys`). ## Funktion {#what-it-does} Ein **API key** ermöglicht es einem Skript, einem CI-Job, der [`cmp` CLI](https://nexcmp.com/de/docs/developers/cmp-cli/) oder einem KI-Assistenten ([MCP](https://nexcmp.com/de/docs/developers/mcp/)), die [REST API](https://nexcmp.com/de/docs/developers/api/) im Namen eines Kunden aufzurufen – beschränkt auf die jeweils gewährten Berechtigungen (**Scopes**). Kundenschlüssel beginnen mit `vk_`. Sie können Dienste einsehen und verwalten, haben aber **niemals** Zugriff auf Guthaben oder das Konto selbst. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Kunde | Eine angemeldete Portalsitzung (ein Schlüssel kann keine anderen Schlüssel erstellen oder bearbeiten, und ein Administrator, der einen Kunden imitiert, ebenfalls nicht). | | Schalter | API-Schlüssel sind standardmäßig aktiviert. Wenn sie ausgeschaltet sind, antworten Aufrufe mit 401 `api_keys_disabled`. | | Abhängigkeiten | Die Scopes eines Produkts erscheinen nur, wenn dieses Produkt auf der Site aktiviert ist. | ## Schlüssel erstellen (Kunde) {#create-a-key-customer} 1. Melden Sie sich im Portal an und öffnen Sie **API keys**. 2. Klicken Sie auf **Create key**. 3. Füllen Sie das Formular aus: | Feld | Regel | |---|---| | **Key name** | Erforderlich, bis zu 60 Zeichen („deploy server“, „backup script“). | | **Dürfen mit diesem Key ausgeführt werden** | Wählen Sie die benötigten Scopes aus – mindestens einen. Ein Nur-Lese-Schlüssel sollte keinen Schreib-Scope erhalten. Seien Sie vorsichtig mit Scopes, die Geld kosten oder Daten löschen. | | **Expiry** | Nie, 30 Tage, 90 Tage oder 1 Jahr (die API akzeptiert 1 bis 3650 Tage). | | **Nur Aufrufe von diesen IPs zulassen** | Eine IP oder ein CIDR-Bereich pro Zeile, bis zu 20 (IPv4 oder IPv6). Leer bedeutet jede IP. Pinnen Sie nach Möglichkeit die IP Ihres Servers. | 4. Bestätigen Sie das Formular. Der Schlüssel wird **einmal** in einem Fenster mit der Aufschrift „Key created — shown ONCE“ angezeigt. Kopieren Sie ihn und klicken Sie auf **I saved the key**. Es wird nur ein SHA-256-Hash gespeichert, sodass selbst ein Administrator ihn nicht erneut lesen kann; wenn Sie ihn verlieren, sperren Sie ihn und erstellen Sie einen neuen. 5. Das Portal zeigt außerdem einen fertigen `curl`-Befehl zum Testen des Schlüssels. Ein Schlüssel sieht aus wie `vk_` gefolgt von einer langen zufälligen Zeichenfolge. Die Liste zeigt nur die ersten Zeichen (zum Beispiel `vk_a1b2c3d4`), die Scopes, das Ablaufdatum, die letzte Verwendung, die Anzahl der Anfragen und den Status (*Active*, *Expired*, *Revoked*). ### Bearbeiten, sperren, prüfen {#edit-revoke-audit} - **Edit** ändert Name, Scopes, erlaubte IP-Adressen und Ablaufdatum. Dies ist während einer Immatrikulationssitzung nicht zulässig. - **Revoke** stoppt den Schlüssel sofort und kann nicht rückgängig gemacht werden. Die Zeile bleibt erhalten, damit das Nutzungsprotokoll verfügbar ist. - **Key usage log** zeigt Schreibbefehle und jeden Fehler der letzten 60 Tage: Uhrzeit, Anfrage, Schlüssel, Ergebnis und Quell-IP. - Ein Konto kann standardmäßig maximal **10 aktive Schlüssel** halten. - Über das CLI oder den MCP-Login erstellte Schlüssel erscheinen unter **Connected apps & devices** und können dort widerrufen werden. ## Scopes {#scopes} Scope-Namen haben die Form `area:action`. Welche angeboten werden, hängt von Ihren aktivierten Produkten ab. | Scope | Erlaubt | |---|---| | `catalog:read` | Pläne und den Katalog lesen. | | `vm:read` | VMs, Metriken und VM-Rechnungen lesen. | | `vm:write` | Power-Aktionen, kleinere Änderungen, Firewall, Schnell-Snapshots. | | `vm:create` | **VMs erstellen (kostet Geld).** | | `vm:plan` | **Plan ändern oder Größe anpassen (kostet Geld).** | | `vm:destroy` | **VMs löschen.** | | `vm:restore` | **Eine VM aus einem Snapshot wiederherstellen (überschreibt die Festplatte).** | | `vm:console` | VNC-Konsolentickets öffnen. | | `sshkey:read`, `sshkey:write` | SSH-Schlüssel lesen, hinzufügen und entfernen. | | `volume:read`, `volume:write`, `volume:create`, `volume:destroy` | Datenträger (Erstellen und Vergrößern kosten Geld; Löschen führt zu Datenverlust). | | `backup:read`, `backup:write`, `backup:restore` | Backups (Wiederherstellung überschreibt die Festplatte). | | `billing:read` | Guthaben, Rechnungen, Zahlungsverlauf — **nur lesen**. | | `bandwidth:buy` | **Ein Bandbreiten-Add-on kaufen (kostet Geld).** | | `account:read`, `account:write` | Profil, Übersicht, Aktivität, Benachrichtigungen; `account:write` markiert Benachrichtigungen nur als gelesen. | | `apikey:read` | Schlüssel des Kontos und das Nutzungsprotokoll auflisten (kann nicht erstellen, bearbeiten oder widerrufen). | | `apikey:self` | Implizit bei jedem Schlüssel: Den aufrufenden Schlüssel inspizieren (`GET /v1/apikeys/self`). | | `ticket:read`, `ticket:write` | Support-Tickets. | | `aff:read`, `transfer:read` | Affiliate-Programm und Dienstübertragungen — nur lesen. | | `k8s:read`, `k8s:write`, `k8s:create`, `k8s:scale`, `k8s:destroy`, `k8s:kubeconfig` | Kubernetes (Erstellen und Skalieren kosten Geld; kubeconfig hat Cluster-Admin-Rechte). | | `vpc:read`, `vpc:write`, `vpc:create`, `vpc:destroy` | Private Cloud. | | `image:read`, `image:write` | OS- und ISO-Images (Speicher wird stündlich abgerechnet). | | `s3:read`, `s3:write`, `s3:create`, `s3:destroy`, `s3:keys` | Object Storage (das S3-Geheimnis wird einmal angezeigt). | | `vpn:read`, `vpn:detail`, `vpn:write`, `vpn:create`, `vpn:destroy` | VPN und IPv6-Proxy (Verbindungsdetails enthalten Proxy-Passwörter). | | `dedicated:read`, `dedicated:write`, `dedicated:console`, `dedicated:create`, `dedicated:destroy` | Dedicated Server (Bestellungen aus dem Guthaben erstellen; Löschen installiert das Betriebssystem neu). | | `shield:read`, `shield:write`, `shield:agent` | DDoS Shield, nur wenn dieses Modul aktiviert ist. | Ein Aufruf außerhalb der Scopes des Schlüssels antwortet mit **403 `scope_required`**; ein Pfad, den kein Schlüssel aufrufen darf, antwortet mit **403 `endpoint_not_public`**. ### Was ein Schlüssel niemals tun kann {#what-a-key-can-never-do} Kein Scope öffnet: Guthaben aufladen oder abheben, Karten oder automatisches Aufladen ändern, Passwort, E-Mail oder 2FA ändern, das Konto löschen, andere Schlüssel erstellen, bearbeiten oder widerrufen. Dies erfordert immer einen angemeldeten Browser. Selbst ein kompromittierter Schlüssel kann weder das Geld noch das Konto des Kunden antasten. ## Regeln, auf die Sie sich verlassen können {#rules-you-can-rely-on} | Regel | Detail | |---|---| | Seitengebunden | Ein Schlüssel funktioniert nur auf der Website (Domain), auf der er erstellt wurde. | | Rate-Limits | Pro Schlüssel und pro Konto: standardmäßig 120 bzw. 300 Anfragen pro Minute. | | Idempotenz | Operationen, die Geld kosten oder nicht wiederholt werden können, erfordern einen `Idempotency-Key` Header. | | Quotas | Ein Schlüssel unterliegt denselben [Quotas](https://nexcmp.com/de/docs/billing/quotas/) wie der Kunde. | | Gesperrtes Konto | Die Schlüssel eines gesperrten Kunden funktionieren nicht mehr (403 `account_blocked`). | | Audit | Der Widerruf durch einen Administrator wird in das Admin-Audit-Log geschrieben. | ## Administratoransicht {#administrator-view} 1. Öffnen Sie **Customers › API keys** (`/customers/apikeys`). Die Tabelle zeigt Schlüsselname und erste Zeichen, Besitzer, Scopes, Status, letzte Verwendung (Uhrzeit, Anfragemöglichkeiten, IP) und Ablaufdatum. 2. Filtern Sie nach Site, falls Sie Reseller haben. Suchen Sie nach Name, ID oder Schlüsselanfang. 3. Klicken Sie auf **Revoke**, um einen aktiven Schlüssel zu stoppen, oder auf **Log** für die Nutzungsdaten. 4. Administratoren **sehen und widerrufen** Schlüssel, können sie jedoch für Kunden weder lesen noch erstellen. ![Administratorliste der Kunden-API-Schlüssel mit Scopes, Status, letzter Verwendung und Widerrufen-Schaltfläche](https://nexcmp.com/de/docs/images/developers/api-keys-02-admin.webp) ## Verifizierung {#verify} 1. Erstellen Sie einen Schlüssel mit nur dem Scope `vm:read`. 2. `curl -s https://cloud.example.com/v1/vm -H "Authorization: Bearer vk_XXXX"` gibt die VM-Liste zurück. 3. `curl -s -X POST .../v1/vm//start -H "Authorization: Bearer vk_XXXX"` antwortet mit 403 `scope_required`. 4. Widerrufen Sie den Schlüssel; der erste Aufruf liefert nun 401 `key_revoked`. ## Limits & Hinweise {#limits-notes} - Der Schlüssel wird nie wieder angezeigt. Behandeln Sie ihn wie ein Passwort und speichern Sie ihn in einem Secret-Manager oder CI-Secret. - Bevorzugen Sie einen Schlüssel pro Skript, minimale Scopes, eine kurze Gültigkeit und eine IP-Whitelist; rotieren Sie Schlüssel, indem Sie einen neuen erstellen und den alten widerrufen. - Schlüssel aus Geräte-Logins (CLI, MCP) sind standardmäßig 90 Tage gültig. - Gelöschte oder übertragenen Ressourcen bleiben vom Widerruf eines Schlüssels unberührt. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Fehler `too_many_keys` (422) | Das Limit aktiver Schlüssel (standardmäßig 10) ist erreicht | Widerrufen Sie einen alten Schlüssel. | | Fehler `invalid_argument`: kein Scope ausgewählt | Kein Scope angehakt | Wählen Sie mindestens einen Scope aus. | | Fehler `invalid_argument` bei erlaubten IPs | Ein Eintrag ist keine IP oder kein Bereich, hat eine falsche Präfixlänge oder es sind mehr als 20 Einträge | Eine IP oder CIDR pro Zeile, zum Beispiel `203.0.113.0/24`. | | Erstellung während der Implantation verweigert | `impersonate_forbidden` | Bitten Sie den Kunden, den Schlüssel zu erstellen. | | 401 `key_expired` | Ablaufdatum überschritten | Erstellen Sie einen neuen Schlüssel. | | 401 `key_ip_denied` | Aufruf-IP nicht in der Whitelist | Fügen Sie die IP hinzu oder leeren Sie die Liste. | | 401 `api_keys_disabled` | Funktion deaktiviert | Fragen Sie Ihren Administrator (Einstellung `api_keys_enabled`). | --- # `cmp`-Befehlszeilentool {#cmp-command-line-tool} > **Wo im Portal:** Die Installationsbefehle befinden sich in der API-Referenz (`https:///apidoc`, Abschnitt Command-line interface). Bestätigen eines Logins: `https:///link`. Verbundene Geräte: API keys (`/api-keys`) › Connected apps & devices. ## Funktion {#what-it-does} `cmp` ist ein kleines Befehlszeilenprogramm für Ihre Kunden (und für Sie), das **jede API-Operation in einen Befehl** umwandelt: `cmp vm list`, `cmp vm start `, `cmp billing invoice list`. Es wird zum Zeitpunkt des Release aus dem OpenAPI-Dokument **Ihrer** Installation erstellt, sodass die Befehle genau zu den von Ihnen aktivierten Funktionen passen. Es handelt sich um eine einzige statische Binärdatei für Linux, macOS und Windows (amd64 und arm64), für die keine weitere Installation erforderlich ist. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Server | Nichts Zusätzliches. Die Release-Pakete befinden sich im NexCMP-Release und werden vom Panel unter `https:///cli/` bereitgestellt. | | Kundenmaschine | Linux, macOS oder Windows (PowerShell 5.1+). `ssh-keygen` (OpenSSH 8.0+) wird nur zur Überprüfung der Signatur benötigt. | | Anmeldeinformationen | Ein Browser-Login mit Einmalcode oder ein [API key](https://nexcmp.com/de/docs/developers/api-keys/). | | Netzwerk | HTTPS zu Ihrem Panel. Das CLI verweigert das Senden eines Schlüssels über unverschlüsseltes `http://`, außer an `localhost`. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Nichts. Das Panel stellt diese Dateien von `/cli/` bereit (kein Build oder Upload erforderlich): | Datei | Zweck | |---|---| | `install.sh`, `install.ps1` | Installationsprogramme für Linux/macOS und Windows; sie enthalten die Adresse Ihres Panels. | | `latest.json` | Aktuelle Version, Dateiliste, Größen, sha256. | | `v/cmp___.tar.gz` oder `.zip` | Die Programme: linux amd64/arm64, darwin amd64/arm64/universal, windows amd64/arm64. | | `v/SHA256SUMS`, `SHA256SUMS.sig` | Prüfsummen und deren ed25519-Signatur. | | `cmp-cli.pub` | Der öffentliche Release-Schlüssel. | ## Installieren (Kunde) {#install-customer} macOS und Linux: ```bash curl -fsSL https://cloud.example.com/cli/install.sh | sh ``` Windows PowerShell: ```powershell irm https://cloud.example.com/cli/install.ps1 | iex ``` Das Installationsprogramm wählt das Paket für das Betriebssystem und die CPU aus, lädt `SHA256SUMS` und dessen Signatur herunter, verifiziert die Signatur mit dem im Skript eingebetteten Schlüssel, überprüft den Paket-Hash und installiert `cmp` in `/usr/local/bin` (als root) oder `~/.local/bin`; unter Windows in `%LOCALAPPDATA%\cmp\bin` (wird dem Benutzer-`PATH` hinzugefügt). Schlägt eine Prüfung fehl, wird nichts installiert. | Variable | Bedeutung | |---|---| | `CMP_VERSION` | Installieren Sie diese Version anstelle der neuesten. | | `CMP_INSTALL_DIR` | Installationsordner. | | `CMP_REQUIRE_SIGNATURE` | `1` = abbrechen, wenn die Signatur nicht verifiziert werden kann. | | `CMP_BASE_URL` | Download-Basis (für Mirrors). | Manueller Download und Verifizierung: ```bash curl -fsSLO https://cloud.example.com/cli/latest.json sha256sum --check --ignore-missing SHA256SUMS ``` ![API-Referenzbereich mit dem Befehl cmp install für macOS und Linux](https://nexcmp.com/de/docs/images/developers/cmp-cli-01-install.webp) ## Anmelden {#log-in} ```bash cmp login ``` 1. Das CLI gibt einen einmaligen **Code** sowie einen Link (`https://cloud.example.com/link?code=WDJB-MJHT`) aus, öffnet den Browser und wartet. 2. Melden Sie sich im Browser im Portal an, überprüfen Sie den Client-Namen, das Gerät, die IP und das Land, kreuzen Sie die Berechtigungen (Scopes) an und wählen Sie aus, wie lange der Schlüssel gültig sein soll (Standard: 90 Tage). Berechtigungen, die kostenpflichtig sind oder Daten löschen, sind zunächst nicht angekreuzt. Klicken Sie auf Genehmigen. 3. Das CLI erhält **einen eigenen Schlüssel**, getrennt von den Schlüsseln, die der Kunde manuell erstellt hat, und speichert ihn in `~/.config/cmp/config.json` (Modus `0600`; `%APPDATA%\cmp` unter Windows). Er erscheint unter **API keys › Connected apps & devices** und kann dort widerrufen werden. Der Code läuft nach 10 Minuten ab. Die Genehmigung erfordert eine echte, angemeldete Portalsitzung mit einer verifizierten E-Mail — keinen anderen Schlüssel und keine impersonierte Sitzung. Nützliche Flags: `--scopes vm:read,billing:read`, `--name "build server"`, `--no-browser`, `--profile`, `--api-url`. Für CI oder Server ohne Browser verwenden Sie einen Schlüssel aus dem Portal: ```bash printf %s "$KEY" | cmp login --with-token export CMP_TOKEN=vk_XXXX # nothing is written to disk cmp whoami ``` ## Befehle verwenden {#using-commands} ```text cmp [subgroup] [ ...] [flags] ``` - Pfadparameter sind positionelle Argumente; Query-Parameter und Body-Felder werden zu Kebab-Case-Flags (`--start-port 443`). - `--data '{"a":1}'`, `--data @file.json` oder `--data -` sendet einen vollständigen JSON-Body; Flags überschreiben dessen Felder. - `cmp help vm firewall add` (oder `--help`) zeigt die Details eines beliebigen Befehls an. ```bash cmp catalog plans cmp vm list --state active --per-page 50 cmp vm get 3f2a1c9e-0000-4000-8000-000000000000 cmp vm start 3f2a1c9e-0000-4000-8000-000000000000 cmp vm firewall add 3f2a1c9e-... --protocol tcp --start-port 22 --cidr-list 203.0.113.0/24 cmp billing wallet cmp api GET /v1/vm --query page=2 # raw call to any endpoint ``` Integrierte Befehle: `login`, `logout`, `whoami`, `config`, `api`, `completion`, `version`, `update`, `help`. Alles andere stammt aus dem API-Dokument. Globale Flags: | Flag | Bedeutung | |---|---| | `-o, --output json\|table\|yaml` | Format. Standardmäßig `table` auf einem Terminal und `json` bei Weiterleitung (Piping). | | `--profile`, `--api-url` | Welcher gespeicherte Login und welche Website. | | `-y, --yes` | Bestätigung für destruktive oder kostenpflichtige Befehle überspringen. | | `--idempotency-key ` | Den Schlüssel für einen kostenpflichtigen Befehl auswählen. | | `--retry ` | Bei HTTP 429 auf `Retry-After` warten und bis zu n-mal wiederholen. | | `--timeout ` | Sekunden, die auf Antwortheader gewartet werden soll (Standard: 60). | | `--debug` | HTTP-Austausch auf stderr anzeigen, wobei Schlüssel maskiert sind. | Befehle, die **das Guthaben belasten oder Daten löschen**, fragen nach einer Bestätigung und senden bei kostenpflichtigen Aktionen ein automatisch generiertes `Idempotency-Key` (wird auf stderr ausgegeben, sodass Sie es mit `--idempotency-key` sicher wiederholen können). Ohne Terminal werden sie abgelehnt, es sei denn, `--yes` wird angegeben. ### Exit-Codes {#exit-codes} | Code | Bedeutung | |---|---| | 0 | Erfolg | | 1 | Sonstiger Fehler (Netzwerk, HTTP 4xx/5xx nicht aufgeführt) | | 2 | Verwendungsfehler | | 3 | Nicht autorisiert (401/403) | | 4 | Nicht gefunden (404) | | 5 | Limit überschritten (Rate-Limit, 429) | | 6 | Bestätigung erforderlich oder abgelehnt | | 130 | Unterbrochen | ### Profile und Umgebung {#profiles-and-environment} `cmp config` listet Profile auf; `cmp config use ` schaltet um; die Kunden eines Resellers nutzen ihre eigene Domain: `cmp login --api-url https://shop.example.net --profile shop`. Rangfolge: Flag, Umgebung, Konfigurationsdatei. Variablen: `CMP_TOKEN`, `CMP_PROFILE`, `CMP_API_URL`, `CMP_OUTPUT`, `CMP_CONFIG_DIR`, `CMP_ALLOW_HTTP`, `CMP_UPDATE_URL`. GitHub Actions: ```yaml - name: Install cmp run: | curl -fsSL https://cloud.example.com/cli/install.sh | CMP_INSTALL_DIR="$RUNNER_TEMP/bin" sh echo "$RUNNER_TEMP/bin" >> "$GITHUB_PATH" - name: List running VMs env: CMP_TOKEN: ${{ secrets.CMP_TOKEN }} # a read-only key run: cmp vm list -o json | jq -r '.items[] | select(.cs_state=="Running") | .hostname' ``` Shell-Vervollständigung: `cmp completion bash|zsh|fish|powershell`. ## Aktualisierung und Deinstallation {#update-and-uninstall} ```bash cmp version cmp update --check cmp update ``` `cmp update` lädt `latest.json`, `SHA256SUMS` sowie die Signatur herunter, verifiziert die Signatur mit dem im **ausgeführten Binary fest einprogrammierten** öffentlichen Schlüssel, prüft den Hash des Pakets und ersetzt sich erst danach selbst. Ein Downgrade erfordert `--force`. Wenn Sie NexCMP aktualisieren, stellt das Panel das CLI-Release bereit, das mit der neuen Version ausgeliefert wird. Löschen Sie zur Deinstallation das `cmp`-Binary und das Konfigurationsverzeichnis (`cmp config path` zeigt es an). Widerrufen Sie den Schlüssel unter **API keys**, falls das Gerät verloren geht. ## Verifizierung {#verify} 1. `cmp version` gibt die Version und die API-Dokumentversionsnummer aus. 2. `cmp login`, im Browser genehmigen, danach zeigt `cmp whoami` das Profil und die URL Ihres Panels an. 3. `cmp vm list` gibt Ihre VMs zurück; `cmp vm list -o json | jq .` zeigt das rohe JSON an. ## Limits & Hinweise {#limits-notes} - Die Befehlsliste hängt von Ihrem Build ab: Die Pakete werden aus dem OpenAPI-Dokument Ihrer Installation generiert, wenn das Release erstellt wird. Ein in Ihrer Version deaktiviertes Produkt hat daher keinen Befehl. Verwenden Sie `cmp api` für einen Pfad, den die CLI nicht kennt. - Die CLI unterliegt der MIT-Lizenz. - Jedes Paket ist mit einem ed25519-Schlüssel signiert; der Signaturschlüssel ist im Installer und im Binary hinterlegt und wird nicht zum Zeitpunkt des Updates abgerufen. - Schlüssel sind pro Schlüssel und pro Konto limitiert (siehe [REST API](https://nexcmp.com/de/docs/developers/api/#rate-limits)). ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | `curl .../cli/install.sh` gibt 404 zurück | Das Release auf dem Server hat keinen CLI-Ordner oder der Host ist nicht in der Lizenz enthalten | Überprüfen Sie `https:///cli/latest.json` und die Domain; aktualisieren Sie NexCMP. | | "Signatur konnte nicht verifiziert werden" | `ssh-keygen` fehlt oder ist zu alt | Installieren Sie OpenSSH 8.0+ oder setzen Sie `CMP_REQUIRE_SIGNATURE=0` nur, wenn Sie das Risiko eingehen. | | `cmp login` gibt an, dass der Code abgelaufen ist | 10 Minuten sind vergangen | Führen Sie `cmp login` erneut aus. | | Exit-Code 3 | Schlüssel hat keinen Scope, ist abgelaufen oder wurde widerrufen | `cmp whoami`; erstellen oder reaktivieren Sie den Schlüssel mit weiteren Scopes. | | Exit-Code 6 in einem Skript | Kostenpflichtiger oder destruktiver Befehl ohne Terminal | Fügen Sie `--yes` (sowie Ihr eigenes `--idempotency-key`) hinzu. | | "refuses to sends a key over http" | Unverschlüsselte HTTP-API-URL | Verwenden Sie `https://` oder `CMP_ALLOW_HTTP=1` nur für Testumgebungen. | | Browser öffnet die falsche Website | `--api-url` ist für einen Reseller nicht gesetzt | `cmp login --api-url https://`. | --- # MCP-Server {#mcp-server} > **Where in the portal:** API reference › Tools (`https:///apidoc`) zeigt den Endpunkt und Client-Snippets; Schlüssel werden unter API keys (`/api-keys`) erstellt. Es gibt keine Admin-Einstellung: Der Endpunkt ist Teil des Panels. ## Funktion {#what-it-does} Das **Model Context Protocol (MCP)** ermöglicht es einem KI-Assistenten, Tools aufzurufen. NexCMP stellt einen MCP-Endpunkt unter `https:///mcp` bereit. Jede öffentliche API-Operation wird zu einem **Tool** (`vm_list`, `vm_start`, `billing_wallet`, ...), sodass ein Kunde seinen Assistenten fragen kann: „Welche meiner VMs laufen?“ oder „Stoppe die Staging-VM“. Der Assistent agiert ausschließlich mit dem eigenen API-Schlüssel und den Berechtigungen des Kunden. ::: tip NexCMP selbst mit KI konfigurieren? Diese Seite beschreibt den **Kunden**-MCP-Endpunkt (`/mcp`). Informationen darüber, wie Sie einen KI-Assistenten als Administrator Ihr eigenes Panel konfigurieren lassen, finden Sie unter [Configure with AI](https://nexcmp.com/de/docs/configure-with-ai/mcp-admin/) (Endpunkt `/mcp/admin`, Admin-Schlüssel `ak_`). ::: ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Server | Nichts zu installieren: Der Endpunkt wird vom Panel bereitgestellt und ist überall dort erreichbar, wo das Panel erreichbar ist. Ihr Reverse Proxy muss `/mcp` an das Panel weiterleiten. | | Kunde | Ein [API key](https://nexcmp.com/de/docs/developers/api-keys/) (`vk_...`) mit den vom Assistenten benötigten Scopes. | | Client | Ein MCP-Client, der den **Streamable HTTP**-Transport und einen benutzerdefinierten `Authorization`-Header unterstützt: Claude Code, Claude Desktop (über die `mcp-remote`-Bridge), Cursor, VS Code mit Copilot-Agentenmodus und ähnliche. | | Protokollversionen | 2025-11-25, 2025-06-18 und 2025-03-26. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Nichts, außer sicherzustellen, dass `https:///mcp` nicht durch eine Firewall oder eine Proxy-Regel blockiert wird. Ein browserbasierter MCP-Client von einem anderen Ursprung wird abgelehnt, es sei denn, dieser Ursprung ist zugelassen; Befehlszeilen- und Desktop-Clients senden keinen `Origin`-Header und funktionieren wie gewohnt. ## Verbinden (Kundenseite) {#connect-customer-side} 1. Erstellen Sie im Portal einen API-Schlüssel (**API keys › Create key**) mit nur den Scopes, die der Assistent verwenden soll, einer kurzen Gültigkeitsdauer und nach Möglichkeit einer IP-Beschränkung. 2. Fügen Sie den Server zu Ihrem Client hinzu. Ersetzen Sie `cloud.example.com` und den Schlüssel. **Claude Code** ```bash claude mcp add --transport http cloud https://cloud.example.com/mcp \ --header "Authorization: Bearer vk_XXXX" ``` **Cursor** (`~/.cursor/mcp.json` oder `.cursor/mcp.json`; legen Sie `CLOUD_API_KEY` in der Umgebung fest, aus der Cursor gestartet wird): ```json { "mcpServers": { "cloud": { "url": "https://cloud.example.com/mcp", "headers": { "Authorization": "Bearer ${env:CLOUD_API_KEY}" } } } } ``` **Claude Desktop** (benötigt Node.js 18+; `claude_desktop_config.json`), über die `mcp-remote`-Bridge: ```json { "mcpServers": { "cloud": { "command": "npx", "args": ["-y", "mcp-remote", "https://cloud.example.com/mcp", "--header", "Authorization:${CLOUD_AUTH_HEADER}"], "env": { "CLOUD_AUTH_HEADER": "Bearer vk_XXXX" } } } } ``` Schreiben Sie den Header ohne Leerzeichen nach dem Doppelpunkt und fügen Sie den gesamten Wert wie oben in die Umgebungsvariable ein. 3. Starten Sie den Client neu und fordern Sie ihn auf, Ihre Tools aufzulisten. Überprüfen Sie die Verbindung ohne Client: ```bash curl -s https://cloud.example.com/mcp \ -H "Authorization: Bearer vk_XXXX" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' ``` ## Wie es funktioniert {#how-it-works} | Komponente | Detail | |---|---| | Endpoint | `POST /mcp` mit einer JSON-RPC 2.0-Nachricht; die Antwort ist `application/json`. `GET /mcp` antwortet mit 405 (kein Server-zu-Client-Stream); `DELETE /mcp` beendet die Sitzung. | | Authentifizierung | Nur `Authorization: Bearer vk_...` (Sitzungstokens, Cookies und Adminschlüssel werden mit 401 und einem `WWW-Authenticate: Bearer`-Header abgelehnt). | | Sitzung | `Mcp-Session-Id` wird von `initialize` ausgestellt, an diesen Schlüssel gebunden und ist 24 Stunden gültig; maximal 16 Sitzungen pro Schlüssel. | | Tools | Eine pro öffentlicher API-Operation, die für den Schlüssel sichtbar ist. Der Tool-Name entspricht dem CLI-Befehl, bei dem Leerzeichen und Bindestriche durch `_` ersetzt wurden (aus `vm firewall add` wird `vm_firewall_add`), und stimmt mit dem OpenAPI-`operationId` überein. Ein Tool wird nur aufgelistet, wenn der Schlüssel über den entsprechenden Scope verfügt und das Modul aktiviert ist. | | Funktionen | Nur Tools (keine Ressourcen oder Prompts). | | Größe | Anfragetext bis zu 1 MB; Tool-Ergebnistext bis zu ca. 100 KB (der Rest wird mit einem Hinweis abgeschnitten); ein Aufruf dauert höchstens 55 Sekunden. | ### Sicherheitsregeln {#safety-rules} - **Gleiches Tor wie die REST-API.** Jedes `tools/call` durchläuft die panel-eigene Anfragenpipeline: Scope, Site, IP-Beschränkung, Rate-Limit, Idempotenz, Inhaberschaftsprüfungen (404 für Ressourcen anderer Personen) und Quotas greifen uneingeschränkt. MCP kann nichts gewähren, worüber der Schlüssel nicht verfügt. - **Bestätigung.** Tools, die kostenpflichtig sind, Daten löschen oder Anmeldedaten zurückgeben (Konsolentickets, Kubeconfig, S3- oder SSH-Geheimnisse, Passwortresets, neue Schlüssel), erfordern das Argument `confirm: true`. Die Tool-Beschreibung weist den Assistenten an, dieses nur nach Bestätigung durch den Benutzer zu übergeben, sodass eine in einer Webseite oder einem Protokoll versteckte Anweisung dies nicht eigenständig auslösen kann. - **Idempotenz.** Kostenpflichtige Tools akzeptieren `idempotency_key`; wird dies weggelassen, wird aus dem Tool-Namen und den Argumenten ein stabiler Schlüssel abgeleitet, sodass ein identischer Wiederholungsversuch nicht doppelt berechnet werden kann. - **Nicht als Tools verfügbar:** Streaming-Endpunkte (der AI Agent-Chat), einmalige SSH- oder Konsolen-WebSocket-Tickets, Binärdownloads und die Endpunkte der VPN-App (`/v1/ext/*`). - **Niemals möglich:** Die API erlaubt zu keinem Zeitpunkt Aufladungen, Passwortänderungen, das Löschen des Kontos oder das Erstellen von Schlüsseln, sodass kein Assistent diese Aktionen ausführen kann. ### Limits {#limits} | Limit | Standard | |---|---| | Tool-Aufrufe pro Schlüssel | 60 pro Minute | | MCP-Anfragen pro Schlüssel | 240 pro Minute | | Plus die normalen Schlüssel- und Kontolimits | Siehe [REST API](https://nexcmp.com/de/docs/developers/api/#rate-limits) | Bei Überschreitung des Limits antwortet der Endpunkt mit HTTP 429, einem JSON-RPC-Fehler und `Retry-After`. ## Verifizierung {#verify} 1. Der obige Befehl `curl` gibt ein JSON-RPC-Ergebnis mit einer `tools`-Liste zurück. Es werden nur Tools angezeigt, die zu den Scopes des Schlüssels passen. 2. Fragen Sie in Ihrem Client „list my VMs“: Der Assistent ruft `vm_list` auf und zeigt das Ergebnis an. 3. Im Portal aktualisiert sich die Zeit unter **Last used** des Schlüssels, und Schreibaufrufe erscheinen im **Key usage log**. ## Limits & Hinweise {#limits-notes} - **Browser-Anmeldung (OAuth).** Die Referenzseite beschreibt auch die Anmeldung über den Browser für Clients, die MCP OAuth unterstützen. Bei einer installierten NexCMP ist die unterstützte und getestete Methode der API-Schlüssel (oder `cmp login` für die CLI). - **Reseller-Seiten** zeigen den MCP-Bereich nicht an; deren Kunden verwenden die Domain des Resellers für die API. - **Minimalprivileg.** Erstellen Sie pro Assistent einen dedizierten Schlüssel mit zunächst Lese-Scopes; fügen Sie Schreib-Scopes nur bei Bedarf hinzu. - Widerrufen Sie den Schlüssel unter **API keys**, um den Zugriff des Assistenten sofort zu trennen. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | 401 mit `WWW-Authenticate: Bearer` | Kein Schlüssel, falscher Schlüssel oder ein Sitzungstoken | Senden Sie `Authorization: Bearer vk_...`. | | 403 zu `Origin` | Eine Browserseite von einem anderen Ursprung | Verwenden Sie einen Desktop- oder CLI-Client oder bitten Sie Ihren Administrator, den Ursprung zu erlauben (`mcp_allowed_origins`). | | 404 bei einer Anfrage mit `Mcp-Session-Id` | Sitzung gehört zu einem anderen Schlüssel oder ist abgelaufen | Führen Sie `initialize` erneut aus. | | 405 bei `GET /mcp` | Erwartet: Der Server verfügt über keinen Event-Stream | Verwenden Sie ausschließlich POST (Clients tun dies automatisch). | | Die Tool-Liste ist kurz | Schlüssel-Scopes oder Module | Fügen Sie dem Schlüssel Scopes hinzu; aktivieren Sie das Modul. | | Tool antwortet, dass es `confirm: true` benötigt | Kostenpflichtiges, löschendes oder sensibles Tool | Der Assistent muss `confirm` festlegen, nachdem Sie zugestimmt haben. | | 429 | MCP- oder Schlüssel-Rate-Limit | Warten Sie auf `Retry-After`. | | Client kann keine Verbindung mit einem Header herstellen | Client ohne Unterstützung für benutzerdefinierte Header | Verwenden Sie die `mcp-remote`-Brücke. | --- # Mit KI konfigurieren {#configure-with-ai} > **Wo im Adminbereich:** AI Chat (`/agent`) und System › Settings › API & AI agents (`/agent/keys`). Alles auf diesen Seiten ist ausschließlich für Administratoren bestimmt. ## Funktion {#what-it-does} Ab NexCMP 1.4.0 können Sie einen KI-Assistenten bitten, das Panel für Sie zu konfigurieren: Proxmox VE oder CloudStack verbinden, eine Zone anstellen, eine Tariftabelle aus Ihren Kosten erstellen, E-Mail, Zahlungen und Branding einrichten, einen Kunden finden oder die gesamte Konfiguration exportieren. Der Assistent arbeitet mit einem festen Satz von **Admin-Werkzeugen**. Er erhält niemals eine Shell, liest niemals Dateien auf dem Server und sieht niemals gespeicherte Passwörter oder API-Schlüssel. Nutzen Sie dies, wenn Sie eine Ersteinrichtung in wenigen Minuten statt nach Klicks durch Dutzende Seiten wünschen oder wenn Sie mehrere Installationen verwalten und deren Konfiguration in einer Datei vorhalten möchten. ## Drei Anwendungsmöglichkeiten {#three-ways-to-use-it} | Methode | Wer spricht mit der KI | Wo sie ausgeführt wird | Hier starten | |---|---|---|---| | **AI Chat im Adminbereich** | Sie, im NexCMP-Adminbereich | Die von Ihnen gewählte KI-Quelle: ein API-Schlüssel von OpenAI, Anthropic, Gemini oder OpenRouter, der eigene KI-Anbieter Ihres Panels oder eine offizielle KI-CLI, bei der Sie angemeldet sind | [AI Chat im Adminbereich](https://nexcmp.com/de/docs/configure-with-ai/ai-chat-in-admin/) | | **Ihr eigener KI-Client per MCP** | Sie, in Claude Code, Codex CLI, Gemini CLI, Cursor, Claude Desktop, claude.ai oder ChatGPT | Auf Ihrem Rechner oder in der App des Anbieters, verbunden mit Ihrem Panel unter `https://cloud.example.com/mcp/admin` | [Connect an AI client](https://nexcmp.com/de/docs/configure-with-ai/mcp-admin/) | | **Konfiguration als Code** | Sie oder ein Skript | Eine YAML-Datei und der Befehl `nexcmp config` auf dem Server (oder die Import/Export-Seite) | [Configuration as code](https://nexcmp.com/de/docs/configure-with-ai/config-as-code/) | Alle drei rufen dieselben Tools auf und laufen durch dieselbe Sicherheitsebene, sodass Sie sie kombinieren können: Entwerfen Sie eine Konfiguration mit einem Assistenten, exportieren Sie sie als YAML, prüfen Sie diese in Ihrem Editor und wenden Sie sie später an. ## Sicherheitsmodell {#safety-model} | Regel | Was das für Sie bedeutet | |---|---| | **Bereiche** | Ein Schlüssel oder eine Verbindung ist auf die von Ihnen markierten Bereiche beschränkt (`admin:read`, `catalog:write`, `infra:write`, `billing:write`, `customers:write`, `settings:write`, `ai:write`, `secrets:write`). Ohne Bereich wird der Aufruf verweigert. Siehe [Admin API keys](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/#scopes). | | **Expiry** | Jeder Schlüssel und jede Verbindung läuft ab: 1 bis 90 Tage für von Ihnen erstellte Schlüssel, standardmäßig 30 Tage. OAuth-Zugriffstoken sind eine Stunde gültig. | | **IP-Beschränkung und Rate Limit** | Ein Schlüssel kann auf IP-Bereiche und eine bestimmte Anzahl von Aufrufen pro Minute (standardmäßig 120) beschränkt werden. | | **Zweistufige Bestätigung** | Aktionen, die Geld bewegen, Daten löschen, Zahlungsdaten ändern oder die Anmeldesicherheit anpassen, liefern zuerst eine Vorschau und führen erst nach Ihrer Freigabe eine Aktion aus. Im AI Chat ist jede Änderung eine Bestätigungskarte, die Sie selbst auslösen. | | **Dinge, die Schlüssel niemals tun können** | Administratoren erstellen, 2FA ändern, Schlüssel erstellen oder widerrufen, sich als Kunde anmelden, Backups erstellen, das Panel wiederherstellen oder aktualisieren und Ähnliches. Hierfür ist Ihre Anwesenheit im Adminbereich erforderlich. | | **Aktivitätsprotokoll** | Jeder Aufruf, ob zugelassen oder verweigert, wird mit Schlüssel, Client, Tool, IP und Ergebnis protokolliert. Siehe System › Settings › API & AI agents › Activity. | | **Geheimnisse werden niemals zurückgegeben** | Passwörter, API-Keys und Token können gesetzt, aber niemals ausgelesen werden. Die Antworten, die die AI sieht, zeigen diese maskiert. | | **Demo-Installationen sind schreibgeschützt** | Auf einem Demo-Panel wird jeder Schreibzugriff mit `demo_read_only` abgelehnt. | ::: important Was die AI lesen kann Mit `admin:read` kann ein Assistent Kundennamen, E-Mail-Adressen, Guthaben und Abrechnungsdaten einsehen. Wenn Sie eine AI-Source verwenden, die bei einem Anbieter (OpenAI, Anthropic, Google, OpenRouter) läuft, werden diese Daten zur Beantwortung Ihrer Frage an diesen Anbieter übermittelt. Geben Sie einem Assistenten nur die minimal erforderlichen Berechtigungen und wählen Sie eine Source, der Sie diese Daten anvertrauen. ::: ## Schnellstart {#quick-start} 1. Melden Sie sich im Admin-Bereich an und öffnen Sie **AI Chat**. Wenn noch keine AI-Source verbunden ist, öffnen Sie **System › Settings › AI accounts** und verbinden Sie eine (siehe [AI accounts and subscriptions](https://nexcmp.com/de/docs/configure-with-ai/ai-accounts-and-subscriptions/)). 2. Tippen Sie "Check my setup progress" ein und drücken Sie die Eingabetaste. Der Assistent liest die [Setup progress checklist](https://nexcmp.com/de/docs/configure-with-ai/setup-checklist/) aus und teilt Ihnen mit, was noch zu tun ist. 3. Bitten Sie ihn, den nächsten Schritt auszuführen. Prüfen Sie jede Bestätigungskarte und drücken Sie auf **Confirm**, um sie anzuwenden. Einen ersten Überblick über mögliche Fragen finden Sie unter [Example prompts](https://nexcmp.com/de/docs/configure-with-ai/example-prompts/). ![AI Chat-Seite mit einer Unterhaltung, einem Tool-Ergebnis und einer Bestätigungskarte](https://nexcmp.com/de/docs/images/configure-with-ai/overview-01-ai-chat.webp) ## Limits & Hinweise {#limits-notes} - **Demo und schreibgeschützt.** Die Seiten sind auf einem Demo-Panel sichtbar, es können dort jedoch keine Änderungen gespeichert werden. - **Keine Shell.** Der Assistent kann nur die Admin-Tools aufrufen, die unter [Connect an AI client](https://nexcmp.com/de/docs/configure-with-ai/mcp-admin/#tools) aufgeführt sind. Er kann keine Befehle auf dem Server ausführen. - **Netzwerk- und Routing-Module** (BGP, XDP, Schnittstellen, NAT und ähnliches) sind für die AI schreibgeschützt, und sensible Bereiche wie Administrator-Konten, Backups und Updates sind für Keys vollständig gesperrt. - **Preise** sind in USD angegeben: Tarife in Dollar pro Stunde, Guthaben in Cent. - **Kosten.** AI-Antworten werden über die von Ihnen verbundene AI-Source abgerechnet (API-Nutzung oder Ihr eigenes Abonnement). Im AI Chat können Sie ein tägliches Ausgabenlimit festlegen. Informationen zum NexCMP-Lizenzmodell finden Sie unter https://nexcmp.com/pricing. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | AI Chat meldet, dass keine AI-Source verbunden ist | Für Ihr Admin-Konto ist keine Source eingerichtet | Öffnen Sie System › Settings › AI accounts und verbinden Sie eine. | | Ein Assistent antwortet `insufficient_scope` | Dem Key oder der Verbindung fehlt die Berechtigung für dieses Tool | Erstellen Sie einen Key mit der erforderlichen Berechtigung oder stellen Sie die Verbindung neu her und wählen Sie ihn auf dem Einwilligungsbildschirm aus. Siehe [Admin API keys](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/#errors). | | Jede Änderung zeigt eine Bestätigungskarte an | Erwartetes Verhalten im AI Chat | Drücken Sie auf **Confirm** zum Anwenden oder auf **Reject** zum Abbrechen. | | Schreibzugriffe schlagen fehl mit `demo_read_only` | Das Panel befindet sich im Demo-Modus | Verwenden Sie eine Nicht-Demo-Installation. | --- # AI Chat im Admin-Bereich {#ai-chat-in-the-admin} > **Wo im Admin-Bereich:** AI Chat (`/agent`, eigener Menüeintrag) und der schwebende **Ask AI**-Button auf jeder Admin-Seite. Die Antwortquellen werden unter System › Settings › AI accounts (`/agent/accounts`) eingerichtet. ## Funktion {#what-it-does} AI Chat ist ein in den Admin-Bereich integrierter Assistent. Sie beschreiben, was Sie tun möchten („Proxmox-Cluster verbinden“, „E-Mail einrichten“), der Assistent liest den aktuellen Status über die Admin-Tools aus, schlägt Änderungen vor und zeigt jede davon als **Bestätigungskarte** an. Nichts wird angewendet, bevor Sie auf **Confirm** drücken. Das **Ask AI**-Panel stellt denselben Chat in einer schmalen Seitenleiste dar, sodass Sie Fragen stellen können, während Sie eine Seite betrachten. Buttons wie **Do it for me** (in der [Setup progress checklist](https://nexcmp.com/de/docs/configure-with-ai/setup-checklist/) und in leeren Listen) öffnen ihn mit einer vorbereiteten Frage. Es ist nicht der kundenorientierte [AI Chat](https://nexcmp.com/de/docs/ai/ai-chat/) und [AI Agent](https://nexcmp.com/de/docs/ai/ai-agent/), der Ihren Kunden dient. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Rolle | Ein angemeldeter Administrator. Chats, Schlüssel und Einstellungen gehören zu Ihrem Administratorkonto; andere Administratoren sehen diese nicht. | | Eine Antwortquelle | Mindestens eine Verbindung: ein API-Schlüssel, eine Anmeldung, der eigene KI-Anbieter des Panels oder ein KI-CLI, bei dem Sie angemeldet sind. Siehe [AI accounts and subscriptions](https://nexcmp.com/de/docs/configure-with-ai/ai-accounts-and-subscriptions/). | | Demo | Auf einem Demo-Panel können Sie alte Chats lesen, aber keine Nachrichten senden. | ## Auswählen, woher Antworten kommen {#choose-where-answers-come-from} Wählen Sie die Quelle im Selektor unter der Eingabe aus (er listet die von Ihnen verbundenen Quellen auf). Unter **System › Settings › AI accounts** können Sie zudem eine Standardquelle, ein Standardmodell und das tägliche Limit festlegen. | Source | Wie Sie es verbinden | Hinweise | |---|---|---| | OpenAI (ChatGPT-Modelle) | Einen API-Schlüssel von platform.openai.com einfügen | Wird von OpenAI nach Nutzung abgerechnet. | | Anthropic (Claude) | Einen API-Schlüssel von console.anthropic.com einfügen | Wird von Anthropic nach Nutzung abgerechnet. | | Google Gemini | Einen API-Schlüssel von aistudio.google.com einfügen oder **Sign in with Google** | Die Anmeldung mit Google erfordert einen OAuth-Client, den **Sie** in Ihrem eigenen Google Cloud-Projekt erstellen. | | OpenRouter | Einen Schlüssel einfügen oder **Sign in with OpenRouter** | Ein Konto für viele Modelle. | | Panel-KI-Anbieter | Bereits festgelegt unter System › Settings › AI provider | Derselbe Anbieter, den der AI Chat Ihrer Kunden nutzt. [AI provider](https://nexcmp.com/de/docs/ai/ai-providers/). | | Claude-, ChatGPT- oder Gemini-Abonnement | Offizielles CLI installiert und auf dem Panel-Server angemeldet | Siehe [AI accounts and subscriptions](https://nexcmp.com/de/docs/configure-with-ai/ai-accounts-and-subscriptions/). | Eingefügte Schlüssel werden verschlüsselt nur für Ihr Administratorkonto gespeichert. Sie werden nie wieder angezeigt und ein anderer Administrator kann sie nicht entschlüsseln. ## Den Chat verwenden {#use-the-chat} 1. Öffnen Sie **AI Chat** (oder klicken Sie auf **Ask AI**). 2. Klicken Sie auf **New chat** oder öffnen Sie einen früheren aus der Liste links. 3. Geben Sie Ihre Anfrage ein und drücken Sie die Eingabetaste (Shift+Enter startet eine neue Zeile). Sie können Bilder oder Textdateien (bis zu 4 pro Nachricht, je 3 MB) anhängen, um einen Fehler zu zeigen oder ein Dokument einzufügen. 4. Beobachten Sie, wie die Antwort eintrifft. Jedes vom Assistenten aufgerufene Werkzeug erscheint als einklappbare Karte mit dem Werkzeugname, seinen Argumenten und einem kurzen Ergebnis. 5. Drücken Sie **Stop**, um eine laufende Antwort abzubrechen. Pro Administrator läuft jeweils nur eine Antwort. ![AI Chat mit der Konversationsliste, einer Antwort mit Werkzeugkarten und der Eingabe mit Quellenauswahl und Secret-Feld](https://nexcmp.com/de/docs/images/configure-with-ai/ai-chat-in-admin-01-chat.webp) Pro Nachricht erfolgen bis zu 10 Werkzeugrunden. Der Assistent merkt sich die letzten 30 Nachrichten des Chats. Ergebnisse von Werkzeugen werden dem Modell als Daten markiert übergeben, nicht als Anweisungen. ## Bestätigungskarten {#confirmation-cards} Im AI Chat ist **jede Änderung eine Karte**, nicht nur Finanzaktionen. Der Assistent schlägt vor; Sie entscheiden. Eine Karte zeigt: - Einen Titel, der angibt, warum sie Aufmerksamkeit erfordert, zum Beispiel "changes a customer balance". - Den Aufruf: Methode und Pfad. - Eine Tabelle der Felder, die sich ändern: der aktuelle und der neue Wert. Geheime Werte werden als `••••` angezeigt. - Ein Countdown (Karten laufen nach 5 Minuten ab). - **Confirm** und **Reject**. Durch **Confirm** wendet das Panel die Änderung selbst an und teilt dem Assistenten anschließend mit, was passiert ist. Der Assistent kann die Schaltfläche nicht drücken, sich nicht über die API autorisieren und wird angewiesen, niemals zu behaupten, eine Änderung sei angewendet worden, bevor sie bestätigt wurde. Wenn Sie die Seite neu laden, kommen noch gültige Karten zurück. Sie erscheinen auch ganz oben unter **System › Settings › API & AI agents** im Bereich „Waiting for your confirmation“. ![Bestätigungskarte mit der Kontostandsänderung, dem Countdown sowie den Schaltflächen Confirm und Reject](https://nexcmp.com/de/docs/images/configure-with-ai/ai-chat-in-admin-02-confirm.webp) ## Secrets {#secrets} Passwörter und API-Schlüssel dürfen nicht über den Chattext übermittelt werden. Verwenden Sie das Feld **Secret** (Schloss-Symbol) neben der Eingabe: 1. Klicken Sie auf das Schloss-Symbol und geben Sie einen **Namen** (Buchstaben, Ziffern und Unterstrich, zum Beispiel `smtp_password`) sowie den **Wert** ein. 2. Verweisen Sie in Ihrer Nachricht auf den Namen: „use the secret smtp_password as the SMTP password“. 3. Der Assistent sieht immer nur einen Platzhalter, der für das Secret steht und so geschrieben ist: ```text {{secret:smtp_password}} ``` Das Panel ersetzt ihn zum Zeitpunkt der Ausführung des Tools durch den echten Wert. Der Wert wird nicht im Chatverlauf gespeichert und nicht an die AI-Quelle gesendet. Wenn Sie versehentlich etwas in die Nachricht einfügen, das wie ein Schlüssel aussieht, verschiebt das Panel es in denselben geschützten Speicher und maskiert es im Verlauf; betrachten Sie dies jedoch als Sicherheitsnetz und nicht als Methode. Secrets verbleiben nur im Speicher des Panels für die Konversation, in der sie eingegeben wurden, sowie bis zu einer Stunde nach der letzten Nachricht; ein Neustart des Panels löscht sie ebenfalls. Geben Sie sie erneut ein, falls der Assistent danach fragt. Das Festlegen eines Secrets erfordert außerdem die `secrets:write`-Berechtigung für die Chatsitzung (siehe unten). ## Berechtigungen des Chats {#permissions-of-the-chat} Jede Nachricht wird mit einem temporären Schlüssel ausgeführt, der für die Dauer der Antwort (höchstens 15 Minuten) existiert, nur vom Panel-Server aus funktioniert und ausschließlich über die Bestätigungskarten verwendet werden kann. Seine Gültigkeitsbereiche (Scopes) sind diejenigen, die unter **System › Settings › AI accounts › Chat session permissions** aktiviert sind. `admin:read` ist immer aktiv. Alle Scopes außer `secrets:write` sind standardmäßig aktiv; aktivieren Sie `secrets:write`, wenn der Assistent Passwörter und Schlüssel festlegen können soll (über das Secret-Feld). Auf einem Demo-Panel ist der Chat schreibgeschützt. ## Tägliches Ausgabenlimit {#daily-spending-cap} AI Chat addiert die geschätzten Kosten der Antworten von API-Quellen. Das Standardlimit liegt bei **5 USD pro Administrator und Tag**. Legen Sie unter **AI accounts › Defaults for AI Chat** einen anderen Betrag fest (0 bedeutet kein Limit). Die Seite zeigt „used today“ an. Wenn das Limit erreicht ist, lehnt der Chat neue Nachrichten ab (`daily_cap`), bis zum nächsten Tag oder bis Sie das Limit anheben. Quellen, bei denen es sich um AI-CLI-Abonnements handelt, werden nicht mitgezählt, da diese über Ihr Abonnement abgerechnet werden. ## Verifizierung {#verify} 1. Klicken Sie unter **AI accounts** bei der Quelle auf **Test**. Als Antwort werden der Modellname und die Zeit in Millisekunden ausgegeben. 2. Fragen Sie im AI Chat: „Check my setup progress“. Die Antwort listet die Schritte aus der [Checkliste](https://nexcmp.com/de/docs/configure-with-ai/setup-checklist/) auf und es erscheint eine `setup_checklist`-Tool-Karte. 3. Bitten Sie um eine kleine Änderung, zum Beispiel „Set the brand name to Example Cloud“. Es erscheint eine Bestätigungskarte; drücken Sie **Confirm** und überprüfen Sie die Branding-Seite. 4. **API & AI agents › Activity** listet die Aufrufe mit dem Kanal `chat` auf. ## Limits & Hinweise {#limits-notes} - Der Assistent verfügt über keine Shell und kann keine Dateien auf dem Server lesen. Er ruft ausschließlich die [Admin-Tools](https://nexcmp.com/de/docs/configure-with-ai/mcp-admin/#tools) auf. - Änderungen, die von Schlüsseln niemals vorgenommen werden dürfen ([Liste](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/#what-a-key-can-never-do)), können auch nicht über AI Chat vorgenommen werden. - Überprüfen Sie die Arbeit des Modells. Eine Bestätigungskarte zeigt genau an, was gesendet wird; lesen Sie diese sorgfältig durch, insbesondere Preise und Beträge. - API-Antworten werden vom AI-Anbieter abgerechnet. Das Limit ist ein Schätzwert; legen Sie daher auch beim Anbieter ein Ausgabenlimit fest. - Eine CLI-Antwort stoppt nach 5 Minuten. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | „Today's AI spending cap is reached“ (`daily_cap`) | Sie haben das tägliche Limit erreicht | Erhöhen Sie es in den KI-Konten oder warten Sie bis morgen. | | "Eine andere Antwort läuft noch - warten oder auf Stop drücken" (`busy`) | Nur eine Antwort gleichzeitig pro Administrator | Drücken Sie **Stop** oder warten Sie. | | Die Quelle erscheint nicht in der Auswahl | Sie ist nicht verbunden oder (Claude CLI) der Schalter „I understand“ ist aus | Verbinden Sie sie in den KI-Konten. | | "das sieht nicht nach einem API-Schlüssel aus" | Der eingefügte Schlüssel enthält Leerzeichen oder ist zu lang | Fügen Sie nur den Schlüssel ein. | | Test fehlgeschlagen | Falscher Schlüssel, kein Guthaben oder der Anbieter ist offline | Prüfen Sie den Schlüssel und die Abrechnung beim Anbieter. | | Der Assistent gibt an, etwas nicht tun zu können | Der Chat-Sitzung fehlt die Berechtigung oder die Aktion ist für KI gesperrt | Aktivieren Sie die Berechtigung in den KI-Konten oder tun Sie dies im Admin-Bereich. | | Eine Karte besagt, dass sie abgelaufen ist | Es sind mehr als 5 Minuten vergangen | Bitten Sie den Assistenten, die Änderung erneut vorzuschlagen. | | CLI-Quelle meldet „usage limit“ oder „not logged in“ | Ihr Abonnementlimit oder Ihre Sitzung | Melden Sie sich erneut an oder warten Sie; siehe [AI accounts and subscriptions](https://nexcmp.com/de/docs/configure-with-ai/ai-accounts-and-subscriptions/). | --- # KI-Konten und Abonnements {#ai-accounts-and-subscriptions} > **Wo im Admin-Bereich:** System › Settings › AI accounts (`/agent/accounts`), Registerkarten **Accounts** und **Use your own AI subscription**. Das optionale Terminal ist AI Console (`/agent/console`), das nur dann unter AI Chat angezeigt wird, wenn es eingeschaltet ist. ## Funktion {#what-it-does} AI Chat benötigt eine Antwortquelle. Auf dieser Seite können Sie diese Quelle für Ihr eigenes Administratorkonto verbinden: - **API-Quellen**: OpenAI, Anthropic (Claude), Google Gemini und OpenRouter, mit einem API-Schlüssel oder einer Anmeldung. - **Der Panel-KI-Anbieter**, falls Sie bereits einen unter System › Settings › AI provider festgelegt haben. - **Ihr eigenes KI-Abonnement** (Claude, ChatGPT, Gemini) über das **offizielle Befehlszeilentool** des Anbieters, entweder auf dem Panel-Server oder auf Ihrem eigenen Computer. Alles, was Sie verbinden, gehört zu Ihrem Administratorkonto. Schlüssel und Token werden verschlüsselt nur für Sie gespeichert; ein anderer Administrator kann sie nicht verwenden. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Rolle | Ein angemeldeter Administrator. Auf einem Demopanel kann nichts verbunden oder entfernt werden. | | API-Quellen | Ein Konto und ein API-Schlüssel beim Anbieter (die Karte enthält einen Link **Get API key**, der die Anbieterseite öffnet). | | CLI auf dem Panel-Server | AI Console eingeschaltet (siehe unten), ausgehendes HTTPS vom Server zum Anbieter und zu `nodejs.org` sowie zur npm-Registry und **2 GB RAM oder mehr** (eine CLI benötigt im laufenden Betrieb etwa 1 GB freien Speicher; das Installationsprogramm warnt unter 2 GB). Node.js 20 oder neuer wird verwendet, falls vorhanden, andernfalls lädt das Installationsprogramm Node.js 22 mit einer Prüfsummenüberprüfung herunter. | | CLI auf Ihrem Computer | Node.js 20 oder neuer zur Installation der CLI und Ihr eigenes Abonnement. | ## API-Quelle verbinden {#connect-an-api-source} 1. Öffnen Sie **System › Settings › AI accounts** und bleiben Sie auf **Accounts**. 2. Klicken Sie auf der Karte der Quelle auf **Connect**. Die Schlüsselseite des Anbieters öffnet sich in einem neuen Tab; erstellen Sie dort einen Schlüssel. 3. Fügen Sie den Schlüssel in das Feld ein und speichern Sie. Die Karte zeigt einen verbundenen Status mit den letzten vier Zeichen. 4. Wählen Sie das **default model**, falls Sie ein anderes wünschen, und klicken Sie dann auf **Test**. Ein gutes Ergebnis sieht etwa so aus: "Connected - example-model, 850 ms". ![KI-Konten-Seite mit den API-Quellenkarten, einer verbundenen OpenAI-Karte und der Panel-KI-Anbieterkarte](https://nexcmp.com/de/docs/images/configure-with-ai/ai-accounts-and-subscriptions-01-accounts.webp) | Source | Anmeldealternative | |---|---| | OpenRouter | **Sign in with OpenRouter** öffnet OpenRouter in einem Popup oder Tab; nach der Bestätigung kehren Sie verbunden zu dieser Seite zurück. | | Google Gemini | **Sign in with Google** erscheint nach dem Speichern unter **Set up Google sign-in (optional)** auf der Karte, sofern ein OAuth-Client in **Ihrem eigenen** Google Cloud-Projekt erstellt wurde (Client-ID, die auf `.apps.googleusercontent.com` endet, plus zugehöriges Secret). NexCMP liefert keinen gemeinsam genutzten Google-Client aus. | | Panel-KI-Anbieter | Verwendet den bereits unter System › Settings › AI provider ([AI provider](https://nexcmp.com/de/docs/ai/ai-providers/)) konfigurierten Anbieter. Es muss nichts eingefügt werden. | Um eine Quelle zu trennen, klicken Sie auf ihrer Karte auf **Remove**. Dadurch wird der gespeicherte Schlüssel für Ihr Konto gelöscht. ### Standardwerte, Tageslimit und Berechtigungen {#defaults-daily-cap-and-permissions} Am unteren Rand des Tabs **Accounts** hat **Defaults for AI Chat** drei Einstellungen: | Einstellung | Bedeutung | |---|---| | Standardquelle und -modell | Wofür neue Chats verwendet werden. Sie können die Quelle pro Nachricht weiterhin ändern. | | Tägliches Ausgabenlimit (USD, 0 = kein Limit) | Standard 5. Die Seite zeigt "used today". Siehe [AI Chat in the admin](https://nexcmp.com/de/docs/configure-with-ai/ai-chat-in-admin/#daily-spending-cap). | | Chat-Sitzungsberechtigungen | Die Bereiche, die der Assistent verwenden darf. `admin:read` ist immer aktiv; `secrets:write` ist standardmäßig deaktiviert. Siehe [Admin API keys](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/#scopes). | Klicken Sie auf **Save defaults**. ## Eigenes KI-Abonnement verwenden {#use-your-own-ai-subscription} Sie können NexCMP mit einem Claude-, ChatGPT- oder Gemini-Tarif steuern, für den Sie bereits bezahlen, ganz ohne separaten API-Schlüssel. Dafür gibt es zwei Wege. ### Weg 1 (empfohlen): Die CLI auf Ihrem eigenen Computer {#way-1-recommended-the-cli-on-your-own-computer} Sie verwenden das eigene Tool des Anbieters auf Ihrem Computer und melden sich wie gewohnt mit Ihrem Konto an. NexCMP empfängt lediglich MCP-Aufrufe, die mit einem kurzlebigen Schlüssel signiert sind. Öffnen Sie **AI accounts › Use your own AI subscription**; dort werden drei Schritte pro Tool angezeigt. 1. Klicken Sie auf **Create a 7-day key** und wählen Sie die Stufe aus: **Read only** (`admin:read`) oder **Read + configuration** (`admin:read`, `catalog:write`, `infra:write`, `settings:write`). Die Befehle unten enthalten dann den echten Schlüssel. 2. Installieren Sie die CLI und melden Sie sich an. Der Schlüssel wird nur auf dieser Seite und nur einmal angezeigt. | Tool | Installation | Anmelden | |---|---|---| | Claude Code | `npm install -g @anthropic-ai/claude-code` | führen Sie `claude` aus, dann `/login` | | Codex CLI | `npm install -g @openai/codex` | `codex login` | | Gemini CLI | `npm install -g @google/gemini-cli` | führen Sie `gemini` aus, wählen Sie "Login with Google" | 3. Verbinden Sie es mit einem Befehl oder einem Block, der von der Seite kopiert wurde, mit Ihrem Panel: ```bash # Claude Code claude mcp add --transport http nexcmp https://cloud.example.com/mcp/admin \ --header "Authorization: Bearer ak_XXXX" ``` ```toml # Codex CLI: ~/.codex/config.toml, then: export NEXCMP_KEY=ak_XXXX [mcp_servers.nexcmp] url = "https://cloud.example.com/mcp/admin" bearer_token_env_var = "NEXCMP_KEY" ``` ```json // Gemini CLI: ~/.gemini/settings.json { "mcpServers": { "nexcmp": { "httpUrl": "https://cloud.example.com/mcp/admin", "headers": { "Authorization": "Bearer ak_XXXX" } } } } ``` 4. Starten Sie das Tool und fragen Sie beispielsweise "what is left to set up in nexcmp?". Alle Details zur MCP-Verbindung finden Sie unter [Connect an AI client](https://nexcmp.com/de/docs/configure-with-ai/mcp-admin/). Derselbe Tab zeigt die URL für die Konnektoren von **claude.ai** und **ChatGPT**, die sich per OAuth anmelden und keinen Schlüssel benötigen: [OAuth connectors](https://nexcmp.com/de/docs/configure-with-ai/oauth-connectors/). ![Tab „Use your own AI subscription“ mit der 7-Tage-Schlüssel-Schaltfläche sowie den Befehlen zum Installieren, Anmelden und Verbinden für drei CLIs](https://nexcmp.com/de/docs/images/configure-with-ai/ai-accounts-and-subscriptions-02-subscription.webp) ### Weg 2: Die CLI auf dem Panel-Server (Installieren / Anmelden-Schaltflächen) {#way-2-the-cli-on-the-panel-server-install-login-buttons} Die Karten unter „Subscription through a CLI (Claude, ChatGPT, Gemini)“ ermöglichen es NexCMP, die offizielle CLI auf dem Panel-Server zu installieren und einen eigenen Anmeldeablauf zu starten, sodass **AI Chat** mit Ihrem Abonnement antworten kann. **Wie die Isolierung funktioniert.** Die CLIs laufen in einem separaten Prozess (`nexcmp-ai.service`) als eigener Systembenutzer `nexcmp-ai`, ohne sudo, ohne Zugriff auf die Daten- und Konfigurationsordner von NexCMP sowie mit einem Speicherlimit. Für jede AI Chat-Nachricht wird die CLI gestartet, wobei nur die NexCMP-MCP-Tools erlaubt sind (Shell- und Dateitools sind deaktiviert) und ein Schlüssel verwendet wird, der nur vom Server aus funktioniert. NexCMP liest oder kopiert die Anmeldung der CLI nicht: Die CLI speichert diese in einem privaten Ordner für Ihr Administratorenkonto. Es muss nichts aktiviert werden: Das Panel richtet den `nexcmp-ai`-Benutzer und -Dienst bei der Installation oder beim Update auf 1.4.0 automatisch ein, sodass die Karten sofort einsatzbereit sind. **Installieren und Anmelden (pro Administrator):** 1. Klicken Sie auf der Karte der CLI auf **Login**. Wenn die CLI noch nicht installiert ist, installiert das Panel sie zuerst: Ein Fortschrittsbalken und ein kurzes Protokoll zeigen den Download (Node.js falls erforderlich, gefolgt von der CLI). Eine Warnung wird angezeigt, wenn der Server über weniger als 2 GB RAM verfügt. 2. Die Karte zeigt an, was die CLI anfordert: - **Codex CLI**: Klicken Sie auf **Open the sign-in page** und geben Sie den Einmalcode ein, der auf der Karte angezeigt wird. (Die Geräteanmeldung von OpenAI muss in Ihren ChatGPT-Sicherheitseinstellungen aktiviert sein.) - **Claude Code und Gemini CLI**: Klicken Sie auf **Open the sign-in page**, melden Sie sich an, fügen Sie dann den Bestätigungscode von der Seite des Anbieters in **Paste the verification code here** ein und klicken Sie auf **Send code**. 3. Die Karte wechselt zu „Signed in“ mit Angabe des Kontos und der Version. Eine Anmeldung, die nicht innerhalb von 10 Minuten abgeschlossen wird, wird abgebrochen; klicken Sie erneut auf **Login**. 4. In **AI Chat** erscheint die Quelle nun im Auswahlmenü (z. B. „ChatGPT (via Codex CLI)“). 5. **Abmelden** entfernt die CLI-Anmeldung für Ihr Konto. Für Claude verfügt die Karte über einen zusätzlichen Schalter **I understand and accept the vendor's terms for using a subscription this way**, der standardmäßig deaktiviert ist. Die Quelle wird im AI Chat erst angeboten, wenn dieser Schalter aktiv ist. ![CLI-Abonnementkarten mit Installieren und Anmelden, einem Einmalcode auf der Codex-Karte und dem „I understand“-Schalter auf der Claude-Karte](https://nexcmp.com/de/docs/images/configure-with-ai/ai-accounts-and-subscriptions-03-cli.webp) ### Bedingungen der KI-Anbieter {#terms-of-the-ai-vendors} Die Anmeldung mit einem Endkundenabonnement unterliegt den jeweiligen Anbieterbedingungen, die sich ändern können. Die folgenden Hinweise fassen das zusammen, was die Anbieter Stand Oktober 2026 veröffentlichen; dies stellt keine Rechtsberatung und keine Erklärung im Namen der Anbieter dar. Lesen Sie die aktuellen Seiten, bevor Sie diese Funktion aktivieren. | Anbieter | Was die Seite des Anbieters abdeckt | Source | |---|---|---| | Anthropic (Claude) | Die Anmeldung bei dem unmodifizierten Claude Code mit einem eigenen Tarif ist abgedeckt. Die Nutzung eines Abonnements über andere Produkte oder die Erfassung bzw. Weiterleitung der Anmeldung durch ein Produkt wird unterschiedlich gehandhabt, und Tarifierungsgrenzen gehen von der üblichen privaten Nutzung aus. Aus diesem Grund enthält die Claude-Karte einen Hinweis sowie den Schalter **I understand**, und deshalb ist Weg 1 die sauberere Wahl. | https://code.claude.com/docs/en/legal-and-compliance | | OpenAI (Codex) | Codex unterstützt die Anmeldung mit einem ChatGPT-Konto oder einem API-Schlüssel. OpenAI empfiehlt API-Schlüssel für die Automatisierung und rät davon ab, Codex in nicht vertrauenswürdigen oder öffentlichen Umgebungen offenzulegen. Verwenden Sie die Karte nur für sich selbst. | https://developers.openai.com/codex/auth | | Google (Gemini CLI) | Unterstützt Sign in with Google, einen API-Schlüssel und Vertex AI; die Bedingungen hängen von der Art der Anmeldung ab, und die Kontingente Ihres Tarifs finden Anwendung. | https://geminicli.com/docs/get-started/authentication | Wenn Sie die Frage komplett umgehen möchten, verwenden Sie eine **API key**-Quelle oder Weg 1 auf Ihrem eigenen Computer. ## AI Console {#ai-console} Die AI Console ist eine optionale Terminalseite zum Ausführen einer der angemeldeten CLIs auf dem Panel-Server. Sie ist **standardmäßig deaktiviert**. - Schalten Sie sie ein oder aus und verwalten Sie die CLIs auf dem Server: ```bash sudo nexcmp ai-console enable # turn on (also creates the nexcmp-ai user and service) sudo nexcmp ai-console disable # turn off sudo nexcmp ai-console status # runner, console state and installed CLIs sudo nexcmp ai-console install claude # or codex, or gemini ``` `status` gibt aus, ob der AI-Runner-Socket bereit ist, ob die AI Console aktiviert oder deaktiviert ist und für jede CLI „installed“ oder „not installed“. `sudo nexcmp status` zeigt zudem „AI runner: active“ an. - Nach der Aktivierung erscheint ein **AI Console**-Tab unter AI Chat. Wählen Sie eine angemeldete CLI, geben Sie Ihr Admin-Passwort (und Ihren 2FA-Code, falls verwendet) erneut ein und öffnen Sie eine Sitzung. Ein Banner erinnert Sie daran, dass Befehle hier NexCMP nur über seine MCP-Tools verwalten können; Shell- und Dateitools sind deaktiviert. - Demo-Installationen erstellen niemals den `nexcmp-ai`-Benutzer. ![AI Console-Startbildschirm mit CLI-Auswahl, Passwortfeld und der Warnbanner nur für MCP](https://nexcmp.com/de/docs/images/configure-with-ai/ai-accounts-and-subscriptions-04-console.webp) ## Verifizierung {#verify} 1. **Test** bei einer API-Quelle gibt den Modellnamen zurück. 2. Auf der CLI-Karte lautet der Status mit dem Konto „Signed in“. 3. Auf dem Server: `sudo nexcmp ai-console status` listet die CLI als installiert auf und `systemctl is-active nexcmp-ai` gibt `active` aus. 4. Wählen Sie im AI Chat die Quelle aus, fragen Sie „Check my setup progress“ und es erscheint eine Werkzeugkarte. ## Limits & Hinweise {#limits-notes} - Eine CLI-Antwort ist auf 5 Minuten und eine Antwort gleichzeitig pro Administrator begrenzt. Das tägliche Limit rechnet CLI-Antworten nicht ein. - Jede Änderung von einer CLI-Quelle ist im AI Chat weiterhin eine Bestätigungskarte; die CLI kann Änderungen nicht selbstständig anwenden. - Abonnementpläne haben ihre eigenen Nutzungslimits. Wenn der Anbieter „usage limit“ oder „not logged in“ meldet, zeigt der Chat diese Nachricht an. - Das Entfernen einer Quelle löscht keine Konversationen. - Halten Sie den Server aktuell: Die CLIs werden zum Zeitpunkt des Klickens auf Installieren aus den öffentlichen Paketen der Anbieter installiert. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Die Anmeldung ist deaktiviert und die Karte besagt „AI tools are not ready on the server yet“ | Der `nexcmp-ai`-Dienst läuft nicht | Aktualisieren Sie das Panel auf die neueste Version und prüfen Sie dann `sudo nexcmp status`. In der Read-Only-Demo ist dies so erwartet. | | „AI tools are not installed on this server yet“ | Der `nexcmp-ai`-Dienst läuft nicht (älteres Panel oder Demo-Panel) | Aktualisieren Sie das Panel und führen Sie dann `sudo nexcmp ai-console install claude` (oder `codex`, `gemini`) aus. | | Warnung vor RAM unter 2 GB | Der Server ist klein | Die Installation verläuft möglicherweise langsam oder schlägt fehl; fügen Sie Speicher hinzu oder verwenden Sie Weg 1. | | „Node.js download checksum mismatch“ oder „download failed“ | Der Server kann nodejs.org nicht erreichen oder ein Proxy hat den Download verändert | Erlauben Sie ausgehendes HTTPS und versuchen Sie es erneut. | | Die Installation endet mit einem Fehler | npm konnte das Paket nicht installieren | Lesen Sie das Protokoll auf der Karte, prüfen Sie den ausgehenden Zugriff auf die npm-Registry und versuchen Sie es erneut. | | Die Anmeldung endet mit einem Fehler oder Zeitüberschreitung | Das 10-Minuten-Fenster ist abgelaufen oder der Code war falsch | Klicken Sie erneut auf **Login** und schließen Sie den Vorgang schneller ab. | | Die Claude-Quelle fehlt im AI Chat | Der Schalter **I understand** ist aus oder die CLI ist nicht angemeldet | Schalten Sie den Schalter nach dem Lesen der Anbieterseite ein und melden Sie sich an. | | „Sign in with Google“ fehlt bei Gemini | Noch kein Google OAuth-Client gespeichert | Erstellen Sie den Client in Ihrem eigenen Google Cloud-Projekt und speichern Sie ihn unter **Set up Google sign-in (optional)** auf der Karte oder fügen Sie stattdessen einen API-Schlüssel ein. | | "Sign in with OpenRouter" liefert einen Fehler | Sie haben abgebrochen oder das Pop-up wurde blockiert | Erlauben Sie Pop-ups und versuchen Sie es erneut. | | Die CLI-Antwort gibt "usage limit" aus | Das Kontingent des Tarifs ist aufgebraucht | Warten Sie oder wechseln Sie die Quelle. | --- # Admin-API-Schlüssel {#admin-api-keys} > **Wo im Admin:** System › Settings › API & AI agents (`/agent/keys`), Tab **API keys**. Dieselbe Seite enthält die Tabs **Connect an AI**, **Connected apps** und **Activity**. ## Funktion {#what-it-does} Ein Admin-API-Schlüssel (Präfix `ak_`) ermöglicht es einem KI-Client oder Skript, Ihr Panel mit genau den Berechtigungen zu verwalten, die Sie ihm erteilen. Er funktioniert für die Admin-API unter `/v1/admin/` und für den Admin-MCP-Endpunkt `/mcp/admin`. Er funktioniert nirgendwo sonst. ::: info Nicht dasselbe wie Kundenschlüssel Kunden erstellen Schlüssel, die mit `vk_` beginnen, im Kundenportal ([API keys and scopes](https://nexcmp.com/de/docs/developers/api-keys/)). Diese erreichen nur die Kunden-API und `/mcp`. Ein `ak_`-Schlüssel wird auf der Kunden-API abgelehnt und ein `vk_`-Schlüssel wird auf der Admin-API abgelehnt. ::: ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Rolle | Sie müssen im Admin angemeldet sein. Schlüssel können keine anderen Schlüssel erstellen. | | Demo | Auf einem Demo-Panel ist die Seite schreibgeschützt: Es können keine Schlüssel erstellt oder widerrufen werden. | | Erreichbarkeit | Der Client muss `https://cloud.example.com/mcp/admin` oder `/v1/admin/...` auf Ihrem Panel erreichen können (überprüfen Sie Ihre Firewall, wenn Sie IP-Beschränkungen verwenden). | ## Einen Schlüssel erstellen {#create-a-key} 1. Öffnen Sie **System › Settings › API & AI agents** und bleiben Sie auf dem Tab **API keys**. 2. Klicken Sie auf **Create new key**. 3. Füllen Sie das Formular aus: | Feld | Regeln | |---|---| | Name | Bis zu 60 Zeichen, zum Beispiel "Claude Code on my laptop". | | Scopes | Wählen Sie mindestens einen aus. Siehe [Scopes](#scopes). Beginnen Sie nur mit `admin:read`. | | Ablaufdatum | 1, 7, 30, 60 oder 90 Tage. Standard ist 30. Maximum ist 90. Ein Schlüssel ohne Ablaufdatum kann nicht erstellt werden. | | IP-Bereiche (optional) | Eine IPv4- oder IPv6-Adresse oder ein CIDR pro Zeile, zum Beispiel `203.0.113.0/24` oder `2001:db8::/48`. Höchstens 32. Leer lassen, um jede IP zuzulassen. | | Aufrufe pro Minute | 1 bis 6000. Standard ist 120. | 4. Klicken Sie auf **Create key**. Ein Dialog zeigt den Schlüssel einmalig an, zum Beispiel `ak_XXXX`. **Kopieren Sie ihn jetzt**: NexCMP speichert nur einen Hash und kann ihn nie wieder anzeigen. 5. Klicken Sie auf **I have saved the key**. Öffnen Sie den Tab **Connect an AI**, um sofort einfügbare Befehle zu erhalten, die bereits den von Ihnen erstellten Schlüssel enthalten (nur auf dieser Seite, bis Sie sie neu laden). ![Dialog für neuen Schlüssel mit ausgefülltem Namen, Scope-Kontrollkästchen, Ablaufdatum und IP-Bereich](https://nexcmp.com/de/docs/images/configure-with-ai/admin-api-keys-01-create.webp) ![Dialog, der den neuen Schlüssel einmalig mit einer Kopierschaltfläche und einer Warnung anzeigt](https://nexcmp.com/de/docs/images/configure-with-ai/admin-api-keys-02-shown-once.webp) ## Scopes {#scopes} Ein Schlüssel kann nur die Tools und Endpunkte verwenden, die seine Scopes erlauben. Schreib-Scopes beinhalten keinen Lesezugriff: Ein Schlüssel, der lesen und schreiben soll, benötigt zusätzlich `admin:read`. | Scope | Was er erlaubt | |---|---| | `admin:read` | Einstellungen, Katalog, Kunden, Abrechnung und Protokolle lesen. Geheimnisse werden niemals zurückgegeben. | | `catalog:write` | Tarife, Betriebssystem-Templates, Kontingente, Rabattcodes. | | `infra:write` | Infrastrukturquellen (CloudStack, Proxmox), Zonen, Server. | | `billing:write` | Zahlungsgateways, Währung, Rechnungen, Guthaben. Geldtransaktionen erfordern eine Bestätigung. | | `customers:write` | Kunden und Reseller. | | `settings:write` | Allgemeine Einstellungen, Branding, E-Mail, rechtliche Seiten, Module, Benachrichtigungen. | | `ai:write` | Der KI-Anbieter und KI-Funktionen. | | `secrets:write` | Schreiben von Passwörtern und API-Schlüsseln. Sie können gesetzt, aber niemals ausgelesen werden. | ::: tip Das Festlegen eines Geheimnisses erfordert zwei Scopes Jeder Aufruf, der ein Passwort, einen API-Schlüssel oder einen Token-Wert enthält (ein SMTP-Passwort, einen Zahlungsschlüssel, ein Telegram-Bot-Token, einen KI-Anbieter-Schlüssel, CloudStack- oder Proxmox-Anmeldeinformationen), benötigt `secrets:write` **und** den Scope des Bereichs (zum Beispiel `settings:write` für SMTP). Wenn Sie Geheimnisse lieber selbst eingeben möchten, lassen Sie `secrets:write` weg und tragen Sie diese im Admin-Bereich ein. ::: ## Einen Schlüssel widerrufen {#revoke-a-key} 1. Finden Sie den Schlüssel in der Tabelle (Status **Active**, **Expired** oder **Revoked**; **Last used** zeigt den Zeitpunkt und den Client). 2. Klicken Sie auf **Revoke** und bestätigen Sie. Der Schlüssel funktioniert sofort nicht mehr. Das Widerrufen ist endgültig; erstellen Sie einen neuen Schlüssel, wenn Sie erneut einen benötigen. ## Was ein Schlüssel niemals tun kann {#what-a-key-can-never-do} Ein Schlüssel kann diese Bereiche niemals erreichen, unabhängig von seinen Scopes. Dafür müssen Sie im Admin-Bereich angemeldet sein. - Administratoren erstellen oder ändern, 2FA und Anmeldesicherheit, Admin-Sitzungen sowie die Admin-API-Token. - Admin-Schlüssel, OAuth-Verbindungen und KI-Konten erstellen, auflisten oder widerrufen oder die KI-Konsole verwenden. - Das Panel sichern oder wiederherstellen, aktualisieren oder seine Lizenz ändern. - Als Kunde oder Reseller anmelden, die Konsole eines Kunden öffnen, VM-Zugangsdaten oder Kubeconfig lesen, SSH-Schlüssel setzen oder Passwörter senden beziehungsweise zurücksetzen. - Netzwerk- und Routing-Module ändern (BGP, FRR, RTBH, XDP, Schnittstellen, statische und Richtlinien-Routen, NAT) oder externe Agenten sowie Portal-Integrationen. Diese sind schreibgeschützt. - Einstellungen wie `demo_*`, `admin_*`, Host-Listen, Passkey, Re-Authentifizierung und Captcha-Geheimnisse ändern. Alles, was nicht durch eine Regel abgedeckt ist, ist standardmäßig für Schreibvorgänge geschlossen und für Lesevorgänge mit `admin:read` lesbar. ### Aktionen, die Ihre Bestätigung erfordern {#actions-that-need-your-confirmation} Diese werden erst nach Bestätigung einer Vorschau ausgeführt (siehe [Two-step confirmation](#two-step-confirmation)): - Ändern eines Kunden-Guthabens oder Reseller-Wallets, Auszahlen von Geldern, Abrechnungsdatensätze, der Wechselkurs. - Ändern von Preisen (Tarifpreise, Massenerstellung von Tarifen, Image- und Speicherpreise) sowie Erstellen von Rabatt- oder Guthaben-Codes. - Speichern von Zahlungs-Gateway-Zugangsdaten oder der CloudStack-Verbindung. - Löschen von Inhalten, Sperren oder Löschen eines Kunden, Ändern von Kundenlimits, Aussetzen oder Schließen eines Resellers. - Aktionen auf Kundenservern oder Erstellen eines kostenpflichtigen Servers für einen Kunden. - Ändern von seitenweiten Schaltern, Anmeldesicherheitseinstellungen oder Zahlungseinstellungen über die allgemeinen Einstellungen. ## Zweistufige Bestätigung {#two-step-confirmation} Wenn ein Aufruf eine Bestätigung erfordert, ändert sich zunächst nichts. Die Antwort lautet HTTP **428** mit `confirm_required`, einer `confirm_token`, einem `preview` (Methode, Pfad, Grund, die neuen Werte und, falls verfügbar, die aktuellen Werte) und `expires_in: 300`. 1. Der Client zeigt Ihnen die Vorschau. 2. Nach der Freigabe wird dieselbe **gleiche** Anfrage (gleiche Methode, gleicher Pfad und Body) mit dem Header `X-Confirm-Token: ` wiederholt. MCP-Tools verwenden stattdessen das Argument `confirm_token`. 3. Das Token funktioniert einmalig und läuft nach 5 Minuten ab. Schlüssel, die im Admin-Bereich für AI Chat erstellt wurden, können nur auf dem Bildschirm bestätigt werden: Die Antwort gibt `confirm_in: "ui"` aus und im Admin-Bereich erscheint eine Bestätigungskarte. Die KI kann dies nicht genehmigen. ## Rate Limit und IP-Regeln {#rate-limit-and-ip-rules} - Überschreitet ein Aufruf das Minutenlimit, wird `rate_limited` (HTTP 429) mit `Retry-After: 60` zurückgegeben. - Bei festgelegten IP-Bereichen geben Anfragen von anderen Adressen `ip_not_allowed` (HTTP 403) zurück. ## Aktivitätsprotokoll {#activity-log} Der **Activity**-Tab listet alle mit einem Key getätigten Aufrufe auf, beginnend mit den neuesten: Zeitpunkt, Key, Client, Herkunft (`http`, `mcp`, `chat`, `cli`, `confirm`, `preview`), Methode und Pfad, Tool, HTTP-Status, IP und die (maskierten) Details. Sie können nach Pfad, Tool oder Key-Name suchen, nur Fehler (HTTP 400 und höher) oder nur auf Bestätigung wartende Aufrufe (428 und höher) anzeigen und den Zeitraum auf die letzte Stunde, 24 Stunden oder 7 Tage beschränken. NexCMP speichert die letzten 200,000 Einträge. Über einen Key vorgenommene Änderungen erscheinen zudem unter Logs › Admin actions unter dem Namen `ak:/`. ![Aktivitäts-Tab mit Auflistung von Aufrufen nach Status, Client, Tool und IP](https://nexcmp.com/de/docs/images/configure-with-ai/admin-api-keys-03-activity.webp) ## Verifizierung {#verify} Testen Sie einen Read-only-Schlüssel von einem beliebigen Computer innerhalb des IP-Bereichs: ```bash curl -s https://cloud.example.com/v1/admin/agent/tools \ -H "Authorization: Bearer ak_XXXX" ``` Sie erhalten eine JSON-Liste der Tools, die Ihre Scopes erlauben. Führen Sie eines aus: ```bash curl -s -X POST https://cloud.example.com/v1/admin/agent/tools/system_health \ -H "Authorization: Bearer ak_XXXX" \ -H "Content-Type: application/json" -d '{}' ``` Die Zeit unter **Last used** des Schlüssels aktualisiert sich und der Aufruf erscheint in **Activity**. Die vollständige Tool-Liste und eine OpenAPI-Beschreibung (`/v1/admin/openapi.json`) werden unter [Connect an AI client](https://nexcmp.com/de/docs/configure-with-ai/mcp-admin/) beschrieben. ## Fehler {#errors} Fehler sind im JSON-Format: `{"error": {"code": "...", "message": "..."}}`. | HTTP | `code` | Bedeutung | Behebung | |---|---|---|---| | 401 | `invalid_key` | Der Schlüssel fehlt, ist fehlerhaft oder unbekannt. Wird auch zurückgegeben, wenn ein `ak_`-Schlüssel auf einem Nicht-Admin-Pfad verwendet wird. | Prüfen Sie den Schlüssel; verwenden Sie ihn nur auf `/v1/admin/` und `/mcp/admin`. | | 401 | `key_expired` | Die Gültigkeit des Schlüssels ist abgelaufen. | Erstellen Sie einen neuen Schlüssel. | | 401 | `key_revoked` | Der Schlüssel wurde widerrufen. | Erstellen Sie einen neuen Schlüssel. | | 403 | `ip_not_allowed` | Die IP des Aufrufers liegt außerhalb der IP-Bereiche des Schlüssels. | Rufen Sie von einer erlaubten IP aus an oder erstellen Sie einen Schlüssel mit dem entsprechenden Bereich. | | 403 | `local_only_key` | Ein für AI Chat oder das Server-CLI erstellter Schlüssel wurde von einem anderen Computer aus verwendet. | Diese Schlüssel funktionieren nur direkt auf dem Panel-Server. | | 403 | `insufficient_scope` | Dem Schlüssel fehlt ein Scope; die Antwort enthält `required_scope`. | Erstellen Sie einen Schlüssel mit diesem Scope. | | 403 | `forbidden_for_keys` | Der Endpunkt oder die Einstellung, die Sie ändern wollten, ist für Schlüssel gesperrt. | Führen Sie dies im Admin-Bereich aus. | | 403 | `demo_read_only` | Das Panel befindet sich im Demomodus und der Aufruf führt Schreibvorgänge aus. | Verwenden Sie ein Panel, das sich nicht im Demomodus befindet. | | 403 | `confirm_in_ui` | Diese Aktion muss im Admin-Bereich auf dem Bildschirm bestätigt werden. | Genehmigen Sie die Bestätigungskarte. | | 428 | `confirm_required` | Eine Vorschau ist bereit; es wurde nichts geändert. Enthält `confirm_token`. | Zeigen Sie die Vorschau an und wiederholen Sie den Vorgang dann mit `X-Confirm-Token`. | | 409 | `confirm_expired` | Das Token ist älter als 5 Minuten. | Senden Sie die Anfrage für eine neue Vorschau erneut. | | 409 | `confirm_mismatch` | Das Token gehört zu einer anderen Anfrage (Methode, Pfad oder Body weichen ab). | Wiederholen Sie die identische Anfrage. | | 409 | `confirm_invalid` | Unbekanntes oder bereits verwendetes Token. | Senden Sie die Anfrage für eine neue Vorschau erneut. | | 429 | `rate_limited` | Zu viele Aufrufe in dieser Minute. | Warten Sie auf `Retry-After`. | | 400 | `invalid_path` | Der Pfad enthält unzulässige Sequenzen. | Verwenden Sie einen einfachen Pfad. | | 413 | `too_large` | Der Body ist größer als 10 MB. | Senden Sie weniger Daten. | | 400 | `invalid_argument` | Ein Tool-Argument fehlt, ist unbekannt oder hat den falschen Typ; die Nachricht benennt es. | Beheben Sie das Argument. | ## Limits & Hinweise {#limits-notes} - Halten Sie Schlüssel kurzlebig und beschränkt. Bevorzugen Sie einen Schlüssel pro Client, damit Sie einzelne widerrufen können. - Ein Schlüssel ist so mächtig wie seine Scopes. `secrets:write` plus `billing:write` ist die sensibelste Kombination; finanzbezogene Aktionen stoppen weiterhin bei einer Vorschau. - Automatisch erstellte Schlüssel (für AI Chat, das Server-CLI) sind nur wenige Minuten gültig und funktionieren ausschließlich vom Panel-Server aus. - Um einen KI-Client sofort zu trennen, widerrufen Sie seinen Schlüssel. OAuth-Verbindungen werden auf dem Tab **Connected apps** ([OAuth connectors](https://nexcmp.com/de/docs/configure-with-ai/oauth-connectors/)) widerrufen. --- # Einen KI-Client verbinden (MCP) {#connect-an-ai-client-mcp} > **Wo im Admin-Bereich:** Unter System › Settings › API & AI agents (`/agent/keys`) zeigt der Tab **Connect an AI** die Endpunkt-URL sowie ein sofort kopierbares Snippet für jeden Client, gefüllt mit einem soeben erstellten Schlüssel. ## Funktion {#what-it-does} Das **Model Context Protocol (MCP)** ermöglicht es einem KI-Client, Tools aufzurufen. Ihr Panel stellt einen Admin-MCP-Server unter `https://cloud.example.com/mcp/admin` bereit. Verbinden Sie Ihr eigenes KI-Tool damit und fragen Sie in natürlicher Sprache: „Was muss noch eingerichtet werden?“, „Füge mein Proxmox-Cluster hinzu“, „Erstelle Tarife mit 40 % Marge“. Der Client ruft die unten stehenden Admin-Tools auf; das Panel prüft die Scopes, fragt Sie vor riskanten Aktionen und protokolliert jeden Aufruf. ::: info Zwei MCP-Endpunkte `/mcp` ist der **Kundenendpunkt** (Kunden-API-Schlüssel, `vk_`; siehe [MCP server](https://nexcmp.com/de/docs/developers/mcp/)). `/mcp/admin` ist der hier beschriebene **Admin-Endpunkt** (Adminschlüssel `ak_` oder OAuth). Die beiden vermischen sich nie: Admin-Tools sind auf `/mcp` nicht sichtbar und `/mcp/admin` akzeptiert ausschließlich Adminschlüssel. ::: ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Endpoint | `https://cloud.example.com/mcp/admin` auf der Domain Ihres Panels. Kopieren Sie die exakte URL vom Tab **Connect an AI**. Dieselbe Seite listet eine lokale URL (`http://127.0.0.1:/mcp/admin`) für Tools auf, die direkt auf dem Server ausgeführt werden. | | Anmeldeinformationen | Ein [Admin-API-Schlüssel](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/) (`ak_...`) mit den gewünschten Scopes **oder** die OAuth-Anmeldung für Web-Connectors ([OAuth connectors](https://nexcmp.com/de/docs/configure-with-ai/oauth-connectors/)). | | Client | Jeder MCP-Client, der den **Streamable HTTP**-Transport und einen benutzerdefinierten `Authorization`-Header unterstützt. Protokollversionen 2025-11-25, 2025-06-18 und 2025-03-26. | | Netzwerk | Wenn Sie einen eigenen Reverse Proxy vor dem Panel betreiben, muss dieser `/mcp/admin` weiterleiten. Web-Connectors (claude.ai, ChatGPT) verbinden sich von den Servern des Anbieters aus, weshalb die URL aus dem Internet erreichbar sein muss. | ## Infrastruktur vorbereiten {#prepare-the-infrastructure} Es muss nichts auf dem Server installiert werden. Wenn Sie den Schlüssel per IP einschränken, stellen Sie sicher, dass sich die Adresse Ihres Clients im entsprechenden Bereich befindet. Testen Sie die Erreichbarkeit zuerst: ```bash curl -i -X POST https://cloud.example.com/mcp/admin ``` Eine Antwort von `401` mit einem `WWW-Authenticate: Bearer ... resource_metadata=...`-Header bedeutet, dass der Endpunkt erreichbar ist und Anmeldedaten erwartet. ## In NexCMP verbinden {#connect-in-nexcmp} 1. Einen Schlüssel erstellen: **System › Settings › API & AI agents › API keys › New key**. Verwenden Sie für den ersten Test nur `admin:read`; fügen Sie Schreib-Scopes hinzu, sobald Sie diese benötigen. Siehe [Admin API keys](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/). 2. Öffnen Sie den Tab **Connect an AI**. Solange der „Schlüssel erstellt“-Dialog noch geöffnet ist, enthält jedes Snippet unten bereits Ihren echten Schlüssel. Andernfalls wird der Platzhalter `ak_YOUR_KEY` angezeigt. 3. Kopieren Sie das Snippet für Ihren Client und führen Sie es aus oder fügen Sie es wie im Folgenden beschrieben ein. ![Verbinden Sie einen AI-Tab mit der MCP-URL und einer Karte mit Kopier-Button pro Client](https://nexcmp.com/de/docs/images/configure-with-ai/mcp-admin-01-connect.webp) ### Claude Code {#claude-code} ```bash claude mcp add --transport http nexcmp https://cloud.example.com/mcp/admin \ --header "Authorization: Bearer ak_XXXX" ``` Starten Sie dann `claude` und fragen Sie „list the tools from nexcmp“ oder „what is left to set up?“. Am 30/10/2026 mit Claude Code 2.1 überprüft: `claude mcp add --transport http …` schreibt den Server (`-s project` hinzufügen, um ihn in `.mcp.json` zu behalten). Für Skripte läuft `claude -p "…" --mcp-config .mcp.json --strict-mcp-config --allowedTools "mcp__nexcmp__*"` ohne Freigabe. ### Claude Desktop {#claude-desktop} Erfordert Node.js 18 oder neuer. Fügen Sie dies zu `claude_desktop_config.json` hinzu (nutzt die `mcp-remote`-Brücke) und starten Sie Claude Desktop neu: ```json { "mcpServers": { "nexcmp": { "command": "npx", "args": ["-y", "mcp-remote", "https://cloud.example.com/mcp/admin", "--header", "Authorization:Bearer ak_XXXX"] } } } ``` Wenn Ihr System das Leerzeichen im Header-Argument verfälscht, setzen Sie stattdessen den gesamten Wert in eine Umgebungsvariable, genau wie beim Kundenendpunkt: `"args": [..., "--header", "Authorization:${NEXCMP_AUTH_HEADER}"]` mit `"env": { "NEXCMP_AUTH_HEADER": "Bearer ak_XXXX" }`. ### claude.ai (eigener Connector) {#claude-ai-custom-connector} Kein Schlüssel erforderlich: Die Anmeldung erfolgt über OAuth. Öffnen Sie in claude.ai die Connector-Einstellungen, fügen Sie einen eigenen Connector hinzu, fügen Sie `https://cloud.example.com/mcp/admin` ein, melden Sie sich mit Ihrem NexCMP-Admin-Konto an und wählen Sie die Berechtigungen auf dem Einwilligungsbildschirm aus. Details: [OAuth connectors](https://nexcmp.com/de/docs/configure-with-ai/oauth-connectors/). ### ChatGPT (Entwicklermodus) {#chatgpt-developer-mode} Kein Schlüssel erforderlich. Aktivieren Sie in ChatGPT den Entwicklermodus, fügen Sie einen MCP-Connector mit der URL `https://cloud.example.com/mcp/admin` hinzu, wählen Sie OAuth und melden Sie sich mit Ihrem NexCMP-Admin-Konto an. Details: [OAuth connectors](https://nexcmp.com/de/docs/configure-with-ai/oauth-connectors/). ### Codex CLI {#codex-cli} Hinzufügen zu `~/.codex/config.toml`: ```toml [mcp_servers.nexcmp] url = "https://cloud.example.com/mcp/admin" bearer_token_env_var = "NEXCMP_KEY" ``` Exportieren Sie den Schlüssel dann in der Shell, in der Codex gestartet wird: ```bash export NEXCMP_KEY=ak_XXXX codex codex mcp list # shows nexcmp with "Bearer token" auth ``` ::: tip Nicht-interaktiv `codex exec` In `codex exec` (Skripten, CI) fragt Codex vor dem Aufruf von Tools nicht nach und überspringt Tools, die Daten verändern. Fügen Sie `default_tools_approval_mode = "approve"` unter `[mcp_servers.nexcmp]` hinzu, damit diese aufgerufen werden können; das Panel gibt nach wie vor eine Vorschau aus und fordert bei Aktionen bezüglich Geld, Sicherheit und Löschungen eine Bestätigung an. Überprüft mit Codex CLI 0.166 am 30/10/2026. ::: ### Gemini CLI {#gemini-cli} Hinzufügen zu `~/.gemini/settings.json`: ```json { "mcpServers": { "nexcmp": { "httpUrl": "https://cloud.example.com/mcp/admin", "headers": { "Authorization": "Bearer ak_XXXX" } } } } ``` Gemini CLI schaltet MCP-Server in Ordnern ab, denen es nicht vertraut. Starten Sie es in einem vertrauenswürdigen Ordner (oder vertrauen Sie dem Ordner, wenn es danach fragt), und prüfen Sie es mit `gemini mcp list` — dies zeigt `nexcmp … Connected` an. Sie können den Schlüssel mit `"Authorization": "Bearer $NEXCMP_KEY"` aus der Datei heraushalten. Überprüft mit Gemini CLI 0.66 am 30/10/2026. ### Cursor {#cursor} Hinzufügen zu `~/.cursor/mcp.json` (oder `.cursor/mcp.json` in einem Projekt): ```json { "mcpServers": { "nexcmp": { "url": "https://cloud.example.com/mcp/admin", "headers": { "Authorization": "Bearer ak_XXXX" } } } } ``` ::: tip Schlüssel aus Konfigurationsdateien heraushalten Sofern der Client dies unterstützt, lesen Sie den Schlüssel aus einer Umgebungsvariable ein, anstatt ihn in die Datei zu schreiben: Codex tut dies standardmäßig (`bearer_token_env_var`) und Cursor akzeptiert `"Bearer ${env:NEXCMP_KEY}"`. Committen Sie niemals eine Datei, die einen Schlüssel enthält. ::: ### OpenAI Agents SDK (Python) {#openai-agents-sdk-python} ```python from agents.mcp import MCPServerStreamableHttp nexcmp = MCPServerStreamableHttp( params={"url": "https://cloud.example.com/mcp/admin", "headers": {"Authorization": "Bearer ak_XXXX"}}, name="nexcmp", ) ``` Ein vollständiger Durchlauf (überprüft mit `openai-agents` 0.24 am 30/10/2026 — ein Lesetool, gefolgt von einer Saldoänderung, die die Bestätigungsvorschau zurückgab und beim zweiten Aufruf mit `confirm_token` angewendet wurde): ```python import asyncio from agents import Agent, Runner from agents.mcp import MCPServerStreamableHttp async def main(): async with MCPServerStreamableHttp(params={"url": "https://cloud.example.com/mcp/admin", "headers": {"Authorization": "Bearer ak_XXXX"}}, name="nexcmp") as nexcmp: agent = Agent(name="admin", model="gpt-5", mcp_servers=[nexcmp], instructions="You operate a hosting panel through the nexcmp tools. Ask me before confirming money actions.") result = await Runner.run(agent, "Run system_health and summarise it in one line.") print(result.final_output) asyncio.run(main()) ``` ### OpenAI Responses API {#openai-responses-api} Übergeben Sie den Server als Tool vom Typ `mcp`. Belassen Sie `require_approval` auf `always`, damit Ihr Programm Sie vor jedem Aufruf fragt: ```json { "type": "mcp", "server_label": "nexcmp", "server_url": "https://cloud.example.com/mcp/admin", "headers": { "Authorization": "Bearer ak_XXXX" }, "require_approval": "always" } ``` ### Alles andere (reines HTTP) {#anything-else-plain-http} Ein Client ohne MCP kann dieselben Tools über HTTP aufrufen. `GET /v1/admin/agent/tools` listet sie auf, `POST /v1/admin/agent/tools/` führt eines mit einem JSON-Body von Argumenten aus und `GET /v1/admin/openapi.json` gibt eine OpenAPI-3.1-Beschreibung zurück (jedes Tool entspricht einer Operation). Alle erfordern `Authorization: Bearer ak_...`. ## Verifizierung {#verify} 1. Tools ohne Client auflisten: ```bash curl -s https://cloud.example.com/mcp/admin \ -H "Authorization: Bearer ak_XXXX" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' ``` Die Antwort ist ein JSON-RPC-Ergebnis mit den Tools, die Ihre Scopes erlauben. 2. Fragen Sie Ihren Client „run system_health“. Dies gibt Warnungen, den Integritätsstatus der verbundenen Infrastruktur, Zahlungen, E-Mail, KI und den Lizenzstatus zurück. 3. Öffnen Sie **API & AI agents › Activity**: Die Aufrufe werden mit dem Client-Namen und `mcp` aufgelistet. 4. Auf dem Server gibt `sudo nexcmp status` eine Zeile „MCP admin“ aus, die `ready` anzeigt, wenn der Endpunkt antwortet (HTTP 401 ohne Schlüssel ist der gesunde Zustand). ## Tools {#tools} Der Server stellt 58 Tools bereit. Ein Client sieht nur die Tools, die durch die Scopes seines Schlüssels erlaubt werden: Lesetools erfordern `admin:read`, Schreibtools erfordern ihren eigenen Scope. Schreibtools erhalten zudem ein optionales Argument `confirm_token` (siehe [Confirmation](#confirmation-confirm-token)). Argumente werden gegen das Schema jedes Tools geprüft: Unbekannte oder falsch eingegebene Argumente werden mit einer Meldung abgelehnt, die sie benennt. Die Preise sind in USD angegeben: Planpreise in Dollar pro Stunde (`hourly_usd`), Kontostände in Cent. Secrets können festgelegt werden, werden jedoch niemals zurückgegeben. ### Übersicht und Protokolle {#overview-and-logs} | Tool | Funktion | Scope | Ändert Daten | Fragt Sie | |---|---|---|---|---| | `system_health` | Warnungen, die Aufmerksamkeit erfordern, Infrastrukturintegrität, Zahlungen, E-Mail, KI, Lizenz- und Update-Status. | `admin:read` | Nein | Nein | | `setup_checklist` | Was konfiguriert ist und was noch verbleibt: Lizenz, Infrastruktur, Zone, OS-Templates, Pläne, Zahlungen, E-Mail, Branding, Rechtliches, Testbestellung. | `admin:read` | Nein | Nein | | `license_status` | Lizenzstatus und ob eine neuere NexCMP-Version existiert. | `admin:read` | Nein | Nein | | `audit_search` | Durchsuchen des Admin-Audit-Protokolls und des API-Schlüssel-Protokolls. | `admin:read` | Nein | Nein | ### Einstellungen, Branding, Rechtliches, Module {#settings-branding-legal-modules} | Tool | Funktion | Scope | Ändert Daten | Fragt Sie | |---|---|---|---|---| | `settings_get` | Allgemeine Einstellungen lesen (`keys` filtert; ein abschließendes `*` gleicht ein Präfix ab). | `admin:read` | Nein | Nein | | `settings_update` | Allgemeine Einstellungen über ein flaches `values`-Objekt ändern. Es werden nur von `settings_get` aufgelistete Schlüssel akzeptiert. | `settings:write` | Ja | Wenn ein Schlüssel Zahlungen, Anmeldesicherheit, seitenweite Schalter oder Preise berührt | | `branding_get` | Markenname, Farbe, Anzeigewährung, Verkäufername, Logo- und Favicon-URLs. | `admin:read` | Nein | Nein | | `branding_update` | Markennamen festlegen (bis zu 60 Zeichen), Farbe (`#rrggbb`), Anzeigewährung (`usd` oder `vnd`) und Verkäufername. | `settings:write` | Ja | Nein | | `branding_logo_set` | Laden Sie ein helles oder dunkles Logo oder ein Favicon über eine https-URL oder als base64 hoch (PNG, JPEG, WEBP, ICO oder SVG, bis zu 512 KB). | `settings:write` | Ja | Nein | | `legal_get` | Nutzungsbedingungen und Datenschutzrichtlinie (Englisch und Vietnamesisch) sowie die neutralen Standards. | `admin:read` | Nein | Nein | | `legal_update` | Legen Sie die Bedingungen und den Datenschutztext fest (einfaches Markdown, kein HTML, jeweils bis zu 50 KB). Eine leere Zeichenfolge stellt den Standard wieder her. | `settings:write` | Ja | Nein | | `modules_get` | Welche optionalen Module aktiviert sind und welche umgeschaltet werden können. | `admin:read` | Nein | Nein | | `module_set` | Schalten Sie ein optionales Modul ein oder aus (`key` muss eines von `settable` sein). | `settings:write` | Ja | Nein | ### E-Mail und Benachrichtigungen {#email-and-alerts} | Tool | Funktion | Scope | Ändert Daten | Fragt Sie | |---|---|---|---|---| | `smtp_get` | Einstellungen für ausgehende E-Mails (Passwort maskiert) und Warteschlangenstatus. | `admin:read` | Nein | Nein | | `smtp_configure` | Legen Sie den SMTP-Server fest. Das Ändern von Host, Port oder Sicherheit erfordert die erneute Eingabe des Passworts. | `settings:write` (+ `secrets:write` für das Passwort) | Ja | Nein | | `smtp_test` | Senden Sie eine echte Test-E-Mail mit den gespeicherten Einstellungen. | `settings:write` | Sendet eine E-Mail | Nein | | `telegram_get` | Admin-Benachrichtigungskanäle (Chat-IDs; Bot-Token werden niemals zurückgegeben). | `admin:read` | Nein | Nein | | `telegram_configure` | Fügen Sie den Telegram-Benachrichtigungskanal (Bot-Token und Chat-ID) hinzu oder aktualisieren Sie ihn und schalten Sie Admin-Benachrichtigungen ein oder aus. | `settings:write` (+ `secrets:write` für das Token) | Ja | Nein | | `telegram_test` | Senden Sie eine Testnachricht an den Telegram-Kanal. | `settings:write` | Sendet eine Nachricht | Nein | ### Zahlungen und Währung {#payments-and-currency} | Tool | Funktion | Scope | Ändert Daten | Fragt Sie | |---|---|---|---|---| | `payments_get` | Status von Stripe, PayPal, Krypto (USDT) und Banküberweisung sowie aktivierte Kanäle und Gebühren. | `admin:read` | Nein | Nein | | `payment_configure` | Legen Sie die Anmeldedaten eines Gateways fest (`stripe`, `paypal`, `crypto` oder `bank`). | `billing:write` (+ `secrets:write`) | Ja | Immer | | `payment_test` | Überprüfen Sie die gespeicherten Anmeldedaten eines Gateways beim Anbieter. | `billing:write` | Nein | Nein | | `currency_get` | Anzeigewährung und USD-zu-VND-Kurs (automatisch oder manuell). | `admin:read` | Nein | Nein | | `currency_set` | Legen Sie die Anzeigewährung und/oder einen manuellen Kurs fest (0 bedeutet automatisch, ansonsten 15000 bis 50000). | `billing:write` | Ja | Wenn Sie den manuellen Kurs ändern | ### Infrastruktur und Zonen {#infrastructure-and-zones} | Tool | Funktion | Scope | Ändert Daten | Fragt Sie | |---|---|---|---|---| | `cloudstack_get` | Gespeicherter CloudStack-Endpunkt sowie Zonen- und Netzwerk-IDs (Schlüssel maskiert). | `admin:read` | Nein | Nein | | `cloudstack_test` | Testen Sie einen Endpunkt mit einem API-Schlüssel und -Geheimnis ohne Speichern; listet Zonen auf. | `infra:write` (+ `secrets:write`, da Sie die Schlüssel übergeben) | Nein | Nein | | `cloudstack_connect` | Speichern Sie die CloudStack-Verbindung. | `infra:write` (+ `secrets:write`) | Ja | Immer | | `proxmox_list` | Als Quellen hinzugefügte Proxmox VE-Cluster mit Integritätsstatus. | `admin:read` | Nein | Nein | | `proxmox_add` | Fügen Sie einen Proxmox VE-Cluster mit einem API-Token (`user@realm!tokenid`) und dessen Geheimnis hinzu. | `infra:write` (+ `secrets:write`) | Ja | Nein | | `proxmox_test` | Verbinden Sie sich über die ID mit einem Cluster; der erste Erfolg pinnt dessen TLS-Zertifikat fest. | `infra:write` | Ja | Nein | | `proxmox_attach_zone` | Verkaufen Sie einen Proxmox-Cluster in einer bestehenden Zone, optional mit einem Knoten als Region. | `infra:write` | Ja | Nein | | `zones_list` | Zonen (Standorte), die Kunden auswählen können. | `admin:read` | Nein | Nein | | `zone_create` | Erstellen Sie eine Zone. | `infra:write` | Ja | Nein | ### Katalog und Tarife {#catalog-and-plans} | Tool | Funktion | Scope | Ändert Daten | Fragt Sie | |---|---|---|---|---| | `templates_list` | Betriebssystem-Templates, die Kunden installieren können. | `admin:read` | Nein | Nein | | `templates_sync` | Importieren Sie Betriebssystem-Templates von CloudStack. | `catalog:write` | Ja | Nein | | `template_update` | Aktivieren oder verbergen Sie ein Template, benennen Sie es um, legen Sie den Anmeldenutzer oder die Reihenfolge fest. | `catalog:write` | Ja | Nein | | `offerings_list` | CloudStack-Serviceangebote (CPU, Arbeitsspeicher, Root-Disk), um Tarife daraus zu erstellen. | `admin:read` | Nein | Nein | | `plans_list` | Tarife mit Preis pro Stunde und Monat, Größe, Zone und Anzahl der Server, die sie nutzen. | `admin:read` | Nein | Nein | | `plan_create` | Erstellen Sie einen Tarif. Preis als `hourly_usd`. CloudStack-Tarife erfordern `cs_offering_id`; Proxmox-Tarife erfordern `backend_id`. | `catalog:write` | Ja | Nein | | `plan_update` | Tarif umbenennen, ein- oder ausblenden, aktivieren oder deaktivieren oder den Preis anpassen. Grössenänderungen bei einem verwendeten Tarif erfordern eine Kopie. | `catalog:write` | Ja | Wenn sich der Preis ändert | | `plans_from_offerings` | Erstellt eine Starter-Tariftabelle aus Angeboten (oder Proxmox-Größen) basierend auf Ihren Kosten und einer Marge in Prozent. Gibt eine Vorschau zurück; erneut aufrufen mit `apply=true`, um die Tarife zu erstellen. | `catalog:write` | Mit `apply=true` | Immer bei Anwendung | | `quota_defaults_get` | Standard-Kundenlimits. | `admin:read` | Nein | Nein | | `quota_defaults_set` | `quota_*`-Einstellungen ändern. | `catalog:write` | Ja | Nein | | `coupons_list` | Rabatt- und Gutscheincode-Chargen. | `admin:read` | Nein | Nein | | `coupon_create` | Eine Charge von Codes erstellen: geben Sie `money` (Nennwert in USD-Cents) oder `percent` (1 bis 100, mit maximalem Rabatt) ein. | `catalog:write` | Ja | Immer | ### Kunden und Reseller {#customers-and-resellers} | Tool | Funktion | Scope | Ändert Daten | Fragt Sie | |---|---|---|---|---| | `customers_search` | Kunden nach E-Mail, Name oder IP finden. | `admin:read` | Nein | Nein | | `customer_get` | Konto, Guthaben, Server und letzte Abrechnung eines Kunden. | `admin:read` | Nein | Nein | | `customer_adjust_balance` | Guthaben in USD-Cents hinzufügen (positiv) oder entfernen (negativ). Ein Grund ist erforderlich. | `billing:write` | Ja | Immer | | `customer_block` | Einen Kunden sperren und optional seine Server stoppen. Ein Grund ist erforderlich. | `customers:write` | Ja | Immer | | `customer_unblock` | Einen Kunden entsperren. | `customers:write` | Ja | Nein | | `resellers_list` | Reseller mit Wallet und Status. | `admin:read` | Nein | Nein | | `reseller_get` | Website, Wallet, Benutzer und Gateways eines Resellers. | `admin:read` | Nein | Nein | ### KI-Anbieter {#ai-provider} | Tool | Funktion | Scope | Ändert Daten | Fragt Sie | |---|---|---|---|---| | `ai_provider_get` | Der OpenAI-kompatible Provider, der vom Kunden-AI Chat und AI Agent verwendet wird (Schlüssel maskiert). | `admin:read` | Nein | Nein | | `ai_provider_set` | Provider festlegen: Basis-URL, Modell, API-Schlüssel, Fallback-Modelle, Reasoning-Aufwand, aktiviert. | `ai:write` (+ `secrets:write` für den Schlüssel) | Ja | Nein | | `ai_provider_test` | Dem gespeicherten Provider eine Frage stellen, um zu prüfen, ob er funktioniert. | `ai:write` | Nein | Nein | ### Konfigurationsdateien {#configuration-files} | Tool | Funktion | Scope | Ändert Daten | Fragt Sie | |---|---|---|---|---| | `config_export` | Die Konfiguration als YAML exportieren (Geheimnisse werden zu `secret://`-Referenzen). | `admin:read` | Nein | Nein | | `config_plan` | Eine YAML-Konfiguration mit dem Live-Panel vergleichen und auflisten, was sich ändern würde. | `admin:read` | Nein | Nein | | `config_apply` | Eine YAML-Konfiguration Abschnitt für Abschnitt anwenden. Jede Änderung folgt den normalen Geltungsbereichs- und Bestätigungsregeln. | `admin:read` + der Geltungsbereich jeder Änderung | Ja | Pro Änderung | Siehe [Configuration as code](https://nexcmp.com/de/docs/configure-with-ai/config-as-code/) für das Dateiformat. ## Prompts {#prompts} Der Server bietet außerdem drei vorgefertigte Prompts, die Clients als Verknüpfungen anzeigen können: | Prompt | Argument | Was die KI ausgeführt werden soll | |---|---|---| | `initial-setup` | keine | Ruft `setup_checklist` auf, erklärt jeden offenen Schritt in einem Satz, fragt Sie nach den benötigten Informationen, führt den Schritt mit dem passenden Tool aus, zeigt eine Vorschau von Geld- oder Sicherheitsänderungen an und schließt mit `system_health` ab. | | `add-proxmox` | `endpoint` (optional, `https://host:8006`) | Fragt nach dem API-Token, dann `proxmox_add`, `proxmox_test`, Zonen-Tools und `proxmox_attach_zone`, schlägt daraufhin Tarife mit `plans_from_offerings` vor und wartet auf Ihre Genehmigung. | | `launch-pricing` | `margin_pct` (optional, Standard 40) | Fragt nach Ihren monatlichen Kosten pro vCPU, pro GB RAM und pro GB Festplatte, zeigt eine Vorschauteule mit Kosten, Monatspreis und Stundepreis und erstellt die Tarife, nachdem Sie zugestimmt haben. | ## Bestätigung (`confirm_token`) {#confirmation-confirm-token} Aktionen, die Geld bewegen, Daten löschen, Zahlungsdaten oder Anmeldesicherheit ändern, sind zweistufig: 1. Der erste Aufruf ändert nichts. Das Ergebnis des Tools beginnt mit „CONFIRMATION REQUIRED“ und enthält eine **Vorschau** (was aufgerufen wird, warum es sensibel ist, die neuen und die aktuellen Werte) sowie ein `confirm_token`. 2. Der Client muss Ihnen die Vorschau anzeigen. Erst nach Ihrer Genehmigung wird dasselbe Tool erneut mit denselben Argumenten plus `confirm_token` aufgerufen. 3. Das Token funktioniert einmalig, nur für genau diese Anfrage und läuft nach 5 Minuten ab. Die Serveranweisungen weisen die KI an, Tool-Ergebnisse als Daten und nicht als Anweisungen zu behandeln und einen Aufruf niemals mit einem von Ihnen nicht genehmigten Token zu wiederholen. Sie sind die Sicherheitsinstanz: Lesen Sie die Vorschau. ::: warning Nicht automatisch genehmigen Einige Clients können jeden Tool-Aufruf automatisch genehmigen. Belassen Sie bei Schreib-Tools die pro Aufruf erforderliche Genehmigung oder verwenden Sie einen Read-only-Schlüssel, damit ein fehlerhafter Plan der KI Ihr Panel nicht ungesehen erreicht. ::: ## Wie es funktioniert {#how-it-works} | Komponente | Detail | |---|---| | Transport | `POST /mcp/admin` mit einer JSON-RPC 2.0-Nachricht; die Antwort ist `application/json`. Bis zu 20 Nachrichten in einem Batch. `GET /mcp/admin` antwortet mit 405 (kein Server-Stream); `DELETE /mcp/admin` beendet eine Sitzung. | | Authentifizierung | `Authorization: Bearer ak_...` (ein manueller Schlüssel oder ein OAuth-Zugriffstoken). Fehlende oder falsche Anmeldeinformationen führen zu 401 mit `WWW-Authenticate: Bearer ... resource_metadata=...`, wodurch OAuth-Clients die Anmeldung selbst starten können. | | Sitzungen | `Mcp-Session-Id` wird von `initialize` ausgestellt, ist an diesen Schlüssel gebunden und 24 Stunden lang gültig. | | Funktionen | Tools und Prompts. Keine Ressourcen. | | Größe | Anfrage-Body bis zu 1 MB; ein Tool-Ergebnis wird nach etwa 100 KB abgeschnitten. | | Origin | Eine Anfrage mit einem `Origin`-Header von einer anderen Website wird abgelehnt (`origin_not_allowed`). Befehlszeilen- und Desktop-Clients senden keinen. | | Gleiches Tor wie REST | Jeder Tool-Aufruf wird über die eigene Anfrage-Pipeline des Panels mit Ihrem Schlüssel erneut gesendet, sodass Scopes, IP-Bereiche, Rate-Limit, Bestätigung und das Aktivitätsprotokoll exakt wie bei direkten API-Aufrufen gelten. | ## Limits & Hinweise {#limits-notes} - Ein Tool, das Sie nicht sehen können, ist ein Scope, den Sie nicht gewährt haben. Fügen Sie den Scope einem neuen Schlüssel hinzu. - Das Festlegen eines Passworts oder API-Schlüssels über einen KI-Client bedeutet, dass das Geheimnis durch diese KI fließt. Wenn Sie möchten, lassen Sie `secrets:write` deaktiviert und geben Sie Geheimnisse selbst im Admin-Bereich ein oder verwenden Sie das Feld **Secret** im AI Chat ([AI Chat im Admin-Bereich](https://nexcmp.com/de/docs/configure-with-ai/ai-chat-in-admin/#secrets)) oder `secret://`-Referenzen ([Configuration as code](https://nexcmp.com/de/docs/configure-with-ai/config-as-code/#secrets)). - Clients teilen keine Sitzungen: Jede Verbindung beginnt mit `initialize`. - Widerrufen Sie den Schlüssel unter **API & AI agents**, um einen KI-Client sofort zu trennen. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | 401 `invalid_key` | Falscher, abgeschnittener oder Nicht-Admin-Schlüssel (zum Beispiel ein `vk_`-Schlüssel) | Verwenden Sie einen `ak_`-Schlüssel. | | 401 `key_expired` oder `key_revoked` | Der Schlüssel ist abgelaufen oder wurde widerrufen | Erstellen Sie einen neuen Schlüssel. | | 403 `ip_not_allowed` | Ihre IP befindet sich außerhalb der IP-Bereiche des Schlüssels | Verbinden Sie sich von einer zulässigen IP aus. | | 403 `origin_not_allowed` | Eine Browserseite von einem anderen Origin hat den Endpunkt aufgerufen | Verwenden Sie einen Desktop- oder CLI-Client. | | 404 bei einer Anfrage mit `Mcp-Session-Id` | Die Sitzung gehört zu einem anderen Schlüssel oder ist abgelaufen | Senden Sie `initialize` erneut. | | 400 unsupported `MCP-Protocol-Version` | Der Client verwendet eine Version, die dem Server nicht bekannt ist | Aktualisieren Sie den Client; unterstützt: 2025-11-25, 2025-06-18, 2025-03-26. | | Die Tool-Liste ist kurz | Schlüssel-Scopes | Erstellen Sie einen Schlüssel mit mehr Scopes. | | `insufficient_scope` bei einem Aufruf | Ein Tool benötigt einen zweiten Scope, zum Beispiel `secrets:write` | Fügen Sie den Scope einem neuen Schlüssel hinzu. | | 429 `rate_limited` | Mehr Aufrufe pro Minute, als der Schlüssel erlaubt | Warten Sie auf `Retry-After` oder erhöhen Sie das Limit für einen neuen Schlüssel. | | claude.ai oder ChatGPT kann keine Verbindung herstellen | Die URL ist aus dem Internet nicht erreichbar oder ein Proxy blockiert `/mcp/admin` oder `/oauth-admin/` | Überprüfen Sie DNS, TLS und den Reverse Proxy. | Alle Fehlercodes finden Sie unter [Admin API keys](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/#errors). --- # claude.ai- und ChatGPT-Konnektoren {#claude-ai-and-chatgpt-connectors} > **Im Admin-Bereich:** System › Settings › API & AI agents (`/agent/keys`), Reiter **Connected apps**. Der Einwilligungsbildschirm öffnet sich unter `/agent/consent`, wenn ein Konnektor Zugriff anfordert (nicht im Menü). ## Funktion {#what-it-does} Web-AI-Apps können keinen Schlüssel von Ihrer Festplatte lesen. Sie verbinden sich über **OAuth**: Sie fügen die MCP-URL des Panels hinzu, die App leitet Sie zur Anmeldung an Ihren eigenen Administratorbereich weiter, Sie wählen aus, was die App tun darf und für wie lange, und die App erhält kurzlebige Token. Es wird kein Schlüssel kopiert oder eingefügt. Sie können die Verbindung zur App jederzeit trennen. Verwenden Sie dies für benutzerdefinierte claude.ai-Konnektoren, ChatGPT-Entwicklermodus-Konnektoren und andere MCP-Clients, die OAuth mit dynamischer Client-Registrierung unterstützen. Befehlszeilentools können denselben Ablauf verwenden, aber ein [admin API key](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/) ist für diese einfacher. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | URL | `https://cloud.example.com/mcp/admin`, aus dem Internet erreichbar (die Server des Anbieters stellen eine Verbindung her). | | Reverse proxy | Wenn Sie einen eigenen Proxy vor dem Panel einsetzen, muss dieser die Pfade `/mcp/admin`, `/oauth-admin/` und `/.well-known/` an das Panel weiterleiten. | | You | Angemeldet im NexCMP-Admin-Bereich **im selben Browser**, den Sie für den Einwilligungsbildschirm verwenden. | | Client | Unterstützt MCP über Streamable HTTP, OAuth 2.1 mit PKCE (S256) und dynamische Client-Registrierung. | ## Connect {#connect} 1. Fügen Sie in der AI-App einen benutzerdefinierten MCP-Konnektor hinzu und fügen Sie `https://cloud.example.com/mcp/admin` ein. In claude.ai finden Sie dies in den Konnektoreinstellungen (Custom-Konnektor hinzufügen); in ChatGPT unter dem Entwicklermodus (MCP-Konnektor hinzufügen, Authentifizierung OAuth). 2. Wählen Sie **Sign in** (oder „Connect“) in der App. Ihr Browser öffnet den NexCMP-Admin-Einwilligungsbildschirm. Wenn Sie nicht angemeldet sind, melden Sie sich zuerst an; der Bildschirm wird danach fortgesetzt. 3. Lesen Sie die Karte: „**Example AI app** möchte diesen NexCMP-Admin verwalten“ (der Name der anfragenden App) mit der Adresse, an die Sie zurückgeleitet werden. 4. Wählen Sie die zu gewährenden Berechtigungen aus. Die von der App angeforderten sind vorab ausgewählt; wurden keine angefordert, ist nur `admin:read` ausgewählt. Siehe [Scopes](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/#scopes). 5. Wählen Sie, wie lange die Verbindung dauern soll: **7**, **30** oder **90** Tage (Standard: 30). 6. Klicken Sie auf **Allow**. Der Browser kehrt zur App zurück, die nun verbunden ist. Klicken Sie auf **Deny**, um abzulehnen. ![Einwilligungsbildschirm mit der Anfrage zur Genehmigung einer AI-App, mit Berechtigungs-Kontrollkästchen, einer Dauerauswahl sowie den Schaltflächen „Allow“ und „Deny“](https://nexcmp.com/de/docs/images/configure-with-ai/oauth-connectors-01-consent.webp) ::: important Wählen Sie Bereiche wie bei einem Schlüssel aus Gewähren Sie den kleinstmöglichen Satz, der die Aufgabe erfüllt. Finanz-, Lösch- und Sicherheitsaktionen halten nach wie vor bei einer Vorschau an und erfordern Ihre Genehmigung, aber eine Verbindung mit `settings:write` kann dennoch Ihr Branding und Ihre E-Mail ändern. ::: ## Manage and revoke {#manage-and-revoke} Öffnen Sie **System › Settings › API & AI agents › Connected apps**. Die Tabelle listet jede von Ihnen verbundene App auf: Anwendung, Berechtigungen, Zeitpunkt der Verbindung, Ablaufdatum und Zeitpunkt der letzten Verwendung. Um eine App zu trennen, klicken Sie auf **Revoke** und bestätigen Sie dies. Ihre Token funktionieren sofort nicht mehr; die App muss den Einwilligungsbildschirm erneut durchlaufen, um sich zu verbinden. ![Reiter „Connected apps“ mit einer aufgelisteten AI-App, ihren Berechtigungen, dem Ablaufdatum und einer „Revoke“-Schaltfläche](https://nexcmp.com/de/docs/images/configure-with-ai/oauth-connectors-02-connected-apps.webp) ## So funktioniert der Ablauf {#how-the-flow-works} | Schritt | Detail | |---|---| | Discovery | Die App liest `/.well-known/oauth-protected-resource/mcp/admin` und danach `/.well-known/oauth-authorization-server/oauth-admin`. Der Aussteller ist `https://cloud.example.com/oauth-admin`. | | Registration | Die App registriert sich selbst (`POST /oauth-admin/register`, RFC 7591). Es werden nur öffentliche Clients unterstützt (kein Client-Geheimnis). Die Weiterleitungsadresse muss `https` sein oder `http` auf demselben Computer (Loopback). | | Authorization | `GET /oauth-admin/authorize` mit PKCE-Methode `S256`. Ein gesendeter `resource`-Parameter muss die `/mcp/admin`-URL dieses Panels sein. Die Anfrage ist 10 Minuten gültig und an den Browser gebunden, der sie gestartet hat. | | Zustimmung | Sie wählen Scopes und Dauer (oben). Der Autorisierungscode ist 60 Sekunden gültig und funktioniert einmal. | | Tokens | `POST /oauth-admin/token` gibt ein **Access Token** (ein `ak_o...` Schlüssel, gültig 1 Stunde oder bis zum Ende der Verbindung, je nachdem, was zuerst eintritt) und ein **Refresh Token** (`akr_...`) zurück. Jede Aktualisierung liefert ein neues Refresh Token; das alte funktioniert nicht mehr. Die Verbindung endet nach der von Ihnen gewählten Anzahl an Tagen. | | Widerruf | **Revoke** in Connected apps, oder die App ruft `POST /oauth-admin/revoke` auf (RFC 7009). | Das Access Token verhält sich wie ein Admin-Schlüssel mit den von Ihnen gewährten Scopes: dieselben Scope-Regeln, Bestätigungen, Rate Limits und Aktivitätsprotokolle. Seine Aufrufe werden auf der Registerkarte **Activity** angezeigt. ## Verifizierung {#verify} 1. Fragen Sie in der App „run system_health“ (oder „what tools do you have?“). Die App listet die Tools auf, die Ihre Scopes erlauben ([die Tool-Liste](https://nexcmp.com/de/docs/configure-with-ai/mcp-admin/#tools)). 2. Öffnen Sie **Connected apps**: **Last used** ändert sich. 3. Öffnen Sie **Activity**: Die Aufrufe werden mit dem Namen der App und `mcp` aufgelistet. ## Limits & Hinweise {#limits-notes} - Wenn die App nach einer Stunde erneut zur Anmeldung auffordert, ist das normal, wenn ein Client keine Aktualisierung durchführt; verbinden Sie sich erneut. - Ein Refresh Token, das zweimal verwendet wird, wird als gestohlen behandelt: Die gesamte Verbindung wird widerrufen. Verbinden Sie sich über die App neu. - Ein zweimal verwendeter Autorisierungscode wird abgelehnt (`invalid_grant`) und die bereits dafür ausgegebenen Tokens werden widerrufen. - OAuth-Zugriff gewährt niemals mehr, als die Scope-Regeln erlauben: [Was ein Schlüssel niemals tun kann](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/#what-a-key-can-never-do) gilt auch für verbundene Apps. - Anbieter ändern ihre Menüs und das, was sie unterstützen. Wenn die App eines Anbieters in Ihrem Tarif keine benutzerdefinierten Konnektoren anbietet, verwenden Sie stattdessen einen [Admin-API-Schlüssel](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/) mit einem Desktop- oder Befehlszeilen-Client. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Der Einwilligungsbildschirm zeigt „Wrong browser“ | Die Anfrage wurde in einem anderen Browser gestartet als dem, in dem Sie angemeldet sind | Starten Sie die Verbindung von der KI-App aus im selben Browser neu. | | Der Einwilligungsbildschirm besagt, dass die Anfrage abgelaufen ist oder fehlt | Es sind mehr als 10 Minuten vergangen oder der Link wurde zweimal geöffnet | Starten Sie die Verbindung von der KI-App aus neu. | | Seite „Unknown client“ oder „redirect address does not match“ | Die App-Registrierung ist veraltet oder verwendet eine Weiterleitungsadresse, die nicht registriert wurde | Entfernen Sie den Konnektor in der App und fügen Sie ihn erneut hinzu. | | `invalid_target` | Das gesendete `resource` ist nicht die `/mcp/admin`-URL dieses Panels | Verwenden Sie die genaue URL, die auf der Registerkarte **Connect an AI** angezeigt wird. | | `invalid_request` zu PKCE | Der Client sendet kein `code_challenge_method=S256` | Verwenden Sie einen Client, der OAuth 2.1 mit PKCE unterstützt. | | Die App verbindet sich, aber ein Aufruf gibt `insufficient_scope` zurück | Sie haben diesen Scope nicht ausgewählt | Widerrufen Sie die Verbindung und verbinden Sie sich erneut mit ausgewähltem Scope. | | Die App kann die URL nicht erreichen | DNS, TLS oder der Reverse Proxy blockiert `/mcp/admin`, `/oauth-admin/` oder `/.well-known/` | Überprüfen Sie die Proxy-Regeln. | --- # Konfiguration als Code {#configuration-as-code} > **Wo im Admin:** System › Settings › Import/Export (`/agent/config`). Auf dem Server: die Befehle `nexcmp config export`, `plan` und `apply` sowie `nexcmp admin `. ## Funktion {#what-it-does} Ihre Panel-Konfiguration (Branding, allgemeine Einstellungen, E-Mail, Telegram-Benachrichtigungen, Module, Währung, Zahlungs-Gateways, Limits, Zonen, Tarife, der AI-Anbieter und die rechtlichen Seiten) kann als eine einzige YAML-Datei gespeichert werden. Sie können die Datei selbst bearbeiten, einen AI-Assistenten damit beauftragen, sie in der Versionsverwaltung verwalten und sie auf dasselbe oder ein anderes Panel anwenden. Vor jeder Änderung sehen Sie immer eine Liste der Unterschiede. Passwörter und Geheimnisse werden niemals in die Datei geschrieben. Verwenden Sie dies, um ein Setup auf eine zweite Installation zu klonen, Änderungen vor dem Live-Gang zu überprüfen, Einstellungen nach einem Fehler wiederherzustellen oder ein AI-Modell eine vollständige Konfiguration vorschlagen zu lassen, die Sie wie ein einzelnes Dokument lesen. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | NexCMP | 1.4.0 oder neuer. | | Kommandozeile | Sie sind `root` auf dem Panel-Server (verwenden Sie `sudo`). Der Befehl fordert eigenständig einen temporären Schlüssel (15 Minuten, alle Scopes) vom Panel an. Um stattdessen einen eingeschränkteren Schlüssel zu verwenden, setzen Sie `NEXCMP_KEY` auf einen [admin API key](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/) und behalten Sie diesen über sudo bei, zum Beispiel `sudo --preserve-env=NEXCMP_KEY nexcmp config plan -f nexcmp.yaml`. | | Admin-Seite | Als Administrator angemeldet. Auf einem Demo-Panel ist die Seite schreibgeschützt. | | Secrets | Werte, die zum Zeitpunkt der Anwedung bereitgestellt werden (siehe [Secrets](#secrets)); niemals innerhalb der Datei. | ## Exportieren, bearbeiten, vorschauen, anwenden {#export-edit-preview-apply} 1. Exportieren Sie die aktuelle Konfiguration: ```bash sudo nexcmp config export -o nexcmp.yaml ``` Ohne `-o` wird das YAML auf dem Bildschirm ausgegeben. 2. Bearbeiten Sie `nexcmp.yaml` (siehe das [Beispiel](#example-file) unten). Behalten Sie `version: 1` oben bei. 3. Zeigen Sie eine Vorschau der Änderungen an. Dies ändert nichts: ```bash sudo nexcmp config plan -f nexcmp.yaml ``` Jede Zeile zeigt Bereich, Element, Feld und `old → new`. Zeilen mit der Markierung `$` gehören zu Abrechnungsbereichen (siehe [Billing sections](#billing-sections)). Wenn das Panel bereits der Datei entspricht, wird „No changes“ angezeigt. 4. Anwenden. Ohne `--yes` ist der Befehl ein **Dry Run** (Testlauf) und gibt nur dieselbe Liste aus: ```bash sudo nexcmp config apply -f nexcmp.yaml --yes ``` 5. Lesen Sie das Ergebnis: `applied`, `pending` (wartet auf Ihre Bestätigung), `skipped` und `errors`. | Option | Bedeutung | |---|---| | `-f ` | Die YAML-Datei (erforderlich für `plan` und `apply`). | | `--yes` | Wirklich anwenden. Ohne diese Option ist `apply` ein Testlauf. | | `--confirm-billing` | Wenden Sie auch die Abrechnungsbereiche an (`payments`, `currency`, `plans`). Ohne diese Option werden sie übersprungen. | | `--section ` | Wenden Sie nur diesen Abschnitt an. Wiederholen Sie die Option für mehrere. | | `-o ` | Mit `export`: Schreiben Sie das YAML in eine Datei. | Der Exit-Code ist 0, wenn alles angewendet wurde oder sich nichts geändert hat, 1, wenn ein Fehler zurückgegeben wurde, und 2 bei einem Aufruf- oder Schlüsselfehler. ### Secrets {#secrets} Die Datei enthält Referenzen anstelle von Geheimnissen, wie zum Beispiel `password: secret://smtp_password`. Zum Zeitpunkt der Anwendung stammt der Wert aus einer Umgebungsvariablen namens `NEXCMP_SECRET_` plus dem Referenznamen in Großbuchstaben: ```bash sudo -i read -rs NEXCMP_SECRET_SMTP_PASSWORD && export NEXCMP_SECRET_SMTP_PASSWORD read -rs NEXCMP_SECRET_STRIPE_SECRET_KEY && export NEXCMP_SECRET_STRIPE_SECRET_KEY nexcmp config apply -f nexcmp.yaml --yes --confirm-billing ``` Wenn eine Referenz keinen Wert hat, wird das bereits im Panel gespeicherte Geheimnis **beibehalten**. Ein Geheimnis, das nie gespeichert wurde und nicht übergeben wird, bleibt leer. | Referenzname | Ziel | |---|---| | `smtp_password` | `email.smtp.password` | | `telegram_bot_token` | `telegram.bot_token` | | `stripe_secret_key`, `stripe_webhook_secret` | `payments.stripe` | | `paypal_client_secret` | `payments.paypal.client_secret` | | `binance_api_key`, `binance_api_secret` | `payments.crypto` | | `sepay_api_token`, `sepay_webhook_secret` | `payments.bank` | | `ai_provider_key` | `ai_provider.api_key` | ## Beispieldatei {#example-file} ```yaml # NexCMP configuration. Preview: nexcmp config plan -f nexcmp.yaml version: 1 branding: name: Example Cloud primary: "#1677ff" currency: usd seller_name: Example Cloud LLC settings: brand_name: Example Cloud support_email: support@example.com default_lang: en invoice_prefix: EX company_name: Example Cloud LLC company_address: "1 Example Street, New York, NY" min_topup_cents: 500 email: smtp: host: smtp.example.com port: 587 security: starttls username: mailer@example.com password: secret://smtp_password from_email: no-reply@example.com from_name: Example Cloud reply_to: support@example.com telegram: enabled: true chat_id: "123456789" bot_token: secret://telegram_bot_token modules: s3: true k8s: false currency: site_currency: usd manual_rate_vnd: 0 # 0 = automatic payments: stripe: mode: test publishable_key: pk_test_XXXX secret_key: secret://stripe_secret_key webhook_secret: secret://stripe_webhook_secret bank: bank_code: BANK account_number: "0000000000" account_name: EXAMPLE CLOUD LLC prefix: EX api_token: secret://sepay_api_token channels: pay_card_enabled: true quotas: quota_enabled: true quota_max_vms_24h: 5 quota_max_vms_30d: 30 zones: - slug: new-york name: New York country: US city: New York enabled: true is_default: true plans: - slug: vps-1c-1g name: 1 vCPU, 1 GB RAM, 25 GB cpu: 1 ram_mb: 1024 disk_gb: 25 hourly_usd: 0.0112 cs_offering_id: OFFERING_ID enabled: true visible: true ai_provider: enabled: true name: Example AI base_url: https://api.example.com/v1 model: example-model fallback_models: [example-model-mini] reasoning_effort: low api_key: secret://ai_provider_key legal: terms: en: | # Terms of service Your terms in simple markdown (no HTML). privacy: en: | # Privacy policy Your policy in simple markdown (no HTML). ``` Eine Datei kann eine beliebige Teilmenge der Abschnitte enthalten. Ein ausgelassener Abschnitt wird nicht angetastet. Eine Datei, die größer als 1 MB ist, ein fehlender `version: 1`, eine abweichende Versionsnummer oder ein unbekannter Abschnitt werden abgelehnt, bevor etwas ausgeführt wird. ## Abschnitte {#sections} | Bereich | Funktion | Hinweise | |---|---|---| | `branding` | Markenname (bis zu 60 Zeichen), Primärfarbe, Anzeigewährung (`usd` oder `vnd`), Verkäufername. | Logos sind nicht Teil der Datei; verwenden Sie die [branding page](https://nexcmp.com/de/docs/customers/branding/). | | `settings` | Eine feste Liste allgemeiner Einstellungen: `brand_name`, `support_email`, `support_telegram_url`, `default_lang`, `require_email_verified`, `min_topup_cents`, `max_topup_cents`, `invoice_prefix`, `company_name`, `company_address`, `company_tax_id`, `auto_destroy_days`, `low_balance_cents`. | Andere Schlüssel werden ignoriert. | | `email.smtp` | SMTP-Host, Port, Sicherheit (`starttls`, `tls`, `none`), Benutzer, Passwort, Absendername und -adresse, Antwortadresse. | [SMTP and e-mail templates](https://nexcmp.com/de/docs/administration/smtp-and-emails/). Beim Ändern von Host, Port oder Sicherheit muss das Passwort erneut eingegeben werden. | | `telegram` | Alarmkanal an/aus, Chat-ID, Bot-Token. | [Telegram-Benachrichtigungen](https://nexcmp.com/de/docs/administration/telegram-notifications/). | | `modules` | Optionale Module an/aus (`key: true/false`). | Nur Schlüssel, die das Panel umschalten lässt. Siehe [Modules](https://nexcmp.com/de/docs/infrastructure/modules/). | | `currency` | Anzeigewährung und manueller USD-zu-VND-Kurs (`0` automatisch, ansonsten 15000 bis 50000). | Bereich Abrechnung. Siehe [Currency and exchange rates](https://nexcmp.com/de/docs/catalog/currency-and-exchange-rates/). | | `payments` | `stripe`-, `paypal`-, `crypto`-, `bank`-Zugangsdaten und `channels`-Schalter (`pay_card_enabled`, `pay_wallets_enabled`, `pay_alipay_enabled`, `pay_paypal_enabled`, `pay_usdt_enabled`, `pay_sepay_enabled`). | Bereich Abrechnung. Siehe [Payment channels](https://nexcmp.com/de/docs/billing/payment-channels/). | | `quotas` | `quota_*`-Limits. | Siehe [Quotas](https://nexcmp.com/de/docs/billing/quotas/). | | `zones` | Zonen nach `slug` (erforderlich: `slug`, `name`, `country`; optional `city`, `enabled`, `is_default`). | Neue Zonen werden erstellt. Eine bereits vorhandene Zone wird durch die Datei **nicht verändert**. Siehe [Zones](https://nexcmp.com/de/docs/infrastructure/zones/). | | `plans` | Tarife nach `slug` (erforderlich: `slug`, `name`, `cpu`, `ram_mb`, `disk_gb`, `hourly_usd`; optional `cs_offering_id`, `backend_id`, `zone_id`, `enabled`, `visible`, `sort`, `description`). | Bereich Abrechnung. Neue Tarife werden erstellt, bestehende anhand des Slugs aktualisiert. Preise in USD pro Stunde. Siehe [Plans](https://nexcmp.com/de/docs/catalog/plans/). | | `ai_provider` | Der Panel-KI-Anbieter, der von der Kunden-KI (AI Chat und AI Agent) verwendet wird. | [AI provider](https://nexcmp.com/de/docs/ai/ai-providers/). | | `legal` | AGB- und Datenschutztext pro Sprache (`en`, `vi`). | [Legal pages](https://nexcmp.com/de/docs/customers/legal/). | Die Anwendungsreihenfolge entspricht der obigen Reihenfolge: infrastrukturähnliche Elemente vor Tarifen. ## Zu beachtende Regeln {#rules-to-remember} - **Idempotent.** Das zweimalige Anwenden derselben Datei ändert beim zweiten Mal nichts. `plan` zeigt "No changes". - **Keine Löschungen.** Die Datei entfernt niemals eine Zone, einen Tarif oder eine Einstellung. Das Entfernen eines Eintrags aus der Datei belässt das Panel unverändert. - **Es gelten weiterhin die normalen Sicherheitsregeln.** Über die Befehlszeile wird jede Änderung denselben Prüfungen wie eine API-Änderung unterzogen: Bereiche und IP-Regeln. Eine Änderung, die eine Bestätigung erfordert (z. B. ein weitenweiter Schalter), wird unter `pending` mit einer Vorschau statt der Anwendung gemeldet, es sei denn, Sie übergeben `--confirm-billing`, wodurch alle bestätigt werden. - **KI-Clients können die Abrechnung nicht entsperren.** Wenn `config_apply` von einem MCP-Client aufgerufen wird, wird `confirm_billing` ignoriert; Geldänderungen warten auf Sie. - **Vor der Anwendung prüfen.** Das JSON-Schema beschreibt jedes Feld. Verweisen Sie Ihren Editor darauf oder übergeben Sie es an eine KI, damit sie gültiges YAML schreibt: `https://cloud.example.com/v1/admin/agent/config/schema.json` (öffentlich lesbar). ### Abrechnungsbereiche {#billing-sections} `payments`, `currency` und `plans` ändern Preise oder Geldwege. `nexcmp config apply --yes` **überspringt** diese, es sei denn, Sie fügen `--confirm-billing` hinzu; sie werden dann unter `skipped` ("billing section - pass confirm_billing") aufgeführt. Das Flag ist Ihre Bestätigung: Damit wird jede Abrechnungsänderung in der Datei (und jede andere Änderung, die eine Bestätigung erfordert) ohne erneute Abfrage angewendet. Führen Sie zuerst `plan` aus und lesen Sie jede mit `$` markierte Zeile. Wenn dieselbe Datei von einer KI angewendet wird (dem `config_apply`-Tool in einem MCP-Client oder AI Chat), wird das Flag ignoriert, und Geldänderungen warten stattdessen auf Ihre Genehmigung. ## Verwenden Sie die Import/Export-Seite {#use-the-import-export-page} 1. Öffnen Sie **System › Settings › Import/Export**. 2. Klicken Sie unter **Export** auf **Get current configuration** und dann auf **Download .yaml**, um `nexcmp.yaml` zu speichern. Geheimnisse werden als Platzhalter angezeigt. 3. Wählen Sie unter **Import** eine Datei aus, ziehen Sie sie in das Feld oder fügen Sie das YAML ein. 4. Optional: Öffnen Sie **Secrets that come with it (not in the file)** und fügen Sie einen Namen und Wert für jede Referenz hinzu, z. B. `smtp_password`. 5. Klicken Sie auf **Preview changes**. Die Tabelle gruppiert die Änderungen nach Bereichen; geldbezogene Bereiche tragen das Tag "Money-related". Deaktivieren Sie Bereiche, die Sie nicht wünschen. 6. Wenn finanzbezogene Abschnitte aufgelistet sind, aktivieren Sie **Also apply money-related changes (prices, payment gateways, balances)**. Ohne diesen Haken werden sie übersprungen. 7. Klicken Sie auf **Apply selected**. Das Ergebnis zeigt an, was angewendet, übersprungen oder fehlgeschlagen ist. Eine Änderung, die als auf Bestätigung wartend zurückgegeben wird, erscheint als Bestätigungskarte; klicken Sie dort auf **Confirm**. Die Schaltfläche **JSON Schema** oben rechts öffnet das Schema. ![Import/Export-Seite mit der Export-Karte und der Import-Karte, die exportiertes YAML enthält](https://nexcmp.com/de/docs/images/configure-with-ai/config-as-code-01-import-export.webp) ![Vorschautabelle der nach Abschnitten gruppierten Änderungen mit einem Abrechnungs-Tag und einer Schaltfläche zum Anwenden der Auswahl](https://nexcmp.com/de/docs/images/configure-with-ai/config-as-code-02-preview.webp) ## Beliebiges Tool über die Befehlszeile ausführen {#run-any-tool-from-the-command-line} `nexcmp admin` führt dieselben Tools wie die KI-Assistenten aus ([die Tool-Liste](https://nexcmp.com/de/docs/configure-with-ai/mcp-admin/#tools)) und gibt JSON aus: ```bash sudo nexcmp admin tools # name, scope and title of every tool sudo nexcmp admin system_health sudo nexcmp admin customers_search q=customer@example.com sudo nexcmp admin settings_update --json '{"values":{"support_email":"support@example.com"}}' ``` Argumente sind `key=value`-Paare (Werte werden als JSON eingelesen, wenn sie parsebar sind, ansonsten als Text) oder ein einzelnes `--json '{...}'`-Objekt. Wenn die Aktion eine Bestätigung erfordert, gibt der Befehl die Vorschau aus und stoppt mit dem Exit-Code 3 und „Nothing changed“. Lesen Sie die Vorschau und führen Sie denselben Befehl dann erneut mit `--yes` aus, um ihn anzuwenden. Wird der Befehl als Root ausgeführt, erhält er einen 15-minütigen Schlüssel mit allen Berechtigungen, sodass der Bestätigungsschritt Ihre Sicherheitsvorkehrung ist; mit `NEXCMP_KEY` gelten die eigenen Berechtigungen des Schlüssels. ## Verifizierung {#verify} 1. `sudo nexcmp config plan -f nexcmp.yaml` direkt nach einem `apply --yes` gibt „No changes“ aus. 2. Im Admin-Bereich zeigen die geänderten Seiten die neuen Werte an, und **Logs › Admin actions** listet die Änderungen auf. 3. Das erneute Anwenden derselben Datei bewirkt keine Änderungen. ## Limits & Hinweise {#limits-notes} - Die Datei deckt die obigen Einstellungen ab, jedoch keine Kunden, Server, Rechnungen oder Infrastrukturquellen (CloudStack- und Proxmox-Verbindungen). Verbinden Sie diese über [AI Chat](https://nexcmp.com/de/docs/configure-with-ai/ai-chat-in-admin/) oder die Admin-Seiten. - Zonen und Tarife werden über `slug` abgeglichen. Benennen Sie einen Slug in der Datei nicht um: Er würde sonst als neues Element erstellt. - Die Größe eines Tarifs, den Kunden bereits nutzen, kann nicht geändert werden; erstellen Sie stattdessen einen neuen Tarif. - Bewahren Sie exportierte Dateien vertraulich auf, auch wenn sie keine Geheimnisse enthalten: Sie listen Ihre Preise, Adressen und Kontonamen auf. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | `missing version: 1` | Die Datei beginnt nicht mit `version: 1` | Fügen Sie diesen hinzu. | | `unsupported version 2` | Die Datei hat eine andere Versionsnummer | Dieses Panel liest nur Version 1. | | `unknown section 'x' (known: ...)` | Ein falsch geschriebener oder nicht unterstützter Schlüssel auf oberster Ebene | Verwenden Sie die obigen Abschnitte. | | `YAML error: ...` | Ungültiges YAML (Einrückung, Tabs) | Beheben Sie die in der Meldung genannte Zeile. | | `config is larger than 1 MB` | Datei zu groß | Teilen Sie sie auf und verwenden Sie `--section`. | | `no API key: set NEXCMP_KEY=ak_... or run as root on the server` | Der Befehl hat keinen Schlüssel gefunden | Führen Sie den Befehl mit `sudo` aus oder exportieren Sie `NEXCMP_KEY` und behalten Sie ihn über sudo bei. | | `panel not reachable` | Der Panel-Dienst läuft nicht auf dem Standardport | Überprüfen Sie `sudo nexcmp status`. | | Abrechnungszeilen unter `skipped` | Abrechnungsabschnitte erfordern `--confirm-billing` | Fügen Sie das Flag hinzu und überprüfen Sie zuerst die `$`-Zeilen. | | Elemente unter `pending` | Die Änderung erfordert eine Bestätigung | Öffnen Sie **API & AI agents** oder das Import/Export-Ergebnis und klicken Sie auf der Karte auf **Confirm**. | | Ein Geheimnis wurde nicht aktualisiert | Es wurde kein `NEXCMP_SECRET_`-Wert festgelegt, sodass das gespeicherte Geheimnis beibehalten wurde | Exportieren Sie die Variable und wenden Sie sie erneut an. | | Eintrag unter `errors` mit HTTP 403 `insufficient_scope` | Dem Schlüssel fehlt der Geltungsbereich dieses Abschnitts | Verwenden Sie einen Schlüssel mit dem entsprechenden Geltungsbereich oder führen Sie ihn als Root aus. | | Eintrag unter `errors` mit HTTP 403 `demo_read_only` | Demo-Panel | Auf einer echten Installation anwenden. | --- # Beispiel-Prompts {#example-prompts} > **Wo im Admin:** AI Chat (`/agent`) oder der schwebende Button **Ask AI** auf jeder Admin-Seite. Dieselben Prompts funktionieren in jedem über [MCP](https://nexcmp.com/de/docs/configure-with-ai/mcp-admin/) verbundenen AI Client. ## Funktion {#what-it-does} Diese Prompts zeigen, wie Sie Fragen stellen. Jeder führt auf, was der Assistent im Hintergrund tut, die erforderlichen Scopes (für einen externen Client oder einen Key) und wo Sie um Freigabe gebeten werden. Ersetzen Sie die Beispielwerte durch Ihre eigenen. ::: tip Geben Sie niemals ein Geheimnis in den Chat-Text ein Verwenden Sie für Passwörter, API-Keys und Token das Feld **Secret** neben der AI Chat-Eingabe ([Details](https://nexcmp.com/de/docs/configure-with-ai/ai-chat-in-admin/#secrets)). Die AI sieht nur einen Platzhalter für das Geheimnis, nicht den Wert. Bei einem externen AI Client läuft das Geheimnis über diesen Client, weshalb die Eingabe im Admin bevorzugt wird. ::: ## Status prüfen {#check-where-you-are} ```text Check my setup progress and tell me the next three things to do, in order. ``` Der Assistent ruft `setup_checklist` und `system_health` auf (Scope `admin:read`) und antwortet anhand des tatsächlichen Status. Siehe [Setup progress checklist](https://nexcmp.com/de/docs/configure-with-ai/setup-checklist/). ## Ersteinrichtung {#first-setup} ```text Help me finish the initial setup. Go through the checklist, explain each open step in one sentence, ask me for what you need, and show me every change before it is applied. ``` Dies entspricht dem MCP-Prompt `initial-setup`. Er benötigt `admin:read` sowie die Scopes der Schritte, die Sie akzeptieren. Erwarten Sie für jede Änderung im AI Chat eine Bestätigungskarte. ## Proxmox VE-Cluster hinzufügen {#add-a-proxmox-ve-cluster} ```text I want to sell servers from my Proxmox VE cluster at https://pve.example.com:8006. Add it, test the connection, create a zone called "New York" in the US, attach the cluster to it, and then propose starter plans. ``` Was passiert: 1. Der Assistent fragt nach der API-Token-ID (`user@realm!tokenid`) und dessen Secret. Tragen Sie das Secret in das Feld **Secret** ein. Erstellen Sie zuerst einen eingeschränkten Token: [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/). 2. Er ruft `proxmox_add`, `proxmox_test`, `zone_create` und `proxmox_attach_zone` auf. 3. Er schlägt Tarife mit `plans_from_offerings` vor und wartet auf Ihre Freigabe (siehe das nächste Beispiel). Scopes: `infra:write`, `secrets:write`, `catalog:write`, `admin:read`. ## Tariftabelle mit 40% Marge erstellen {#create-a-plan-table-with-a-40-margin} ```text Suggest a starter plan table from my CloudStack offerings. My costs are $4 per vCPU per month, $2 per GB of RAM per month and $0.08 per GB of disk per month. Use a 40% margin, show me the table with cost, price per month and price per hour, and create the plans only after I approve. ``` Der Assistent ruft `plans_from_offerings` mit `margin_pct` 40 und Ihren Kosten auf. Die Marge ist der Anteil des Verkaufspreises, der Gewinn ist: bei 40% wird ein Tarif, der Sie $60 kostet, für $100 verkauft. Der erste Aufruf liefert nur eine Vorschau. Wenn Sie zustimmen, ruft er das Tool erneut mit `apply=true` auf, wodurch die Tarife in einem Schritt erstellt werden und wegen der beteiligten Preise eine Bestätigung angefordert wird. Für Proxmox verwendet er `backend_id` und eine Standardgrößenliste (1, 2, 2 und 4 vCPU). Scopes: `catalog:write`, `admin:read`. Siehe [Plans](https://nexcmp.com/de/docs/catalog/plans/). ![AI Chat-Antwort mit einer Vorschautabelle von Tarifen inklusive Kosten, monatlichem Preis und Stundensatz](https://nexcmp.com/de/docs/images/configure-with-ai/example-prompts-01-plan-preview.webp) ## E-Mail konfigurieren und Testnachricht senden {#configure-email-and-send-a-test-message} ```text Configure outgoing email with smtp.example.com, port 587, STARTTLS, user "mailer@example.com", sender name "Example Cloud", sender address "no-reply@example.com". Use my Secret field for the password "smtp_password". Then send a test email to admin@example.com. ``` Der Assistent ruft `smtp_get`, `smtp_configure` und `smtp_test` auf und teilt Ihnen mit, ob die Nachricht akzeptiert wurde. Scopes: `settings:write`, `secrets:write`. Siehe [SMTP and e-mail templates](https://nexcmp.com/de/docs/administration/smtp-and-emails/). ## Stripe einrichten {#set-up-stripe} ```text Set up Stripe in test mode. My publishable key is pk_test_XXXX. Use the secret key and the webhook secret from my Secret field (names stripe_secret_key and stripe_webhook_secret). Then test the credentials and tell me which webhook URL I must add in Stripe. ``` `payment_configure` ist immer eine Aktion in zwei Schritten: Sie sehen eine Vorschau mit maskierten Geheimwerten und genehmigen diese. Anschliessend überprüft `payment_test` die Zugangsdaten bei Stripe. Scopes: `billing:write`, `secrets:write`. Wechseln Sie erst nach einer Testzahlung in den Live-Modus. Siehe [Stripe](https://nexcmp.com/de/docs/billing/stripe/). ## Telegram-Benachrichtigungen aktivieren {#turn-on-telegram-alerts} ```text Add my Telegram chat 123456789 for admin alerts. The bot token is in my Secret field as telegram_bot_token. Send a test message. ``` Der Assistent ruft `telegram_configure` und `telegram_test` auf. Scopes: `settings:write`, `secrets:write`. Siehe [Telegram notifications](https://nexcmp.com/de/docs/administration/telegram-notifications/). ## Kunden finden und Guthaben hinzufügen {#find-a-customer-and-add-credit} ```text Find the customer with e-mail customer@example.com, show me their balance and servers, and add $10.00 of credit because of the outage on Monday. ``` Der Assistent ruft `customers_search` und `customer_get` (nur Lesen) auf, gefolgt von `customer_adjust_balance` mit `delta_cents` 1000 und einem Grund. Dies erfordert **immer** Ihre Freigabe: Die Bestätigungskarte besagt „Ändert ein Kundenguthaben“ und zeigt den Betrag sowie den Grund, der in das Audit-Log eingetragen wird. Scopes: `admin:read`, `billing:write`. ## Konfiguration exportieren {#export-my-configuration} ```text Export my whole configuration as YAML. Do not include secrets. Then tell me which settings differ from a typical new installation. ``` Der Assistent ruft `config_export` auf. Geheimnisse werden durch `secret://`-Referenzen ersetzt. Speichern Sie das Ergebnis als `nexcmp.yaml` und bewahren Sie es in der Versionsverwaltung auf. Siehe [Configuration as code](https://nexcmp.com/de/docs/configure-with-ai/config-as-code/). Scope: `admin:read`. ## Gute Prompts schreiben {#write-good-prompts} - Nennen Sie das Ziel und die Fakten: Namen, Preise, E-Mail-Adressen. Fügen Sie keine Geheimnisse ein. - Fragen Sie bei allem, was Geld kostet oder Daten löscht, zuerst nach einer Vorschau. - Bitten Sie den Assistenten, „den aktuellen Wert vor der Änderung zu lesen”. Die integrierten Anweisungen besagen dies bereits. - Wenn eine Antwort falsch erscheint, fragen Sie: „Welches Tool haben Sie mit welchen Argumenten aufgerufen?” Die Tool-Karten im AI Chat zeigen beides. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Der Assistent sagt, er habe kein Tool für eine bestimmte Aktion | Der Geltungsbereich für dieses Tool ist nicht erteilt oder die Aktion ist für KI gesperrt | Prüfen Sie die [Admin API keys](https://nexcmp.com/de/docs/configure-with-ai/admin-api-keys/#what-a-key-can-never-do) oder führen Sie es im Admin-Bereich aus. | | Er bittet Sie, ein Passwort einzufügen | Das Modell hat die Anweisungen ignoriert | Lehnen Sie ab; verwenden Sie das Feld Secret oder geben Sie den Wert im Admin-Bereich ein. | | Nach „do it” ändert sich nichts | Änderungen warten auf Ihre Bestätigung | Scrollen Sie zur Bestätigungskarte und drücken Sie **Confirm**. | | Pläne wurden zu einem unerwarteten Preis erstellt | Die Kosten oder die Marge im Prompt waren falsch | Bearbeiten Sie die Pläne auf der Plans-Seite oder bitten Sie den Assistenten, sie neu zu bepreisen; Preisänderungen erfordern eine Bestätigung. | --- # Checkliste für den Einrichtungsfortschritt {#setup-progress-checklist} > **Wo im Admin-Bereich:** Overview › Dashboard (`/`), die Karte **Setup progress** ganz oben. Leere Listen unter Plans, Customers, Zones, Payments und Infrastructure zeigen dieselbe Hilfe. ## Funktion {#what-it-does} Eine neue Installation erfordert zehn Dinge, bevor der erste Kunde bestellen und bezahlen kann. Die Karte **Setup progress** prüfen diese anhand der realen Konfiguration für Sie, zeigt, wie viele erledigt sind, nennt den **nächsten Schritt** und verlinkt auf die Seite, auf der Sie ihn ausführen. Wenn Sie eine KI-Quelle verbunden haben, öffnet **Do it for me** den [AI assistant](https://nexcmp.com/de/docs/configure-with-ai/ai-chat-in-admin/) mit einer vorbereiteten Frage für diesen Schritt. Der Assistent (und jeder KI-Client über [MCP](https://nexcmp.com/de/docs/configure-with-ai/mcp-admin/)) kann dieselbe Liste mit dem `setup_checklist` Tool lesen. ## Die zehn Schritte {#the-ten-steps} | # | Schritt | Gilt als erledigt, wenn | Wo Sie dies tun | |---|---|---|---| | 1 | Lizenz aktiv | Die Lizenz ist für Ihre Domain aktiviert | System › Admin › License & updates (`/license`). Siehe [License and purchase](https://nexcmp.com/de/docs/getting-started/license-and-purchase/). | | 2 | Infrastrukturquelle verbinden | CloudStack ist verbunden oder mindestens ein Proxmox VE-Cluster wurde hinzugefügt | Infrastructure › Cloud provider › Providers (`/infra/providers`). Siehe [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/) und [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/). | | 3 | Eine Zone erstellen | Mindestens eine Zone ist vorhanden | Infrastructure › Datacenter › Zone (`/infra/zones`). Siehe [Zones](https://nexcmp.com/de/docs/infrastructure/zones/). | | 4 | BS-Templates | Mindestens ein Template ist aktiviert | Services › Virtual Machines › Plans & pricing, Tab Templates (`/vm/catalog?tab=templates`). Siehe [OS templates](https://nexcmp.com/de/docs/infrastructure/templates/). | | 5 | Pläne erstellen | Mindestens ein Plan ist aktiviert | Services › Virtual Machines › Plans & pricing (`/vm/catalog`). Siehe [Plans and pricing](https://nexcmp.com/de/docs/catalog/plans/). | | 6 | Zahlungen einrichten | Stripe, PayPal, Krypto oder Banküberweisung ist konfiguriert | Finance › Payment channels (`/payments`). Siehe [Payment channels](https://nexcmp.com/de/docs/billing/payment-channels/). | | 7 | E-Mail (SMTP) | Ausgehende E-Mail ist konfiguriert | System › Settings › Email (`/settings/email`). Siehe [SMTP and e-mail templates](https://nexcmp.com/de/docs/administration/smtp-and-emails/). | | 8 | Branding | Ein Logo ist hochgeladen oder der Markenname wurde vom Standard geändert | System › Settings › Brand (`/settings/branding`). Siehe [Branding](https://nexcmp.com/de/docs/customers/branding/). | | 9 | AGB & Datenschutz | Mindestens ein Rechtstext ist ausgefüllt | System › Settings › Legal (`/settings/legal`). Siehe [Legal pages](https://nexcmp.com/de/docs/customers/legal/). | | 10 | Testbestellung aufgeben | Mindestens eine Bestellung ist vorhanden | Geben Sie als Kunde im Kundenportal eine Bestellung auf, um zu prüfen, ob alles von Anfang bis Ende funktioniert; die Karte verlinkt auf die Seite Billing (`/billing`). | Die Karte zeigt `done/total` (zum Beispiel 6/10), einen Fortschrittsbalken, den nächsten Schritt mit **Open** und, wenn eine KI-Quelle verbunden ist, **Do it for me**. Klicken Sie auf einen Schritt, um zu dessen Seite zu springen. Neben einem Schritt öffnet ein kleiner Link die dazugehörige Dokumentationsseite; einige Schritte zeigen auch Details wie „2 zone(s)“ an. ![Einrichtungskarte auf der Übersicht mit drei von zehn Schritten erledigt und den Schaltflächen Open und Do it for me](https://nexcmp.com/de/docs/images/configure-with-ai/setup-checklist-01-card.webp) ## Verwendung {#use-it} 1. Öffnen Sie die Übersicht. Die Karte befindet sich ganz oben. Verwenden Sie den Pfeil, um sie einzuklappen; das Panel merkt sich Ihre Auswahl in Ihrem Browser. 2. Klicken Sie auf **Open**, um zur Seite für den nächsten Schritt zu gelangen, oder klicken Sie auf **Do it for me**. 3. Mit **Do it for me** öffnet sich der Assistent mit einer Anfrage wie „Schlage eine Starter-Tariftabelle aus meinen Angeboten mit 40 % Marge vor, zeige mir die Vorschau vor dem Erstellen.“ Beantworten Sie seine Fragen, überprüfen Sie dann jede Karte und **Confirm** Sie diese. Siehe [AI Chat in the admin](https://nexcmp.com/de/docs/configure-with-ai/ai-chat-in-admin/). 4. Wenn alle zehn Schritte erledigt sind, verschwindet die Karte. ### Leere Listen {#empty-lists} Wenn Plans, Customers, Zones, Payments oder Infrastructure leer ist, zeigt die Seite einen Block **Next step** mit einer Erklärung, einer Schaltfläche für die Aktion, **Do it for me** und einem Link zur Dokumentation, sodass Sie nie auf eine leere Tabelle stoßen. ![Leere Plans-Seite mit einer Next-Step-Erklärung und der Schaltfläche Do it for me](https://nexcmp.com/de/docs/images/configure-with-ai/setup-checklist-02-empty.webp) ## Fragen Sie in Ihren eigenen Worten danach {#ask-for-it-in-your-own-words} Sie benötigen die Karte nicht. Im AI Chat oder jedem verbundenen KI-Client können Sie fragen: ```text Check my setup progress and take me through the open steps, one at a time. ``` Dies ist auch der MCP-Prompt `initial-setup`. Der Assistent ruft `setup_checklist` auf, erklärt, warum jeder offene Schritt wichtig ist, fragt nach den benötigten Informationen und verwendet das passende Tool. Benötigte Scopes: `admin:read` zum Lesen der Liste sowie der Scope des Schritts, den Sie erledigen möchten. Siehe [Example prompts](https://nexcmp.com/de/docs/configure-with-ai/example-prompts/). ## Verifizierung {#verify} 1. Nachdem Sie einen Schritt abgeschlossen haben, erhöht sich der Zähler der Karte beim nächsten Laden der Übersicht. 2. Im Assistenten liefert `setup_checklist` dieselben Zahlen, mit `done: true` beim abgeschlossenen Schritt. ## Limits & Hinweise {#limits-notes} - Die Prüfungen betrachten, was gespeichert ist, nicht ob es funktioniert. Ein konfiguriertes Gateway gilt als erledigt, selbst wenn dessen Test fehlschlägt. Verwenden Sie die Schaltflächen **Test** auf jeder Seite sowie das Tool `system_health` bei Problemen. - Die Karte ist nur für Administratoren sichtbar. - **Do it for me** erfordert eine unter System › Settings › AI accounts verbundene KI-Quelle; ohne diese wird nur **Open** angezeigt. - Die zehn Schritte sind für jede Installation gleich; ein Schritt, den Sie nicht verwenden möchten (zum Beispiel Zahlungen in einer Private Cloud), zählt weiterhin als offen. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Die Karte fehlt | Alle zehn Schritte sind erledigt oder die Karte konnte nicht geladen werden | Laden Sie die Übersicht neu. Fragen Sie `setup_checklist` im AI Chat, um den Status anzuzeigen. | | Ein Schritt bleibt nach der Durchführung offen | Das Speichern wurde nicht abgeschlossen oder die Bedingung ist noch nicht erfüllt (z. B. eine Vorlage existiert, ist aber deaktiviert) | Öffnen Sie die Seite des Schritts und überprüfen Sie die Tabelle oben. | | Branding bleibt nach dem Ändern des Logos geöffnet | Branding zählt, wenn ein Logo existiert oder der Markenname vom Standard „NexCMP“ abweicht | Laden Sie ein Logo hoch oder legen Sie Ihren eigenen Namen fest. | | **Do it for me** tut nichts | Keine AI Source verbunden oder das Demo-Panel | Verbinden Sie eine Quelle unter AI-Konten. | --- # SMTP- und E-Mail-Vorlagen {#smtp-and-e-mail-templates} > **Wo im Admin:** System › Settings › Email (`/settings/email`) — Registerkarten **SMTP** und **Email templates**. Versandprotokoll: Overview › Support › Sent emails (`/support/emails`). ## Funktion {#what-it-does} NexCMP versendet E-Mails für Registrierungsverifizierung, Passwort-Reset, „VM ready“ (mit dem anfänglichen Passwort), Rechnungen, geringes Guthaben, Verlängerungen, Aufladungen, Support-Antworten und mehr. All dies läuft über **ein von Ihnen bereitgestelltes SMTP-Konto**. Nachrichten und Templates sind in 16 Sprachen verfügbar; es wird die Sprache des Kunden verwendet. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | SMTP-Server | Host, Port und Anmeldedaten eines beliebigen Anbieters (eigener Server, Brevo, Amazon SES, Mailgun, Google Workspace …) | | Netzwerk | Ausgehendes TCP vom NexCMP-Server zum SMTP-Host und -Port (587 STARTTLS, 465 TLS oder 25) | | Absenderdomäne | Eine von Ihnen kontrollierte Domain, mit für den Anbieter veröffentlichten **SPF und DKIM** sowie einem DMARC-Eintrag | | Berechtigung | Das SMTP-Konto muss zum Senden als **From**-Adresse berechtigt sein | ::: warning Zustellbarkeit E-Mails wie „VM ready“ enthalten Passwörter. Wenn SPF/DKIM/DMARC der Absenderdomäne nicht zum SMTP-Anbieter passen, landen sie im Spam. Die Seite erinnert Sie daran. ::: ## E-Mail-Anbieter vorbereiten {#prepare-the-e-mail-provider} 1. Fügen Sie im Panel Ihres Anbieters Ihre Absenderdomain hinzu und verifizieren Sie sie (z. B. `example.com`). 2. Veröffentlichen Sie die vom Anbieter angezeigten SPF-, DKIM- und DMARC-DNS-Einträge. 3. Erstellen Sie einen SMTP-Benutzer (oder API-SMTP-Key) und notieren Sie Host, Port, Benutzernamen und Passwort. ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **System › Settings › Email**, Registerkarte **SMTP**. 2. Füllen Sie das Formular aus: | Feld | Beispiel | Hinweise | |---|---|---| | Host | `smtp.example.net` | SMTP-Server | | Port | `587` | | | Sicherheit | STARTTLS (587) | Wählen Sie den Modus, den Ihr Anbieter erfordert | | Benutzername | `smtp-user` | | | Passwort | (versteckt) | Nur Schreiben: Die Seite zeigt nur an, ob einer festgelegt ist | | Absender-E-Mail | `no-reply@example.com` | Muss beim Anbieter autorisiert sein | | Absendername | `Example Cloud` | Standardmäßig Ihr Markenname | | Antwort an (optional) | `support@example.com` | Wohin Kundenantworten gehen | ![Die SMTP-Registerkarte von Settings, Email mit Host, Port, Sicherheit, Benutzername, Absenderfeldern und der Schaltfläche Send test](https://nexcmp.com/de/docs/images/administration/smtp-and-emails-01-smtp.webp) 3. Klicken Sie auf **Save**, dann auf **Send test** und geben Sie Ihre eigene Adresse ein. Die Einstellungen werden in einer zugriffsgeschützten Datei gespeichert (`smtp.json`, Modus 0600) und nur der Hintergrunddienst `nexcmp-vmd` versendet E-Mails; der Webservice stellt sie nur in die Warteschlange. ## Verifizierung {#verify} - Die Testnachricht kommt im Posteingang an (überprüfen Sie auch den Spam-Ordner). Bestätigen Sie im Nachrichtenquelltext `dkim=pass` und `spf=pass`. - Öffnen Sie **Support › Sent emails**: Jede Nachricht hat einen Status (in Warteschlange, gesendet, fehlgeschlagen) und das Zustellungsergebnis. Fehlgeschlagene Nachrichten werden bis zu 3 Mal erneut versucht. - Registrieren Sie einen Testkunden im Portal und vergewissern Sie sich, dass die Bestätigungs-E-Mail ankommt. ## Edit e-mail templates {#edit-e-mail-templates} Der Tab **Email templates** listet jedes Template nach Schlüssel auf, zusammen mit den Sprachen, in denen es verfügbar ist (zum Beispiel `verify_email`, `reset_password`, `vm_ready`, `invoice_paid`, `low_balance`, `topup_received`, `ticket_reply`, `scale_up` …). 1. Klicken Sie auf ein Template und wählen Sie eine Sprache aus. 2. Bearbeiten Sie Betreff und Text. Platzhalter werden ausgefüllt, wenn eine Nachricht in die Warteschlange gestellt wird. 3. Speichern Sie. Die Änderung gilt **sofort** für danach in die Warteschlange gestellte Nachrichten. ![Der Tab „Email templates“ mit der Auflistung von Template-Schlüsseln und deren Sprachen](https://nexcmp.com/de/docs/images/administration/smtp-and-emails-02-templates.webp) ## Grenzwerte und Hinweise {#limits-and-notes} - Ein SMTP-Konto pro Installation. Kunden von Resellern erhalten E-Mails über dasselbe Konto, es sei denn, für den Reseller ist etwas anderes konfiguriert. - Es gelten die Versandlimits des Anbieters; NexCMP drosselt den Versand nicht über erneute Versuche hinaus. - Ohne SMTP funktioniert das Panel, aber Kunden können die Registrierungsverifizierung und das Zurücksetzen des Passworts nicht abschließen. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Test-E-Mail kommt nie an | Falsche Anmeldedaten, Port gesperrt, Absender nicht autorisiert | Überprüfen Sie `journalctl -u nexcmp-vmd` auf den SMTP-Fehler; versuchen Sie Port 587 mit STARTTLS; verifizieren Sie die From-Adresse beim Anbieter. | | Messages go to spam | SPF/DKIM/DMARC fehlen oder stimmen nicht überein | Veröffentlichen Sie die Datensätze des Anbieters und senden Sie von dieser Domain. | | "failed" in Gesendete E-Mails | Anbieter hat die Nachricht abgelehnt | Öffnen Sie die Zeile für die Antwort des Anbieters. | | Passwortfeld sieht nach dem Speichern leer aus | By design (write-only) | Das Label zeigt "current: set", sobald ein Passwort gespeichert ist. | --- # Telegram- und Admin-Benachrichtigungen {#telegram-and-admin-alerts} > **Im Admin-Bereich:** System › Settings › Admin alerts (`/settings/alerts`). Support-Verknüpfungen: Customers › Support › Tickets (`/support/tickets`), Registerkarte **Settings**. ## Funktion {#what-it-does} NexCMP benachrichtigt **Sie** — den Betreiber —, wenn etwas Aufmerksamkeit erfordert und wenn sich ein Kunde registriert oder eine Einzahlung gutgeschrieben wird. Warnungen gehen an einen oder mehrere **Kanäle**: Telegram, einen Webhook oder E-Mail. An die Admin-Kanäle gesendete Ereignisse umfassen: Bereitstellungsfehler, fehlende VM, Netzwerkausfall, freie IPs unter 30, ein ablaufendes Element (1-Stunden-Warnung), einen Stripe-Disput, einen ausgefallenen Worker, Cluster-RAM über dem Schwellenwert, neue Kundenregistrierung und gutgeschriebene Einzahlungen. Kundenereignisse werden dauerhaft in die Warteschlange gestellt und mit zunehmender Verzögerung (30 Sekunden bis zu 1 Stunde) erneut versucht, bis Telegram sie annimmt. ## Anforderungen {#requirements} | Komponente | Anforderung | |---|---| | Telegram | Ein mit **@BotFather** erstellter Bot (Token) und die **Chat-ID** der Gruppe oder des Benutzers, die/der Nachrichten empfangen soll | | Netzwerk | Outbound HTTPS to `api.telegram.org` | | Webhook (alternative) | Ein HTTPS-Endpunkt, der die Benachrichtigungsnutzlast annimmt | ## Prepare Telegram {#prepare-telegram} 1. Öffnen Sie in Telegram **@BotFather**, senden Sie `/newbot`, wählen Sie einen Namen und kopieren Sie das **Bot-Token** (`123456789:AA...`). 2. Erstellen Sie eine Gruppe, fügen Sie den Bot hinzu und senden Sie eine beliebige Nachricht. 3. Finden Sie die **Chat-ID** heraus: Öffnen Sie `https://api.telegram.org/bot/getUpdates` in einem Browser und lesen Sie `chat.id` (Gruppen-IDs beginnen mit `-`). ## In NexCMP verbinden {#connect-in-nexcmp} 1. Öffnen Sie **System › Settings › Admin alerts**. 2. Wählen Sie unter **Add channel** den Wert **Type: Telegram**, setzen Sie **Destination** auf die Chat-ID und **Secret (bot token)** auf das Token. Klicken Sie auf **Add**. 3. Stellen Sie sicher, dass der Schalter **Send admin Telegram (VM module)** aktiviert ist; die Zeile *VM module status (read-only)* zeigt „on“ an. ![Die Seite „Admin alerts“ mit dem auf Telegram eingestellten Formular zum Hinzufügen von Kanälen](https://nexcmp.com/de/docs/images/administration/telegram-notifications-01-channel.webp) ## Verifizierung {#verify} Der Kanal erscheint unter **Configured channels**. Lösen Sie ein Ereignis aus (registrieren Sie zum Beispiel einen Testkunden), und die Nachricht kommt in der Gruppe an. Wenn kein Kanal konfiguriert ist, warnt die Seite mit „Without a channel, attacks will go unnoticed“ und Telegram-Ereignisse werden im Protokoll nur lokal aufgezeichnet. ## Support-Verknüpfungen für Kunden {#support-shortcuts-for-customers} Das Kundensupport-Widget kann **Telegram**- und **Zalo**-Schaltflächen anzeigen. Diese bleiben ausgeblendet, bis sie in den Support-Einstellungen konfiguriert werden: Tragen Sie einen `https://t.me/...`-Link für Telegram sowie den Zalo-Link oder QR-Code ein. Es werden nur `https://`-Links akzeptiert. Der Support-Chat kann Ihre Telegram-Gruppe zudem mit der Frage und einem Antwortentwurf benachrichtigen — siehe [AI Chat](https://nexcmp.com/de/docs/ai/ai-chat/). ## Grenzwerte und Hinweise {#limits-and-notes} - Das Bot-Token wird beim Kanal gespeichert und danach nie wieder angezeigt. - Telegram-Ereignisse verwenden den ersten aktivierten Telegram-Kanal, der sowohl über ein Ziel als auch über ein Token verfügt. ## Fehlerbehebung {#troubleshooting} | Symptom | Ursache | Behebung | |---|---|---| | Keine Nachricht kommt an | Falsche Chat-ID, Bot nicht in der Gruppe oder der Bot wurde nie angeschrieben | Überprüfen Sie die ID mit `getUpdates` erneut; senden Sie zuerst eine Nachricht an den Bot oder die Gruppe. | | Funktioniert eine Zeit lang und stoppt dann | Token in BotFather widerrufen | Erstellen Sie ein neues Token und aktualisieren Sie den Kanal. | | `Telegram: no channel` in Protokollen | Kein aktivierter Telegram-Kanal | Fügen Sie einen wie oben beschrieben hinzu. | --- # Audit-Log und Aktivität {#audit-log-and-activity} > **Wo im Adminbereich:** System › Logs › Activity (`/logs`), Admin actions (`/logs/admin`), Console (`/logs/console`), Login (`/logs/logins`), VM events (`/logs/vm-events`); Overview › Support › Sent emails. NexCMP zeichnet jede wichtige Aktion auf. Verwenden Sie die Seite **Activity** als einheitliche Timeline und die anderen Tabs zum Eingrenzen. ## Tabs {#tabs} | Registerkarte | Inhalt | |---|---| | **Activity** | Einheitliche Timeline über alle Quellen hinweg: Admin-Aktionen, VM-Ereignisse, Logins, Affiliate- und Systemfehler | | **Admin actions** | Von Administratoren vorgenommene Änderungen (zum Beispiel `customer.block`, `customer.delete`) inklusive der IP des Administrators | | **Console** | Anmeldungen an der Admin-Konsole und Systemanfragen wie etwa eine Update-Anfrage | | **Login** | Kundenanmeldungen und Fehlschläge | | **VM events** | Bereitstellungsschritte, Erstellen, Passwort, Löschen und andere Lebenszyklusereignisse pro virtueller Maschine | ## Lesen einer Zeile {#reading-a-row} Spalten: **Time**, **Source**, **Level**, **Actor** (wer), **Target**, **Services**, **Action** (Ereigniscode wie `customer.delete`) und **Details**. Klicken Sie auf **Open** für den vollständigen Datensatz. ![Die Aktivitätsseite mit Quell-, Standort- und Dienstfiltern oberhalb der Zeitleiste](https://nexcmp.com/de/docs/images/administration/audit-log-01-activity.webp) ## Filtern und Suchen {#filter-and-search} 1. Wählen Sie ein **source**, einen **site** und einen **service** aus den Dropdown-Menüs aus. 2. Legen Sie einen Zeitraum für **From date** / **To date** fest. 3. Geben Sie einen Ereigniscode (z. B. `customer.block` oder `destroy`) in das Suchfeld ein — die Aktivitätssuche gleicht den Ereigniscode ab. ## Aufbewahrung und Exporte {#retention-and-exports} Datensätze befinden sich in den NexCMP-Datenbanken in `/var/lib/nexcmp` und sind in [Backups](https://nexcmp.com/de/docs/getting-started/backup-and-restore/) enthalten. Die Aufbewahrungsdauer hängt vom jeweiligen Protokoll ab: Kunden-Anmeldeversuche, die älter als 180 Tage sind, und Kunden-API-Key-Anfrageprotokolle, die älter als 60 Tage sind, werden bereinigt. Das Admin-API-Key-Audit behält bis zu etwa 200,000 aktuelle Datensätze. Diese Limits bedeuten nicht dieselbe Aufbewahrung für die einheitliche Aktivitäts-Timeline. ## Häufige Anwendungsfälle {#common-uses} | Frage | Wo zu suchen ist | |---|---| | Wer hat diesen Kunden gesperrt? | Admin-Aktionen, Suche `customer.block` | | Warum ist eine VM verschwunden? | VM-Ereignisse, nach ID der VM filtern; außerdem Aktivität | | Hat der Kunde die E-Mail erhalten? | Overview › Support › Sent emails | | Wann wurde das letzte Update angefordert? | Konsole-Registerkarte | --- # Sicherheit {#security} > **Wo im Admin:** System › Admin › Console security (`/account`), Admin users (`/users`); System › Settings › Customer logins (`/settings/login`). ## Admin-Konsole {#admin-console} ### Zwei-Faktor-Authentifizierung (TOTP) {#two-factor-authentication-totp} Die Konsole ist aus dem Internet erreichbar, aktivieren Sie daher TOTP. 1. Öffnen Sie **System › Admin › Console security**. 2. Klicken Sie unter **Two-factor authentication (TOTP)** auf **Start setup**. 3. Scannen Sie den QR-Code mit Google Authenticator, Authy, 1Password oder Bitwarden und geben Sie dann den 6-stelligen Code ein. ### Erlaubte Konsolen-IP-Bereiche {#allowed-console-ip-ranges} Geben Sie unter **Allowed console IP ranges** eine IP oder CIDR (IPv4 oder IPv6) pro Zeile ein. **Leer bedeutet von überall.** Außerhalb des Bereichs sind sowohl die Anmeldung als auch die Admin-API blockiert. ::: warning Sperren Sie sich nicht selbst aus Die Seite zeigt Ihre aktuelle IP an und erfordert, dass die neue Liste diese enthält. Verwenden Sie **+ Add my IP**. Wenn Sie dennoch ausgesperrt sind, nutzen Sie den [emergency access](https://nexcmp.com/de/docs/getting-started/cli-reference/#emergency-access) vom Server. ::: ### Passwort ändern {#change-password} Füllen Sie **Current password**, **New password** und **Confirm new password** aus. Verwenden Sie ein langes, eindeutiges Passwort (12 Zeichen oder mehr; der Setup-Assistent erzwingt 12 für den ersten Administrator). ### Administratorenkonten und -rollen {#administrator-accounts-and-roles} Öffnen Sie **System › Admin › Admin users** und verwenden Sie **+ Create account**. | Rolle | Zugriff | |---|---| | `admin` | Vollzugriff auf die Admin-API | | `staff` | Schreibgeschützt im gesamten System | | `user` | Schreibgeschützte Ansicht der Ressourcen eines Kunden | Das Root-Konto ist das im [setup wizard](https://nexcmp.com/de/docs/getting-started/setup-wizard/) erstellte Konto. Zeilenaktionen: **Edit**, **Reset PW**, **Key**, **Delete**. Passwörter werden als Salted Hashes gespeichert; das Ändern oder Sperren eines Kontos beendet dessen Sitzungen sofort. ## Kundenanmeldung {#customer-sign-in} Öffnen Sie **System › Settings › Customer logins**. | Einstellung | Funktion | |---|---| | **Google-Anmeldung** | Aktivieren Sie die Funktion und geben Sie die OAuth-Client-ID sowie das Geheimnis ein. Kopieren Sie die auf der Seite angezeigte **Callback URL** in *Google Cloud Console › APIs & Services › Credentials › OAuth client ID › Authorized redirect URIs*. Verwenden Sie **Test configuration**. | | **GitHub login** | Entsprechend mit *GitHub › Settings › Developer settings › OAuth Apps › Authorization callback URL* | | **Passkey** | Anmeldung per Fingerabdruck, PIN oder Hardware-Schlüssel; standardmäßig aktiv. Passkeys sind an die Domain gebunden, jede Reseller-Domain funktioniert separat. Tragen Sie nach einem Rebranding eine alte Domain unter *Legacy passkey Domain* ein, damit Kunden einen hilfreichen Hinweis erhalten | | **Erneut authentifizieren beim Hinzufügen von Anmeldemethoden** | Erneut zur Passworteingabe auffordern, bevor ein Passkey hinzugefügt oder Google/GitHub verknüpft wird (standardmäßig aus) | | **Captcha** | Cloudflare Turnstile oder Google reCAPTCHA bei der Registrierung: aktivieren, Anbieter auswählen, Site-Key und Secret-Key eingeben | | **Block e-mail domains** | Eine Domain pro Zeile (max. 2000). Übereinstimmende Adressen werden bei der Registrierung abgelehnt mit `email_domain_blocked` | ![Die Anmeldeseite für Kunden mit Google-Anmeldung und zugehöriger Callback-URL](https://nexcmp.com/de/docs/images/administration/security-01-customer-logins.webp) ### Integrierte Richtlinien {#built-in-policies} | Richtlinie | Wert | |---|---| | Kundenpasswort | Mindestens 10 Zeichen, Buchstaben und Ziffern | | Kunden-Sitzung | 30 Tage; Sitzungen bei „Als Kunde anmelden“ dauern 1 Stunde | | E-Mail-Bestätigung | Erforderlich vor dem Erstellen einer VM, wenn *require e-mail verified* in den Verkaufseinstellungen aktiv ist | | Anti-Carding | Konten mit weniger als dem Mindestguthaben können nur eine begrenzte Anzahl von VMs erstellen | ## Server-Härtung {#server-hardening} - Port 3000 wird nach der Einrichtung und TLS geschlossen; siehe [Installation](https://nexcmp.com/de/docs/getting-started/installation/#the-panel-port-3000). - Der Dienst läuft als unprivilegierter `nexcmp`-Benutzer in einer eingeschränkten systemd-Sandbox. - API-Schlüssel, Zahlungsdaten und SMTP-Passwörter werden verschlüsselt gespeichert; der Master-Schlüssel befindet sich in `/var/lib/nexcmp/secrets` — schützen Sie Ihre [backups](https://nexcmp.com/de/docs/getting-started/backup-and-restore/). - Releases werden vor der Installation mit SHA-256 und einer Ed25519-Signatur verifiziert. --- # Allgemeine Einstellungen {#general-settings} > **Wo im Admin-Bereich:** System › Settings › General (`/settings`). Änderungen werden sofort wirksam (30-Sekunden-Cache). Die Seite hat drei Abschnitte. ## Branding & URLs {#branding-urls} | Feld | Zweck | |---|---| | Markenname (E-Mail, Rechnungen) | Wird in E-Mails und Rechnungen angezeigt. Logo und Farben befinden sich unter [Branding](https://nexcmp.com/de/docs/customers/branding/) | | Standardsprache | Sprache für neue Besucher | | Kunden-App-URL | Öffentliche Adresse des Portals, zum Beispiel `https://cloud.example.com` | | Konsolen-URL | Adresse des VM-Konsolendienstes | | Admin-URL | Link, der verwendet wird, wenn Sie sich „als“ der Kunde eines Resellers anmelden | | Partner-Konsolen-URL | Wird in Einladungslinks, Reseller-E-Mails und bei der Weiterleitung nach einer Aufladung verwendet | Der Assistent füllt diese Felder anhand Ihrer Domain aus; ändern Sie sie nur, wenn Sie das Portal verschieben. ## Anbieter & Rechnungsstellung {#seller-invoicing} Wird auf jeder Rechnung abgedruckt: | Feld | Beispiel | |---|---| | Rechtlicher Firmenname | Example Cloud Ltd | | Steuernummer | `TAX-000000` | | Adresse | 1 Example Street, New York | | Kontakt-E-Mail | `billing@example.com` | | Rechnungsnummern-Präfix | `INV` (1–8 Zeichen, A–Z und 0–9) | Bestehende Rechnungen behalten die Verkäuferdetails und Nummern, mit denen sie ausgestellt wurden; Änderungen betreffen nur **neue** Rechnungen. ## Wartung & Region {#maintenance-region} Aktivieren Sie **Customer app MAINTENANCE**, um ein Banner anzuzeigen und **alle Schreibaktionen von Kunden zu blockieren**, während die Admin-Konsole weiterarbeitet. Geben Sie die **Maintenance message** ein, die Kunden sehen werden. Verwenden Sie dies während Upgrades Ihrer Infrastruktur. ![Die Seite für allgemeine Einstellungen mit Markenname, Standardsprache und URL-Feldern](https://nexcmp.com/de/docs/images/administration/general-settings-01-general.webp) ## Weitere Einstellungsseiten {#other-settings-pages} | Seite | Anleitung | |---|---| | Marke | [Branding](https://nexcmp.com/de/docs/customers/branding/) | | Rechtliches | [Rechtliches](https://nexcmp.com/de/docs/customers/legal/) | | Kunden-Logins | [Security](https://nexcmp.com/de/docs/administration/security/) | | E-Mail | [SMTP und E-Mail-Vorlagen](https://nexcmp.com/de/docs/administration/smtp-and-emails/) | | Admin-Benachrichtigungen | [Telegram und Admin-Benachrichtigungen](https://nexcmp.com/de/docs/administration/telegram-notifications/) | | KI-Anbieter | [AI providers](https://nexcmp.com/de/docs/ai/ai-providers/) | --- # Fehler melden {#report-a-bug} > **Im Admin-Bereich:** Obere Leiste › **Report a bug** (neben Docs; nur für den Hauptadministrator sichtbar). Einen Fehler in NexCMP gefunden? Klicken Sie auf **Report a bug**, beschreiben Sie das Problem und senden Sie es ab. Der Bericht erreicht das NexCMP-Team direkt als Ticket in Ihrem Lizenzkonto — ohne separate Anmeldung und ohne manuelles Kopieren von Logdateien. Für jeden Tarif verfügbar: Fehlerbehebungen sind sowohl in NexCMP Free als auch in NexCMP Source abgedeckt. ::: info Fehlerberichte sind keine Supportanfragen NexCMP Free beinhaltet keinen technischen Support; nutzen Sie dieses Formular daher für Softwarefehler. Unterstützung bei Einrichtung und Migration ist Teil von [NexCMP Source](https://nexcmp.com/pricing). ::: ## Anforderungen {#requirements} | Komponente | Voraussetzungen | |---|---| | Version | NexCMP 1.5.2 oder neuer | | Berechtigt zum Senden | Das Haupt-Administratorkonto. Mitarbeiterkonten (schreibgeschützt), Reseller-Konsolen, Kunden und die schreibgeschützte Demo können nicht senden | | Lizenz | Eine aktivierte Lizenz (Free oder Source), die nicht ausgesetzt ist | | Netzwerk | Der Server muss `https://nexcmp.com` über HTTPS erreichen können (dieselbe Adresse wie für Lizenzprüfungen und Updates) | ## Bericht senden {#send-a-report} 1. Klicken Sie in der oberen Leiste auf **Report a bug**. Auf einem Smartphone öffnen Sie das Menü und wählen **Report a bug**. 2. Geben Sie einen kurzen **Subject** ein. 3. Beschreiben Sie unter **What happened**, was Sie getan haben, was angezeigt wurde und was Sie erwartet haben. 4. Listen Sie optional die **Schritte zur Reproduktion** auf. 5. Wählen Sie die **Impact**: **Blocking** (Arbeiten nicht möglich), **Major** (Hauptfunktion gestört) oder **Minor** (kleines oder kosmetisches Problem). 6. Lassen Sie **Attach diagnostics** aktiviert (empfohlen) und lesen Sie die Hinweise im Kasten **What will be sent**. 7. Klicken Sie auf **Send report**. In 1.6.1 scrollt der Formularinhalt, während die Aktionsschaltflächen sichtbar bleiben, auch auf dem Smartphone. Passwortwerte nach `password:` oder `password=` werden maskiert, ohne den Rest des Berichts zu entfernen. Überprüfen Sie Ihren Text vor dem Senden und lassen Sie Kundendaten sowie Zugangsdaten weg. ![Der Dialog „Report a bug“ mit Titel, Beschreibung, Schweregrad und der Liste der übertragenen Daten](https://nexcmp.com/de/docs/images/administration/report-a-bug-01-dialog.webp) Wird der Bericht angenommen, zeigt der Dialog die Ticketnummer und einen Link an. Antworten des Teams gehen an die E-Mail-Adresse Ihres Lizenzkontos auf nexcmp.com; zudem wird das Ticket unter **Support** aufgeführt, wenn Sie sich dort als Lizenzinhaber anmelden. ## Was gesendet wird {#what-is-sent} Der Kasten **What will be sent** zeigt vor dem Klick auf Senden genau Folgendes an: | Gesendet | Details | |---|---| | Ihr Text | Titel, Beschreibung, Schritte und Schweregrad | | Version, Tarif, Domain | Ihre NexCMP-Version, Free oder Source, und die Domain der Installation | | Aktuelle Seite | Die Seite im Admin-Bereich, auf der Sie sich befinden, ohne Zusätze nach `?` oder `#` | | Browser | Der User-Agent-Text Ihres Browsers (Name, Version und Betriebssystem), gekürzt auf 200 Zeichen | | Kürzliche Fehler | Bis zu 5 der letzten Fehler in diesem Browser-Tab. Bei Skriptfehlern nur die Meldung; bei fehlgeschlagenen Anfragen nur Methode, Pfad und Statuscode | Sie können **Attach diagnostics** deaktivieren; dann werden nur Ihr eigener Text sowie Version, Tarif und Domain übermittelt. ## Was niemals gesendet wird {#what-is-never-sent} - Passwörter, Tokens, Cookies und API-Schlüssel. Alles in Ihrem Text oder in Fehlermeldungen, was danach aussieht, wird auf Ihrem Server maskiert (als `***` oder `[redacted]` dargestellt), bevor Daten übertragen werden. - Die Inhalte von Requests und Responses — fehlgeschlagene Requests werden ausschließlich mit Methode, Pfad und Status erfasst. - Die Daten Ihrer Kunden (Namen, E-Mails, Bestellungen, Rechnungen) sowie deren IP-Adressen. - Die IP-Adresse Ihres Browsers und jegliche Dateien Ihres Servers. Wie bei jeder Lizenzprüfung sieht der Lizenzserver lediglich die IP-Adresse, von der aus sich Ihr Server verbindet. Das Ticket ist über das auf dem Server vorhandene Lizenz-Token an Ihre Installation gebunden. Version, Domain und Installation werden daher vom Server vorgegeben und können nicht über den Browser geändert werden. ## Limits {#limits} | Limit | Wert | |---|---| | Betreff | 150 Zeichen | | Beschreibung plus Schritte | Zusammen maximal 8 KB | | Reports | 5 pro Stunde und 20 pro Tag für die gesamte Installation | Das zweimalige Absenden desselben Berichts (beispielsweise nach einem Netzwerkfehler) erstellt kein zweites Ticket. ## Fehlerbehebung {#troubleshooting} | Meldung | Ursache | Behebung | |---|---|---| | Aktivieren Sie zuerst Ihre Lizenz | Die Installation verfügt über keine aktivierte Lizenz | **License & updates** öffnen und aktivieren, anschließend erneut senden | | Lizenzserver konnte nicht erreicht werden | Der Server kann `nexcmp.com` nicht erreichen | Ausgehende HTTPS- und DNS-Verbindungen des Servers prüfen, dann erneut auf **Send report** klicken — Ihre Eingaben bleiben erhalten | | Zu viele Fehlerberichte von dieser Installation | Limit von 5 pro Stunde oder 20 pro Tag erreicht | Warten und erneut versuchen; neue Erkenntnisse stattdessen dem bestehenden Ticket hinzufügen | | Diese Lizenz ist gesperrt | Die Lizenz ist ausgesetzt oder erstattet worden | Siehe [License and purchase](https://nexcmp.com/de/docs/getting-started/license-and-purchase/) | | Diese Installation wurde widerrufen | Die Installation wurde im Lizenzportal widerrufen | Über **License & updates** erneut aktivieren | | Lizenz-Token konnte nicht aktualisiert werden | Der Server konnte sein Lizenz-Token nicht erneuern | **License & updates** öffnen, auf **Refresh** klicken und anschließend erneut senden | | Keine Schaltfläche „Report a bug“ vorhanden | Sie sind mit einem Mitarbeiter-, Reseller- oder Kundenkonto angemeldet oder nutzen die schreibgeschützte Demo | Als Hauptadministrator anmelden | ::: tip Für den KI-Assistenten und API-Schlüssel Der Assistent im Adminbereich sowie Admin-API-Schlüssel können keine Fehlerberichte in Ihrem Namen versenden: Für die Schaltfläche muss eine reale Person als Hauptadministrator angemeldet sein. ::: --- # Installationsfehler {#installation-errors} Der Installer stoppt beim ersten schwerwiegenden Problem und gibt eine rote Zeile aus, die mit `✗` beginnt. Beheben Sie die Ursache und **führen Sie denselben Befehl erneut aus** — der Installer kann sicher wiederholt werden. Informative Zeilen beginnen mit `•`, erfolgreiche Schritte mit `✓`. ## Systemprüfungen {#machine-checks} | Meldung | Ursache | Behebung | |---|---|---| | `must be run as root (sudo)` | Nicht als Root ausgeführt | Stellen Sie `sudo` vor den Befehl oder führen Sie ihn als Root aus. | | `only Ubuntu 22.04/24.04 is supported (this host: …)` | Andere Distribution oder Version | Verwenden Sie einen Ubuntu 22.04 oder 24.04 Server. | | `only x86_64 is supported` | ARM oder andere CPU | Verwenden Sie einen x86_64 Server. | | `requires ≥ 2 GB RAM (host has … MB)` | Zu wenig Arbeitsspeicher | Fügen Sie RAM hinzu. | | `requires ≥ 8 GB free disk space on / (… GB available)` | Root-Dateisystem fast voll | Geben Sie Speicher frei oder vergrößern Sie `/`. | | `missing --license` / `missing --domain` | Erste Installation ohne diese Parameter | Übergeben Sie beide — siehe [Installation](https://nexcmp.com/de/docs/getting-started/installation/#parameters). | | `unknown argument: …` | Tippfehler in einem Parameter | Überprüfen Sie die Schreibweise; führen Sie es mit `--help` aus. | | `apt-get failed (another apt/dpkg process, e.g. unattended-upgrades, may still be running)` | Die Paketverwaltung ist gesperrt | Warten Sie einige Minuten (ein frisch gebootetes Ubuntu führt automatische Updates durch) und starten Sie den Befehl erneut. | | `… is a symlink — aborting` | `/opt/nexcmp` oder `/etc/nexcmp` ist ein symbolischer Link | Ersetzen Sie ihn durch ein echtes Verzeichnis — der Installer lehnt Symlinks aus Sicherheitsgründen ab. | ## Lizenzaktivierung {#license-activation} | Meldung | Ursache | Behebung | |---|---|---| | `cannot connect to https://nexcmp.com` | Kein ausgehendes HTTPS zum Lizenzserver | Überprüfen Sie DNS, Firewall und Proxy auf dem Server: `curl -I https://nexcmp.com`. | | `license activation failed (HTTP …): ` | Der Lizenzserver hat den Schlüssel abgelehnt | Lesen Sie die Meldung: falscher Schlüssel, Domain stimmt nicht mit der Lizenz überein, Lizenz gesperrt oder widerrufen. Prüfen Sie die Lizenzseite unter [nexcmp.com/licenses](https://nexcmp.com/licenses). | | `no release available for this license yet` | Die Lizenz hat kein herunterladbares Release | Wenden Sie sich an den Vertrieb; siehe [Support](https://nexcmp.com/de/docs/troubleshooting/support/). | ## Download und Verifizierung {#download-and-verification} | Meldung | Ursache | Behebung | |---|---|---| | `failed to download release X` | Netzwerkproblem während des Downloads | Erneut ausführen. | | `sha256 mismatch (… ≠ …)` | Die Datei kam beschädigt an oder wurde verändert | Erneut ausführen; tritt das Problem wieder auf, modifiziert möglicherweise ein Proxy die Downloads — versuchen Sie es von einem anderen Netzwerk aus. | | `release X is unsigned — refusing to install` | Der Server hat keine Signatur geliefert | Niemals umgehen; wenden Sie sich an den Support. | | `INVALID SIGNATURE for version X — aborting` | Die Ed25519-Signatur konnte nicht verifiziert werden | Installieren Sie das Paket **nicht**. Wenden Sie sich an den Support — dies bedeutet, dass die Datei kein offizielles Release ist. | | `openssl failed to read public key` | Sehr altes oder beschädigtes OpenSSL | Aktualisieren Sie das Paket `openssl`. | | `invalid version: …` | Unerwartete Daten vom Server | Erneut ausführen; wenden Sie sich an den Support, falls das Problem weiterhin besteht. | ## Dienststart {#service-start} | Meldung | Ursache | Behebung | |---|---|---| | `service failed to start — check: journalctl -u nexcmp -n 50` | Das Panel hat nicht innerhalb von 3 Minuten auf `/healthz` geantwortet | Lesen Sie das Journal. Häufige Ursachen: Der Port (Standard 3000) wird bereits verwendet (`ss -ltnp | grep 3000`) — installieren Sie ihn mit `--port` neu; Dateien gehören root in `/var/lib/nexcmp` — führen Sie `sudo nexcmp fix-owner` aus. | ## nginx und TLS {#nginx-and-tls} | Meldung | Ursache | Behebung | |---|---|---| | `DNS does not point to (nor to Cloudflare) — skipping nginx/TLS` | Der A/AAAA-Eintrag fehlt oder ist fehlerhaft | Siehe [DNS und Cloudflare](https://nexcmp.com/de/docs/getting-started/dns-and-cloudflare/), führen Sie den Befehl dann erneut aus. | | `certbot could not get a certificate yet — re-run the installer once DNS has settled` | Let's Encrypt-Validierung fehlgeschlagen (Port 80 blockiert, DNS nicht propagiert, Rate-Limit) | Öffnen Sie Port 80, warten Sie auf DNS, führen Sie den Befehl erneut aus. Prüfen Sie `/var/log/letsencrypt/letsencrypt.log`. | | `certbot could not renew now — keeping the existing certificate` | Vorübergehender Fehler bei der Verlängerung | Unbedenklich; später erneut versuchen. | | `nginx rejected the HTTPS configuration — kept the previous one (check: nginx -t)` | Eine andere nginx-Site kollidiert (gleicher `server_name`, doppelte Einstellungen) | Führen Sie `sudo nginx -t` aus, beheben Sie den Konflikt und starten Sie den Prozess erneut. | | `apt-get could not install nginx` / `certbot` oder `E: Failed to fetch … 404 Not Found` | Paketverwaltung gesperrt oder der Paketindex des Servers ist veraltet (typisch bei einem Template-Image, das längere Zeit nicht aktualisiert wurde) | Führen Sie `sudo apt-get update` aus, warten Sie, bis ein anderer apt-Prozess abgeschlossen ist, und starten Sie den Installer dann erneut. | | `openssl could not create the self-signed certificate` | OpenSSL-Problem | Aktualisieren Sie `openssl`; erneut ausführen. | ## Nach der Installation {#after-installation} | Symptom | Ursache | Behebung | |---|---|---| | Browser kann `https://` nicht öffnen | DNS oder TLS nicht bereit | `sudo nexcmp status`; nutzen Sie den [Notzugriff](https://nexcmp.com/de/docs/getting-started/cli-reference/#emergency-access). | | `ERR_TOO_MANY_REDIRECTS` | Cloudflare-SSL-Modus **Flexible** | Setzen Sie **Full (strict)** — [details](https://nexcmp.com/de/docs/getting-started/dns-and-cloudflare/). | | Assistent meldet, dass der Einrichtungs-Code falsch ist | Tippfehler oder ein Code von einer früheren Installation | Führen Sie `sudo nexcmp status` aus und kopieren Sie den aktuellen Code. | | Lizenz zeigt HTTP 421 | Dateien in `/var/lib/nexcmp` gehören root | `sudo nexcmp fix-owner`, danach `sudo systemctl restart nexcmp`. | --- # Update-Fehler {#update-errors} > **Wo im Adminbereich:** System › Admin › License & updates (`/license`) Updates werden in [Updating NexCMP](https://nexcmp.com/de/docs/getting-started/updating/) beschrieben. Wenn die Update-Karte oder `sudo nexcmp update` einen Fehler meldet: | Meldung | Ursache | Behebung | |---|---|---| | `update plan expired — renew on the license page to receive this feature release` | Ihr „Updates bis“-Datum liegt vor dem Veröffentlichungsdatum. Sicherheitsupdates werden weiterhin bereitgestellt; Funktionsupdates nicht | Erneuern Sie die Lizenz auf [nexcmp.com/licenses](https://nexcmp.com/licenses) ($99 pro Jahr für NexCMP Free) und prüfen Sie es erneut. Die Software läuft in der Zwischenzeit weiter. | | `sha256 mismatch (downloaded …, expected …)` | Beschädigter oder veränderter Download | Erneut versuchen. Wenn es sich wiederholt, prüfen Sie Proxys auf dem Pfad. | | `downgrade/same version rejected: X is not newer than Y` | Die ausgewählte Version ist nicht neuer als die aktuell laufende | Nichts zu tun — Sie sind auf dem neuesten Stand. | | `extraction failed / main binary missing` | Beschädigtes Archiv oder volles Laufwerk | Prüfen Sie `df -h`; versuchen Sie es erneut. | | `systemctl restart failed` | Der Dienst konnte nach dem Ersetzen der Binärdatei nicht neu gestartet werden | `journalctl -u nexcmp -n 80`; die vorherige Binärdatei wird als `/opt/nexcmp/bin/nexcmp.bak` aufbewahrt — siehe Rollback unten. | | Serverfehler beim Kontaktieren des Update-Servers | Keine Route zu `nexcmp.com` oder Lizenz-Token abgelaufen | Prüfen Sie ausgehendes HTTPS; klicken Sie auf der Lizenzkarte auf **Check now**. | ## Rollback {#roll-back} Wenn sich eine neue Version fehlerhaft verhält: ```bash sudo systemctl stop nexcmp-vmd nexcmp sudo cp /opt/nexcmp/bin/nexcmp.bak /opt/nexcmp/bin/nexcmp echo | sudo tee /opt/nexcmp/VERSION sudo systemctl start nexcmp nexcmp-vmd ``` Wenn bereits eine Datenbankmigration ausgeführt wurde, stellen Sie auch Ihr vor dem Update erstelltes [backup](https://nexcmp.com/de/docs/getting-started/backup-and-restore/) wieder her. ## `sudo nexcmp update` meldet, dass der Installer nicht gefunden werden kann {#sudo-nexcmp-update-says-it-cannot-find-the-installer} `nexcmp update` führt den im installierten Release enthaltenen Installer aus (`/opt/nexcmp/releases//share/install.sh`). Wenn diese Datei fehlt, führen Sie den Installationsbefehl von Ihrer Lizenzseite erneut aus. --- # FAQ {#faq} ## Lizenzierung {#licensing} **Was passiert, wenn meine Lizenz abläuft oder der Server die Internetverbindung verliert?** Das Token bleibt 14 Tage gültig und erneuert sich täglich. Danach können Kunden keine **neuen** Dienste erstellen; laufende Dienste, Abrechnung und Logins funktionieren weiterhin. Siehe [License and purchase](https://nexcmp.com/de/docs/getting-started/license-and-purchase/). **Erhalte ich nach Ablauf meiner Update-Berechtigung weiterhin Sicherheitsfixes?** Ja — Sicherheitsversionen werden immer ausgeliefert; Funktionsversionen erfordern eine aktive Berechtigung. **Kann ich NexCMP auf einem zweiten Server oder einer zweiten Domain ausführen?** Aktivieren Sie es mit dem Schlüssel und der auf der Lizenz registrierten Domain — siehe [License and purchase](https://nexcmp.com/de/docs/getting-started/license-and-purchase/#moving-to-a-new-server-or-domain). ## Installation {#installation} **Benötigt NexCMP Docker, PostgreSQL oder Redis?** Nein. Es ist ein einzelnes Programm mit SQLite-Datenbanken, das von systemd als unprivilegierter Benutzer ausgeführt wird. Siehe [Requirements](https://nexcmp.com/de/docs/getting-started/requirements/). **Kann ich ohne öffentliche Domain installieren?** Ja, verwenden Sie `--no-nginx` und einen SSH-Tunnel — siehe [Installation](https://nexcmp.com/de/docs/getting-started/installation/#installing-without-a-public-domain-lab-or-test). **Warum ist Port 3000 nach der Einrichtung geschlossen?** Aus Sicherheitsgründen lauscht das Panel auf `127.0.0.1`, sobald der Assistent abgeschlossen und TLS aktiv ist. Verwenden Sie `sudo nexcmp open-port` für Notfälle. ## Infrastruktur {#infrastructure} **Kann ich CloudStack und Proxmox VE gemeinsam verwenden?** Ja. Eine Zone kann beides enthalten; jeder Tarif wählt seine Quelle. Siehe [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/) und [Zones](https://nexcmp.com/de/docs/infrastructure/zones/). **Benötige ich den ROOT API-Schlüssel von CloudStack?** Nein — und Sie sollten ihn nicht verwenden. Erstellen Sie ein dediziertes Konto — [CloudStack](https://nexcmp.com/de/docs/infrastructure/cloudstack/). **Warum werden bestimmte Tabs oder Schaltflächen bei einer virtuellen Maschine nicht angezeigt?** Seiten zeigen nur das an, was die Quelle der VM unterstützt (Proxmox VE bietet beispielsweise keine Portweiterleitung). Siehe die Kompatibilitätstabelle unter [Proxmox VE](https://nexcmp.com/de/docs/infrastructure/proxmox/). ## Betrieb {#operations} **Wie ziehe ich NexCMP auf einen anderen Server um?** Sichern, dieselbe Version auf dem neuen Server mit derselben Lizenz installieren, wiederherstellen — siehe [Backup and restore](https://nexcmp.com/de/docs/getting-started/backup-and-restore/). **Wo befinden sich die Protokolle?** `journalctl -u nexcmp -u nexcmp-vmd`, `/var/log/nexcmp` und die Admin-Konsole unter System › Logs. Siehe [Audit log](https://nexcmp.com/de/docs/administration/audit-log/). **Kann ich das Kundenportal vor der Installation sehen?** Ja. Die Serviceseiten auf [nexcmp.com](https://nexcmp.com/platform/) zeigen das Kundenportal Tab für Tab mit Beispieldaten; öffnen Sie *View demo* für die Vollbildansicht. Um eine echte Installation zu sehen, schreiben Sie an den Vertrieb. --- # Support {#support} ## Kontakt {#contact} Es gibt kein Kontaktformular. Senden Sie eine E-Mail an **sales@nexcmp.com** — diese deckt Lizenzierung, Verlängerungen, Domains und technische Fragen ab. Ihre Lizenzseite unter [nexcmp.com/licenses](https://nexcmp.com/licenses) verlinkt ebenfalls auf dieselbe Adresse. ## Bevor Sie schreiben {#before-you-write} 1. Durchsuchen Sie diese Dokumentation (drücken Sie `/`) und prüfen Sie [Installation errors](https://nexcmp.com/de/docs/troubleshooting/installation-errors/) sowie [Update errors](https://nexcmp.com/de/docs/troubleshooting/update-errors/). 2. Sammeln Sie die folgenden Fakten — so kann der Support in einer einzigen Antwort helfen. ## Was enthalten sein sollte {#what-to-include} | Komponente | Wie man es erhält | |---|---| | NexCMP-Version | `sudo nexcmp status` oder System › Admin › License & updates | | Hauptdomain und die letzten 4 Zeichen des Lizenzschlüssels | License & updates (senden Sie niemals den vollständigen Schlüssel) | | Was Sie getan haben und was Sie erwartet haben | Genaue Schritte | | Der Fehlertext oder ein Screenshot | Vertrauliche Daten vor dem Senden verbergen | | Dienststatus | `sudo nexcmp status` | | Letzte Protokollzeilen | `sudo journalctl -u nexcmp -u nexcmp-vmd -n 100 --no-pager` | | Infrastruktur | CloudStack- oder Proxmox VE-Version, eine Zone oder mehrere | ::: warning Niemals vertrauliche Daten senden Senden Sie keine Lizenzschlüssel, API-Schlüssel, Passwörter, den Setup-Code, Zahlungsdaten oder Backup-Archive. Maskieren Sie diese in Protokollen und Screenshots. ::: ## Sicherheitsmeldungen {#security-reports} Wenn Sie glauben, eine Schwachstelle gefunden zu haben, senden Sie eine E-Mail an dieselbe Adresse mit dem Betreff „Security“ und veröffentlichen Sie keine Details, bevor diese behoben ist.