This commit adds several new features to enhance homelab management: ## New Services ### Backrest (backup.fig.systems) - Modern web UI for managing Restic backups - Encrypted, deduplicated backups to Backblaze B2 - Automated scheduling and retention policies - Pre-configured to backup Immich photos and homelab configs - SSO protected via tinyauth ### Homarr (home.fig.systems) - Auto-discovery dashboard for all homelab services - Docker socket integration for service monitoring - Clean, modern interface with customizable widgets - SSO protected via tinyauth ## Infrastructure ### Service Template System (templates/service-template/) - Complete template with all common patterns - Traefik labels, health checks, dependencies - Environment variable examples - Comprehensive README with usage instructions - Ensures consistency across all new services ### OpenTofu/Terraform IaC (terraform/) - Complete Proxmox VM provisioning setup - Cloud-init automation for Docker host creation - Automated Docker installation and configuration - Media directory structure creation - Step-by-step documentation including: - Cloud template creation guide - Variable configuration examples - Resource sizing recommendations - Security hardening options ## Documentation Updates - Updated README with new service URLs - Added Homarr and Backrest to directory structure - Updated deployment instructions - Added service table entries for new services All new services follow established patterns: - External homelab network - Let's Encrypt SSL via Traefik - Dual domain support (fig.systems + edfig.dev) - Consistent naming and structure
332 lines
8.4 KiB
Markdown
332 lines
8.4 KiB
Markdown
# Homarr Dashboard
|
|
|
|
Modern, customizable dashboard with automatic Docker service discovery.
|
|
|
|
## Features
|
|
|
|
- 🎨 **Modern UI** - Beautiful, responsive design
|
|
- 🔍 **Auto-Discovery** - Automatically finds Docker services
|
|
- 📊 **Widgets** - System stats, weather, calendar, RSS, etc.
|
|
- 🏷️ **Labels** - Organize services by category
|
|
- 🔗 **Integration** - Connects to *arr apps, Jellyfin, etc.
|
|
- 🎯 **Customizable** - Drag-and-drop layout
|
|
- 🌙 **Dark Mode** - Built-in dark theme
|
|
- 📱 **Mobile Friendly** - Works on all devices
|
|
|
|
## Access
|
|
|
|
- **URL:** https://home.fig.systems or https://home.edfig.dev
|
|
- **Port:** 7575 (if accessing directly)
|
|
|
|
## First-Time Setup
|
|
|
|
### 1. Deploy Homarr
|
|
|
|
```bash
|
|
cd compose/services/homarr
|
|
docker compose up -d
|
|
```
|
|
|
|
### 2. Access Dashboard
|
|
|
|
Open https://home.fig.systems in your browser.
|
|
|
|
### 3. Auto-Discovery
|
|
|
|
Homarr will automatically detect services with these labels:
|
|
|
|
```yaml
|
|
labels:
|
|
homarr.name: "Service Name"
|
|
homarr.group: "Category"
|
|
homarr.icon: "/icons/service.png"
|
|
homarr.href: "https://service.fig.systems"
|
|
```
|
|
|
|
## Adding Services to Dashboard
|
|
|
|
### Automatic (Recommended)
|
|
|
|
Add labels to your service's `compose.yaml`:
|
|
|
|
```yaml
|
|
labels:
|
|
# Traefik labels...
|
|
traefik.enable: true
|
|
# ... etc
|
|
|
|
# Homarr labels
|
|
homarr.name: Jellyfin
|
|
homarr.group: Media
|
|
homarr.icon: https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/jellyfin.png
|
|
homarr.href: https://flix.fig.systems
|
|
```
|
|
|
|
Redeploy the service:
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
Homarr will automatically add it to the dashboard!
|
|
|
|
### Manual
|
|
|
|
1. Click the "+" button in Homarr
|
|
2. Select "Add Service"
|
|
3. Fill in:
|
|
- **Name:** Service name
|
|
- **URL:** https://service.fig.systems
|
|
- **Icon:** Choose from library or custom URL
|
|
- **Category:** Group services (Media, Services, etc.)
|
|
|
|
## Integration with Services
|
|
|
|
### Jellyfin
|
|
|
|
Add to Jellyfin's `compose.yaml`:
|
|
```yaml
|
|
labels:
|
|
homarr.name: Jellyfin
|
|
homarr.group: Media
|
|
homarr.icon: /icons/jellyfin.png
|
|
homarr.widget.type: jellyfin
|
|
homarr.widget.url: http://jellyfin:8096
|
|
homarr.widget.key: ${JELLYFIN_API_KEY}
|
|
```
|
|
|
|
Shows: Currently playing, library stats
|
|
|
|
### Sonarr/Radarr
|
|
|
|
```yaml
|
|
labels:
|
|
homarr.name: Sonarr
|
|
homarr.group: Media Automation
|
|
homarr.icon: /icons/sonarr.png
|
|
homarr.widget.type: sonarr
|
|
homarr.widget.url: http://sonarr:8989
|
|
homarr.widget.key: ${SONARR_API_KEY}
|
|
```
|
|
|
|
Shows: Queue, calendar, missing episodes
|
|
|
|
### qBittorrent
|
|
|
|
```yaml
|
|
labels:
|
|
homarr.name: qBittorrent
|
|
homarr.group: Downloads
|
|
homarr.icon: /icons/qbittorrent.png
|
|
homarr.widget.type: qbittorrent
|
|
homarr.widget.url: http://qbittorrent:8080
|
|
homarr.widget.username: ${QBIT_USERNAME}
|
|
homarr.widget.password: ${QBIT_PASSWORD}
|
|
```
|
|
|
|
Shows: Active torrents, download speed
|
|
|
|
## Available Widgets
|
|
|
|
### System Monitoring
|
|
- **CPU Usage** - Real-time CPU stats
|
|
- **Memory Usage** - RAM usage
|
|
- **Disk Space** - Storage capacity
|
|
- **Network** - Upload/download speeds
|
|
|
|
### Services
|
|
- **Jellyfin** - Media server stats
|
|
- **Sonarr** - TV show automation
|
|
- **Radarr** - Movie automation
|
|
- **Lidarr** - Music automation
|
|
- **Readarr** - Book automation
|
|
- **Prowlarr** - Indexer management
|
|
- **SABnzbd** - Usenet downloads
|
|
- **qBittorrent** - Torrent downloads
|
|
- **Overseerr/Jellyseerr** - Media requests
|
|
|
|
### Utilities
|
|
- **Weather** - Local weather forecast
|
|
- **Calendar** - Events and tasks
|
|
- **RSS Feeds** - News aggregator
|
|
- **Docker** - Container status
|
|
- **Speed Test** - Internet speed
|
|
- **Notes** - Sticky notes
|
|
- **Iframe** - Embed any website
|
|
|
|
## Customization
|
|
|
|
### Change Theme
|
|
|
|
1. Click settings icon (⚙️)
|
|
2. Go to "Appearance"
|
|
3. Choose color scheme
|
|
4. Save
|
|
|
|
### Reorganize Layout
|
|
|
|
1. Click edit mode (✏️)
|
|
2. Drag and drop services
|
|
3. Resize widgets
|
|
4. Click save
|
|
|
|
### Add Categories
|
|
|
|
1. Click "Add Category"
|
|
2. Name it (e.g., "Media", "Tools", "Infrastructure")
|
|
3. Drag services into categories
|
|
4. Collapse/expand as needed
|
|
|
|
### Custom Icons
|
|
|
|
**Option 1: Use Icon Library**
|
|
- Homarr includes icons from [Dashboard Icons](https://github.com/walkxcode/dashboard-icons)
|
|
- Search by service name
|
|
|
|
**Option 2: Custom URL**
|
|
```
|
|
https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/service.png
|
|
```
|
|
|
|
**Option 3: Local Icons**
|
|
- Place in `./icons/` directory
|
|
- Reference as `/icons/service.png`
|
|
|
|
## Recommended Dashboard Layout
|
|
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ 🏠 Homelab Dashboard │
|
|
├─────────────────────────────────────────┤
|
|
│ [System Stats] [Weather] [Calendar] │
|
|
├─────────────────────────────────────────┤
|
|
│ 📺 Media │
|
|
│ [Jellyfin] [Jellyseerr] [Immich] │
|
|
├─────────────────────────────────────────┤
|
|
│ 🤖 Media Automation │
|
|
│ [Sonarr] [Radarr] [qBittorrent] │
|
|
├─────────────────────────────────────────┤
|
|
│ 🛠️ Services │
|
|
│ [Linkwarden] [Vikunja] [FreshRSS] │
|
|
├─────────────────────────────────────────┤
|
|
│ 🔧 Infrastructure │
|
|
│ [Traefik] [LLDAP] [Tinyauth] │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
## Add to All Services
|
|
|
|
To make all your services auto-discoverable, add these labels:
|
|
|
|
### Jellyfin
|
|
```yaml
|
|
homarr.name: Jellyfin
|
|
homarr.group: Media
|
|
homarr.icon: https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/jellyfin.png
|
|
```
|
|
|
|
### Jellyseerr
|
|
```yaml
|
|
homarr.name: Jellyseerr
|
|
homarr.group: Media
|
|
homarr.icon: https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/jellyseerr.png
|
|
```
|
|
|
|
### Immich
|
|
```yaml
|
|
homarr.name: Immich Photos
|
|
homarr.group: Media
|
|
homarr.icon: https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/immich.png
|
|
```
|
|
|
|
### Sonarr/Radarr/SABnzbd/qBittorrent
|
|
```yaml
|
|
homarr.name: [Service]
|
|
homarr.group: Automation
|
|
homarr.icon: https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/[service].png
|
|
```
|
|
|
|
### Linkwarden/Vikunja/etc.
|
|
```yaml
|
|
homarr.name: [Service]
|
|
homarr.group: Utilities
|
|
homarr.icon: https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/[service].png
|
|
```
|
|
|
|
## Mobile Access
|
|
|
|
Homarr is fully responsive. For best mobile experience:
|
|
|
|
1. Add to home screen (iOS/Android)
|
|
2. Works as PWA (Progressive Web App)
|
|
3. Touch-optimized interface
|
|
|
|
## Backup Configuration
|
|
|
|
### Backup
|
|
```bash
|
|
cd compose/services/homarr
|
|
tar -czf homarr-backup-$(date +%Y%m%d).tar.gz config/ data/
|
|
```
|
|
|
|
### Restore
|
|
```bash
|
|
cd compose/services/homarr
|
|
tar -xzf homarr-backup-YYYYMMDD.tar.gz
|
|
docker compose restart
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Services not auto-discovered
|
|
|
|
Check Docker socket permission:
|
|
```bash
|
|
docker logs homarr
|
|
```
|
|
|
|
Verify labels on service:
|
|
```bash
|
|
docker inspect service-name | grep homarr
|
|
```
|
|
|
|
### Can't connect to services
|
|
|
|
Services must be on same Docker network or accessible via hostname.
|
|
|
|
Use container names, not `localhost`:
|
|
- ✅ `http://jellyfin:8096`
|
|
- ❌ `http://localhost:8096`
|
|
|
|
### Widgets not working
|
|
|
|
1. Check API keys are correct
|
|
2. Verify service URLs (use container names)
|
|
3. Check service is running: `docker ps`
|
|
|
|
## Alternatives Considered
|
|
|
|
| Dashboard | Auto-Discovery | Widgets | Complexity |
|
|
|-----------|---------------|---------|------------|
|
|
| **Homarr** | ✅ Excellent | ✅ Many | Low |
|
|
| Homepage | ✅ Good | ✅ Many | Low |
|
|
| Heimdall | ❌ Manual | ❌ Few | Very Low |
|
|
| Dashy | ⚠️ Limited | ✅ Some | Medium |
|
|
| Homer | ❌ Manual | ❌ None | Very Low |
|
|
| Organizr | ⚠️ Limited | ✅ Many | High |
|
|
|
|
**Homarr chosen for:** Best balance of features, auto-discovery, and ease of use.
|
|
|
|
## Resources
|
|
|
|
- [Official Docs](https://homarr.dev/docs)
|
|
- [GitHub](https://github.com/ajnart/homarr)
|
|
- [Discord Community](https://discord.gg/aCsmEV5RgA)
|
|
- [Icon Library](https://github.com/walkxcode/dashboard-icons)
|
|
|
|
## Tips
|
|
|
|
1. **Start Simple** - Add core services first, expand later
|
|
2. **Use Categories** - Group related services
|
|
3. **Enable Widgets** - Make dashboard informative
|
|
4. **Mobile First** - Test on phone/tablet
|
|
5. **Backup Config** - Save your layout regularly
|