homelab/compose/services/homarr
Claude ffc30ff582
refactor: Move all environment variables to .env files with example secrets
This commit improves configuration management by:

## Changes

### Environment Variable Management
- Moved ALL environment blocks from compose.yaml files to .env files
- Added comprehensive .env files for all 20 services
- Included example secret formats with generation commands
- Added detailed comments explaining what each secret should look like

### Example Secret Formats
All .env files now include examples for:
- **JWT Secrets**: 64-character hex strings
  - Example format: `a1b2c3d4e5f67890abcdef1234567890...`
  - Generate with: `openssl rand -hex 32`

- **Passwords**: Strong alphanumeric passwords
  - Example format: `MyS3cur3P@ssw0rd!2024#HomeL@b`
  - Generate with: `openssl rand -base64 32 | tr -d /=+ | cut -c1-32`

- **Session Secrets**: Random hex strings
  - Example format: `b2c3d4e5f67890abcdef1234567890a1b2...`
  - Generate with: `openssl rand -hex 32`

- **API Keys**: Service-specific formats
  - Meili: 32-character hex (`openssl rand -hex 16`)
  - NextAuth: 64-character hex (`openssl rand -hex 32`)

### GPU Support Documentation
- Added NVIDIA GPU (GTX 1070) configuration for Jellyfin
- Added NVIDIA GPU configuration for Immich (ML inference & transcoding)
- Included setup instructions for NVIDIA Container Toolkit
- Documented how to enable GPU acceleration in each service

### Services Updated

**Core Infrastructure:**
- lldap: Added JWT secret and password examples
- tinyauth: Added session secret examples
- traefik: No environment variables needed

**Media Services:**
- jellyfin: Added .env with GPU configuration docs
- jellyseer: Created .env with logging and timezone settings
- immich: Added database password examples and GPU docs
- sonarr: Created .env for PUID/PGID/TZ
- radarr: Created .env for PUID/PGID/TZ
- sabnzbd: Created .env for PUID/PGID/TZ
- qbittorrent: Created .env for PUID/PGID/TZ/WEBUI_PORT

**Utility Services:**
- homarr: Created .env for port and timezone
- backrest: Added environment variables to .env
- linkwarden: Rewrote .env with NextAuth, Postgres, Meili examples
- vikunja: Created .env with JWT secret and database password
- FreshRSS: Created .env for PUID/PGID/TZ
- booklore: Created .env for PUID/PGID/TZ
- calibre-web: Created .env for PUID/PGID/TZ
- filebrowser: Created .env for PUID/PGID/TZ
- lubelogger: Created .env with locale settings
- rsshub: Created .env with cache and logging config
- microbin: Updated existing .env, removed environment block

### Benefits

1. **Security**:
   - Clear examples show what strong secrets look like
   - Generation commands prevent weak passwords
   - All secrets in one place per service

2. **Consistency**:
   - All services follow the same pattern (env_file: .env)
   - No more environment blocks in compose files
   - Easier to template new services

3. **Usability**:
   - Users know exactly what to change (look for `changeme_*`)
   - Example formats prevent configuration errors
   - Commands provided to generate secure values

4. **Maintainability**:
   - Compose files are cleaner and more readable
   - Environment changes don't require compose file edits
   - Version control friendly (.env files can be .gitignored)

### Files Changed
- Modified: 24 compose.yaml files
- Created: 14 new .env files
- Updated: 6 existing .env files
- Total .env files: 20 across all services

All compose.yaml files now use `env_file: .env` exclusively.
No environment blocks remain in any compose files.
2025-11-06 19:18:07 +00:00
..
.env refactor: Move all environment variables to .env files with example secrets 2025-11-06 19:18:07 +00:00
compose.yaml refactor: Move all environment variables to .env files with example secrets 2025-11-06 19:18:07 +00:00
README.md feat: Add service template, backup solution, dashboard, and IaC tooling 2025-11-05 21:54:30 +00:00

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

First-Time Setup

1. Deploy Homarr

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:

labels:
  homarr.name: "Service Name"
  homarr.group: "Category"
  homarr.icon: "/icons/service.png"
  homarr.href: "https://service.fig.systems"

Adding Services to Dashboard

Add labels to your service's compose.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:

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:

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

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

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

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
┌─────────────────────────────────────────┐
│          🏠 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

homarr.name: Jellyfin
homarr.group: Media
homarr.icon: https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/jellyfin.png

Jellyseerr

homarr.name: Jellyseerr
homarr.group: Media
homarr.icon: https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/jellyseerr.png

Immich

homarr.name: Immich Photos
homarr.group: Media
homarr.icon: https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/immich.png

Sonarr/Radarr/SABnzbd/qBittorrent

homarr.name: [Service]
homarr.group: Automation
homarr.icon: https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/[service].png

Linkwarden/Vikunja/etc.

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

cd compose/services/homarr
tar -czf homarr-backup-$(date +%Y%m%d).tar.gz config/ data/

Restore

cd compose/services/homarr
tar -xzf homarr-backup-YYYYMMDD.tar.gz
docker compose restart

Troubleshooting

Services not auto-discovered

Check Docker socket permission:

docker logs homarr

Verify labels on service:

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

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