# ⭐ Popular Services Guide

**🟡 Intermediate Guide**

This guide covers the most popular and useful services in the homelab, with detailed setup instructions and real-world usage examples. These services provide the most value and are great starting points for any homelab.

## 🎯 Top 10 Must-Have Services

| Rank | Service | Category | Difficulty | Why It's Essential |
|------|---------|----------|------------|-------------------|
| 1 | **Uptime Kuma** | Monitoring | 🟢 | Know when services go down |
| 2 | **Plex/Jellyfin** | Media | 🟢 | Your personal Netflix |
| 3 | **Vaultwarden** | Security | 🟡 | Secure password management |
| 4 | **Pi-hole** | Security | 🟡 | Block ads network-wide |
| 5 | **Portainer** | Management | 🟡 | Manage Docker containers easily |
| 6 | **Immich** | Media | 🟡 | Your personal Google Photos |
| 7 | **Nginx Proxy Manager** | Infrastructure | 🟡 | Manage web services with SSL |
| 8 | **Paperless-NGX** | Productivity | 🟡 | Go completely paperless |
| 9 | **Grafana + Prometheus** | Monitoring | 🔴 | Advanced system monitoring |
| 10 | **Syncthing** | Storage | 🟡 | Sync files without cloud |

---

## 1️⃣ Uptime Kuma - Service Monitoring

**🟢 Beginner-Friendly | Essential for Everyone**

### 🎯 **What It Does**
- Monitors all your services 24/7
- Sends alerts when services go down
- Beautiful dashboard showing service status
- Tracks uptime statistics and response times

### 🚀 **Quick Setup**
```yaml
version: '3.9'
services:
  uptime-kuma:
    image: louislam/uptime-kuma:latest
    container_name: Uptime-Kuma
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data
    environment:
      - TZ=America/Los_Angeles
    restart: on-failure:5
```

### 🔧 **Configuration Tips**
- **First setup**: Create admin account immediately
- **Monitor types**: HTTP, TCP, Ping, DNS, Docker containers
- **Notifications**: Set up email, Discord, Slack alerts
- **Status pages**: Create public status pages for users

### 💡 **Pro Tips**
- Monitor your router/modem for internet connectivity
- Set up keyword monitoring for login pages
- Use different check intervals (60s for critical, 300s for others)
- Create notification groups to avoid spam

---

## 2️⃣ Plex - Media Streaming Server

**🟢 Beginner-Friendly | Entertainment Essential**

### 🎯 **What It Does**
- Stream movies, TV shows, music to any device
- Automatic metadata and artwork fetching
- User management with sharing capabilities
- Mobile apps for iOS/Android

### 🚀 **Quick Setup**
```yaml
version: '3.9'
services:
  plex:
    image: plexinc/pms-docker:latest
    container_name: Plex
    hostname: plex-server
    ports:
      - "32400:32400"
    environment:
      - TZ=America/Los_Angeles
      - PLEX_CLAIM=claim-xxxxxxxxxxxx  # Get from plex.tv/claim
      - PLEX_UID=1026
      - PLEX_GID=100
    volumes:
      - ./config:/config
      - /volume1/media/movies:/movies:ro
      - /volume1/media/tv:/tv:ro
      - /volume1/media/music:/music:ro
    restart: on-failure:5
```

### 📁 **Media Organization**
```
/volume1/media/
├── movies/
│   ├── Avatar (2009)/
│   │   └── Avatar (2009).mkv
│   └── Inception (2010)/
│       └── Inception (2010).mkv
├── tv/
│   ├── Breaking Bad/
│   │   ├── Season 01/
│   │   └── Season 02/
│   └── The Office/
└── music/
    ├── Artist Name/
    │   └── Album Name/
    └── Various Artists/
```

### 🔧 **Essential Settings**
- **Remote Access**: Enable for mobile access
- **Hardware Transcoding**: Enable if you have Intel/NVIDIA GPU
- **Libraries**: Separate libraries for Movies, TV, Music
- **Users**: Create accounts for family members

