Skip to content

Repository files navigation

OpenHomeLab

A consolidated, well-organized Docker Compose homelab. 65+ services across ten categories — custom AI apps, AI image generation/editing, LLM inference, media server, photo/NVR, home automation, monitoring, utilities, network, dev tools, and infrastructure — managed from a single repository.

Philosophy

  • One repo, every service. No more hunting through 15+ separate repos to find a compose file.
  • Directory-per-service. Each service is isolated in services/<category>/<name>/ with its own docker-compose.yml and .env.example.
  • No secrets in Git..env files are gitignored. .env.example files document every variable.
  • Makefile orchestration. Start, stop, and inspect any service with a single command.
  • Shared network. All services join the homelab Docker network for easy inter-service communication.

Quick Start

# 1. Clone
git clone https://github.com/davidamacey/OpenHomeLab.git
cd OpenHomeLab
# 2. Create the shared Docker network (one-time)
make network
# 3. Configure a service
cp services/media/immich/.env.example services/media/immich/.env
# Edit the .env file with your passwords and paths# 4. Start it
make up SERVICE=media/immich
# 5. Check status
make status

Service Catalog

Custom AI Projects (services/ai/)

These are custom-built applications with published Docker images. They require building from source or pulling from Docker Hub.

ServicePort(s)GPUDescription
OpenTranscribe5173–51810AI transcription: speech-to-text with diarization, search
OpenAudio5473–54790/2Audio analysis: separation, classification, transcription
OpenSpeakers5283–52860TTS and voice cloning (multi-model, hot-swap)
VibeVoice83000Real-time voice conversion (single container)
Video Upscaler-0Batch upscale old TV/film footage to 1080p/4K
Ring Detector-1Doorbell event capture, storage, ML classification
OpenProcessor4600–46082Triton visual search: YOLO, face, OCR, CLIP + OpenSearch

