A comprehensive automation system for setting up and managing a homelab environment using Docker containers. This system provides a modular approach to deploying various services with proper security configurations.
- Linux-based system (tested on NixOS)
- Docker and Docker Compose installed
- User must be in the docker group
fzfpackage installed for service selection- Bash shell
You need a domain name for your services. The system will prompt for:
- Domain name (e.g., example.com)
- DNS provider credentials (supports multiple providers including Cloudflare, Gandi, etc.)
A valid email address is required for:
- SSL certificate generation
- Service notifications
- Administrative accounts
The system uses your current user's:
- Username
- UID/GID for container permissions
- Home directory
- Clone the repository:
git clone https://github.com/your-username/homelab-setup.git
cd homelab-setup- Run the setup script:
# Interactive: core | core+media | custom fzf
bash ./docker-scripts/bin/init-homelab.sh
# Or explicit profiles (core = base; media is additive)
bash ./docker-scripts/bin/init-homelab.sh --profile homelab-core
bash ./docker-scripts/bin/init-homelab.sh --profile homelab-core --profile homelab-mediainit-homelab is the homelab family installer. Profiles pick services:
- homelab-core — gateway, companion, portainer, watchtower (run this as the base)
- homelab-media — jellyfin, plex, owncast (needs gateway from core)
Compute / LLM (no gateway):
bash ./docker-scripts/bin/init-compute.sh --profile compute-llm-arm # aarch64 → catalog/.../arm/
bash ./docker-scripts/bin/init-compute.sh --profile compute-llm-x86 # x86 → cpu/ (or COMPUTE_GPU=rocm)Day-2 ops:
# status / stop / restart / start (profile and/or group/service)
bash ./docker-scripts/bin/stacks.sh status --profile homelab-core
bash ./docker-scripts/bin/stacks.sh restart media/jellyfin
# Swarm (homelab only — not compute)
bash ./docker-scripts/bin/swarm.sh init --advertise-addr 192.168.1.10
bash ./docker-scripts/bin/swarm.sh join-token worker
bash ./docker-scripts/bin/swarm.sh deploy --profile homelab-core
bash ./docker-scripts/bin/swarm.sh statusPer-service UID/data handling lives in catalog/<group>/<service>/contract.env. Arch variants live under arm/, cpu/, rocm/.
Service-specific secrets/tokens use optional hooks/pre-start.sh (not generic PUID writes).
- Run tests (no full deploy required):
bash ./tests/run.sh- Traefik (Reverse Proxy)
- Crowdsec (Security)
- DDNS Updater (Dynamic DNS)
- Bitwarden (Password Manager)
- OwnCloud (File Storage)
- Portainer (Docker Management)
- Plex (Media Server)
- Yourls (URL Shortener)
- Honeypot/Tarpit (Security Monitoring)
- Grafana (Metrics Visualization)
- Automatic SSL certificate generation
- Secure credential management
- Rate limiting
- Admin whitelisting
- Traefik security middlewares
- Crowdsec integration for threat detection
The system uses several types of configuration files:
.envfiles for service configurationdocker-compose.ymlfor container definitions- Configuration files for specific services
The system supports multiple DNS providers for domain management and DDNS updates. Some popular options include:
- Cloudflare
- Gandi
- OVH
- DigitalOcean
- Many others (100+ providers supported)
catalog/ ├── adblocker/ ├── companion/ ├── compute/ ├── dashboard/ ├── games/ ├── gateway/ ├── honeypot/ ├── media/ ├── password/ ├── storage/ ├── system/ ├── url/ └── vpn/ profiles/ docker-scripts/ ├── bin/ ├── lib/ └── modules/
- Run the initialization script
- Follow the interactive prompts for:
- Domain configuration
- Email setup
- Service selection
- Credentials configuration
- Services will be automatically configured and started
- Credentials are stored securely
- Service configurations can be updated using the provided update scripts
- Each service has its own management scripts in its directory
Comprehensive documentation is available in multiple languages:
- 🇩🇪 Deutsch (German) - Vollständige deutsche Dokumentation
- 🇬🇧 English - Complete English documentation
For issues or questions, please:
- Check the documentation
- Review the service-specific documentation in
docs/services/ - Check the logs in the service directories
- Create an issue in the repository
Please read our disclaimer for important information about using this software.