What is this?
A dashboard for monitoring my server. It displays system metrics such as CPU, RAM, disk, and network in real time. Additionally, systemd services and Docker containers can be inspected and restarted directly if needed. A centralized log view rounds out the feature set.
The foundation for this came from Alex, a good friend and former colleague who developed the original service panel. I adapted it to my own infrastructure — including Single Sign-On via my self-hosted Zitadel setup and a consistent design matching my other tools. Thanks to Alex for the solid base!
Features
- Overview: CPU, RAM, disk, and network utilization at a glance
- Services: List, filter, and restart all systemd services
- Containers: Docker container status with restart functionality
- Logs: Centralized log view for services and containers with download option
- Monitoring: Automatic alerts for high RAM or disk utilization
- Dark/Light Mode with a consistent style guide
Tech Stack
| Area | Technology |
|---|---|
| Frontend | Vue 3 with Vite |
| Backend | Express + TypeScript |
| Auth | Zitadel OIDC ( SSO ) |
| Deployment | Docker + Nginx + GitHub Actions |
How It Works
The app runs as a Docker container on the server. A background poller regularly collects system data — metrics every 5 seconds, service and container status every minute. The results are cached so the dashboard can load instantly.
Since the container has no direct access to the host, commands like systemctl and journalctl are executed via nsenter in the host namespace. This is the most notable technical aspect of the setup.
Deployment is fully automated: on every push to main, GitHub Actions rebuilds the Docker image and deploys it to the server.
Security
- Access only with a valid SSO session via Zitadel, my self-hosted identity provider for single sign-on across all my services
- Rate limiting on all routes
- Security headers including CSP and HSTS
- Inputs are validated, shell commands have timeouts