# HomeLabScripts – Wissensbasis

## Zweck
Persönliches Home-Lab-Infrastruktur-Repository. Orchestriert eine selbst gehostete Cloud-Umgebung auf K3s (Kubernetes) auf lokaler Hardware.

## Technologien
- **K3s** – Kubernetes-Distribution
- **Helm** – Paketmanager für K8s
- **NFS** – Netzwerk-Dateisystem (shared storage)
- **Longhorn** – verteilter Block-Storage (2 Replicas)
- **PostgreSQL / MariaDB / Redis** – Datenbanken & Caching
- **Authentik** – OAuth2/OIDC-Authentifizierungsserver

---

## Repo-Struktur
```
HomeLabScripts/
├── k3s/
│   ├── apps/          # App-Manifeste & Helm-Charts
│   ├── install.sh     # K3s-Cluster-Installation
│   ├── get_helm.sh    # Helm herunterladen
│   ├── installHelm.sh # Helm installieren
│   └── k8sUser/       # Benutzer-/Kubeconfig-Setup
├── nfs/               # NFS-Server- & Client-Skripte
└── mountscript/       # Disk-Partitionierung & Einhängen
```

---

## Anwendungen

| App | Namespace | NodePort | Storage | Beschreibung |
|-----|-----------|----------|---------|--------------|
| **Authentik** | authentik | 32222 | PostgreSQL (intern) | OAuth2/OIDC-Provider |
| **Homarr** | homarr | 30757 | Longhorn 5Gi | Homepage-Dashboard |
| **K8s Dashboard** | kubernetes-dashboard | 443 | – | Cluster-Management-UI |
| **Gitea** | gitea | – | NFS 30Gi (Repos) + 10Gi (DB) | Leichter Git-Dienst |
| **GitLab** | gitlab | 80/443/22 | NFS 50Gi (RWX) | Full GitLab mit CI/CD |
| **Nextcloud** | nextcloud | 30180 | NFS (Daten) + Longhorn (DB) | Datei-Hosting |
| **Immich** | photoprism | 3001/2283 | NFS photos | Fotoverwaltung (Google Photos Alternative) |
| **PhotoPrism** | photoprism | – | NFS photos | KI-Fotoverwaltung |
| **iCloudPD** | photoprism | – | NFS /data/originals | Apple-iCloud-Foto-Sync |
| **Longhorn** | longhorn-system | – | – | Storage-Provisioner |

---

## Storage-Strategie
- **Longhorn** → Datenbanken, kleine Konfigurationen (schnell, lokal)
- **NFS** → Medien, Repos, Nextcloud-Daten (groß, geteilt, RWX)
- NFS-Server: `192.168.178.166`, Pfade: `/export/fastData/`, `/export/slowData/`

---

## Netzwerk
- **NodePort** für externen Zugriff
- **ClusterIP** für Pod-to-Pod-Kommunikation (DBs)
- **Multus** bei Immich (separates IoT-Netz: `192.168.1.192/24`)
- Domain: `henryathome.home64.de`

---

## Datenbank-Zuordnung
| App | DB-Typ | User | Hinweis |
|-----|--------|------|---------|
| Authentik | PostgreSQL | – | intern |
| Nextcloud | MariaDB 10.8 | nextcloud | PW: nextcloud |
| GitLab | MariaDB | – | NFS-Backend |
| Gitea | PostgreSQL | – | NFS-Backend |
| Immich | PostgreSQL 14 (pgvecto-rs) | immich | PW: password |
| PhotoPrism | MariaDB | photoprism | PW: photoprism |

---

## Wichtige Skripte

| Skript | Zweck |
|--------|-------|
| `k3s/install.sh` | K3s installieren |
| `k3s/installHelm.sh` | Helm 3 installieren |
| `k3s/k8sUser/addUser.sh` | ServiceAccount + ClusterRoleBinding + Kubeconfig erstellen |
| `k3s/apps/dashboard/getToken.sh` | Admin-Token für K8s Dashboard |
| `k3s/apps/photo/icloudpd/base64pw.sh` | iCloud-Passwort base64-kodieren |
| `k3s/apps/Nextcloud/helm/cleanRestart.sh` | Nextcloud sauber neu starten |
| `nfs/server.sh` | NFS-Server konfigurieren |
| `nfs/client.sh` / `nfsClient2.sh` | NFS-Client einrichten & in fstab eintragen |
| `mountscript/mount-plus.sh` | Festplatte partitionieren, formatieren, einhängen |

---

## Muster & Konventionen
- Secrets: `*-secret.yaml` je App, base64-kodiert
- Init-Container: Warten auf DB-Bereitschaft (Nextcloud, Immich)
- `imagePullPolicy: IfNotPresent` (kein automatisches Re-Pull)
- `nodeSelector: knode0` bei Nextcloud (Kernel 6.1 für NFS)
- fsGroup für NFS-Berechtigungen (z. B. `33` für www-data)
- GitLab-Runner-Token: `glrt-3nNma_nEvL1Bq2zc8m5Zu286MQpwOjIKdDozCnU6MTAQ`
