Lightweight, self-hosted server dashboard — Docker & bare-metal
3.5K
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.
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 -d
Dashboard ö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:
webdash.url oder webdash.host nutzt webdash nur veröffentlichte Host-Ports als Auto-Fallback.webdash.url oder webdash.host setzen.install.php auf den Server herunterladen:
curl -L https://raw.githubusercontent.com/floppy007/webdash/main/install.php -o /var/www/install.php
http://dein-server/install.phpinstall.php nach 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/.dashboard
Beim 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:
mod_rewritecurl.dashboard/index.php muss im DocumentRoot (oder VirtualHost-Verzeichnis) liegenAllowOverride All muss für das Verzeichnis aktiviert seinmod_rewrite muss 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 -d
Bare-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.
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 -d
Open 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:
webdash.url or webdash.host, webdash only uses published host ports as the automatic fallback.webdash.url or webdash.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 |
install.php to your server:
curl -L https://raw.githubusercontent.com/floppy007/webdash/main/install.php -o /var/www/install.php
http://your-server/install.phpinstall.php after 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/.dashboard
On 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:
mod_rewritecurl.dashboard/index.php must be in DocumentRoot (or VirtualHost directory)AllowOverride All must be enabled for the directorymod_rewrite must 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 -d
Bare-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 | [email protected]
See LICENSE for details.
Content type
Image
Digest
sha256:6c25a2394…
Size
182.1 MB
Last updated
6 months ago
docker pull floppy001/webdash