### 💡 **Pro Tips**
- Use Plex naming conventions for best metadata
- Enable "Empty trash automatically" 
- Set up Tautulli for usage statistics
- Consider Plex Pass for premium features

---

## 3️⃣ Vaultwarden - Password Manager

**🟡 Intermediate | Security Essential**

### 🎯 **What It Does**
- Stores all passwords securely encrypted
- Generates strong passwords automatically
- Syncs across all devices (phone, computer, browser)
- Compatible with Bitwarden apps

### 🚀 **Quick Setup**
```yaml
version: '3.9'
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: Vaultwarden
    ports:
      - "8012:80"
    volumes:
      - ./data:/data
    environment:
      - WEBSOCKET_ENABLED=true
      - SIGNUPS_ALLOWED=true  # Disable after creating accounts
      - ADMIN_TOKEN=REDACTED_TOKEN
      - DOMAIN=https://vault.yourdomain.com
    restart: on-failure:5
```

### 🔐 **Security Setup**
1. **Create admin token**: `openssl rand -base64 48`
2. **Disable signups** after creating accounts
3. **Enable 2FA** for all accounts
4. **Set up HTTPS** with reverse proxy
5. **Regular backups** of `/data` directory

### 📱 **Client Setup**
- **Browser**: Install Bitwarden extension
- **Mobile**: Download Bitwarden app
- **Desktop**: Bitwarden desktop application
- **Server URL**: Point to your Vaultwarden instance

### 💡 **Pro Tips**
- Use organization vaults for shared passwords
- Set up emergency access for family
- Enable breach monitoring if available
- Regular password audits for weak/reused passwords

---

## 4️⃣ Pi-hole - Network Ad Blocker

**🟡 Intermediate | Network Essential**

### 🎯 **What It Does**
- Blocks ads and trackers for entire network
- Speeds up web browsing significantly
- Provides DNS filtering and monitoring
- Works on all devices automatically

### 🚀 **Quick Setup**
```yaml
version: '3.9'
services:
  pihole:
    image: pihole/pihole:latest
    container_name: Pi-hole
    hostname: pihole
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "9000:80"  # Web interface
    environment:
      - TZ=America/Los_Angeles
      - WEBPASSWORD="REDACTED_PASSWORD"
      - FTLCONF_LOCAL_IPV4=192.168.1.100  # Your server IP
      - DNSMASQ_LISTENING=local
    volumes:
      - ./etc-pihole:/etc/pihole
      - ./etc-dnsmasq.d:/etc/dnsmasq.d
    dns:
      - 127.0.0.1
      - 1.1.1.1
    restart: on-failure:5
```

### 🌐 **Network Configuration**
1. **Router DNS**: Set Pi-hole IP as primary DNS
2. **Backup DNS**: Set secondary DNS (1.1.1.1 or 8.8.8.8)
3. **DHCP**: Optionally let Pi-hole handle DHCP
4. **Static IP**: Ensure Pi-hole has static IP address

### 📋 **Recommended Blocklists**
- **StevenBlack**: Comprehensive host file
- **EasyList**: Standard ad blocking
- **Malware domains**: Security protection
- **Social media**: Block social tracking (optional)

### 💡 **Pro Tips**
- Whitelist false positives immediately
- Use groups for different device policies
- Monitor query logs for troubleshooting
- Set up conditional forwarding for local domains

---

## 5️⃣ Portainer - Docker Management

**🟡 Intermediate | Management Essential**

### 🎯 **What It Does**
- Web-based Docker container management
- Visual interface for Docker operations
- Template library for easy deployments
- Multi-host management capabilities

### 🚀 **Quick Setup**
```yaml
version: '3.9'
services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: Portainer
    ports:
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/data
    restart: on-failure:5
```

### 🔧 **Initial Configuration**
1. **Admin account**: Create on first visit
2. **Environment**: Connect to local Docker
3. **Templates**: Enable app template library
4. **Users**: Create accounts for team members

