Skip to content

ABBDVD/truenas

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TrueNAS Docker Traefik Services License

A comprehensive home media server and infrastructure setup running on TrueNAS, featuring automated media management, secure authentication, and enterprise-grade monitoring.

Dashboard Homepage dashboard showing all services and monitoring widgets

Table of Contents

Overview

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

Hardware Specifications

Parts list

Core Components

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

Storage Devices

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)

Storage Architecture

Storage Layout

/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 Workflow

  1. Download Initiation → Active downloads to /mnt/scratch/downloads (NVMe)
  2. Completion → Move to /mnt/hdd/media/downloads (HDD)
  3. Import → Hard link to /mnt/hdd/media/movies or /mnt/hdd/media/tv
  4. Seeding → Continue from HDD location

ZFS Configuration

Pool Settings

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

Redundancy Strategy

  • 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)

Application Stack

Media Management (Primary)

Compose files: plex.yml, media.yml

Application Subdomain Purpose
Plex plex.dalboplex.ch Media server
Tautulli stats.dalboplex.ch Plex statistics
Radarr movies.dalboplex.ch Movie manager
Sonarr tv.dalboplex.ch TV show manager

Media Management (Secondary)

Compose file: media.yml

Application Subdomain Purpose
Overseerr requests.dalboplex.ch Media request portal
Bazarr subtitles.dalboplex.ch Subtitle manager
Prowlarr indexers.dalboplex.ch Indexer manager
Kometa - Metadata manager
Recyclarr - Quality profiles
Collexions collexions.dalboplex.ch Collection manager
Plex Auto Languages - Language track automation
Huntarr huntarr.dalboplex.ch Missing content hunter
Cleanuparr cleanuparr.dalboplex.ch Download cleanup

Download Clients

Compose file: download.yml

Application Subdomain Purpose
qBittorrent torrents.dalboplex.ch BitTorrent client
SABnzbd usenet.dalboplex.ch Usenet client

Download Automation

Compose file: download-utils.yml

Application Subdomain Purpose
qBit Manage qbit-manage.dalboplex.ch Torrent management
Unpackerr - Archive extraction
Autobrr autobrr.dalboplex.ch Torrent announcements
Cross-seed - Cross-seeding
qbrr - Reannounce & categories
trackarr - Tracker metrics exporter

Web Infrastructure

Compose files: web.yml, core.yml

Application Subdomain Purpose
Traefik traefik.dalboplex.ch Reverse proxy
OAuth2 Proxy login.dalboplex.ch Auth proxy
Homepage admin.dalboplex.ch Admin dashboard
Homepage dalboplex.ch Public dashboard
Watchtower - Auto-updater
Dozzle docker.dalboplex.ch Log viewer
Filebrowser files.dalboplex.ch File manager
Docker Proxy - Socket proxy

Applications

Compose file: owlmend.yml

Application Subdomain Purpose
Owlmend owlmend.dalboplex.ch Owlmend application
MongoDB - Database
Mongo Express mongo.dalboplex.ch MongoDB admin UI

Game Servers

Compose file: games.yml

Application Ports Purpose
Minecraft 25565 Minecraft Java server
Satisfactory 7777 Satisfactory dedicated server

Monitoring & Metrics

Compose file: monitoring.yml

Application Subdomain Purpose
Uptime Kuma uptime.dalboplex.ch Service availability & alerts
Grafana grafana.dalboplex.ch Metrics visualization
Prometheus prometheus.dalboplex.ch Metrics collection
VictoriaMetrics victoria.dalboplex.ch Long-term metrics storage
Glances glances.dalboplex.ch System monitoring
Scrutiny disks.dalboplex.ch Disk health
Speedtest Tracker speedtest.dalboplex.ch Speed monitoring
Node Exporter - System metrics exporter
qBittorrent Exporter - Torrent metrics exporter

Total Services: 46 containers across 10 compose files

Network & Security

Domain Configuration

  • Primary: dalboplex.ch - Main domain with wildcard SSL
  • Alias: dplx.ch - Short alias (redirects to dalboplex.ch)

Authentication Architecture

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
Loading
  • Provider: Keycloak (external at login.ceilingcat.ch)
  • Protocol: OAuth2/OIDC
  • Access Control: Group-based (dalboplex group required)
  • Session: 24-hour cookie on .dalboplex.ch
  • Public Routes: Plex, Overseerr, public homepage

Network Configuration

  • Docker Network: apps (external, shared)
  • Container User: 1000:1000 (PUID/PGID)
  • Timezone: Europe/Zurich
  • Internal DNS: Service name resolution

Architecture Diagrams

System Overview

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
Loading

Key Features

Performance Optimizations

  • 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

Automation

  • 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

Monitoring & Observability

  • 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

Backup & Redundancy

  • 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.

About

TrueNas Home Server

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 100.0%