Ein schlankes, selbstgehostetes Server-Dashboard als einzelne PHP-Datei — nativ oder als Docker-Container.
A lightweight, self-hosted server dashboard in a single PHP file — native or as a Docker container.
| Dashboard | Einstellungen / Settings |
|---|---|
![]() |
![]() |
webdash zeigt alle Webanwendungen und Dienste auf deinem Server in einer übersichtlichen Startseite. Im Docker-Modus werden laufende Container automatisch erkannt, im Normal-Modus scannt webdash ein Verzeichnis nach Projekten. Zusätzlich können beliebige URLs manuell hinzugefügt werden. Jede Kachel zeigt den Live-Status (Online/Offline/Fehler) und ist direkt anklickbar.
Wofür? Du hast mehrere Webanwendungen, Container oder Dienste auf einem Server und willst eine zentrale Übersicht — statt dir IPs und Ports zu merken, öffnest du einfach webdash. Ideal als Startseite für Homeserver, Unraid, NAS oder Entwicklungsumgebungen.
- Docker-Modus — Container-Erkennung über Docker Socket, anpassbar per Labels, ein-/ausblendbar per Toggle
- Verzeichnis-Scan — Erkennt Webanwendungen automatisch mit Live-Status, ein-/ausblendbar per Toggle
- Manuelle Links — Eigene URLs hinzufügen mit Health-Check
- Projekt-Logos — Separate Logos für Dark- und Light-Mode pro Projekt (Drag & Drop Upload)
- Hintergrundbild — Preset-Wallpapers (Hell/Dunkel) oder eigenes Bild hochladen, mit Helligkeits- und Glaseffekt-Reglern
- System-Monitoring — CPU, RAM, Festplatte, Dienste-Status
- Benutzerverwaltung — Mehrere Admin-Benutzer anlegen, bearbeiten, löschen (gespeichert in config.json)
- SMTP E-Mail — E-Mail-Versand konfigurierbar, Passwort-Zurücksetzung per E-Mail
- Admin-Panel — Projekte bearbeiten, Benutzer verwalten, Logos, SMTP-Config
- Setup-Wizard — Geführte Ersteinrichtung (Docker: vereinfacht, Bare-Metal: vollständig)
- Auto-Update — Update direkt im Admin-Panel
- Google-Suche — Optionale Google-Suchleiste im User-View, aktivierbar in den Einstellungen
- Dark/Light Theme — Umschaltbar
- Zweisprachig — Deutsch & Englisch
- Unraid-kompatibel — XML-Template für Unraid Community Apps enthalten
services:
webdash:
image: floppy001/webdash:latest
container_name: webdash
ports:
- "8080:80"
environment:
- WEBDASH_DOCKER_MODE=true
#- WEBDASH_HOST_IP=192.168.1.100 # Optional: Ziel-Host fuer IP:PORT-Links
#- WEBDASH_DOCKER_HEALTH_MODE=state # state|http|off
#- WEBDASH_DOCKER_ALLOW_PRIVATE_PORTS=false # Fallback auf interne Ports erlauben
#- WEBDASH_HOSTNAME=mein-server # Optional: Anzeigename statt Container-ID
#- WEBDASH_SCAN_DIR=/sites # Optional: zusätzlich Verzeichnis scannen
volumes:
- webdash-data:/var/www/html/.dashboard
- /var/run/docker.sock:/var/run/docker.sock:ro
#- /mnt/user/appdata/sites:/sites:ro # Optional: Host-Verzeichnis mit Webanwendungen
restart: unless-stopped
volumes:
webdash-data:docker compose up -dDashboard öffnen: http://SERVER-IP:8080
| Variable | Beschreibung | Pflicht |
|---|---|---|
WEBDASH_DOCKER_MODE |
true aktiviert Docker-Modus (Container statt Verzeichnisse) |
Ja |
WEBDASH_HOST_IP |
Ziel-Host für automatisch gebaute IP:PORT-Links |
Optional |
WEBDASH_DOCKER_HEALTH_MODE |
state = Docker-Status, http = echter HTTP-Check, off = nur State ohne Reachability |
Optional |
WEBDASH_DOCKER_ALLOW_PRIVATE_PORTS |
true erlaubt Fallback auf nicht veröffentlichte Container-Ports |
Optional |
WEBDASH_HOSTNAME |
Anzeigename im Dashboard (Default: System-Hostname) | Optional |
WEBDASH_SCAN_DIR |
Zusätzliches Verzeichnis scannen (+ Volume-Mount nötig) | Optional |
docker run -d \
--label webdash.name="Meine App" \
--label webdash.icon="🎮" \
--label webdash.description="Beschreibung der App" \
--label webdash.url="http://{HOST_IP}:3000" \
--label webdash.host="app.example.com" \
--label webdash.scheme="https" \
--label webdash.path="/" \
--label webdash.hidden=true \
nginx| Label | Beschreibung |
|---|---|
webdash.name |
Anzeigename (statt Container-Name) |
webdash.icon |
Emoji-Icon (Default: 🐳) |
webdash.description |
Beschreibungstext |
webdash.url |
Volle Ziel-URL, höchste Priorität ({HOST_IP} wird ersetzt) |
webdash.host |
Expliziter Ziel-Host oder Domain für die App |
webdash.scheme |
http oder https für webdash.host / webdash.port |
webdash.path |
Optionaler Pfad, z.B. /app |
webdash.port |
Expliziter Ziel-Port statt Auto-Erkennung |
webdash.hidden |
true = Container im Dashboard ausblenden |
Hinweis:
- Ohne
webdash.urloderwebdash.hostnutzt webdash nur veröffentlichte Host-Ports als Auto-Fallback. - Nicht veröffentlichte interne Container-Ports werden standardmäßig nicht mehr verlinkt, weil sie im Browser meist nicht erreichbar sind.
- Reverse-Proxy- oder Domain-Setups sollten
webdash.urloderwebdash.hostsetzen.
install.phpauf den Server herunterladen:curl -L https://raw.githubusercontent.com/floppy007/webdash/main/install.php -o /var/www/install.php
- Im Browser öffnen:
http://dein-server/install.php - Der Wizard prüft die Voraussetzungen und installiert webdash automatisch
install.phpnach der Installation löschen!
mkdir -p /var/www/.dashboard
curl -L https://raw.githubusercontent.com/floppy007/webdash/main/index.php -o /var/www/index.php
curl -L https://raw.githubusercontent.com/floppy007/webdash/main/.dashboard/app.php -o /var/www/.dashboard/app.php
curl -L https://raw.githubusercontent.com/floppy007/webdash/main/.htaccess -o /var/www/.htaccess
chown -R www-data:www-data /var/www/.dashboardBeim ersten Aufruf erscheint der Setup-Wizard: Benutzername, Passwort und optional eine E-Mail-Adresse (für Passwort-Reset) festlegen. Die Konfiguration wird in .dashboard/config.json gespeichert und kann jederzeit im Admin-Panel geändert werden.
Docker: Docker + Docker Compose
Bare-Metal:
- PHP 8.1 oder höher
- Apache mit
mod_rewrite - PHP-Extensions:
curl - Schreibrechte für
.dashboard/
index.phpmuss im DocumentRoot (oder VirtualHost-Verzeichnis) liegenAllowOverride Allmuss für das Verzeichnis aktiviert seinmod_rewritemuss aktiviert sein (a2enmod rewrite && systemctl restart apache2)
webdash läuft bewusst nur über HTTP — für den internen Einsatz auf Homeservern und im LAN reicht das.
Für externen Zugriff mit HTTPS empfehlen wir einen Reverse Proxy (z.B. nginx, Caddy, Traefik).
webdash erkennt den X-Forwarded-Proto-Header automatisch und generiert Links mit dem richtigen Protokoll.
Beispiel nginx:
server {
listen 443 ssl;
server_name dash.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Docker: Neues Image pullen und Container neu starten:
docker compose pull && docker compose up -dBare-Metal: Im Admin-Panel unter Einstellungen → Update prüfen klicken. Die alten Dateien werden als .bak gesichert.
webdash shows all web applications and services on your server in a clean start page. In Docker mode, running containers are discovered automatically. In normal mode, webdash scans a directory for projects. You can also add any URL manually. Each tile shows the live status (Online/Offline/Error) and is directly clickable.
Why? You have multiple web apps, containers, or services on a server and want a central overview — instead of remembering IPs and ports, just open webdash. Ideal as a start page for home servers, Unraid, NAS, or development environments.
- Docker Mode — Container discovery via Docker socket, customizable with labels, toggleable visibility
- Directory Scan — Auto-detects web applications with live status, toggleable visibility
- Manual Links — Add custom URLs with health checks
- Project Logos — Separate logos for dark and light mode per project (drag & drop upload)
- Background Image — Preset wallpapers (light/dark) or custom upload, with brightness and glass effect sliders
- System Monitoring — CPU, RAM, disk, service status
- User Management — Create, edit, delete multiple admin users (stored in config.json)
- SMTP Email — Configurable email sending, password reset via email
- Admin Panel — Edit projects, manage users, logos, SMTP config
- Setup Wizard — Guided first-run setup (Docker: simplified, bare-metal: full)
- Auto-Update — Update directly from the admin panel
- Google Search — Optional Google search bar in user view, can be enabled in settings
- Dark/Light Theme — Toggleable
- Bilingual — German & English
- Unraid-compatible — XML template for Unraid Community Apps included
services:
webdash:
image: floppy001/webdash:latest
container_name: webdash
ports:
- "8080:80"
environment:
- WEBDASH_DOCKER_MODE=true
#- WEBDASH_HOST_IP=192.168.1.100 # Optional: target host for IP:PORT links
#- WEBDASH_DOCKER_HEALTH_MODE=state # state|http|off
#- WEBDASH_DOCKER_ALLOW_PRIVATE_PORTS=false # allow fallback to internal ports
#- WEBDASH_HOSTNAME=my-server # Optional: display name instead of container ID
#- WEBDASH_SCAN_DIR=/sites # Optional: also scan a directory
volumes:
- webdash-data:/var/www/html/.dashboard
- /var/run/docker.sock:/var/run/docker.sock:ro
#- /mnt/user/appdata/sites:/sites:ro # Optional: host directory with web apps
restart: unless-stopped
volumes:
webdash-data:docker compose up -dOpen dashboard: http://SERVER-IP:8080
| Variable | Description | Required |
|---|---|---|
WEBDASH_DOCKER_MODE |
true enables Docker mode (containers instead of directories) |
Yes |
WEBDASH_HOST_IP |
Target host for automatically built IP:PORT links |
Optional |
WEBDASH_DOCKER_HEALTH_MODE |
state = Docker state, http = real HTTP reachability check, off = state only |
Optional |
WEBDASH_DOCKER_ALLOW_PRIVATE_PORTS |
true allows fallback to non-published container ports |
Optional |
WEBDASH_HOSTNAME |
Display name in dashboard (default: system hostname) | Optional |
WEBDASH_SCAN_DIR |
Also scan a directory for web apps (requires volume mount) | Optional |
docker run -d \
--label webdash.name="My App" \
--label webdash.icon="🎮" \
--label webdash.description="App description" \
--label webdash.url="http://{HOST_IP}:3000" \
--label webdash.host="app.example.com" \
--label webdash.scheme="https" \
--label webdash.path="/" \
--label webdash.hidden=true \
nginx| Label | Description |
|---|---|
webdash.name |
Display name (instead of container name) |
webdash.icon |
Emoji icon (default: 🐳) |
webdash.description |
Description text |
webdash.url |
Full target URL, highest priority ({HOST_IP} is replaced) |
webdash.host |
Explicit target host or domain for the app |
webdash.scheme |
http or https for webdash.host / webdash.port |
webdash.path |
Optional path, e.g. /app |
webdash.port |
Explicit target port instead of auto-detection |
webdash.hidden |
true = hide container in dashboard |
Notes:
- Without
webdash.urlorwebdash.host, webdash only uses published host ports as the automatic fallback. - Non-published internal container ports are no longer linked by default because they are usually not reachable from the browser.
- Reverse proxy or domain-based setups should set
webdash.urlorwebdash.host.
| Label | Description |
|---|---|
webdash.name |
Display name (instead of container name) |
webdash.icon |
Emoji icon (default: 🐳) |
webdash.description |
Description text |
webdash.url |
Custom URL ({HOST_IP} is replaced) |
webdash.hidden |
true = hide container from dashboard |
- Download
install.phpto your server:curl -L https://raw.githubusercontent.com/floppy007/webdash/main/install.php -o /var/www/install.php
- Open in browser:
http://your-server/install.php - The wizard checks requirements and installs webdash automatically
- Delete
install.phpafter installation!
mkdir -p /var/www/.dashboard
curl -L https://raw.githubusercontent.com/floppy007/webdash/main/index.php -o /var/www/index.php
curl -L https://raw.githubusercontent.com/floppy007/webdash/main/.dashboard/app.php -o /var/www/.dashboard/app.php
curl -L https://raw.githubusercontent.com/floppy007/webdash/main/.htaccess -o /var/www/.htaccess
chown -R www-data:www-data /var/www/.dashboardOn first visit, the setup wizard appears: set a username, password and optionally an email address (for password reset). Configuration is stored in .dashboard/config.json and can be changed at any time in the admin panel.
Docker: Docker + Docker Compose
Bare-metal:
- PHP 8.1 or higher
- Apache with
mod_rewrite - PHP extensions:
curl - Write permissions for
.dashboard/
index.phpmust be in DocumentRoot (or VirtualHost directory)AllowOverride Allmust be enabled for the directorymod_rewritemust be active (a2enmod rewrite && systemctl restart apache2)
webdash intentionally runs on HTTP only — for internal use on home servers and LANs, that's sufficient.
For external access with HTTPS, we recommend a reverse proxy (e.g. nginx, Caddy, Traefik).
webdash automatically detects the X-Forwarded-Proto header and generates links with the correct protocol.
Example nginx:
server {
listen 443 ssl;
server_name dash.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Docker: Pull new image and restart:
docker compose pull && docker compose up -dBare-metal: In the admin panel go to Settings → Check for updates. Old files are backed up as .bak.
MIT License with Attribution Clause — Free to use, modify, and for commercial use.
The copyright notice in the footer ("© Comnic-IT" with link) must not be removed or modified.
Copyright (c) Florian Hesse / Comnic-IT | info@comnic-it.de
See LICENSE for details.

