Files
infrastructure/stabify-wiki/09-storage-minio.md
2026-01-13 23:08:38 +00:00

75 lines
3.2 KiB
Markdown

# MinIO (S3 Object Storage) Setup
MinIO wird als lokaler S3-kompatibler Object Storage in Kubernetes betrieben. Es dient als Speicherziel für Anwendungen wie Outline, Backups und Medien-Uploads.
## 1. Architektur & Storage
MinIO läuft als einzelner Pod (`Deployment` mit Replicas=1) und nutzt einen Kubernetes `PersistentVolumeClaim` (PVC).
- **PVC Größe:** 50Gi (Initial)
- **Storage Class:** `local-path` (Standard K3s)
- **Physischer Speicher:** Die Daten landen auf der VM (`vm-k3s-master-400`) im Verzeichnis `/var/lib/rancher/k3s/storage/`.
### Erweiterung (Proxmox)
Wenn der Speicherplatz der VM zur Neige geht:
1. In Proxmox die VM-Disk vergrößern (oder eine zweite Disk hinzufügen).
2. Im Linux-Gast (`vm-k3s-master-400`) das Dateisystem erweitern (`resize2fs`).
3. Die Daten für MinIO wachsen automatisch mit dem verfügbaren Platz auf der Partition.
## 2. Vault Secrets
MinIO benötigt einen Root User und ein Passwort. Diese werden in Vault gespeichert.
**Pfad:** `secret/apps/minio`
| Key | Value | Beschreibung |
| :--- | :--- | :--- |
| `root_user` | `admin` | Der Benutzername für den Admin-Login. |
| `root_password` | `...` | Ein starkes, generiertes Passwort. |
### Vault Setup Befehle
```bash
# 1. Passwort generieren
MINIO_PW=$(openssl rand -base64 24)
# 2. In Vault schreiben
vault kv put secret/apps/minio root_user="admin" root_password="$MINIO_PW"
```
## 3. Zugriff
Das System stellt zwei Domains bereit:
1. **Console (Web UI):** `https://minio.apps.k3s.stabify.de`
- Hier loggst du dich ein, erstellst Buckets, User und Access Keys.
2. **S3 API:** `https://s3.apps.k3s.stabify.de`
- Diesen Endpunkt tragen Applikationen (wie Outline) als "S3 Endpoint" ein.
## 4. Bucket Naming Convention 🪣
Damit wir im Chaos nicht untergehen, nutzen wir folgende Struktur für Bucket-Namen:
`[app-name]-[environment]-[purpose]`
- **app-name:** Name der Anwendung (z.B. `outline`, `authentik`, `gitlab`).
- **environment:** `prod` (Produktion) oder `dev` (Entwicklung).
- **purpose:** Optional, was drin ist (z.B. `media`, `backups`, `logs`).
### Beispiele
| Bucket Name | Verwendung |
| :--- | :--- |
| `outline-prod-media` | Bilder und Uploads für das Wiki (Outline). |
| `authentik-prod-static` | Statische Assets oder Uploads für Authentik. |
| `postgres-prod-backups` | Datenbank-Dumps (z.B. via Wal-G oder Scripts). |
| `loki-prod-logs` | Log-Speicher für Loki (falls verwendet). |
## 5. Verwendung in Apps (z.B. Outline)
Um MinIO in einer App zu nutzen:
1. Logge dich in die MinIO Console ein.
2. Erstelle einen **Bucket** (z.B. `outline-storage`).
3. Setze den Bucket auf **Public** (wenn nötig) oder konfiguriere eine Policy.
- *Empfehlung für Outline:* Bucket Access Policy auf `custom` und `ReadOnly` für `*` (Anonymous), damit Bilder im Wiki öffentlich sichtbar sind (wenn gewünscht), oder besser: Nutze Presigned URLs.
4. Erstelle einen **Service Account** (Access Key & Secret Key).
5. Konfiguriere die App mit:
- **Endpoint:** `https://s3.apps.k3s.stabify.de`
- **Region:** `eu-central-1` (oder was du eingestellt hast, MinIO ist das meist egal, Standard ist oft `us-east-1`).
- **Access Key:** (aus Service Account)
- **Secret Key:** (aus Service Account)
- **Bucket:** `outline-storage`