# homelab-infra GitOps-managed infrastructure for homelab services. ## Quick Start ```bash git clone git@gitea.sjhl.nz:james/homelab-infra.git cd homelab-infra # Set up environment cp .env.example .env # Edit .env with real values # Set up service secrets for svc in traefik gitea nextcloud qbittorrent jellyfin devbox obsidian; do [ -f "$svc/.env.example" ] && cp "$svc/.env.example" "$svc/.env" # Edit each .env with real secrets done # Create required Docker networks docker network create web # Start everything make up ``` ## Services | Service | Description | URL | |---------|-------------|-----| | traefik | Reverse proxy, TLS termination | `dashboard.sjhl.nz` | | gitea | Self-hosted Git | `gitea.sjhl.nz` | | nextcloud | Cloud storage (AIO) | `nextcloud.sjhl.nz` | | qbittorrent | Torrent client (VPN) | Internal only | | jellyfin | Media server | `jellyfin.sjhl.nz` | | devbox | Dev container | SSH:46573 | | obsidian | CouchDB for Obsidian LiveSync | Internal | | n8n | Workflow automation (planned) | - | | supersync | File sync (planned) | - | ## Commands ```bash make up # Start all services make down # Stop all services make restart # Restart all services make status # Show status of all services make logs # Show recent logs make backup # Run Restic backup make docs # Build MkDocs site ``` ## Directory Structure ``` homelab-infra/ ├── .env.example # Global env template ├── Makefile # Service management ├── backup.sh # Restic backup script ├── traefik/ # Reverse proxy ├── gitea/ # Git hosting ├── nextcloud/ # Cloud storage (AIO) ├── qbittorrent/ # Torrent + VPN stack ├── jellyfin/ # Media server ├── devbox/ # Development container ├── obsidian/ # CouchDB for LiveSync ├── n8n/ # Workflow automation ├── supersync/ # File sync └── docs/ # MkDocs documentation ``` ## Data Locations - Configs (in Git): this repo - Secrets (not in Git): per-service `.env` files - Persistent data: `/mnt/storage/docker-data/` - Media: `/mnt/storage` - Backups: `/mnt/storage/backups`