2025-11-14 15:31:25 +01:00
2025-11-14 15:31:25 +01:00
2025-11-14 15:31:25 +01:00
2025-11-14 15:31:25 +01:00
2025-11-14 15:31:25 +01:00
2025-11-14 15:31:25 +01:00
2025-11-14 15:31:25 +01:00
2025-11-14 15:31:25 +01:00

tower-of-joy

Self-hosted home server infrastructure with GPU-accelerated ML model serving, media streaming, and secure remote access

Overview

tower-of-joy is a containerized home server platform running on the "tower-of-joy" system, leveraging Portainer + Docker Compose for service orchestration. The infrastructure supports GPU-accelerated workloads (ML inference via Ollama, media transcoding via Jellyfin) while maintaining a clean separation between performance-critical configs (SSD) and bulk content storage (HDD).

Quick Start

Main Dashboard: https://home.schweitz.net (Organizr - unified interface for all services)

System Specifications

  • Host: tower-of-joy (Zorin OS 16.3 / Ubuntu 20.04)
  • CPU: Intel i7-6700 (4C/8T @ 3.40GHz)
  • RAM: 16GB
  • GPU: NVIDIA RTX 2080 Ti (11GB VRAM)
  • Storage:
    • SSD (489GB): Configs, databases, Docker images → /home/jpmschweitzer/docker-data/
    • HDD (3.7TB): Media, user content, backups → /mnt/media/

Architecture

┌─────────────────────────────────────────┐
│  Infrastructure Layer                   │
│  ├── Portainer (8001) - Container mgmt │
│  ├── PostgreSQL Shared (5432) - DB     │
│  ├── Redis Shared (6379) - Cache       │
│  ├── NPM (81) - Reverse proxy          │
│  └── Ollama (11434) - ML models [GPU]  │
├─────────────────────────────────────────┤
│  Networking Layer                       │
│  ├── docker-dataplane - Service mesh   │
│  └── Headscale (8085) - VPN mesh       │
├─────────────────────────────────────────┤
│  Monitoring Layer                       │
│  ├── Uptime Kuma (3001) - Uptime       │
│  ├── Netdata (19999) - Metrics         │
│  └── Organizr (9999) - Dashboard       │
├─────────────────────────────────────────┤
│  Optimization Layer                     │
│  ├── Watchtower - Auto-updates         │
│  └── Maintenance - Automated backups   │
├─────────────────────────────────────────┤
│  Application Layer                      │
│  ├── Open WebUI (82) - LLM chat UI     │
│  ├── Core API (8083) - Infra mgmt      │
│  ├── Jellyfin (8096) - Media [GPU]     │
│  ├── Nextcloud (8082) - Cloud storage  │
│  ├── Gitea (3002) - Git hosting        │
│  └── Samba (445) - File shares         │
└─────────────────────────────────────────┘

Project Structure

tower-of-joy/
├── stacks/              # Docker Compose files (version-controlled)
│   ├── portainer.yml
│   ├── nginx-proxy-manager.yml
│   ├── ollama.yml
│   ├── headscale.yml
│   ├── jellyfin.yml
│   ├── nextcloud.yml
│   └── ...
├── scripts/             # Maintenance automation
│   ├── health-check.sh
│   ├── gpu-check.sh
│   ├── backup-configs.sh
│   ├── disk-usage.sh
│   └── cleanup.sh
├── containers/          # Research & implementation docs
│   ├── research.md
│   └── implementation-plan.md
├── Makefile            # Common operations
├── STATUS.md           # Current phase tracking
├── CHANGELOG.md        # Version history
├── AGENTS.md           # AI agent guidelines
└── SYSTEM.md           # Hardware documentation

Documentation

Development Setup

Python Environment

Some automation scripts require Python dependencies. A virtual environment is provided:

# Activate virtual environment
source .venv/bin/activate

# Install/update dependencies
pip install -r requirements.txt

# Deactivate when done
deactivate

Note: The .venv/ directory is gitignored and must be created on each system.

Common Commands

Infrastructure Management

make status              # Show running containers and system status
make health              # Comprehensive health check
make gpu-check           # Verify GPU passthrough
make disk                # Disk usage report
make backup              # Backup Docker configs
make cleanup             # Clean unused Docker resources

Stack Management

make deploy-portainer    # Deploy Portainer
make deploy-ollama       # Deploy Ollama
make logs-ollama         # View Ollama logs
make update-jellyfin     # Update Jellyfin to latest
make stop-nextcloud      # Stop Nextcloud stack

Phase Deployment

make deploy-phase1       # Deploy foundation (Portainer, NPM, Ollama)
make deploy-phase2       # Deploy networking (Headscale)
make deploy-phase3       # Deploy monitoring (Uptime Kuma, Netdata, Heimdall)
make deploy-phase4       # Deploy optimization (Watchtower, Maintenance)
make deploy-apps         # Deploy applications (Jellyfin, Nextcloud, Samba)

Service Ports

Service Port Description
Portainer 8001 Container management UI
PostgreSQL Shared 5432 Shared database server (internal)
Redis Shared 6379 Shared cache server (internal)
Nginx Proxy Manager 81 Reverse proxy admin
Open WebUI 82 LLM chat interface
Ollama 11434 ML model API
Core API 8083 Infrastructure management API
Code-Server 8084 Browser-based IDE (localhost only)
Headscale 8085 VPN control server
Jellyfin 8096 Media streaming
Nextcloud 8082 Cloud storage
Uptime Kuma 3001 Service monitoring
Gitea 3002 Git repository hosting
Netdata 19999 System monitoring
Organizr 9999 Unified dashboard

GPU Services

Two services leverage the RTX 2080 Ti for GPU acceleration:

  1. Ollama (ML inference)

    • Supports 3B-13B parameter models
    • Recommended: llama3.2:3b, mistral:7b, codellama:7b
  2. Jellyfin (Media transcoding)

    • NVIDIA NVENC hardware encoding
    • Can handle multiple 4K transcodes simultaneously

Storage Strategy

SSD (Performance-Critical):

  • Docker configs
  • Application databases
  • Cache directories
  • Container images

HDD (Capacity-Critical):

  • Media files (Jellyfin)
  • User data (Nextcloud)
  • Game server worlds (AMP)
  • Backups

Current Status

Phase: Planning & Documentation Complete

Next Steps:

  1. Review implementation plan
  2. Verify prerequisites (Docker, GPU, disk space)
  3. Begin Phase 1: Foundation Setup

See STATUS.md for detailed progress tracking.

Contributing

This is a personal infrastructure project. For AI agents working on this codebase:

  • Read AGENTS.md for guidelines
  • Follow conventional commit format
  • Test GPU access before deploying GPU services
  • Update STATUS.md when completing phases

License

Personal infrastructure project - not licensed for reuse.

Resources


Version: 0.5.0-optimization Last Updated: 2025-11-16 System: tower-of-joy

S
Description
No description provided
Readme
3.4 MiB
Languages
Makefile 68.8%
Shell 31.2%