8.8 KiB
8.8 KiB
Homarr Dashboard Setup Guide
Overview
This document covers the complete setup of Homarr as a homelab dashboard, including:
- Deployment on Atlantis (Synology NAS)
- API-based app and integration configuration
- NPM reverse proxy with Authentik SSO
- Dashboard layout and widget configuration
Architecture
Internet → Cloudflare → NPM (Calypso:443) → Homarr (Atlantis:7575)
↓
Authentik SSO (Calypso:9000)
Access URLs
| Service | Internal URL | External URL |
|---|---|---|
| Homarr | http://atlantis.vish.local:7575 | https://dash.vish.gg |
| NPM Admin | http://calypso.vish.local:81 | https://npm.vish.gg |
| Authentik | http://calypso.vish.local:9000 | https://sso.vish.gg |
DNS Mapping (Split Horizon via Tailscale)
| IP Address | Local DNS |
|---|---|
| 192.168.0.80/200 | atlantis.vish.local |
| 192.168.0.250 | calypso.vish.local |
| 192.168.0.210 | homelab.vish.local |
| (NUC) | concordnuc.vish.local |
Deployment
Homarr Container (Atlantis)
Homarr runs on Atlantis (192.168.0.200) via Docker, managed via GitOps through Portainer:
- Stack ID: 523 (homarr-stack)
- GitOps Path:
hosts/synology/atlantis/homarr.yaml - Auto-Update: Every 5 minutes
Container: homarr
Image: ghcr.io/homarr-labs/homarr:latest
Ports: 7575:7575
Volumes:
- /volume2/metadata/docker/homarr/appdata:/appdata
- /var/run/docker.sock:/var/run/docker.sock:ro
NPM Proxy Configuration
Proxy Host ID: 40
{
"domain_names": ["dash.vish.gg"],
"forward_host": "192.168.0.200",
"forward_port": 7575,
"forward_scheme": "http",
"ssl_forced": true,
"allow_websocket_upgrade": true,
"http2_support": true,
"certificate_id": 1
}
Authentik Forward Auth
NPM advanced config includes Authentik forward auth using:
- Provider: "vish.gg Domain Forward Auth" (ID: 5)
- Mode: forward_domain
- Cookie Domain: vish.gg (covers all *.vish.gg subdomains)
Apps (60 Total)
Atlantis (atlantis.vish.local)
Homelab VM (homelab.vish.local)
| App | Port | URL |
|---|---|---|
| Grafana | 3300 | http://homelab.vish.local:3300 |
| Prometheus | 9090 | http://homelab.vish.local:9090 |
| Redlib | 9000 | http://homelab.vish.local:9000 |
| Karakeep | 3000 | http://homelab.vish.local:3000 |
| Binternet | 21544 | http://homelab.vish.local:21544 |
| Draw.io | 5022 | http://homelab.vish.local:5022 |
Matrix VM (External URLs)
| App | External URL |
|---|---|
| Element | https://matrix.thevish.io |
| Mattermost | https://mm.crista.love |
Concord NUC (concordnuc.vish.local)
| App | Port | URL |
|---|---|---|
| Home Assistant | 8123 | http://concordnuc.vish.local:8123 |
| AdGuard Home | 3000 | http://concordnuc.vish.local:3000 |
| Your Spotify | 4000 | http://concordnuc.vish.local:4000 |
| Invidious | 3001 | http://concordnuc.vish.local:3001 |
Calypso (calypso.vish.local)
| App | Port | URL |
|---|---|---|
| Gitea | 3052 | https://git.vish.gg |
| AdGuard Home | 3000 | http://calypso.vish.local:3000 |
| Actual Budget | 8304 | http://calypso.vish.local:8304 |
| Seafile | 8611 | http://calypso.vish.local:8611 |
Integrations (8 with Live Data)
| Integration | Kind | Features |
|---|---|---|
| Sonarr | sonarr | Queue, Calendar |
| Radarr | radarr | Queue, Calendar |
| Lidarr | lidarr | Queue, Calendar |
| Prowlarr | prowlarr | Indexer Status |
| SABnzbd | sabNzbd | Download Speed, Queue |
| Plex | plex | Now Playing |
| Jellyseerr | jellyseerr | Pending Requests |
| Home Assistant | homeAssistant | Entities, Sensors |
Widgets
The dashboard includes these live widgets:
| Widget | Integration | Shows |
|---|---|---|
| 📅 Release Calendar | Sonarr, Radarr, Lidarr | Upcoming TV/Movie/Music releases |
| 📥 Downloads | SABnzbd | Current download speed & queue |
| 🎬 Now Playing | Plex | Currently streaming media |
| 📺 Media Requests | Jellyseerr | Pending media requests |
| 🏠 Smart Home | Home Assistant | Entity states |
| 🕐 Clock | - | Current time & date |
Dashboard Layout Guide
Recommended Structure
┌─────────────────────────────────────────────────────────────┐
│ 📅 CALENDAR WIDGET │
│ (Shows upcoming releases from Sonarr/Radarr) │
├───────────────────┬─────────────────────┬───────────────────┤
│ 📺 MEDIA │ 📥 DOWNLOADS │ 🏠 SMART HOME │
│ • Plex │ • Sonarr │ • Home Assistant │
│ • Jellyseerr │ • Radarr │ • AdGuard │
│ • Tautulli │ • SABnzbd │ │
├───────────────────┼─────────────────────┼───────────────────┤
│ 🖥️ INFRA │ 📊 MONITORING │ 🔧 TOOLS │
│ • Portainer │ • Grafana │ • IT Tools │
│ • Gitea │ • Prometheus │ • Draw.io │
├───────────────────┴─────────────────────┴───────────────────┤
│ 📥 DOWNLOAD SPEED │ 🎬 NOW PLAYING WIDGET │
└─────────────────────────────────────────────────────────────┘
Setup Steps
- Create Board: Manage → Boards → New Board → "Homelab"
- Enter Edit Mode: Click pencil icon
- Add Sections: + Add → Section (Media, Downloads, etc.)
- Add Apps: + Add → App → Select from list
- Add Widgets: + Add → Widget → Configure integrations
- Save: Click checkmark to exit edit mode
Key Widgets
- Calendar: Shows Sonarr/Radarr upcoming releases
- Downloads: SABnzbd speed and queue
- Media Server: Plex now playing
- Health Monitoring: Service status
Backup & Maintenance
Database Location
/volume2/metadata/docker/homarr/appdata/db/db.sqlite
Backup Command
cp db.sqlite db.sqlite.backup.$(date +%Y%m%d)
Update Homarr
docker pull ghcr.io/homarr-labs/homarr:latest
docker restart homarr
API Reference
Create App
curl -X POST "http://localhost:7575/api/trpc/app.create" \
-H "ApiKey: <token>" \
-H "Content-Type: application/json" \
-d '{"json":{"name":"App","description":"Desc","iconUrl":"...","href":"...","pingUrl":"..."}}'
Create Integration
curl -X POST "http://localhost:7575/api/trpc/integration.create" \
-H "ApiKey: <token>" \
-H "Content-Type: application/json" \
-d '{"json":{"name":"Name","kind":"sonarr","url":"...","secrets":[{"kind":"apiKey","value":"..."}],"attemptSearchEngineCreation":false}}'
Valid Integration Kinds
sabNzbd, nzbGet, sonarr, radarr, lidarr, prowlarr, plex, jellyseerr, homeAssistant, adGuardHome, proxmox, piHole
Troubleshooting
| Issue | Solution |
|---|---|
| "No home board found" | Create board, set as home |
| Integration no data | Verify API keys |
| Auth redirect loop | Clear vish.gg cookies |
| Websocket errors | Ensure NPM has websockets enabled |