### 📊 **Key Features**
- **Container management**: Start, stop, restart containers
- **Image management**: Pull, build, remove images
- **Volume management**: Create and manage volumes
- **Network management**: Create custom networks
- **Stack deployment**: Deploy multi-container applications

### 💡 **Pro Tips**
- Use stacks instead of individual containers
- Set up webhooks for automated deployments
- Monitor resource usage through dashboard
- Use templates for common applications

---

## 6️⃣ Immich - Photo Management

**🟡 Intermediate | Media Essential**

### 🎯 **What It Does**
- Self-hosted Google Photos alternative
- AI-powered face recognition and object detection
- Mobile apps for automatic photo backup
- Advanced search and organization features

### 🚀 **Quick Setup**
```yaml
version: '3.9'
services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:release
    container_name: Immich-Server
    ports:
      - "8212:3001"
    volumes:
      - ./upload:/usr/src/app/upload
      - /volume1/photos:/usr/src/app/external:ro
    env_file:
      - .env
    depends_on:
      - redis
      - database
    restart: on-failure:5

  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:release
    container_name: Immich-ML
    volumes:
      - ./model-cache:/cache
    env_file:
      - .env
    restart: on-failure:5

  redis:
    image: redis:6.2-alpine
    container_name: Immich-Redis
    restart: on-failure:5

  database:
    image: tensorchord/pgvecto-rs:pg14-v0.2.0
    container_name: Immich-DB
    environment:
      - POSTGRES_PASSWORD="REDACTED_PASSWORD"
      - POSTGRES_USER=postgres
      - POSTGRES_DB=immich
    volumes:
      - ./postgres:/var/lib/postgresql/data
    restart: on-failure:5
```

### 📱 **Mobile Setup**
1. **Download app**: Immich mobile app (iOS/Android)
2. **Server URL**: Enter your Immich server address
3. **Account**: Create user account in web interface
4. **Auto-backup**: Enable automatic photo backup

### 🤖 **AI Features**
- **Face recognition**: Automatically group photos by people
- **Object detection**: Search for "car", "dog", "beach", etc.
- **Smart search**: Natural language photo search
- **Duplicate detection**: Find and remove duplicate photos

### 💡 **Pro Tips**
- Use external library for existing photos
- Set up regular database backups
- Monitor storage usage and set quotas
- Use reverse proxy for HTTPS access

---

## 7️⃣ Nginx Proxy Manager - Reverse Proxy

**🟡 Intermediate | Infrastructure Essential**

