GitHub mirroring is no longer needed now that Forgejo is the primary remote. Drops the gitea-mirror service, its volume, env vars, Caddy site, and firewall rule; docs updated to match. |
||
|---|---|---|
| appdata/homeassistant | ||
| docker-compose-files | ||
| docs | ||
| .env.sample | ||
| .gitignore | ||
| ipfconfig | ||
| Makefile | ||
| README.md | ||
| setup-homeassistant.sh | ||
| substitute_env.sh | ||
Homelab Blueprint
Docker Compose templates and deployment guides for self-hosted services.
Quick Start
- Copy the sample environment file:
cp -n .env.sample .env - Configure
.envwith your values. - Use the
Makefileto deploy a stack:make help # See all available commands make check-env # Validate your .env file make deploy-caddy # Deploy the reverse proxy
Each stack guide in docker-compose-files/<stack>/README.md explains appdata placement, rendering, and networking.
Stacks
| Stack | Description |
|---|---|
| Arr Stack | Media management, downloads, VPN, Emby, and Recyclarr |
| BentoPDF | Privacy-first client-side PDF toolkit |
| Beszel Agent | Host and Docker monitoring agent |
| Beszel Hub | Beszel monitoring dashboard |
| Beszel Socket Proxy | Restricted Docker API access for Beszel |
| Caddy | Reverse proxy with Cloudflare DNS-01 |
| Forgejo | Self-hosted Git service |
| Gramps Web | Genealogy web application |
| Home Assistant | Home Assistant, Mosquitto, and Zigbee2MQTT |
| Immich | Photo and video management with GPU acceleration |
| IT-Tools | Developer and sysadmin utility toolbox |
| Koffan | Shared household grocery/shopping list |
| Paperless-ngx | Document management with OCR and full-text search |
| PostgreSQL | PostgreSQL and pgAdmin |
| Technitium DNS | DNS server and ad blocking |
| Youtarr | YouTube downloader with metadata and media-server integrations |
Management
The repository includes a Makefile to unify management of all stacks. It supports modular environment files, loading variables first from the root .env (Global) and then from the stack's own .env (Local).
| Command | Description |
|---|---|
make check-env |
Validates root and stack .env files against required placeholders in renderable templates |
make status |
Shows docker compose ps for all generated compose files |
make reload-caddy |
Zero-downtime reload of the Caddy configuration |
make ip-check |
Verifies VPN connectivity for Arr Stack containers |
make deploy-<stack> |
Renders templates and starts the specified stack |
Custom Services (Rust/MQTT)
To add your own services (e.g., Rust-based backends):
- Add your service to a new or existing
docker-compose.*.yml. - Connect it to the
ha-networkif it needs to reach Home Assistant. - Expose it via Caddy by adding a block to
docker-compose-files/caddy/Caddyfile_templateand runningmake deploy-caddy.
Shared Commands
Most stacks use the following manual pattern (automated by make):
./substitute_env.sh docker-compose-files/<stack>/template.yaml docker-compose.<stack>.yml .env
docker compose -f docker-compose.<stack>.yml config --quiet
docker compose -f docker-compose.<stack>.yml up -d
Home Assistant uses its setup script instead. Arr Stack, Caddy, and Gramps Web render additional configuration templates.
substitute_env.sh only reads env files passed on the command line. It does
not fall back to OS environment variables or an implicit .env.
Requirements
- Linux host with Docker Engine and Docker Compose
- Git
- A configured
.envbased on.env.sample - Service-specific storage and network access described in each stack README
Generated docker-compose.*.yml files may contain secrets and are ignored by
Git.
Operational Documentation
See the documentation index for all guides. Most-used: