A sanitised version of the Homepage configuration used to organise and monitor services in my Linux homelab. The stack runs Homepage as the service portal and Netdata for host and container observability.
This public repository intentionally excludes live host addresses, generated logs, credentials and machine-specific service configuration.
- Docker Compose service orchestration
- Read-only Docker socket integration for container status
- Host and container monitoring with Netdata
- A single dashboard for eight self-hosted services
- Separation of reusable configuration from environment-specific values
- Basic operational practices for updates, health checks and recovery
Linux homelab host
┌──────────────────────────────────────────────────────────────┐
│ │
│ Browser ──► Homepage :3000 ──► service links and status │
│ │ │
│ └──── read-only Docker socket │
│ │
│ Netdata :19999 ──► host, process and container metrics │
│ │
│ Linked services │
│ ├─ Portainer ├─ SearXNG │
│ ├─ OpenWebUI ├─ Inflation Tracker │
│ ├─ Trade Journal ├─ Format Converter │
│ └─ Leverage Calculator └─ Netdata │
└──────────────────────────────────────────────────────────────┘
Homepage and Netdata are defined in docker-compose.yml. The remaining applications run as separate homelab workloads and are represented by the sanitised template in config/services.example.yaml.
.
├── docker-compose.yml
├── .env.example
└── config/
├── services.example.yaml
├── settings.yaml
├── widgets.yaml
├── docker.yaml
├── kubernetes.yaml
├── proxmox.yaml
├── custom.css
└── custom.js
- Clone the repository.
- Copy
.env.exampleto.envand setHOMEPAGE_ALLOWED_HOSTSfor your environment. - Copy
config/services.example.yamltoconfig/services.yaml. - Replace every
<HOMELAB_HOST>value with a hostname or LAN address reachable from the Homepage container. - Start the dashboard:
docker compose up -dHomepage will be available on port 3000 and Netdata on port 19999.
Update the images and recreate the containers:
docker compose pull
docker compose up -dUseful checks after an update:
docker compose ps
docker compose logs --tail=100 homepage netdataThe dashboard configuration is stored as text so it can be reviewed and restored. Netdata configuration, state and cache data use named Docker volumes.
- Do not expose the dashboard or Netdata directly to the public internet.
- Restrict access with a host firewall, VPN or authenticated reverse proxy.
- Keep real service addresses and credentials out of the public repository.
- The Docker socket is mounted read-only, but access to it is still security-sensitive.
- Netdata requires elevated host visibility; review its capabilities and mounts for your own threat model.
- Pin image versions in environments where repeatable deployments are more important than automatic updates.
- This repository documents the dashboard layer rather than provisioning every linked service.
- Backups and restore testing are performed outside this Compose stack.
- The public service file uses placeholders and must be adapted before deployment.