### 🎯 **What It Does**
- Manages reverse proxy configurations easily
- Automatic SSL certificate generation (Let's Encrypt)
- Custom domains for all your services
- Access control and authentication

### 🚀 **Quick Setup**
```yaml
version: '3.9'
services:
  nginx-proxy-manager:
    image: jc21/nginx-proxy-manager:latest
    container_name: Nginx-Proxy-Manager
    ports:
      - "80:80"
      - "443:443"
      - "81:81"  # Admin interface
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    environment:
      - DB_SQLITE_FILE=/data/database.sqlite
    restart: on-failure:5
```

### 🌐 **Domain Setup**
1. **DNS records**: Point domains to your public IP
2. **Port forwarding**: Forward ports 80 and 443
3. **Proxy hosts**: Create entries for each service
4. **SSL certificates**: Enable Let's Encrypt for HTTPS

### 🔧 **Common Configurations**
```
# Example proxy host configurations
plex.yourdomain.com → 192.168.1.100:32400
vault.yourdomain.com → 192.168.1.100:8012
photos.yourdomain.com → 192.168.1.100:8212
```

### 💡 **Pro Tips**
- Use wildcard certificates for subdomains
- Set up access lists for sensitive services
- Enable HTTP/2 for better performance
- Monitor certificate expiration dates

---

## 8️⃣ Paperless-NGX - Document Management

**🟡 Intermediate | Productivity Essential**

### 🎯 **What It Does**
- Scans and digitizes all your documents
- OCR text recognition for searchability
- Automatic tagging and organization
- Mobile app for document scanning

### 🚀 **Quick Setup**
```yaml
version: '3.9'
services:
  paperless-ngx:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    container_name: Paperless-NGX
    ports:
      - "8010:8000"
    volumes:
      - ./data:/usr/src/paperless/data
      - ./media:/usr/src/paperless/media
      - ./export:/usr/src/paperless/export
      - ./consume:/usr/src/paperless/consume
    environment:
      - PAPERLESS_REDIS=redis://redis:6379
      - PAPERLESS_DBHOST=db
      - PAPERLESS_DBNAME=paperless
      - PAPERLESS_DBUSER=paperless
      - PAPERLESS_DBPASS=paperless
      - PAPERLESS_SECRET_KEY=your-secret-key
      - PAPERLESS_URL=https://docs.yourdomain.com
      - PAPERLESS_OCR_LANGUAGE=eng
    depends_on:
      - db
      - redis
    restart: on-failure:5

  db:
    image: postgres:15
    container_name: Paperless-DB
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=paperless
      - POSTGRES_USER=paperless
      - POSTGRES_PASSWORD="REDACTED_PASSWORD"
    restart: on-failure:5

  redis:
    image: redis:7
    container_name: Paperless-Redis
    restart: on-failure:5
```

### 📄 **Document Workflow**
1. **Scan documents**: Use mobile app or scanner
2. **Drop in consume folder**: Auto-processing begins
3. **OCR processing**: Text extraction and indexing
4. **Auto-tagging**: Based on content and rules
5. **Search and organize**: Find documents instantly

### 🏷️ **Organization Tips**
- **Tags**: Create tags for categories (tax, medical, etc.)
- **Document types**: Set up types (invoice, receipt, etc.)
- **Correspondents**: Track who sent documents
- **Custom fields**: Add metadata for better organization

### 💡 **Pro Tips**
- Set up email consumption for digital documents
- Create consumption rules for automatic processing
- Use date parsing for automatic date detection
- Regular backups of database and media files

---

## 9️⃣ Grafana + Prometheus - Advanced Monitoring

**🔴 Advanced | Monitoring Essential**

### 🎯 **What It Does**
- Collects detailed metrics from all systems
- Creates beautiful dashboards and visualizations
- Sets up alerting for system issues
- Tracks performance trends over time

### 🚀 **Quick Setup**
```yaml
version: '3.9'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: Prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--storage.tsdb.retention.time=60d'
    restart: on-failure:5

  grafana:
    image: grafana/grafana:latest
    container_name: Grafana
    ports:
      - "7099:3000"
    volumes:
      - ./grafana-data:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD="REDACTED_PASSWORD"
      - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
    restart: on-failure:5

  node-exporter:
    image: prom/node-exporter:latest
    container_name: Node-Exporter
    ports:
      - "9100:9100"
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
    restart: on-failure:5
```

### 📊 **Essential Dashboards**
- **Node Exporter Full**: System metrics (CPU, RAM, disk)
- **Docker Container Metrics**: Container resource usage
- **Network Overview**: Network traffic and connectivity
- **Service Uptime**: Service availability tracking

### 🚨 **Alerting Setup**
- **High CPU usage**: > 80% for 5 minutes
- **Low disk space**: < 10% remaining
- **Service down**: Failed health checks
- **High memory usage**: > 90% for 5 minutes

### 💡 **Pro Tips**
- Start with pre-built dashboards from grafana.com
- Set up notification channels (email, Slack, Discord)
- Use variables in dashboards for flexibility
- Regular Prometheus data retention cleanup

---

## 🔟 Syncthing - File Synchronization

**🟡 Intermediate | Storage Essential**

### 🎯 **What It Does**
- Syncs files between devices without cloud
- Peer-to-peer synchronization (no central server)
- Version history and conflict resolution
- Works across Windows, Mac, Linux, Android

### 🚀 **Quick Setup**
```yaml
version: '3.9'
services:
  syncthing:
    image: syncthing/syncthing:latest
    container_name: Syncthing
    hostname: syncthing-server
    ports:
      - "8384:8384"  # Web UI
      - "22000:22000/tcp"  # File transfers
      - "22000:22000/udp"  # File transfers
      - "21027:21027/udp"  # Discovery
    volumes:
      - ./config:/var/syncthing/config
      - ./data:/var/syncthing/data
    environment:
      - PUID=1026
      - PGID=100
    restart: on-failure:5
```

### 🔗 **Device Setup**
1. **Install Syncthing**: On all devices you want to sync
2. **Device IDs**: Exchange device IDs between devices
3. **Folders**: Create shared folders on each device
4. **Permissions**: Set read-only or read-write access

### 📁 **Common Sync Scenarios**
- **Documents**: Sync work documents across computers
- **Photos**: Backup phone photos to server
- **Music**: Sync music library to mobile devices
- **Backups**: Sync important files for redundancy

### 💡 **Pro Tips**
- Use ignore patterns for temporary files
- Set up versioning for important folders
- Monitor sync status regularly
- Use relay servers for devices behind NAT

---

## 🚀 Getting Started Recommendations

### 🎯 **Week 1: Foundation**
1. **Uptime Kuma**: Monitor your services
2. **Portainer**: Manage Docker containers
3. **Nginx Proxy Manager**: Set up reverse proxy

### 🎯 **Week 2: Core Services**
4. **Vaultwarden**: Secure password management
5. **Pi-hole**: Block ads network-wide
6. **Plex/Jellyfin**: Start your media server

### 🎯 **Week 3: Productivity**
7. **Immich**: Photo management
8. **Paperless-NGX**: Document digitization
9. **Syncthing**: File synchronization

### 🎯 **Week 4: Advanced**
10. **Grafana + Prometheus**: Advanced monitoring

## 📊 Service Comparison

### 🎬 **Media Servers**
| Feature | Plex | Jellyfin | Emby |
|---------|------|----------|------|
| **Cost** | Free/Premium | Free | Free/Premium |
| **Ease of Use** | Excellent | Good | Good |
| **Mobile Apps** | Excellent | Good | Good |
| **Hardware Transcoding** | Premium | Free | Premium |
| **Plugins** | Limited | Extensive | Moderate |

### 🔐 **Password Managers**
| Feature | Vaultwarden | Bitwarden | 1Password |
|---------|-------------|-----------|-----------|
| **Self-hosted** | Yes | No | No |
| **Cost** | Free | Free/Premium | Premium |
| **Features** | Full | Limited/Full | Full |
| **Mobile Apps** | Yes | Yes | Yes |
| **Browser Extensions** | Yes | Yes | Yes |

### 📊 **Monitoring Solutions**
| Feature | Uptime Kuma | Grafana | Zabbix |
|---------|-------------|---------|--------|
| **Complexity** | Low | Medium | High |
| **Features** | Basic | Advanced | Enterprise |
| **Setup Time** | 10 minutes | 2 hours | 8+ hours |
| **Resource Usage** | Low | Medium | High |

---

## 📋 Next Steps

### 🎯 **After Popular Services**
- **[Service Categories](categories.md)**: Explore more specialized services
- **[Service Index](index.md)**: Complete list of all available services
- **[Deployment Guide](../admin/deployment.md)**: Learn advanced deployment patterns
- **[Advanced Topics](../advanced/ansible.md)**: Automation and scaling

### 🎯 **Community Resources**
- **r/homelab**: Reddit community for homelab enthusiasts
- **r/selfhosted**: Self-hosting community and discussions
- **Discord servers**: Real-time chat with other homelabbers
- **YouTube channels**: TechnoTim, NetworkChuck, Craft Computing

---

*These popular services form the backbone of most successful homelabs. Start with the ones that solve your immediate needs, then gradually expand your infrastructure as you become more comfortable with the technology.*