Note: Custom projects use images from davidamacey/* on Docker Hub. See each service's .env.example for build and image tag instructions.

AI Image Generation & Editing (services/ai/)

ServicePortGPUDescription
ComfyUI81880AI image generation with Flux models
Stable Diffusion86002SDXL TensorRT backend + web UI
IOPaint78002AI object removal and inpainting (LaMa, MAT, PowerPaint, BrushNet)

LLM / Inference Services (services/llm/)

ServicePort(s)GPUDescription
Open WebUI8010-Chat interface (connects to vLLM)
vLLM 20B80122GPT-OSS-20B served via vLLM (OpenAI-compatible)
vLLM 120B80110+2GPT-OSS-120B, tensor-parallel (disabled by default)
Apache Tika8009-Document/OCR text extraction
Triton API8000–80022NVIDIA Triton model serving
YOLO API8200-Object detection API (custom build)

Media Server (services/media/)

ServicePort(s)GPUDescription
Jellyfin80961Free open-source media server (movies, TV, music)
Radarr7878-Automatic movie collection manager
Sonarr8989-Automatic TV show collection manager
Prowlarr9696-Centralised indexer manager for arr apps
Bazarr6767-Automatic subtitle downloader
Jellyseerr5055-Media request and discovery UI for Jellyfin
qBittorrent7460/6881-Feature-rich BitTorrent download client
SABnzbd7470-Usenet binary newsreader and download client
Kavita7480-Self-hosted manga, comics, and book reader
Audiobookshelf13378-Audiobook and podcast server with mobile apps
Tdarr8265/82662Distributed video transcoding automation (NVENC)
MediaCMS7950-Private video platform — upload/stream your own videos (YouTube-style)
PeerTube7960-Full-featured private video platform: channels, playlists, live, API

Photo / NVR (services/media/, services/home/)

ServicePort(s)GPUDescription
Immich22831Self-hosted photo & video management
Frigate5000/8554/85551GPU-accelerated NVR with object detect

Home Automation (services/home/)

ServicePort(s)GPUDescription
Home Assistant8123-Open-source home automation hub (3000+ integrations)
Node-RED1880-Visual flow-based IoT and automation programming
Mosquitto1883/9001-Lightweight MQTT message broker for IoT devices
Zigbee2MQTT8885-Bridge Zigbee devices to MQTT (no hub required)

Home Management (services/home/)

ServicePortGPUDescription
Homebox3100-Home inventory management
Tandoor9092-Recipe manager with PostgreSQL
Nextcloud8080-Self-hosted cloud storage

Monitoring (services/monitoring/)

ServicePort(s)GPUDescription
Uptime Kuma3001-Service uptime monitoring and status pages
Grafana3002-Metrics dashboards (Prometheus + node-exporter + cAdvisor + DCGM)
Prometheus9090-Metrics collection (part of grafana stack)
DCGM Exporter9400-NVIDIA GPU metrics exporter

Utilities (services/utilities/)

ServicePort(s)GPUDescription
Stirling PDF8080-40+ PDF manipulation tools
draw.io8081/8443-Self-hosted diagramming
ntfy80-Push notification server
Paperless-ngx8070-Document management with OCR
Vaultwarden8222-Bitwarden-compatible password vault
BookStack6875-Self-hosted wiki and documentation
Duplicati8210-Backup with cloud storage support
n8n5678-Workflow automation with 400+ integrations
IT Tools5620-100+ online developer tools (offline)
Memos5230-Privacy-first lightweight note-taking

Network (services/network/)

ServicePort(s)GPUDescription
AdGuard Home3080/5353-Network-wide DNS ad and tracker blocking
wg-easy51821/51820-WireGuard VPN with a simple web UI
Tailscale--Zero-config mesh VPN and subnet router (no port forwarding needed)
Cloudflare Zero Trust--WARP Connector — private LAN access for WARP clients via Cloudflare
Speedtest Tracker7900-Scheduled internet speed monitoring with history

Dev Tools (services/dev/)

ServicePort(s)GPUDescription
Gitea3500/2222-Lightweight self-hosted Git service
code-server3600-VS Code in the browser
Woodpecker CI3610-Lightweight CI/CD with GitHub Actions syntax

Infrastructure (services/infra/)

ServicePort(s)GPUDescription
Nginx Proxy Manager80/81/443-Reverse proxy with GUI and SSL
Traefik80/443/8090-Cloud-native reverse proxy with labels
Authentik9300/9443-Identity provider with SSO/OIDC
Portainer9444/9445-Docker management GUI
Heimdall9000/9001-Application dashboard
Homepage3000-Modern customizable dashboard
Cloudflare Tunnel--Secure remote access via Cloudflare
Watchtower--Automatic container image updates

Makefile Commands

# Single service
make up SERVICE=ai/comfyui # start
make down SERVICE=ai/comfyui # stop
make logs SERVICE=llm/open-webui # tail logs
make restart SERVICE=media/immich # restart
make pull SERVICE=ai/comfyui # pull latest image# Category
make up-category CATEGORY=ai # start all AI services
make down-category CATEGORY=llm # stop all LLM services# Global
make up-all # start everything
make down-all # stop everything
make pull-all # update all images
make status # show running containers
make gpu # GPU allocation + nvidia-smi
make network # create homelab network
make help# show all targets

GPU Configuration

This repo is configured for a three-GPU setup:

GPUModelVRAMAssigned Services
0RTX A600048 GBComfyUI, vLLM 120B (with GPU 2), OpenTranscribe, OpenAudio, OpenSpeakers, VibeVoice, Video Upscaler
1RTX 3080 Ti12 GBImmich ML, Frigate NVR, Ring Detector
2RTX A600048 GBvLLM 20B, Triton, Stable Diffusion, OpenProcessor, OpenAudio (alt)

To adapt for your hardware: update the device_ids field in each GPU-enabled service's docker-compose.yml. See docs/gpu-allocation.md for the full allocation table.

Directory Structure

OpenHomeLab/
├── Makefile # Orchestration: up/down/logs/status/gpu
├── .env.example # Global variables: TZ, PUID, NAS_PATH
├── services/
│ ├── ai/
│ │ ├── comfyui/ # Flux image generation (GPU 0)
│ │ ├── stable-diffusion/ # SDXL TensorRT (GPU 2)
│ │ ├── iopaint/ # AI object removal & inpainting (GPU 2)
│ │ ├── opentranscribe/ # AI transcription platform (GPU 0)
│ │ ├── openaudio/ # Audio analysis platform (GPU 0/2)
│ │ ├── openspeakers/ # TTS & voice cloning (GPU 0)
│ │ ├── vibevoice/ # Real-time voice conversion (GPU 0)
│ │ ├── video-upscaler/ # Batch video upscaling (GPU 0)
│ │ ├── ring-detector/ # Doorbell ML classifier (GPU 1)
│ │ └── openprocessor/ # Triton visual search pipeline (GPU 2)
│ ├── llm/
│ │ ├── open-webui/ # vLLM + Open WebUI + Tika stack
│ │ └── triton/ # Triton server + YOLO API
│ ├── media/
│ │ ├── immich/ # Photo management (GPU 1)
│ │ ├── jellyfin/ # Media server: movies, TV, music (GPU 1)
│ │ ├── mediacms/ # Private video platform (YouTube-style)
│ │ ├── peertube/ # Full-featured private video platform
│ │ ├── radarr/ # Automatic movie downloader
│ │ ├── sonarr/ # Automatic TV show downloader
│ │ ├── prowlarr/ # Centralised indexer manager
│ │ ├── bazarr/ # Automatic subtitle downloader
│ │ ├── jellyseerr/ # Media request management
│ │ ├── qbittorrent/ # BitTorrent client
│ │ ├── sabnzbd/ # Usenet downloader
│ │ ├── kavita/ # Manga, comics, and book reader
│ │ ├── audiobookshelf/ # Audiobook and podcast server
│ │ └── tdarr/ # Video transcoding automation (GPU 2)
│ ├── home/
│ │ ├── homeassistant/ # Home automation hub (host networking)
│ │ ├── node-red/ # Visual IoT automation flows
│ │ ├── mosquitto/ # MQTT broker for IoT devices
│ │ ├── zigbee2mqtt/ # Zigbee-to-MQTT bridge
│ │ ├── homebox/ # Inventory management
│ │ ├── tandoor/ # Recipe manager
│ │ ├── nextcloud/ # Cloud storage
│ │ └── frigate/ # NVR camera system (GPU 1)
│ ├── monitoring/
│ │ ├── uptime-kuma/ # Uptime monitoring
│ │ └── grafana/ # Metrics: Prometheus + Grafana + Loki + DCGM
│ ├── network/
│ │ ├── adguard-home/ # DNS ad and tracker blocking
│ │ ├── wg-easy/ # WireGuard VPN with web UI
│ │ ├── tailscale/ # Mesh VPN subnet router (no port forwarding)
│ │ ├── cloudflare-zero-trust/ # WARP connector for private LAN access
│ │ └── speedtest-tracker/ # Scheduled internet speed monitoring
│ ├── dev/
│ │ ├── gitea/ # Self-hosted Git service
│ │ ├── code-server/ # VS Code in the browser
│ │ └── woodpecker-ci/ # CI/CD pipeline server + agent
│ ├── utilities/
│ │ ├── stirling-pdf/ # PDF tools
│ │ ├── drawio/ # Diagrams
│ │ ├── ntfy/ # Push notifications
│ │ ├── paperless-ngx/ # Document management
│ │ ├── vaultwarden/ # Password vault
│ │ ├── bookstack/ # Wiki / documentation
│ │ ├── duplicati/ # Backup to cloud or local
│ │ ├── n8n/ # Workflow automation (400+ integrations)
│ │ ├── it-tools/ # 100+ developer tools, fully offline
│ │ └── memos/ # Lightweight note-taking
│ └── infra/
│ ├── nginx-proxy/ # Reverse proxy (GUI)
│ ├── traefik/ # Reverse proxy (label-based)
│ ├── authentik/ # SSO / identity provider
│ ├── portainer/ # Docker management GUI
│ ├── heimdall/ # App dashboard
│ ├── homepage/ # App dashboard (alternative)
│ ├── cloudflared/ # Cloudflare Tunnel (remote access)
│ └── watchtower/ # Auto-updates
├── scripts/
│ ├── deploy.sh # Deploy all or specific services
│ ├── stop.sh # Stop services
│ ├── status.sh # Show running status
│ ├── backup.sh # Backup service volumes
│ └── gpu-check.sh # GPU allocation overview
└── docs/
├── gpu-allocation.md # GPU assignment strategy
├── port-map.md # All ports used by all services
├── backup-strategy.md # Backup procedures
└── adding-a-service.md # How to add a new service

Environment Variables

Each service has a .env.example file listing its required variables. Copy it to .env and fill in your values before starting the service.

Global variables (shared across services) are documented in the root .env.example:

VariableDefaultDescription
TZAmerica/New_YorkTimezone
PUID1000User ID for file ownership
PGID1000Group ID for file ownership
NAS_PATH/mnt/nasBase path to storage volume
DATA_PATH/mnt/nas/appdataContainer app data

Port Conflicts

A few services share default ports (80, 8080). See docs/port-map.md for the full port inventory and conflict resolution guidance. The recommended solution is to run nginx-proxy-manager or traefik on 80/443 and proxy all other services through it.

Documentation

Related Projects

The application source code for custom services lives in separate repositories:

This repo contains only deployment configsdocker-compose.yml files that pull published images. Application development happens in the source repos.

License

MIT — use, adapt, and share freely.

About

Self-hosted homelab infrastructure: AI/ML, LLM inference, media, home management, and utilities — all Docker Compose

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages