- Enabled GitLab Container Registry on its own subdomain via NPM/mkcert - Built minimal ssh-alpine image (Alpine + OpenSSH, key-only auth) - Docker-outside-of-Docker build pipeline reusing the host socket, no DinD - Forced --pull --no-cache builds so scheduled rebuilds pick up real upstream updates - Biweekly Pipeline Schedule (cron: 0 3 */14 * *) - Registry cleanup policy to prevent unbounded tag growth - Documented the Tailscale/Pi-hole DNS conflict and other gotchas hit along the way
1.9 KiB
1.9 KiB
Homelab Wiki
Documentation for a self-hosted homelab running entirely on Docker Compose. This wiki covers the why behind each service, how they're configured, and what I learned running them — the repo itself has the raw docker-compose.yml files.
Contents
- Architecture and Hardware
- Monitoring Stack
- Network Services
- Media Automation
- Workflow Automation
- Storage Health
- Lessons Learned
- AI Coding Agent
- Reverse Proxy
- Semaphore
- DockScope
- Ansible Playbooks
- GitLab CI/CD
- Custom CI Runner Images
- Elastic Stack (ELK) — Lab
At a glance
| Host | Ubuntu Server |
| Orchestration | Docker Compose, one stack per service |
| Management | Portainer, DockScope (3D visual dashboard) |
| Monitoring | Prometheus + Grafana + cAdvisor + node-exporter + Loki + Alloy (centralized logs) |
| Network | Pi-hole (DNS filtering), Samba (file sharing), nginx (proxy managing) |
| Automation | n8n + Semaphore (Ansible Web UI) + Ansible (update playbooks) |
| Disk health | Hard Disk Sentinel |
| AI Agent | OpenHands + Ollama |
| CI/CD | Self-hosted GitLab (Omnibus) + Docker-executor Runner |
This is a running system, not a demo — screenshots throughout this wiki are from the live dashboards.
Not everything in this repo runs permanently — see Elastic Stack (ELK) — Lab for a compose stack kept as a reference from a one-off learning exercise, not part of the always-on services above.