--- title: Nextcloud auf Raspberry PI5 description: Meine Installation published: true date: 2026-01-13T20:35:28.604Z tags: nextcloud, pi5, docker, traefik, hard piece of work editor: markdown dateCreated: 2026-01-13T20:33:57.688Z --- # Systemdokumentation: Nextcloud auf Raspberry Pi 5 Dies ist eine umfassende Systemdokumentation deiner Nextcloud-Instanz, basierend auf der erfolgreichen Fehlerbehebung und Migration vom 4. Januar 2026. --- ## 1. Systemübersicht Das System basiert auf einer Container-Architektur (Docker), die hinter einem **Traefik Reverse Proxy** betrieben wird. Die Konfiguration von Traefik erfolgt über den **File Provider** (dynamische YAML-Dateien). ### Komponenten & Versionen | Komponente | Image / Version | Zweck | | --- | --- | --- | | **Nextcloud** | `nextcloud:latest` (32.0.3) | Hauptanwendung (PHP-Apache) | | **MariaDB** | `mariadb:11.4` | Datenbank (Speicherung von Metadaten) | | **Redis** | `redis:7-alpine` | In-Memory Cache (Locking & Performance) | | **Traefik** | `traefik:latest` | Reverse Proxy & SSL-Terminierung | --- ## 2. Infrastruktur & Netzwerk Alle Container kommunizieren über ein externes Docker-Netzwerk namens `traefik`. * **Externes Netzwerk:** `traefik` (Zuständig für die Kommunikation zwischen Proxy und App). * **IP-Adressbereich:** `172.16.0.0/12` (als Trusted Proxy in Nextcloud hinterlegt). * **SSL-Zertifikate:** Automatisiert via Let's Encrypt (DNS-01 oder HTTP-01 über Traefik). --- ## 3. Dateistruktur & Volumes Die Daten liegen persistent auf einem externen Mount-Punkt (`/mnt/data/`). | Pfad auf Host | Zweck | | --- | --- | | `/mnt/data/nextcloud/www` | Nextcloud Core-Dateien & Konfiguration | | `/mnt/data/nextcloud/data` | Benutzerdaten (Dateien, Bilder, etc.) | | `/mnt/data/nextcloud/db` | MariaDB Datenbank-Dateien | | `/opt/compose/nextcloud/` | Docker Compose & `.secrets` | | `/opt/compose/traefik/dynamic/` | Traefik Routing & Middleware Konfiguration | --- ## 4. Konfigurations-Details ### 4.1 Datenbank-Zugriff Aufgrund der Migration eines bestehenden Dumps wurde der Datenbankbenutzer auf `nextclouduser` festgeschrieben. Die Authentifizierung erfolgt über Docker Secrets. * **DB-User:** `nextclouduser` * **DB-Name:** `nextcloud` * **Secrets:** Pfade liegen unter `./.secrets/` (`db_user_pw`, `db_root_pw`). ### 4.2 Traefik Routing (Dynamic Config) Um Performance-Probleme und den Fehler `429 Too Many Requests` zu vermeiden, wurde eine spezifische Middleware-Chain für Nextcloud erstellt. **Wichtige Middlewares:** * **`chain-nextcloud`**: Beinhaltet Security-Headers und Kompression, verzichtet jedoch auf striktes Rate-Limiting. * **`nextcloud-dav`**: Regelt die Weiterleitung für CalDAV/CardDAV (`.well-known` redirects). ### 4.3 Nextcloud `config.php` (Auszug) Wichtige Parameter für den Betrieb hinter Traefik: ```php 'overwrite.cli.url' => 'https://cloud.da.home-webserver.de', 'overwritehost' => 'cloud.da.home-webserver.de', 'overwriteprotocol' => 'https', 'trusted_proxies' => ['172.16.0.0/12'], 'dbuser' => 'nextclouduser', ``` --- ## 5. Wartung & Fehlerbehebung ### Häufige Befehle (OCC) Da Nextcloud in einem Docker-Container läuft, müssen `occ` Befehle mit dem User `www-data` ausgeführt werden: * **Indizes reparieren:** `docker exec --user www-data nextcloud php occ db:add-missing-indices` * **Wartungsmodus aus:** `docker exec --user www-data nextcloud php occ maintenance:mode --off` * **Upgrade durchführen:** `docker exec --user www-data nextcloud php occ upgrade` ### Backup & Restore Ein Datenbank-Import erfolgt über die Pipe-Struktur direkt in den Container: ```bash cat backup.sql | docker exec -i nextcloud-db mariadb -u root --password=$(cat ./.secrets/db_root_pw) nextcloud ``` --- ## 6. Bekannte gelöste Probleme (Historie) * **MIME-Type Fehler:** Verursacht durch Traefik Rate-Limit (Status 429). Gelöst durch Entfernung des Rate-Limits für die Nextcloud-Domain. * **Datenbank-Login:** Abgleich zwischen `config.php` und DB-Privilegien für `nextclouduser` korrigiert. * **Content Security Policy (CSP):** Login-Blockade gelöst durch Setzen der `overwrite`-Parameter in der `config.php`. --- **Dokumentationsstand:** 04. Januar 2026 **Status:** Aktiv / Stabil Möchtest du, dass ich diesen Text in eine Datei namens `README.md` in deinem Projektordner schreibe?