A comprehensive home media server and infrastructure setup running on TrueNAS, featuring automated media management, secure authentication, and enterprise-grade monitoring.
Homepage dashboard showing all services and monitoring widgets
- Overview
- Hardware Specifications
- Storage Architecture
- ZFS Configuration
- Application Stack
- Network & Security
- Architecture Diagrams
- Key Features
Dalboplex is a production-quality home server infrastructure built on TrueNAS, providing:
- Media Streaming: Plex Media Server with GPU transcoding
- Automated Media Management: Radarr, Sonarr, and supporting tools
- Secure Access: OAuth2/OIDC authentication via Keycloak
- SSL/TLS: Automated Let's Encrypt wildcard certificates
- Comprehensive Monitoring: Prometheus, Scrutiny, Glances
- High Performance: Tiered storage with NVMe scratch, SSD configs, HDD media
- Automated Updates: Watchtower for container management
| Component | Specification |
|---|---|
| CPU | AMD Ryzen 9 9950X (16C/32T @ 4.3GHz) |
| RAM | 192GB DDR5-5600 (4x 48GB Corsair Vengeance) |
| Motherboard | ASRock X870E Taichi (AM5, ECC-capable) |
| HBA | Broadcom LSI 9305-16i (16-port SAS3) |
| PSU | Seasonic Prime TX-1000 (1000W, 80+ Titanium) |
| Case | Fractal Design Define 7 XL |
| Cooling | Arctic Liquid Freezer III Pro 280mm AIO |
| GPU | Intel Arc A380 |
| Pool | Devices | Capacity | Purpose |
|---|---|---|---|
| Boot | 1x Samsung 9100 Pro 1TB NVMe | 1TB | TrueNAS OS, Docker images |
| Scratch | 1x Samsung 990 Pro 2TB NVMe | 2TB | Temporary downloads |
| Apps | 2x WD_BLACK SN8100 4TB NVMe | 4TB usable | App configs, databases |
| Media | 8x WD Gold 18TB HDD | ~108TB usable | Media library, completed torrents |
| Media Metadata | 2x WD Red SA500 4TB SATA | Special vdev | Metadata acceleration for Media pool |
Future Expansion: Media pool can expand to 16 drives (4x 4-drive RAIDZ1 vdevs, ~216TB usable)
/mnt/nvme/apps/ → App configs & databases (NVMe SSD Mirror)
├── <container>/
│ ├── config/ → Application configuration
│ ├── data/ → Application databases & state
│ └── logs/ → Application logs
/mnt/hdd/media/ → Media library (HDD RAIDZ1)
├── movies/ → Radarr-managed movies
├── tv/ → Sonarr-managed TV shows
└── downloads/ → Completed torrents
/mnt/scratch/downloads/ → Active torrent downloads (NVMe Scratch)
- Download Initiation → Active downloads to
/mnt/scratch/downloads(NVMe) - Completion → Move to
/mnt/hdd/media/downloads(HDD) - Import → Hard link to
/mnt/hdd/media/moviesor/mnt/hdd/media/tv - Seeding → Continue from HDD location
| Pool | RAID Level | Record Size | Compression | Atime | Special Features |
|---|---|---|---|---|---|
| Boot | None | Default | lz4 | off | - |
| Scratch | None | 128K | lz4 | off | - |
| Apps | Mirror (RAID1) | 128K | lz4 | off | Monthly scrubs |
| Media | RAIDZ1 | 1M | lz4 | off | Monthly scrubs |
- Boot Pool: No redundancy (OS is replaceable)
- Scratch Pool: No redundancy (ephemeral data)
- Apps Pool: Mirrored (1-drive fault tolerance for critical data)
- Media Pool: RAIDZ1 (1-drive fault tolerance, expandable to 4x RAIDZ1 vdevs)
Compose files: plex.yml, media.yml
| Application | Subdomain | Purpose |
|---|---|---|
| plex.dalboplex.ch | Media server | |
| stats.dalboplex.ch | Plex statistics | |
| movies.dalboplex.ch | Movie manager | |
| tv.dalboplex.ch | TV show manager |
Compose file: media.yml
| Application | Subdomain | Purpose |
|---|---|---|
| requests.dalboplex.ch | Media request portal | |
| subtitles.dalboplex.ch | Subtitle manager | |
| indexers.dalboplex.ch | Indexer manager | |
| - | Metadata manager | |
| - | Quality profiles | |
| collexions.dalboplex.ch | Collection manager | |
| - | Language track automation | |
| huntarr.dalboplex.ch | Missing content hunter | |
| cleanuparr.dalboplex.ch | Download cleanup |
Compose file: download.yml
| Application | Subdomain | Purpose |
|---|---|---|
| torrents.dalboplex.ch | BitTorrent client | |
| usenet.dalboplex.ch | Usenet client |
Compose file: download-utils.yml
| Application | Subdomain | Purpose |
|---|---|---|
| qbit-manage.dalboplex.ch | Torrent management | |
| - | Archive extraction | |
| autobrr.dalboplex.ch | Torrent announcements | |
| - | Cross-seeding | |
| - | Reannounce & categories | |
| - | Tracker metrics exporter |
Compose files: web.yml, core.yml
| Application | Subdomain | Purpose |
|---|---|---|
| traefik.dalboplex.ch | Reverse proxy | |
| login.dalboplex.ch | Auth proxy | |
| admin.dalboplex.ch | Admin dashboard | |
| dalboplex.ch | Public dashboard | |
| - | Auto-updater | |
| docker.dalboplex.ch | Log viewer | |
| files.dalboplex.ch | File manager | |
| - | Socket proxy |
Compose file: owlmend.yml
| Application | Subdomain | Purpose |
|---|---|---|
| owlmend.dalboplex.ch | Owlmend application | |
| - | Database | |
| mongo.dalboplex.ch | MongoDB admin UI |
Compose file: games.yml
| Application | Ports | Purpose |
|---|---|---|
| 25565 | Minecraft Java server | |
| 7777 | Satisfactory dedicated server |
Compose file: monitoring.yml
| Application | Subdomain | Purpose |
|---|---|---|
| uptime.dalboplex.ch | Service availability & alerts | |
| grafana.dalboplex.ch | Metrics visualization | |
| prometheus.dalboplex.ch | Metrics collection | |
| victoria.dalboplex.ch | Long-term metrics storage | |
| glances.dalboplex.ch | System monitoring | |
| disks.dalboplex.ch | Disk health | |
| speedtest.dalboplex.ch | Speed monitoring | |
| - | System metrics exporter | |
| - | Torrent metrics exporter |
Total Services: 46 containers across 10 compose files
- Primary:
dalboplex.ch- Main domain with wildcard SSL - Alias:
dplx.ch- Short alias (redirects to dalboplex.ch)
graph LR
A[External Request] --> B[Traefik]
B --> C{Protected?}
C -->|No| D[Service]
C -->|Yes| E[OAuth2 Proxy]
E --> F[Keycloak OIDC]
F --> D
style D fill:#99ff99
- Provider: Keycloak (external at
login.ceilingcat.ch) - Protocol: OAuth2/OIDC
- Access Control: Group-based (
dalboplexgroup required) - Session: 24-hour cookie on
.dalboplex.ch - Public Routes: Plex, Overseerr, public homepage
- Docker Network:
apps(external, shared) - Container User:
1000:1000(PUID/PGID) - Timezone:
Europe/Zurich - Internal DNS: Service name resolution
graph TB
subgraph "External Access"
A[Internet]
end
subgraph "Edge Layer"
B[Traefik Reverse Proxy<br/>9443:443, 9080:80]
C[OAuth2 Proxy<br/>Keycloak OIDC]
end
subgraph "Application Layer"
D1[Media Stack<br/>Plex, Radarr, Sonarr]
D2[Download Stack<br/>qBittorrent, Autobrr]
D4[Infrastructure<br/>Homepage, Dozzle]
D3[Monitoring Stack<br/>Prometheus, Scrutiny]
end
subgraph "Storage Layer"
E2[SSD Mirror<br/>4TB]
E3[HDD RAIDZ1<br/>108TB]
E1[NVMe Scratch<br/>2TB]
end
A --> B
B --> C
C --> D1
C --> D2
C --> D3
C --> D4
D1 -.->|configs| E2
D1 -.->|media| E3
D2 -.->|active| E1
D2 -.->|completed| E3
D3 -.->|metrics| E2
D4 -.->|logs| E2
style B fill:#24A1C1,color:#fff
style C fill:#6366F1,color:#fff
style E1 fill:#ff9999
style E2 fill:#99ff99
style E3 fill:#99ccff
- GPU Transcoding: Plex uses Intel Arc A380 via
/dev/dri - Tmpfs Transcode: 16GB RAM disk for Plex transcoding
- Tiered Storage: NVMe for active downloads, SSD for configs, HDD for media
- ZFS ARC: 192GB RAM provides massive cache benefit
- Metadata vdev: SSD mirror accelerates HDD pool metadata operations
- Resource Limits: qBittorrent capped at 16GB RAM
- Container Updates: Watchtower runs daily at 05:00
- Metadata Management: Kometa runs daily at 04:00
- Quality Profiles: Recyclarr manages custom formats and quality settings
- Archive Extraction: Unpackerr handles RAR/ZIP automatically
- Cross-seeding: Automatic torrent discovery
- Service Availability: Uptime Kuma tracks uptime and sends alerts with automatic monitor creation
- Metrics Visualization: Grafana dashboards for Prometheus data
- Metrics Collection: Prometheus with 90-day retention
- Long-term Storage: VictoriaMetrics for 10-year metrics retention
- System Monitoring: Glances provides real-time system metrics
- Disk Health: Scrutiny monitors all storage devices (SMART)
- Internet Performance: Speedtest every 2 hours
- Log Aggregation: Dozzle for centralized log viewing
- Critical Data: SATA SSD mirror for app configs/databases
- ZFS Snapshots: Automated snapshots on critical pools
- Media Redundancy: RAIDZ1 provides 1-drive fault tolerance per vdev
- Config Version Control: Git repository for compose files
For installation and management instructions, see USAGE.md
Built with: TrueNAS Scale, Docker, Traefik, Plex, and 30+ other amazing open-source projects.