Smart & Easy Docker Management
docker.ps ist eine moderne Web-Anwendung zur zentralen Verwaltung von Docker-Containern auf mehreren Servern. Mit einer intuitiven Benutzeroberfläche kannst du Container auf allen deinen Docker-Hosts überwachen und steuern.
- Überblick
- Architektur
- Features
- Technologie-Stack
- Installation & Setup
- Entwicklung
- Produktion
- Agent-Anpassungen
- Lizenz
docker.ps besteht aus zwei Hauptkomponenten:
- Hauptanwendung - Die Web-UI und Backend-API, die auf docker.ps läuft
- docker.ps-agent - Ein leichtgewichtiger Agent, der auf jedem überwachten Docker-Server läuft
Die Hauptanwendung kommuniziert sicher mit den Agents auf den entfernten Servern, um Container-Informationen abzurufen und Aktionen auszuführen.
┌─────────────────────────────────────────────────────────┐
│ docker.ps Web App │
│ (Nuxt.js + PostgreSQL + Google OAuth) │
│ https://docker.ps │
└──────────────────────┬──────────────────────────────────┘
│
│ HTTPS + Auth Key
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Server 1 │ │ Server 2 │ │ Server N │
│ │ │ │ │ │
│ docker.ps- │ │ docker.ps- │ │ docker.ps- │
│ agent │ │ agent │ │ agent │
│ │ │ │ │ │
│ Port 3000 │ │ Port 3000 │ │ Port 3000 │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
└────────────────┼────────────────┘
│
▼
┌─────────────────┐
│ Docker Daemon │
│ (via socket) │
└─────────────────┘
- Benutzer meldet sich über Google OAuth an
- Hauptanwendung speichert Docker-Hosts mit URL und Auth-Key
- Bei Container-Anfragen sendet die Hauptanwendung HTTP-Requests an den Agent
- Agent validiert den Auth-Key und kommuniziert mit dem lokalen Docker Daemon
- Ergebnisse werden an die Hauptanwendung zurückgegeben und in der UI angezeigt
- 🔐 Sichere Authentifizierung - Google OAuth Integration
- 🖥️ Multi-Host Management - Verwalte Container auf mehreren Servern
- 📊 Container-Übersicht - Liste aller Container mit Status, Ports und Images
- 🎮 Container-Steuerung - Start, Stop, Restart, Pause, Unpause, Remove
- 📋 Live Log Streaming - Echtzeit-Logs mit SSE (Server-Sent Events)
- 🖼️ Image Management - Docker Images anzeigen und entfernen
- 🔑 Sicherheit - Auth-Key-basierte Kommunikation zwischen App und Agent
- 🚀 Modern UI - Intuitive Benutzeroberfläche mit Nuxt UI
- 📱 Responsive - Funktioniert auf Desktop und Mobile
- 🔄 Echtzeit-Updates - Aktuelle Container-Informationen
- Framework: Nuxt.js 4.2.1
- Runtime: Bun 1.2.21
- UI: Nuxt UI 4.2.1
- State Management: Pinia 3.0.4
- Datenbank: PostgreSQL mit Prisma 7.0.1
- Docker API: dockerode 4.0.9
- Authentifizierung: Google OAuth mit JWT
- Bun 1.2.21 oder höher
- Docker und Docker Compose
- PostgreSQL (kann über Docker Compose gestartet werden)
- Google OAuth Credentials
git clone https://github.com/yourusername/docker.ps.git
cd docker.psbun installErstelle eine .env Datei im Root-Verzeichnis:
# Database
DATABASE_URL="postgresql://dockerps:your_password@localhost:5432/dockerps?schema=public"
# Application
NUXT_COOKIE_SECRET="your-super-secret-cookie-key"
NUXT_JWT_SECRET="your-super-secret-jwt-key"
NUXT_SECRET_KEY="your-super-secret-key"
NUXT_PUBLIC_APP_URL="http://localhost:3000"
NUXT_PUBLIC_ENVIRONMENT="local"
# Google OAuth
NUXT_GOOGLE_PROJECT_ID="your-google-project-id"
NUXT_GOOGLE_CLIENT_ID="your-google-client-id"
NUXT_GOOGLE_CLIENT_SECRET="your-google-client-secret"
NUXT_GOOGLE_SCOPE="openid"# PostgreSQL mit Docker Compose starten
bun run docker:up
# Oder manuell:
docker compose up -d postgres_docker_ps# Prisma Client generieren
bun run db:generate
# Migrationen anwenden
bun run db:migratebun run devDie Anwendung läuft nun auf http://localhost:3000
Der docker.ps-agent muss auf jedem Server laufen, der überwacht werden soll. Er stellt eine sichere API bereit, über die die Hauptanwendung mit dem Docker Daemon kommuniziert.
- Docker installiert und laufend
- Zugriff auf
/var/run/docker.sock(oder Docker TCP API) - Bun 1.2.21 oder höher (für lokale Entwicklung)
- Oder Docker zum Ausführen des Container-Images
# Agent-Container starten
docker run -d \
--name docker-ps-agent \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v docker-ps-agent-data:/app/data \
-p 3000:3000 \
shroomlife/docker.ps-agent:latest# Repository klonen (nur apps/docker.ps-agent Ordner)
cd apps/docker.ps-agent
# Dependencies installieren
bun install
# Agent starten
bun run dev # Development
# oder
NODE_ENV=production bun src/index.ts # ProductionBeim ersten Start generiert der Agent automatisch einen Auth-Key und speichert ihn in data/_auth.key. Dieser Key wird in der Konsole ausgegeben:
🔑 Your Auth Key: docker_ps_<128-hex-characters>
Wichtig: Kopiere diesen Key - du brauchst ihn, um den Host in der Hauptanwendung hinzuzufügen!
Die Agent-URL ist die öffentlich erreichbare Adresse deines Servers:
- Lokale Entwicklung:
http://localhost:3000 - Produktion:
https://your-server.com:3000oderhttp://your-server-ip:3000
Sicherheitshinweis: In der Produktion solltest du einen Reverse-Proxy (z.B. Nginx) mit SSL/TLS verwenden!
-
Melde dich bei docker.ps an
-
Gehe zu "Hosts" → "Neuer Host"
-
Gib ein:
- Name: Ein beschreibender Name (z.B. "Production Server")
- URL: Die Agent-URL (z.B.
https://your-server.com:3000) - Auth Key: Der generierte Auth-Key vom Agent
-
Speichere den Host
Der Host sollte nun in der Liste erscheinen und du kannst Container verwalten!
# Dependencies installieren
bun install
# Entwicklungsserver starten
bun run dev
# Type-Checking
bun run typecheck
# Linting
bun run lint
bun run lint:fix
# Datenbank-Migrationen
bun run db:migrate # Neue Migration erstellen
bun run db:generate # Prisma Client generieren
bun run db:deploy # Migrationen in Production anwenden
# Build für Production
bun run build
# Preview des Production-Builds
bun run previewcd apps/docker.ps-agent
# Dependencies installieren
bun install
# Entwicklungsserver starten (mit Watch-Mode)
bun run dev
# Docker-Image bauen
bun run docker:build
# Docker-Image pushen
bun run docker:push
# Build und Push
bun run docker:publishdocker.ps/
├── app/ # Nuxt.js Frontend
│ ├── components/ # Vue-Komponenten
│ ├── pages/ # Seiten-Routen
│ ├── stores/ # Pinia Stores
│ └── layouts/ # Layout-Komponenten
├── server/ # Nuxt.js Backend
│ ├── api/ # API-Endpunkte
│ └── utils/ # Server-Utilities
├── apps/
│ └── docker.ps-agent/ # Agent-Anwendung
│ └── src/
│ └── index.ts # Agent-Hauptdatei
├── prisma/ # Prisma Schema & Migrationen
├── shared/ # Geteilte Typen & Utilities
├── compose.yml # Docker Compose für PostgreSQL
├── Dockerfile # Dockerfile für Hauptanwendung
└── package.json
# Docker-Image bauen
bun run docker:build
# Docker-Image zu Docker Hub pushen
bun run docker:push
# Oder beides zusammen
bun run docker:publishversion: '3.8'
services:
docker-ps:
image: shroomlife/docker.ps:latest
restart: unless-stopped
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://user:pass@postgres:5432/dockerps
- NUXT_COOKIE_SECRET=${COOKIE_SECRET}
- NUXT_JWT_SECRET=${JWT_SECRET}
- NUXT_SECRET_KEY=${SECRET_KEY}
- NUXT_PUBLIC_APP_URL=https://docker.ps
- NUXT_PUBLIC_ENVIRONMENT=production
- NUXT_GOOGLE_PROJECT_ID=${GOOGLE_PROJECT_ID}
- NUXT_GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
- NUXT_GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
depends_on:
- postgres
postgres:
image: postgres:latest
restart: unless-stopped
environment:
- POSTGRES_DB=dockerps
- POSTGRES_USER=dockerps
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:Der Agent sollte auf jedem überwachten Server laufen. Siehe Installation oben.
Produktions-Empfehlungen:
- Reverse Proxy: Verwende Nginx oder Traefik mit SSL/TLS
- Firewall: Beschränke Zugriff auf Port 3000 nur von der Hauptanwendung
- Monitoring: Überwache den Agent-Container (z.B. mit Health-Checks)
- Backup: Backupe regelmäßig das
data/Verzeichnis (enthält den Auth-Key)
Wenn neue Features für den Docker-Server hinzugefügt werden sollen, muss der docker.ps-agent entsprechend angepasst werden.
Der Agent befindet sich in apps/docker.ps-agent/src/index.ts. Er verwendet Elysia als Web-Framework.
// In apps/docker.ps-agent/src/index.ts
.get('/containers/:id/logs', async ({ params, query }) => {
const container = DockerAPI.getContainer(params.id);
const logs = await container.logs({
stdout: true,
stderr: true,
tail: parseInt(query.tail || '100', 10),
});
return { logs: logs.toString() };
})-
Agent erweitern (
apps/docker.ps-agent/src/index.ts)- Neue Route hinzufügen
- Dockerode API verwenden für Docker-Operationen
-
Hauptanwendung anpassen
- Neue API-Endpunkte in
server/api/erstellen - Frontend-Komponenten in
app/components/erweitern - Types in
shared/types/aktualisieren
- Neue API-Endpunkte in
-
Agent neu bauen und deployen
cd apps/docker.ps-agent bun run docker:publish -
Agent auf allen Servern aktualisieren
docker pull shroomlife/docker.ps-agent:latest docker restart docker-ps-agent
Der Agent nutzt dockerode für Docker-Operationen. Siehe die dockerode Dokumentation für alle verfügbaren Methoden.
Aktuell implementiert:
- ✅ Container auflisten
- ✅ Container-Details abrufen
- ✅ Container starten/stoppen
- ✅ Container pausieren/unpausieren
- ✅ Container neustarten
- ✅ Container entfernen
- ✅ Container-Logs abrufen (mit Live-Streaming via SSE)
- ✅ Container-Logs herunterladen
- ✅ Images auflisten
- ✅ Images entfernen
Mögliche Erweiterungen:
- 📊 Container-Statistiken (CPU, Memory, etc.)
- 🌐 Netzwerke verwalten
- 💾 Volumes verwalten
- Der Agent generiert beim ersten Start einen zufälligen Auth-Key
- Dieser Key wird in
data/_auth.keygespeichert - Die Hauptanwendung sendet diesen Key im
x-auth-keyHeader - Der Agent validiert den Key mit SHA-256 Hash-Vergleich
- Bei ungültigem Key wird der Request mit 401 abgelehnt
- ✅ Verwende HTTPS für die Agent-Kommunikation (Reverse Proxy)
- ✅ Beschränke Firewall-Regeln auf die Hauptanwendung
- ✅ Rotiere Auth-Keys regelmäßig (Agent neu starten)
- ✅ Überwache Agent-Logs auf verdächtige Aktivitäten
- ✅ Verwende starke Secrets für die Hauptanwendung
[Lizenz hier einfügen]
Beiträge sind willkommen! Bitte erstelle einen Issue oder Pull Request.
Bei Fragen oder Problemen:
- Website: docker.ps
- Issues: GitHub Issues
Made with ❤️ for the Docker community