
# đŠ StackPulse 
**StackPulse** ist eine kleine Web-App, die ĂŒber die Portainer-API deine Docker-Stacks verwaltet und aktualisiert.
Sie besteht aus einem **Backend (Node.js/Express)** und einem **Frontend (React/Tailwind)**.
Ziel:
- Ăbersicht ĂŒber alle Stacks in deiner Portainer-Instanz
- SpÀter: Updates, Deployments und Monitoring
- Bereitstellung als **Docker Image**, nutzbar ĂŒber **docker-compose**
---
## đ Features & Roadmap
â
v0.1 â Initial Release
- Projektstruktur mit Frontend & Backend
- Lokales Startskript (`scripts/start-dev.sh`)
- Frontend zeigt Stacks an (ĂŒber Backend)
- API-Verbindung zu Portainer
- Stack Redeploy
- Bereitstellung eines Docker Images ĂŒber GHCR
â
v0.2 â Release
### Backend
- [x] Anbindung einer SQLite-Datenbank
- [x] Logging der Redeploy-Aktionen in SQLite speichern
- [x] API-Endpunkte fĂŒr Log-Abfragen
- [x] Funktionen fĂŒr Pagination, Löschen und Export
### Frontend
- [x] Anzeige der Logs (inkl. Statusfarben)
- [x] UI-Komponenten fĂŒr Log-Details
- [x] Filterfunktionen fĂŒr die Logs
- [x] Pagination, Lösch- und Exportanzeigen
### Features
- [x] Selektive Auswahl: einzelne Stacks oder Services neu deployen
â
v0.3 â Abgeschlossen
### Backend
- [x] Automatische Datenbereinigung: Duplikate bei Stack-IDs erkennen & entfernen
- [x] Erweiterung der Logs (Portainer- und DatenbereinigungsvorgÀnge)
- [x] API fĂŒr Filter & Suche (Stacks nach Name/Status abrufen)
- [x] API fĂŒr Sortierung der Stacks
- [x] Portainer-Steuerung: Start/Stop/Update per Standardbefehl oder benutzerdefiniertem Skript
- [x] Maintenance-Modus: Stackpulse pausiert wÀhrend Portainer-Update und reaktiviert sich automatisch
### Frontend
- [x] Filter: Stacks nach Name oder Status durchsuchen
- [x] Sortierung: Stacks im Frontend sortieren
- [x] Benachrichtigungen im UI: erfolgreicher/fehlgeschlagener Redeploy (Toast + Notification-Center)
- [x] Visualisierung der Datenbereinigung (Konflikt/Auto-Fix Meldungen)
- [x] UI-Komponenten fĂŒr Portainer-Status & Update-Steuerung
- [x] Wartungsbereich mit Statusanzeige und Update-Aktion
### Features
- [x] Frontend-Filter und Sortierungen fĂŒr schnellere Navigation bei vielen Stacks
- [x] Echtzeit-Feedback im UI (Notifications)
- [x] Datenkonsistenz sichern: keine doppelten Stack-IDs mehr
- [x] Portainer-Integration inkl. Update-Workflow und Maintenance-Modus
- [x] Verbesserte Nachvollziehbarkeit aller automatischen Prozesse
đź v0.4 â Geplant
### Backend
- [ ] Zugriffsschutz fĂŒr Endpunkte (nur authentifizierte Nutzer)
- [ ] Benutzerverwaltung in SQLite (Username + Passwort speichern)
- [ ] Passwort-Hashing mit bcrypt oder Àhnlichem Verfahren
- [ ] Basic Auth Middleware (HTTP-Header-basierte Authentifizierung)
- [ ] Session/Token-Verwaltung nach Login
### Frontend
- [ ] Settings Page: UI-Komponenten fĂŒr grundlegende Einstellungen
- [ ] Login-Formular fĂŒr Username + Passwort
- [ ] UI-Sichtbarkeit abhÀngig vom Login (nur eingeloggte Nutzer sehen Redeploy- und Stack-Funktionen)
- [ ] Fehleranzeige bei falschem Login (UI-Feedback)
### Features
- [ ] Benutzer-Authentifizierungssystem mit sicherem Login
- [ ] ZugriffsbeschrÀnkung auf kritische Funktionen
- [ ] Einstellungsseite fĂŒr zukĂŒnftige Systemkonfigurationen
- [ ] Verbesserte Sicherheit & Session-Handling
- [ ] Grundlage fĂŒr Multi-User-Management
---
## đïž Projektstruktur
```bash
stackpulse/
âââ backend/ # Node.js Backend mit Express
â âââ data # SQlite Datenbank
â âââ db # Datenbank-Integration
âââ frontend/ # React Frontend mit Tailwind
âââ scripts/ # Lokale Hilfsskripte (nicht Teil des Images)
â âââ start-dev.sh #Skript fĂŒr den lokalen Start
âââ Dockerfile # Multi-Stage Build fĂŒr Frontend + Backend
âââ docker-compose.yml
âââ README.md
```
---
## đ§ Lokaler Start
### 1. Dev-Server starten (Frontend + Backend)
```bash
./scripts/start-dev.sh
```
âĄïž Danach:
- Frontend â http://Deine-Server-IP:5173
---
## đł Docker-Setup
### Mit Compose starten
```bash
version: "2.4"
services:
stackpulse:
container_name: stackpulse
image: ghcr.io/mboehmlaender/stackpulse
ports:
- '4001:4001'
volumes:
- stackpulse_data:/app/backend/data
environment:
PORTAINER_URL: "Your_Portainer_Server_Address"
PORTAINER_API_KEY: "Your_Portainer_API_Key"
PORTAINER_ENDPOINT_ID: "Your_Portainer_Endpoint_ID"
SELF_STACK_ID: "Stackpulse ID"
restart: unless-stopped
volumes:
stackpulse_data:
```
Die PORTAINER_ENDPOINT_ID erhÀltst du, wenn du die die URL im Browser ansiehst, wenn du das Dashboard in Portainer öffnest:

Die 3 wÀre in diesem Fall Endpoint-ID.
Die STACK_SELF_ID findest du, wenn du das Frontend von StackPulse öffnest:

Diese ID kann erst nach dem Deploy von Stackpulse ausgelesen werden. Vergiss daher nicht, nach dem Hinterlegen der ID in den Variablen das Stack noch einmal zu redeployen!
---
## đ Voraussetzungen
- Node.js >= 20
- Docker & Docker Compose
- Zugang zu einer Portainer-Instanz (API-Key erforderlich)
---
## đ€ Mitmachen
1. Repo forken
2. Feature-Branch erstellen
3. PR gegen `dev` öffnen