{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"StackPulse","text":"
StackPulse ist eine eigenst\u00e4ndige Web-Anwendung, die die Portainer Business Edition \u00fcber deren API steuert und dadurch Redeploys, Wartungsskripte sowie das Berechtigungs- und Logging-Konzept zentralisiert. Die L\u00f6sung besteht aus einem Node.js/Express Backend, einem React-Frontend auf Basis von Material Tailwind sowie einer eingebetteten SQLite-Datenbank, die ohne zus\u00e4tzliche Infrastruktur betrieben werden kann.
"},{"location":"#warum-stackpulse","title":"Warum StackPulse?","text":"scripts/start-dev.shbackend/data/stackpulse.db) Persistente Speicherung von Benutzern, Gruppen, Servern, API-Keys, Logs und Einstellungen. Frontend React 18, Vite, Material Tailwind Dashboard Dashboard mit Auth-Flow, Stacks, Logs, Benutzer- und Wartungsansichten. Container Dockerfile + Compose Multi-Stage Build f\u00fcr Frontend + Backend, Datenvolumen f\u00fcr SQLite."},{"location":"#release-status","title":"Release-Status","text":"Weitere geplante Features (Notifications, Monitoring, Multi-Server, Portainer CE) findest du in der Roadmap im README.
"},{"location":"#wie-geht-es-weiter","title":"Wie geht es weiter?","text":"StackPulse folgt einer klassischen Client/Server-Architektur, bei der das Backend den Single-Source-of-Truth darstellt und das Frontend ausschlie\u00dflich \u00fcber wohldefinierte REST- und Socket.IO-Schnittstellen kommuniziert.
\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 HTTPS + WebSocket \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 HTTPS \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Frontend \u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25b6 \u2502 Backend \u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25b6 \u2502 Portainer API \u2502\n\u2502 (React) \u2502 \u25c0\u2500\u2500\u2500\u2500\u2500 Auth-Cookie + JSON \u2500 \u2502 (Express) \u2502 \u25c0\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2502 Business Ed. \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Redeploy Events \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 (Axios Proxy) \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502\n \u25bc\n SQLite Datenbank\n"},{"location":"architecture/#hauptschichten","title":"Hauptschichten","text":"AuthProvider-Komponente verwaltet Session, Permissions und Socket-Verbindungen.backend/data/stackpulse.db, WAL-Modus aktiviert. Tabellen umfassen u. a. users, groups, permissions, servers, server_api_keys, event_logs, settings sowie Hilfstabellen f\u00fcr Tokens und Sicherheitspassphrasen./api/setup/* nimmt Serverdaten entgegen, verschl\u00fcsselt API-Keys (aes-256-gcm via PORTAINER_API_SECRET) und erstellt Eintr\u00e4ge in servers/server_api_keys./api/auth/login erstellt Sessions (JWT-\u00e4hnliche Tokens in Cookies), AuthProvider ruft /api/auth/session zyklisch ab und speichert Berechtigungen./api/stacks auf. Das Backend proxyt Portainer /api/endpoints/:id/docker/stacks, erg\u00e4nzt Caching, interne Metadaten und liefert Redeploy-Status./api/stacks/:id/redeploy, /api/stacks/redeploy-selection oder /api/stacks/redeploy-all an. Das Backend ruft Portainer-Endpoints, protokolliert Events und broadcastet Fortschritt via Socket.IO redeployStatus.event_logs (siehe logging/eventLogs.js). Frontend filtert/paginiert \u00fcber /api/logs und kann Exporte /api/logs/export herunterladen./api/maintenance/* verwaltet Maintenance-Mode, SSH-Zug\u00e4nge, Update-Skripte und serverseitige Settings (db/settings.js).backend/index.js Herzst\u00fcck der API inkl. Routing, Socket.IO, Redeploy, Setup, Auth. backend/auth/ Superuser-Verwaltung, Passwort- und Tokenfunktionen, Sicherheitsphrasen. backend/db/ SQLite-Initialisierung (ensure.js/schemaEnsure.js), Settings-Layer, DB-Blueprints. backend/logging/ Event-Log Modellierung, Filter/Export/Delete. backend/groups/, backend/users/, backend/permissions/ Domain-Logik f\u00fcr Benutzer- & Rechteverwaltung. backend/maintenance/ Maintenance-Mode sowie SSH-/Update-Konfiguration. frontend/src/ React-App (Layouts, Pages, Widgets, Provider). routes.jsx definiert Navigation & Permissions. scripts/ Hilfsskripte (z.\u202fB. start-dev.sh). Dockerfile, docker-compose*.yml Build- & Deployment-Spezifikation."},{"location":"architecture/#konfiguration-secrets","title":"Konfiguration & Secrets","text":"server_api_keys, settings).db/settings.js mit JSON-Serialisierung.https.Agent mit deaktivierter Zertifikatspr\u00fcfung f\u00fcr interne Netze)./socket.io). CORS ist aktuell f\u00fcr alle Origins offen \u2013 f\u00fcr produktive Deployments empfiehlt sich ein Reverse Proxy mit Authentifizierung.db/*).redeployingStacks + Status-Caching). Parallele Ausf\u00fchrung ist m\u00f6glich, solange Portainer dies unterst\u00fctzt.Die weiteren Kapitel vertiefen Backend- und Frontend-spezifische Details.
"},{"location":"backend/","title":"Backend & API","text":"Das Backend implementiert alle Anwendungsf\u00e4lle \u00fcber Express-Routen, Socket.IO f\u00fcr Echtzeit-Events und eine SQLite-Datenbank als Persistenzschicht. Dieser Abschnitt fasst die wichtigsten Module, Entit\u00e4ten und Endpunkte zusammen.
"},{"location":"backend/#laufzeit-einstiegspunkte","title":"Laufzeit & Einstiegspunkte","text":"backend/index.js initialisiert Express, Socket.IO, l\u00e4dt .env, sorgt f\u00fcr Schema-Validierung (ensureDatabaseSchema) und Default-Daten (ensureSuperuserFromEnv, ensureDefaultsFromEnv).npm start (siehe package.json); Migrationen \u00fcber npm run migrate.backend/data/stackpulse.db, WAL-Modus aktiv.auth/superuser.js Registrieren/Verifizieren von Superusern, Login, Passwortvalidierung, Sicherheitsphrasen. Users & Groups users/*, groups/*, permissions/* CRUD f\u00fcr Benutzer, Gruppen, Rechtezuweisung, Ableitung effektiver Berechtigungen. Setup setup/index.js Verwaltung registrierter Portainer-Server, sichere Ablage der API-Keys, Setup-Status. Logging logging/eventLogs.js Einheitliches Ereignislogging (Insert, Filter, Delete, Export). Maintenance maintenance/state.js + helper in index.js Wartungsmodus, SSH-Konfiguration, Update-Skripte und Ausf\u00fchrung. Portainer Proxy Funktionen in index.js Kommunikation mit Portainer (axiosInstance + dynamische baseURL), Environment-Erkennung und Redeploy-Strecke."},{"location":"backend/#api-uberblick-auszug","title":"API-\u00dcberblick (Auszug)","text":""},{"location":"backend/#setup-server","title":"Setup & Server","text":"Methode Route Beschreibung GET /api/setup/status Gibt zur\u00fcck, ob Server/API-Key/Superuser vorhanden sind. POST /api/setup/test-portainer Verifiziert URL + API-Key gegen Portainer. POST /api/setup/portainer-stacks Listet Stacks (f\u00fcr Preview im Wizard). POST /api/setup/complete Markiert Setup als abgeschlossen und hinterlegt Server/API-Key. DELETE /api/setup/servers/:id Entfernt einen registrierten Portainer-Server. PUT /api/setup/servers/:id/api-key \u00dcberschreibt API-Key. PUT /api/setup/self-stack Speichert die ID des StackPulse-Stacks, damit dieser nicht redeployed wird."},{"location":"backend/#authentifizierung","title":"Authentifizierung","text":"Methode Route Beschreibung POST /api/auth/login Username/Passwort-Login, setzt HTTP-only Cookie. POST /api/auth/logout Session beenden & Cookie l\u00f6schen. GET /api/auth/session Liefert eingeloggten Benutzer + Permissions. POST /api/auth/recover/verify & /reset Passwortreset \u00fcber Sicherheitsphrase. GET/POST/DELETE /api/auth/superuser/* Abfrage, Registrierung oder Entfernen des Superusers."},{"location":"backend/#benutzer-gruppen","title":"Benutzer & Gruppen","text":"Methode Route Beschreibung GET/POST /api/users Liste anlegen, neue Benutzer erstellen. GET/PUT/DELETE /api/users/:id Details lesen, bearbeiten oder l\u00f6schen. PUT /api/users/:id/groups Gruppenmitgliedschaften aktualisieren. PUT /api/users/:id/active Benutzer aktivieren/deaktivieren. GET/POST /api/users/:id/security-phrase, /renew Sicherheitsphrase anzeigen bzw. neu generieren. GET/POST /api/groups Gruppen auflisten oder neu anlegen. PUT/DELETE /api/groups/:id Gruppe editieren oder entfernen. GET/PUT /api/groups/:id/permissions Berechtigungen lesen/setzen."},{"location":"backend/#stacks-redeploy","title":"Stacks & Redeploy","text":"Methode Route Beschreibung GET /api/stacks Aggregierte Liste inkl. Filter, Self-Stack-Blockade und Redeploy-Status. PUT /api/stacks/:id/redeploy Redeploy eines einzelnen Stacks. PUT /api/stacks/redeploy-selection Redeploy einer Liste \u00fcbermittelter stackIds. PUT /api/stacks/redeploy-all Redeploy aller Stacks (Permission stacks-redeploy-all). Das Backend ver\u00f6ffentlicht den Redeploy-Fortschritt parallel \u00fcber Socket.IO (redeployStatus Event) und unterscheidet die Phasen queued, started, success, error, info.
/api/logs Filterbare/Paginierbare Event-Logs. DELETE /api/logs/:id oder /api/logs Einzelne oder gefilterte Logs l\u00f6schen. GET /api/logs/export CSV-Export anhand der Query-Filter. GET/POST /api/maintenance/mode Status abfragen oder toggeln. GET /api/maintenance/config Liefert Maintenance-Status, Update-Skript & SSH-Config. PUT/DELETE /api/maintenance/ssh-config SSH-Credentials speichern/entfernen. POST /api/maintenance/test-ssh Verbindungstest mit optionalem Override. PUT/DELETE /api/maintenance/update-script Custom Update-Skript pflegen. POST /api/maintenance/portainer-update Update-Kommando per SSH ausf\u00fchren (mit Custom/Default-Skript)."},{"location":"backend/#datenbank-schema","title":"Datenbank & Schema","text":"ensureDatabaseSchema() erzeugt Tabellen bei jedem Start, inklusive Default-Gruppen, Permissions, Settings, Server-Eintr\u00e4ge und Trigger.backend/db/dbs eingelesen. Jede Permission definiert Key, Label, Level (full, read, none) und Abh\u00e4ngigkeiten.event_logs gespeichert. Relevante Felder:category, event_type, action, status, severityentity_type, entity_id, entity_nameactor_type, actor_id, actor_namecontext_type, context_id, context_labelmessage, metadata (JSON)ids, categories, eventTypes, status, stackIds, Zeitfenster) werden in buildEventLogFilter zentral verarbeitet.PermissionGate im Frontend spiegelt die gleichen Keys. Wichtigste Bereiche:stacks-* (Redeploy)logs-*users-* & user-groups-*maintenance-* (inkl. Unterrechte maintenance-server-*, maintenance-ssh-update, maintenance-update)maintenanceGuard gepr\u00fcft (Maintenance-Modus blockiert optional Redeploys).resolvePortainerEnvironmentId)./api/stacks/:id/redeploy), Log-Eintr\u00e4ge werden erstellt.broadcastRedeployStatus() aktualisiert das In-Memory-Tracking (redeployingStacks) und sendet Socket.IO Events.event_logs-Eintr\u00e4gen mit severity=error, UI zeigt Toasts via ToastProvider.maintenance/state.js persistiert Aktivierung & Nachricht im Setting maintenance_mode.getPortainerSshConfig).DEFAULT_PORTAINER_UPDATE_SCRIPT (Bash-Befehle).requirePermission(..) nutzen, Logging via logEvent() hinzuf\u00fcgen und \u2013 falls Portainer-Aufrufe stattfinden \u2013 das axiosInstance verwenden.db/settings.js verwalten, damit UI & CLI konsistent bleiben.ensureDatabaseSchema inkl. Versionsflag, um Idempotenz sicherzustellen.Das Frontend basiert auf React 18, Vite und dem Material Tailwind Dashboard. Es nutzt Context Provider f\u00fcr Authentifizierung, Seitenstatus, Toaster und Wartungsinformationen.
"},{"location":"frontend/#build-skripte","title":"Build & Skripte","text":"Befehl Beschreibungnpm run dev Startet den Vite Dev-Server (Port 5173, HMR aktiviert). npm run build Erstellt ein Production-Bundle (frontend/dist). Das Dockerfile kopiert dieses Paket ins Backend (backend/public). npm run preview Vorschau auf das gebaute Bundle."},{"location":"frontend/#projektstruktur","title":"Projektstruktur","text":"frontend/src\n\u251c\u2500\u2500 App.jsx # Entry-Point, registriert Layouts & Provider\n\u251c\u2500\u2500 components/ # AuthProvider, PermissionGate, Toast/Maintenance/PageProvider\n\u251c\u2500\u2500 layouts/ # Dashboard-Layout (Sidebar, Navbar) & Auth-Layout\n\u251c\u2500\u2500 pages/\n\u2502 \u251c\u2500\u2500 auth/ # SignIn, SignUp, ForgotPassword, SignOut\n\u2502 \u251c\u2500\u2500 dashboard/ # Stacks, Logs, Maintenance, Users, Usergroups, Detailseiten\n\u2502 \u2514\u2500\u2500 setup/ # Setup-Wizard & Helper Screens\n\u251c\u2500\u2500 routes.jsx # zentrale Navigationsdefinition inkl. Permissions\n\u251c\u2500\u2500 widgets/, data/, configs/, assets/\n\u2514\u2500\u2500 tailwind.css # Tailwind Layer & Custom Styles\n"},{"location":"frontend/#routing-navigation","title":"Routing & Navigation","text":"routes.jsx beschreibt sowohl Dashboard- als auch Auth-Routen. Jede Dashboard-Seite besitzt optional ein permission-Objekt, das vom PermissionGate ausgewertet wird.layouts/index.jsx, das wiederum Sidebar/Topbar-Komponenten aus dem Material Tailwind Dashboard nutzt./sign-in, /sign-up, /forgot-password, /logout) werden im Auth-Layout ohne Sidebar dargestellt.AuthProvider Speichert User, Permissions, Session-Status. Stellt refreshSession, logout, hasPermission bereit. PageProvider Zentrale UI-Zust\u00e4nde (z.\u202fB. Ladeanzeigen, modale Dialoge) f\u00fcr Dashboard-Komponenten. ToastProvider Globale Notifications (z.\u202fB. Redeploy-Erfolg/Fehler). MaintenanceProvider Cached Maintenance-Status, erkennt aktive Maintenance Modes und zeigt Hinweise."},{"location":"frontend/#wichtige-seiten","title":"Wichtige Seiten","text":"pages/dashboard/stacks.jsx): Haupt\u00fcbersicht mit Tabellen, Suche, Filtern, Bulk- und Einzelredeploy. Bindet socket.io-client f\u00fcr Live-Updates (redeployStatus).pages/dashboard/logs.jsx): Tabellenansicht mit Statusfarben, Filterchips, Export-/Delete-Aktionen. Nutzt axios-Queries gegen /api/logs.pages/dashboard/maintenance.jsx): Formulare zur Verwaltung von Update-Skript, SSH-Konfiguration, Maintenance-Mode-Toggle und Portainer-Statuspr\u00fcfung.pages/setup): Schrittweiser Wizard (Server -> API-Key -> Superuser). Wird solange angezeigt, bis /api/setup/status vollst\u00e4ndig ist.axios (global konfiguriert in frontend/src/components/AuthProvider bzw. direkt in den Seiten). Cookies werden automatisch vom Browser beigesteuert (credentials: 'include').stacks.jsx (io('/', { path: '/socket.io' })).configs).widgets/ ausgelagert.@heroicons/react. Farben/Typografie folgen Creative Tim Vorgaben, k\u00f6nnen aber zentral in frontend/src/configs angepasst werden.routes.jsx erg\u00e4nzen, optional PermissionGate konfigurieren und Seite unter pages/dashboard oder pages/auth anlegen.axios und achte auf try/catch, damit 401/403 sauber abgefangen werden. Bei kritischen Anforderungen refreshSession aufrufen.components/.npm run build liefert ein Self-Contained Bundle. Das Backend dient anschlie\u00dfend als Static Host (express.static).Damit bietet das Frontend eine anpassbare, klar strukturierte Oberfl\u00e4che, die eng mit den Backend-Permissions verzahnt ist.
"},{"location":"getting-started/","title":"Getting Started","text":"Dieser Leitfaden hilft dir, StackPulse lokal oder als Container aufzusetzen und die ersten Schritte im UI abzuschlie\u00dfen.
"},{"location":"getting-started/#voraussetzungen","title":"Voraussetzungen","text":"# Repository klonen\n# git clone <repo-url>\ncd stackpulse\n\n# Skript ausf\u00fchrbar machen\nchmod +x scripts/start-dev.sh\n"},{"location":"getting-started/#lokale-dev-umgebung","title":"Lokale Dev-Umgebung","text":"Das Skript scripts/start-dev.sh richtet Backend und Frontend automatisch ein:
npm install, npm run migrate (erstellt/aktualisiert backend/data/stackpulse.db), npm startnpm install, npm run dev (Port 5173) und ein einmaliges npm run build, um statische Assets ins Backend zu spiegelnNach erfolgreichem Start: - Frontend dev server: http://localhost:5173 - Backend API & statische Assets: http://localhost:4001
Zum Stoppen STRG+C verwenden.
"},{"location":"getting-started/#manuelles-starten","title":"Manuelles Starten","text":"# Backend\ncd backend\nnpm install\nnpm run migrate\nPORTAINER_URL=https://portainer.local npm start\n\n# Frontend in zweiter Shell\ncd frontend\nnpm install\nnpm run dev\n Das Backend liest Umgebungsvariablen beim Start. Alternativ kannst du eine .env neben backend/index.js anlegen.
PORTAINER_URL Basis-URL zu deiner Portainer-Instanz (inkl. Protokoll). Kann sp\u00e4ter im Setup-UI \u00fcberschrieben werden. PORTAINER_API_KEY API-Key f\u00fcr Portainer. Wird in der DB verschl\u00fcsselt abgelegt, sobald du ihn im Setup speicherst. PORTAINER_SERVER_NAME Optionaler Anzeigename f\u00fcr den Server w\u00e4hrend des Setups. PORTAINER_API_SECRET \u00dcberschreibt den Schl\u00fcssel, der zur Verschl\u00fcsselung des API-Keys verwendet wird. SUPERUSER_USERNAME, SUPERUSER_EMAIL, SUPERUSER_PASSWORD Legt einen Superuser automatisch beim Start an (falls nicht vorhanden). SELF_STACK_ID Stack-ID von StackPulse selbst. Wird genutzt, um eigene Redeploys zu blockieren. AUTH_COOKIE_NAME, AUTH_SESSION_TTL_MS, AUTH_COOKIE_SECURE Feintuning f\u00fcr die Session-Verwaltung der API. SECURITY_PHRASE_SECRET Seed f\u00fcr die Generierung kryptografischer Sicherheitsphrasen. PORTAINER_SSH_SECRET Secret f\u00fcr SSH-Passwortverschl\u00fcsselung (Wartungs-Update). DISPLAY Wird an Kindprozesse weitergereicht, wenn Portainer-Updates ausgel\u00f6st werden m\u00fcssen (Default :9999). Weitere Einstellungen (SSH-Config, Update-Skripte) verwaltest du sp\u00e4ter direkt im Maintenance-Bereich des UI.
"},{"location":"getting-started/#ersteinrichtung-im-ui","title":"Ersteinrichtung im UI","text":"/setup f\u00fchrt dich automatisch durch den Wizard)./api/setup/test-portainer.# docker-compose.yml (Auszug)\nservices:\n app:\n build:\n context: .\n dockerfile: Dockerfile\n ports:\n - \"4001:4001\"\n volumes:\n - stackpulse_data:/app/backend/data\n restart: unless-stopped\n environment:\n - PORTAINER_URL=https://portainer.example.com\n - PORTAINER_API_KEY=xxxx\n - SUPERUSER_USERNAME=admin\n - SUPERUSER_EMAIL=admin@example.com\n - SUPERUSER_PASSWORD=changeme\n - SELF_STACK_ID=123\nvolumes:\n stackpulse_data:\n docker compose up -d --buildpublic/) erreichbar.stackpulse_data.backend/data/stackpulse.dbnpm run migrate (f\u00fchrt backend/db/ensure.js aus und erzeugt Schema, Rechte, Defaults)Damit bist du bereit f\u00fcr die tieferen Kapitel zu Architektur sowie Backend- und Frontend-Details.
"},{"location":"operations/","title":"Operations & Wartung","text":"Dieser Abschnitt deckt typische Aufgaben f\u00fcr Betriebsteams ab \u2013 von Backups \u00fcber Wartungsmodus bis zu St\u00f6rungssuche.
"},{"location":"operations/#laufender-betrieb","title":"Laufender Betrieb","text":"/api/auth/session (f\u00fcr Auth) oder /api/maintenance/update-status (f\u00fcr Backend + DB) abfragst.console.log). Sammle diese via Docker-Logs oder Journal.backend/data via benanntem Volume (siehe docker-compose.yml).sqlite3 stackpulse.db \".backup 'stackpulse.db.bak'\" innerhalb der laufenden Instanz.ensureDatabaseSchema automatisch eventuelle Nachmigrationen aus./api/auth/superuser/* oder im UI registriert werden. Entfernen ist nur mit maintenance-superuser-delete m\u00f6glich./api/users/:id/active). Die Historie bleibt erhalten./api/users/:id/security-phrase/renew), m\u00fcssen diese aber dem Benutzer sicher zustellen.curl -X POST http://host:4001/api/maintenance/mode -H 'Content-Type: application/json' -d '{\"active\":true,\"message\":\"Cluster Upgrade\"}' (Permission maintenance-access). Das UI informiert alle Nutzer und blockiert Redeploys.PORTAINER_SSH_SECRET).DEFAULT_PORTAINER_UPDATE_SCRIPT) f\u00fchrt docker stop, docker run etc. aus. Du kannst im UI oder via API ein eigenes Skript setzen \u2013 wird erst aktualisiert, wenn kein Update l\u00e4uft.POST /api/maintenance/portainer-update triggert die SSH-Kommandos. Status & Logausgaben k\u00f6nnen \u00fcber /api/maintenance/update-status \u00fcberwacht werden.GET /api/logs/export (CSV) oder automatisiert mittels Cron (Query-Parameter \u00fcbernehmen Filter).DELETE /api/logs/:id oder DELETE /api/logs?before=<ISO> um alte Eintr\u00e4ge zu entfernen. Achtung: Aktionen sind nicht reversibel.PORTAINER_URL gesetzt ist oder im Setup-UI ein Server gespeichert wurde (servers-Tabelle pr\u00fcfen). Redeploy h\u00e4ngt in queued /api/maintenance/update-status auf laufende Updates pr\u00fcfen, redeployingStacks im Log verfolgen; ggf. Portainer-API erreichbar? Login nicht m\u00f6glich \u00dcber backend/logs nach Auth-Fehlern suchen, Cookie-Konfiguration pr\u00fcfen (AUTH_COOKIE_SECURE bei HTTP?). SSH-Test fehlgeschlagen POST /api/maintenance/test-ssh mit tempor\u00e4ren Credentials testen, Container-Logs auf SSH Test fehlgeschlagen untersuchen. SQLite Locked Stelle sicher, dass kein paralleler Backup-Prozess l\u00e4uft. WAL-Modus erlaubt mehrere Leser, blockiert aber bei langen Schreibtransaktionen (Check Logs auf SQLITE_BUSY)."},{"location":"operations/#sicherheitsempfehlungen","title":"Sicherheitsempfehlungen","text":"AUTH_COOKIE_SECURE=true hinter TLS und konfiguriere einen Reverse Proxy (z.\u202fB. Traefik, Nginx)./api/setup/servers/:id/api-key aktualisiert Schl\u00fcssel ohne Neuinstallation.Mit diesen Richtlinien l\u00e4sst sich StackPulse sicher betreiben und warten.
"},{"location":"user-guide/","title":"Benutzerhandbuch","text":"Dieses Kapitel beschreibt die Bedienung von StackPulse aus Sicht von Administrator:innen und Operators. Es orientiert sich an den Seiten im Dashboard und erkl\u00e4rt f\u00fcr jeden Bereich typische Abl\u00e4ufe sowie die notwendigen Berechtigungen. Screenshots kannst du sp\u00e4ter erg\u00e4nzen; die Texte nennen bereits alle Buttons, Eingabefelder und Statusanzeigen.
Reihenfolge 1. Setup \u2013 richtet Portainer-Anbindung und Superuser ein. 2. Stacks \u2013 zeigt alle Stacks, Redeploy-Aktionen und Filter. 3. Logs \u2013 Nachvollziehbarkeit, Filter & Export. 4. Wartung \u2013 Maintenance-Mode, Updates und SSH-Konfiguration. 5. Benutzer \u2013 Konten verwalten, Phrasen ausgeben, Passw\u00f6rter setzen. 6. Benutzergruppen & Rechte \u2013 Rollen modellieren und Berechtigungen zuweisen.
Jede Seite nennt die erforderlichen Permissions. Sobald du dich anmeldest, f\u00fchrt dich StackPulse zun\u00e4chst automatisch durch den Setup-Assistenten; danach landet man auf der Stacks-\u00dcbersicht.
"},{"location":"user-guide/groups/","title":"Benutzergruppen & Rechte","text":"Dieser Bereich verwaltet Rollenmodelle und bestimmt, welche Aktionen Benutzer:innen durchf\u00fchren d\u00fcrfen. Du ben\u00f6tigst user-groups-access zum Lesen sowie user-groups-edit/user-groups-delete f\u00fcr \u00c4nderungen.
Der Rechte-Dialog zeigt die gesamte Permissionstruktur in Kategorien (Stacks, Logs, Benutzer, Wartung etc.).
logs-delete nutzen zu d\u00fcrfen, muss logs-access mindestens full sein.read-Rechten f\u00fcr Stacks und Logs.Die Logs-Seite dient der Nachvollziehbarkeit aller Aktionen (Redeploy, Login, Wartung, Benutzerverwaltung). Sie steht Benutzer:innen mit der Permission logs-access zur Verf\u00fcgung.
redeploy oder wartung auszuw\u00e4hlen.message, entity_name und metadata./api/logs/export) auch automatisiert aufrufen.logs-delete).metadata), Kontext (Stack, Benutzer, Quelle) und ggf. Redeploy-Timings zu \u00f6ffnen.Der Wartungsbereich b\u00fcndelt alle Funktionen rund um Maintenance-Mode, Serververwaltung, Update-Skripte und SSH-Verbindungen. Sichtbar f\u00fcr Benutzer:innen mit maintenance-access (Teilbereiche erfordern zus\u00e4tzliche Unterrechte).
Erforderliche Permission: maintenance-ssh-update. 1. Host, Port, Benutzername eintragen. Optional Passwort und zus\u00e4tzliche SSH-Argumente (z.\u202fB. -o StrictHostKeyChecking=no). 2. Passwort wird verschl\u00fcsselt gespeichert; alternativ kannst du Public-Key-Auth nutzen und das Feld leer lassen. 3. Verbindung testen: StackPulse baut eine SSH-Verbindung auf und zeigt das Ergebnis in Echtzeit.
Beim ersten Start erscheint automatisch der Setup-Bereich. Du erreichst ihn sp\u00e4ter jederzeit \u00fcber /setup, solange nicht alle Schritte abgeschlossen sind.
https://portainer.example.com).SUPERUSER_* Variablen gesetzt hast, zeigt StackPulse an, dass bereits ein Superuser existiert \u2013 du kannst direkt weiter.maintenance-superuser-delete besitzt.Die Stacks-Ansicht ist der Startpunkt nach dem Login und liefert einen \u00dcberblick \u00fcber alle Stacks der angebundenen Portainer-Instanz.
"},{"location":"user-guide/stacks/#aufbau","title":"Aufbau","text":"stacks-redeploy-single Button Redeploy in der jeweiligen Zeile klicken und best\u00e4tigen. Mehrere Stacks stacks-redeploy-selection Checkboxen der gew\u00fcnschten Stacks aktivieren, anschlie\u00dfend Redeploy Auswahl. Alle Stacks stacks-redeploy-all Button Redeploy alle ausl\u00f6sen. Nutze vorher Filter, um sicherzugehen, dass alle Stacks korrekt angezeigt werden. W\u00e4hrend eines Redeploys erscheint pro Stack ein Fortschrittsbadge. Du kannst das Panel schlie\u00dfen; beim n\u00e4chsten Besuch wird der aktuelle Status aus dem Backend gelesen.
"},{"location":"user-guide/stacks/#redeploy-status-verstehen","title":"Redeploy-Status verstehen","text":"SELF_STACK_ID gesetzt hast, markiert StackPulse den eigenen Stack als \u201egesch\u00fctzt\u201c. Redeploy-Buttons werden deaktiviert und mit einem Info-Tooltip versehen.Die Benutzerseite erm\u00f6glicht das Anlegen, Bearbeiten und Deaktivieren von Konten. Du ben\u00f6tigst mindestens die Permission users-access (lesen) bzw. users-edit/users-delete f\u00fcr \u00c4nderungen.
users-edit sowie Gruppenrechte (user-groups-access).users-security-phrase). Informiere den Benutzer \u00fcber die neue Phrase und markiere anschlie\u00dfend \u201eheruntergeladen\u201c.