DockerHomeLab
guides

Best Docker Compose Apps for Your Homelab in 2026

The 20 best services to run in Docker on your home server, with ready-to-use Compose snippets and honest assessments of setup complexity and ongoing maintenance.

By Editorial · · 8 min read

Docker Compose is the entry point for most homelab self-hosting. You write a YAML file, run docker compose up -d, and you have a service running. The hard part is knowing which services are worth your time.

This list covers 20 services that consistently earn their place on home servers — services that are actively maintained, have good Docker images, and provide real value compared to their cloud alternatives. Each entry includes a complexity rating and a minimal Compose snippet to get started.

Password Management

Vaultwarden

Complexity: Low | Replaces: 1Password, Bitwarden cloud

Vaultwarden is a Bitwarden-compatible server written in Rust. Lightweight enough to run on a Raspberry Pi. The official Bitwarden apps connect to it seamlessly.

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    volumes:
      - ./data:/data
    environment:
      - WEBSOCKET_ENABLED=true
    labels:
      # Traefik labels if you're using it
      - "traefik.enable=true"
      - "traefik.http.routers.vw.rule=Host(`vault.yourdomain.com`)"
      - "traefik.http.routers.vw.entrypoints=websecure"
      - "traefik.http.routers.vw.tls.certresolver=letsencrypt"

Requires HTTPS for the browser extension to work. Set up a reverse proxy first.


Media

Jellyfin

Complexity: Medium | Replaces: Plex, Netflix (for your own media library)

Jellyfin is a fully open-source media server with no paid tiers. Streams movies, TV, music, and photos to any device. Hardware transcoding requires extra configuration but dramatically reduces CPU load.

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    restart: unless-stopped
    environment:
      - JELLYFIN_PublishedServerUrl=https://media.yourdomain.com
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /mnt/media:/media:ro   # mount your media library
    devices:
      - /dev/dri:/dev/dri      # for Intel/AMD GPU transcoding

Immich

Complexity: Medium-High | Replaces: Google Photos

Immich is the best self-hosted Google Photos alternative available. Mobile apps for iOS and Android with automatic backup. AI-powered face recognition and object tagging runs locally.

Immich uses multiple containers (server, microservices, machine learning, database, Redis). Use the official Compose file from the Immich documentation — it’s maintained and updated with each release.


File Storage and Sync

Nextcloud

Complexity: Medium-High | Replaces: Google Drive, Dropbox, Google Docs

Full cloud storage suite with file sync, collaborative editing, calendar, contacts, and hundreds of apps. Heavier than most homelab services but worth it if you want the full Google Workspace replacement.

Use the official Nextcloud AIO (All-in-One) image for the easiest setup — it handles the database and caching configuration automatically.


Syncthing

Complexity: Low | Replaces: Dropbox (sync only, no server required)

Decentralized file sync between devices. No server required — Syncthing on your home server plus Syncthing on your laptop syncs files directly. Simpler than Nextcloud if you just need sync without the web interface.

services:
  syncthing:
    image: syncthing/syncthing:latest
    container_name: syncthing
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - ./config:/var/syncthing
      - /home/user/sync:/sync
    ports:
      - "8384:8384"
      - "22000:22000/tcp"
      - "22000:22000/udp"

Networking

Pi-hole

Complexity: Low | Replaces: No direct equivalent (DNS-level ad blocking)

Network-wide ad blocking via DNS. Every device on your network benefits without any client-side configuration. Sets up in 5 minutes.

services:
  pihole:
    image: pihole/pihole:latest
    container_name: pihole
    restart: unless-stopped
    environment:
      - WEBPASSWORD=changethis
      - TZ=America/New_York
    volumes:
      - ./etc-pihole:/etc/pihole
      - ./etc-dnsmasq.d:/etc/dnsmasq.d
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "8080:80"
    cap_add:
      - NET_ADMIN

Nginx Proxy Manager

