Docker Compose configuration for self-hosted services on a single machine.
# 1. Clone or navigate to repository
cd homelab
# 2. Create configuration file
cp .env.example .env
# 3. Edit with your values (SERVER_IP is important!)
nano .env
# 4. Start a service (example: AdGuard Home)
docker compose -f services/adguard/docker-compose.yaml up -d
# 5. Verify it is running
docker compose -f services/adguard/docker-compose.yaml logs -f- Docker: v20.10+
- Docker Compose: v2.0+
- System: Linux (Ubuntu 22.04 recommended) or MacOS/Windows with Docker Desktop
- RAM: 4GB minimum, 8GB recommended
- Disk: 20GB free minimum
Install Docker: https://docs.docker.com/get-docker/
| Service | Port | Function | Status |
|---|---|---|---|
| AdGuard Home | 8081 | DNS + Ad Blocking | Included |
| Home Assistant | 8123 | Home Automation | Included |
| Jellyfin | 8096 | Media Server | Included |
homelab/
├── .env.example # Copy to .env
├── .gitignore
├── README.md # This file
├── CHANGELOG.md # Version history
├── setup.sh # Automatic setup script
│
├── docs/ # Documentation
│ ├── QUICKSTART.md # Quick start guide
│ ├── SETUP.md # Detailed installation
│ ├── SERVICES.md # Service descriptions
│ └── TROUBLESHOOTING.md # Common issues and solutions
│
└── services/ # Individual services
├── adguard/
│ ├── docker-compose.yaml
│ └── .env.example
├── homeassistant/
│ ├── docker-compose.yaml
│ └── .env.example
└── jellyfin/
├── docker-compose.yaml
└── .env.example
docker compose -f services/adguard/docker-compose.yaml up -ddocker compose -f services/adguard/docker-compose.yaml logs -fdocker compose -f services/adguard/docker-compose.yaml downdocker compose -f services/adguard/docker-compose.yaml restartdocker psThe .env file contains sensitive variables (IPs, ports, etc). NEVER commit it to Git.
Create from template:
cp .env.example .envEach service has its own .env.example. Copy it to .env:
cp services/adguard/.env.example services/adguard/.env- .env is in .gitignore (not committed)
- .env.example shows structure without sensitive values
- Persistent data (volumes) is gitignored
- Each service runs in isolated container
- QUICKSTART.md - Quick start guide
- SETUP.md - Detailed installation
- SERVICES.md - Service descriptions and "add new service" guide
- TROUBLESHOOTING.md - Common issues and solutions
How much disk space? 5-10GB for all services. Depends on your data (Jellyfin = heavy).
Can I add my own services? Yes! See docs/SERVICES.md -> "Add a new service"
Does it work on Raspberry Pi? Yes, but slower. Test first.
Security and internet exposure? Read docs/TROUBLESHOOTING.md -> "Security"
MIT - Use freely
- Fork repository
- Create branch (git checkout -b feature/something)
- Commit (git commit -m "Add something")
- Push (git push origin feature/something)
- Create Pull Request
Need help? Check docs/TROUBLESHOOTING.md first.
See also: CHANGELOG.md - Version history