# My Self-Hosting Stack: Everything I Run, and How It All Connects

When I first wrote about the emotional rollercoaster of self-hosting, I focused on the why, the motivations, frustrations, and addictive wins that come with running your own infrastructure. But one of the most common questions from friends I got was: ***“Okay, but what do you actually self-host?”***

This post is my answer. It’s a complete breakdown of the apps I run, how they connect, what runs in Docker, what runs natively, and how I try to keep everything just stable enough to trust with my digital life.

## Hardware Overview

Before diving into apps, here's the gear powering it all.

**Server:** Dell OptiPlex 3050 Micro  
i3-7100T, 128GB NVMe boot + 1TB SSD for `/data`

**External Storage:** 4TB Seagate Expansion Drive  
Mounted as `/mnt/dumptruck`, used for media, downloads, and backups

**Network:** Tailscale for remote access, Samba for local file sharing

Everything runs on **Fedora Server**, headless.

## Core Stack

These are the foundational apps, things I rely on daily.

### Nextcloud

**Purpose:** File sync, calendar, contacts, notes  
**Setup:** Runs in Docker, `/data/nextcloud` mounted for storage  
**Extras:** Integrates with Photo backup from iOS via iCloudpd, accessible over Tailscale

### Paperless

**Purpose:** Document archiving (PDFs, bills, IDs, etc.)  
**Consume Folder:** Default, with OCR and auto-tagging enabled  
**Setup:** `/data/paperless` as persistent volume, runs in Docker  
**Note:** Planning to add rules and a Discord notification bot

### Immich

**Purpose:** Private Google Photos replacement  
**Data Location:** `/data/immich`  
**Setup:** Docker Compose; iOS and Android apps used for uploads

## Backup + Redundancy

Backups are the difference between peace of mind and total panic. Here's how I manage mine.

### Cloud Backups

Google Drive and Mega are mounted via containers.  
Backups are copied regularly to `/mnt/dumptruck/Backups/` using `rsync`.  
Encrypted `.tar.gz` files are stored offsite.

### Snapshot Scripts

I use ZFS-like manual snapshots of important folders like Nextcloud and Paperless.  
I plan to automate snapshot creation and verification soon.

## Smart Home and Monitoring

This is a pretty new space for me, but it's where things get fun and occasionally chaotic.

### Home Assistant

**Purpose:** Control smart lights, routines, sensors  
**Setup:** Native install under `/data/homeassistant`  
**Devices:** Two smart bulbs, ambient lighting via Arduino and Prismatik  
**Access:** Exposed on local IP

### Homebridge

**Purpose:** Bridge non-HomeKit devices to the Apple ecosystem  
**Setup:** Native install (not Docker)  
**Status:** In active use with iPhone and iPad

### Tailscale

**Purpose:** Private remote access across phone, laptop, and tablet  
**Bonus:** Simplifies SSH, Nextcloud access, and photo syncing

## Media and Downloads

### Jellyfin

**Purpose:** Local movie and TV streaming  
**Storage:** Reads from `/mnt/dumptruck/Media`  
**Setup:** Docker

### Torrent Stack (qBittorrent, Prowlarr, Bazarr)

**Purpose:** Automated media management  
**Tools:**

* `qBittorrent` for downloads
    
* `Prowlarr` as indexer manager
    
* `Bazarr` for subtitles  
    **Storage:** Downloads to `/mnt/dumptruck/Downloads`
    

## Monitoring and Alerts

### Discord Bot

**Purpose:** Notifies on backup success, failure, and other alerts  
**Setup:** Shell scripts call a webhook with status info

### Grafana (experimental)

**Purpose:** Dashboard for uptime, disk usage, etc.  
**Status:** Used occasionally, but not core to daily operations

## How It All Connects

Everything is centered around `/data` for persistent volumes.  
Media and bulk data are offloaded to the 4TB HDD.  
Tailscale acts as the glue between all mobile and remote devices.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1750610927713/e4da9e33-6eec-4eeb-8304-44e394c8969d.png align="center")

## Lessons from This Stack

* Keep volumes organized under `/data` because it makes backups easier.
    
* Use Tailscale early since it saves days of port-forwarding frustration.
    
* Don’t over-optimize upfront. Get it working first, then make it pretty.
    
* Backups are real work. Automate as much as possible and test recovery.
    

## What's Next

* Setting up snapshot validation
    
* Integrating Paperless with tagging and alert rules
    
* Maybe running a local LLM for notes or search indexing
    

## Final Thoughts

This stack isn’t perfect. It’s full of small decisions, trial-and-error, and weekend experiments. But it works. And most importantly, it gives me back control, ownership, and a sense of craft.