Complexity: Low | Replaces: Traefik (simpler, UI-driven)

A GUI for Nginx reverse proxy with automatic Let’s Encrypt certificates. If Traefik feels complex, NPM gives you the same outcome through a web interface with no YAML configuration.

services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "81:81"  # web UI
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Home Automation

Home Assistant

Complexity: Medium | Replaces: SmartThings, HomePod (as hub)

The de facto standard for home automation. Supports thousands of integrations: smart lights, thermostats, sensors, presence detection. The community is large and the documentation is excellent.

services:
  homeassistant:
    image: ghcr.io/home-assistant/home-assistant:stable
    container_name: homeassistant
    restart: unless-stopped
    privileged: true
    network_mode: host    # required for device discovery
    volumes:
      - ./config:/config
      - /etc/localtime:/etc/localtime:ro

network_mode: host is required for proper local device discovery. This means it doesn’t play well with Traefik — access it directly via its port (8123 by default).


Monitoring

Uptime Kuma

Complexity: Very Low | Replaces: UptimeRobot, Better Uptime

Checks whether your services are up and sends alerts when they go down. Dead simple to set up, covers HTTP, TCP, DNS, and ping checks.

services:
  uptime-kuma:
    image: louislam/uptime-kuma:latest
    container_name: uptime-kuma
    restart: unless-stopped
    volumes:
      - ./data:/app/data
    ports:
      - "3001:3001"

Grafana + Prometheus

Complexity: High | Replaces: Datadog, New Relic (for infrastructure metrics)

Full metrics stack. Prometheus scrapes metrics from your services and infrastructure; Grafana visualizes them in dashboards. High setup effort, but unbeatable visibility once it’s running.

Use a pre-built stack like dockprom from the community — it includes Prometheus, Grafana, cAdvisor (container metrics), and Node Exporter (host metrics) in one Compose file.


Downloads

qBittorrent

Complexity: Low | Replaces: Desktop torrent client

Web-accessible torrent client. Useful for automated download stacks when paired with Sonarr/Radarr.

services:
  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
      - WEBUI_PORT=8080
    volumes:
      - ./config:/config
      - /mnt/downloads:/downloads
    ports:
      - "8080:8080"
      - "6881:6881"
      - "6881:6881/udp"

Sonarr / Radarr

Complexity: Medium | Replaces: Manual TV/movie tracking

Automated TV show and movie download management. Integrates with qBittorrent (or other clients) and Jellyfin for a fully automated media pipeline. The *arr stack (Sonarr, Radarr, Prowlarr, Readarr) covers most media types.


Utilities

Vaultwarden (already listed)

Dashdot / Homer / Homarr

Complexity: Very Low | Dashboard for your homelab services

A homepage for your self-hosted services — links to all your URLs in one place. Homer is the most popular, Homarr has a more modern UI with Docker integration.

services:
  homarr:
    image: ghcr.io/ajnart/homarr:latest
    container_name: homarr
    restart: unless-stopped
    volumes:
      - ./config:/app/data/configs
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - "7575:7575"

Paperless-ngx

Complexity: Medium | Replaces: Physical filing cabinets + document scanning subscriptions

Scans, OCRs, and organizes documents. Upload a PDF, and it’s searchable by content. Invaluable for going paperless with tax documents, contracts, and receipts.


Mealie

Complexity: Low | Replaces: Recipe apps

Self-hosted recipe manager. Import recipes from URLs automatically, build meal plans, generate shopping lists.


What to Run First

If this is your first homelab, start with:

  1. Pi-hole — instant network-wide benefit, very simple
  2. Vaultwarden + Traefik — teaches you reverse proxy, gives you a password manager
  3. Uptime Kuma — keeps you informed when other services go down

Add Jellyfin and Home Assistant once you’re comfortable with the basics. Save the monitoring stack (Grafana/Prometheus) until you have enough services running to justify it.

#docker-compose #homelab #self-hosted #apps #services #2026

Related

Comments