Home Lab Containers
July 6, 2026 ยท View on GitHub
Summary
This repository keeps an active list of all the Docker stacks and key software components for each Pi in my home. This was done to version control each device in my house and maintain the configs across multiple linux devices.
Downloading the Repository
When downloading the repository, make sure the submodules are present as well. A plain clone of the top-level repository is not enough for stacks that build nested projects such as PiHall's Home Power Monitor service.
To clone the repository with all submodules in one step, use:
git clone --recurse-submodules <repository-url>
If you already cloned the repository without submodules, run:
git submodule update --init --recursive
Usage
The repository uses Docker Compose's include feature to organize services across multiple compose files. Each system (HPNas, PiDesk, PiHome, PiLab, PrusaPrint) has a main docker-compose.yml file that includes all necessary service definitions.
Starting Services
To start all services for a specific system, navigate to its directory and run:
cd <system-directory> # e.g., cd PiHome
docker compose up -d
Stopping Services
To stop all services for a specific system:
cd <system-directory>
docker compose down
Viewing Logs
To view logs for all services:
cd <system-directory>
docker compose logs -f
System Organization
Each system's main docker-compose.yml includes:
- utils/: Shared services (Portainer, uptime-kuma) used across all systems
- System-specific services: Organized in subdirectories (Networking, Storage, IOT, etc.)
Project Names
Each system has a unified project name defined in its main compose file:
- HPNas:
hpnas - PiHall:
pihall - PiDesk:
pidesk - PiHome:
pihome - PiLab:
pilab - PrusaPrint:
prusaprint
Note: Previously, each subdirectory had its own project name (e.g., networking, iot, apps, storage). With the Docker Compose include directive, all services are now consolidated under a single project name per system. This is the correct and expected behavior - all included services become part of the parent project.
Environment Variables
All environment variables are now defined inline in the docker-compose files. You can customize them by editing the respective docker-compose.yml files directly.
Local Repositories
According to gemini we can get Dependabot to ignore the submodules by giving it a fake path and then ovveriding that URL in git with the following line:
git config --global url."http://192.168.1.50/repo.git".insteadOf "https://github.com/your-username/internal-placeholder.git"