Homelab Dashboard
The dashboard application I built myself and ran on docker-main, until its container stopped and I retired it on 2026-09-26. Homarr replaced it the next day.
Homelab Dashboard was my own dashboard application. I kept its source in my Forgejo instance and published it as a container image, and it ran on docker-main. I retired it on 2026-09-26, and on 2026-09-27 Homarr replaced it at the same internal name. Its data and integrations were not migrated.
| Item | Value |
|---|---|
| Host | docker-main (CT 110 on grey-server) |
| Container | homelab-dashboard, from my own published image on its latest tag, which tracked the newest release |
| Networking | Host networking, so it saw real syslog source addresses and could reach the LAN directly |
| Data | SQLite under the project’s data directory, with an environment file and application key beside it |
| Integrations | Configured from a setup wizard in the interface or from the .env; an optional SSH key for GPU and sensor stats |
| Proxmox | Its own read-only Proxmox account and API token, and a firewall rule for its API traffic |
| Access | An internal HTTPS name through Nginx Proxy Manager |
| Deployed | Not recorded; it was in the service inventory by 2026-07-27 |
| Retired | 2026-09-26 |
The archived Compose file is all that’s left of the deployment. The image tag could be pinned to a release, or to a short commit hash to run an unreleased build from main, and the file says so in its comments.
Why it went
The container exited with code 137 early on 2026-09-22. From then on its blackbox probe read probe_success 0, and Grafana’s Internal service is unreachable alert was firing for its HTTPS name. When I came to it four days later, I removed the service rather than repair it. I never established why it stopped in the first place.
Retirement, 2026-09-26
| Area | Change and result |
|---|---|
docker-main | Removed the stack through Dockhand’s authenticated API, with its stack file, then deleted the project directory, environment file, application key and SQLite data |
| Docker | Removed its unused network and both image tags; its port closed, and none of the 14 remaining running containers was unhealthy |
| Maintenance | Took the project out of the fleet-update inventory and validator in the repo and on ansible-01; both validators passed with 19 Compose projects |
| Proxy | Deleted its proxy host through the API; nginx -t passed and the shared certificate stayed in use |
| UniFi | Deleted its DNS record, removed its port from the shared rule that lets the proxy reach docker-main, and deleted the rule that admitted its Proxmox API traffic |
| Proxmox | Confirmed the monitoring exporter uses its own token, then deleted the dashboard’s token and its read-only account; no dashboard user or ACL remained |
| Prometheus | Removed only its blackbox target, checked with promtool and reloaded; removed it from the uptime generator and deployed the regenerated dashboard |
Deleting the Proxmox token first briefly reported an invalid token ACL, and deleting the account removed it, leaving zero dashboard ACLs.
Archiving the source took a detour. Forgejo’s API returned 403 to my reads, the standard login redirected to a password-change page, and a temporary token scoped to repository writes got 403 as well. I deleted that token and confirmed none remained, then set only the repository’s is_archived flag directly in a guarded SQLite transaction and read back is_archived=1. I changed no account password. The Git repository stays on disk as the source archive.
The final checks found no Grafana alert instance for the old name and no trace of it in the uptime dashboard, all 56 Prometheus targets up with no failing probe, and every one of the 23 remaining HTTPS names answering with valid TLS and its expected status. The regenerated uptime dashboard passed its layout check and all 112 of its queries returned data.
The replacement
Homarr 1.77.2 arrived on 2026-09-27 at the same internal name, as a fresh deployment rather than a migration. The other services page covers it.