80 lines
2.2 KiB
Markdown
80 lines
2.2 KiB
Markdown
# 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/<service>`
|
|
- Media: `/mnt/storage`
|
|
- Backups: `/mnt/storage/backups`
|