From a8c0735e137a19531cf072ec0145c056aad9636d Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 13 Jan 2026 23:08:38 +0000 Subject: [PATCH] docs(minio): add bucket naming convention --- stabify-wiki/09-storage-minio.md | 74 ++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 stabify-wiki/09-storage-minio.md diff --git a/stabify-wiki/09-storage-minio.md b/stabify-wiki/09-storage-minio.md new file mode 100644 index 0000000..10b7a8f --- /dev/null +++ b/stabify-wiki/09-storage-minio.md @@ -0,0 +1,74 @@ +# 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`