This repository contains a collection of Docker Compose configurations for setting up and managing various services in a home lab environment. Each stack is tailored for ease of use, scalability, and maintainability, with detailed descriptions and customizable options.
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ _ _ _____ _
| | | | | | | | | __ \ | |
| |__| | ___ _ __ ___ ___ | | __ _| |__ | | | | ___ ___| | _____ _ __
| __ |/ _ \| '_ ` _ \ / _ \ | | / _` | '_ \ | | | |/ _ \ / __| |/ / _ \ '__|
| | | | (_) | | | | | | __/ | |___| (_| | |_) | | |__| | (_) | (__| < __/ |
|_| |_|\___/|_| |_| |_|\___| |______\__,_|_.__/ |_____/ \___/ \___|_|\_\___|_| Home Assistant - Home Automation
Home Assistant is an open-source home automation platform that lets you control, automate, and monitor smart devices in one centralized system.services:
homeassistant:
container_name: homeassistant
## image: "ghcr.io/home-assistant/home-assistant:2024.7.4" ## Specific version
image: "ghcr.io/home-assistant/home-assistant:stable" ## Latest version
volumes:
- /home/user/homeassistant/config:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
restart: unless-stopped
privileged: true
network_mode: hostPlex - Media Server
Plex is a powerful media server solution that organizes your media and allows streaming to various devices.version: "2.1"
services:
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
network_mode: host
environment:
- PUID=0
- PGID=0
- VERSION=docker
- PLEX_CLAIM= # optional
volumes:
- /srv/plex/config:/config
- /srv/dev-disk-by-uuid-nas/plex/TV:/tv
- /srv/dev-disk-by-uuid-nas/plex/Movies:/movies
- /srv/dev-disk-by-uuid-nas/plex/Music:/music
restart: unless-stoppedJellyfin - Open Source Media Server
Jellyfin is an open-source alternative to Plex, offering media organization and streaming capabilities.services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
network_mode: 'host'
volumes:
- /srv/jellyfin/config:/config
- /srv/jellyfin/cache:/cache
- type: bind
source: /srv/dev-disk-by-uuid-nas/media
target: /media
read_only: true
devices:
- /dev/dri:/dev/dri ## iGPU passthrough
restart: unless-stoppedOpen WebUI - Interface for LLMs
Open WebUI provides a convenient interface for managing and interacting with language models.version: '3.8'
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
environment:
- OLLAMA_BASE_URL=http://10.0.0.100:11434 # Change this to your server IP
ports:
- "3232:8080"
volumes:
- open-webui:/app/backend/data
restart: unless-stopped
volumes:
open-webui:AdGuard Home - DNS-based Ad Blocking
AdGuard Home is a network-wide ad and tracker blocking DNS server.version: '3.8'
services:
adguardhome:
image: adguard/adguardhome:latest
container_name: adguardhome
restart: unless-stopped
volumes:
- adguard-workdir:/opt/adguardhome/work # Docker volume for work directory
- adguard-confdir:/opt/adguardhome/conf # Docker volume for configuration directory
ports:
- 53:53/tcp
- 53:53/udp
- 784:784/udp
- 853:853/tcp
- 3000:3000/tcp
- 80:80/tcp
- 443:443/tcp
networks:
- adguard_net
volumes:
adguard-workdir:
adguard-confdir:
networks:
adguard_net:
driver: bridgePi-hole - Network-wide Ad Blocking
Pi-hole is a DNS sinkhole that protects your devices from unwanted ads and trackers.version: '3.8'
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
ports:
- "8085:80" # Web interface
- "443:443" # HTTPS (optional)
- "5354:53/tcp" # DNS (TCP)
- "5354:53/udp" # DNS (UDP)
volumes:
- pihole-data:/etc/pihole
- dnsmasq-data:/etc/dnsmasq.d
environment:
- WEBPASSWORD=0000
- DNS1=8.8.8.8
- DNS2=8.8.4.4
- ServerIP=10.0.0.100 # Change this to your server IP
restart: unless-stopped
volumes:
pihole-data:
dnsmasq-data:Uptime Kuma - Monitoring
Uptime Kuma is a self-hosted monitoring solution for websites, APIs, and services.version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
ports:
- "3001:3001" # Web interface
volumes:
- uptime-kuma-data:/app/data # Persist data
environment:
- DB_TYPE=sqlite
restart: unless-stopped
volumes:
uptime-kuma-data:Nginx Proxy Manager - Reverse Proxy
Nginx Proxy Manager simplifies reverse proxy management with an intuitive web interface.services:
app:
image: 'docker.io/jc21/nginx-proxy-manager:latest'
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
restart: unless-stoppedNextcloud - File Sharing and Collaboration
Nextcloud is a self-hosted productivity platform for file sharing, collaboration, and more.version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=admin
- MYSQL_PASSWORD=xxxxxxx # Change this
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
restart: always
ports:
- 8888:80
links:
- db
volumes:
- /srv/dev-disk-by-uuid-nas/nextcloud:/var/www/html # Storage
environment:
- MYSQL_PASSWORD=xxxxxxx # Match the password above
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=dbVSCode Remote Server - Remote Development
Code Server allows you to run VS Code in the browser for remote development.version: '3.8'
services:
code-server:
image: codercom/code-server:latest
container_name: code-server
ports:
- "8081:8080" # Changed port mapping
volumes:
- code-server-data:/home/coder/project
environment:
- PASSWORD=0000 # Use a more secure password
restart: unless-stopped
volumes:
code-server-data: