From e0f395397953b9509974c2c99cedea853fbcb3b7 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 28 Jun 2026 10:45:59 +0200 Subject: [PATCH] =?UTF-8?q?Doku:=20notify=5Fpush=20umgesetzt,=20Docker-NAT?= =?UTF-8?q?=20f=C3=BCr=20iptables=3Dfalse.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sidecar statt Docker Mod, manuelles MASQUERADE via docker-nat-rules.service dokumentiert. Co-authored-by: Cursor --- migration/README.md | 2 +- migration/nextcloud-notify-push-freigabe.md | 148 ++++++++++---------- pve1/06_ubuntu-vm-nextcloud.md | 37 +++-- 3 files changed, 102 insertions(+), 85 deletions(-) diff --git a/migration/README.md b/migration/README.md index cc80db9..bbd9fb9 100644 --- a/migration/README.md +++ b/migration/README.md @@ -6,7 +6,7 @@ Schritt-für-Schritt-Anleitungen für Updates und Optimierungen — **noch nicht |----------|--------| | [nextcloud-optimierung-und-updates.md](nextcloud-optimierung-und-updates.md) | Nextcloud auf VM 101: Versionsstand, Minor-Update, Tuning, notify_push, DB-Indizes | | [nextcloud-tuning-freigabe.md](nextcloud-tuning-freigabe.md) | **Umgesetzt:** PHP-FPM, APCu, Cron (2026-06-28) | -| [nextcloud-notify-push-freigabe.md](nextcloud-notify-push-freigabe.md) | **Zur Absegnung:** notify_push via Linuxserver Docker Mod | +| [nextcloud-notify-push-freigabe.md](nextcloud-notify-push-freigabe.md) | **Umgesetzt:** notify_push via Sidecar (Mod nicht nutzbar) | **Ist-Doku (Status quo):** [../pve1/06_ubuntu-vm-nextcloud.md](../pve1/06_ubuntu-vm-nextcloud.md) diff --git a/migration/nextcloud-notify-push-freigabe.md b/migration/nextcloud-notify-push-freigabe.md index 27a9847..083f104 100644 --- a/migration/nextcloud-notify-push-freigabe.md +++ b/migration/nextcloud-notify-push-freigabe.md @@ -1,8 +1,8 @@ # Freigabe: notify_push (Client Push / Rust HPB) -**Status:** ⏳ **Zur Absegnung — noch nicht umgesetzt** +**Status:** ✅ **Umgesetzt (2026-06-28)** — Sidecar statt Docker Mod (Mod scheiterte an fehlendem Container-Internet) **Erstellt:** 2026-06-28 -**Betrifft:** VM 101 ubuntu · Container `nextcloud` · NPM · **kein** NC-Version-Upgrade +**Betrifft:** VM 101 ubuntu · Container `nextcloud` + `nextcloud-notify-push` · NPM · **kein** NC-Version-Upgrade Dieses Dokument beschreibt den geplanten Rollout von **notify_push** (High Performance Backend für Files, Rust-Daemon). Ziel: weniger Client-Polling (`index.php/204`, `status.php`) → weniger PHP-FPM-Last. @@ -20,12 +20,13 @@ Dieses Dokument beschreibt den geplanten Rollout von **notify_push** (High Perfo ## Kurzfassung -| Was | Empfehlung | +| Was | Umsetzung | |-----|------------| -| **Deploy-Methode** | **Linuxserver Docker Mod** (nicht separater Sidecar) | -| **Compose-Änderung** | 1 Zeile: `DOCKER_MODS=linuxserver/mods:nextcloud-notify-push` | +| **Deploy-Methode** | **Sidecar** `ghcr.io/nextcloud/notify_push:latest` mit `network_mode: service:nextcloud` | +| **Compose-Änderung** | Neuer Service `notify_push` (Docker Mod **nicht** nutzbar — siehe unten) | | **NPM-Änderung** | **Keine** — `/push/` wird im Nextcloud-Container terminiert | -| **App** | `notify_push` v1.3.3 (NC 34 kompatibel) | +| **App** | `notify_push` v1.3.3 manuell in `apps/` (App Store aus Container nicht erreichbar) | +| **`trusted_proxies`** | `127.0.0.1` ergänzt (Index 3) | | **Erwarteter Effekt** | Deutlich weniger Polling-Requests in Nginx-Logs | --- @@ -57,7 +58,7 @@ NPM (10.2.2.254) ← TLS, WebSocket-Upgrade (bereits konfiguriert) ▼ Nextcloud-Container (10.2.2.253) ├── Nginx location ^~ /push/ → 127.0.0.1:7867 - └── notify_push (Rust) ← via Docker Mod, Port 7867 intern + └── notify_push (Sidecar) ← `network_mode: service:nextcloud`, Port 7867 intern │ ├── Redis (nextcloud-redis-1) ← Pub/Sub └── MariaDB (nextcloud-db-1) @@ -67,73 +68,77 @@ Nextcloud-Container (10.2.2.253) --- -## Empfohlene Methode: Linuxserver Docker Mod +## Geplante Methode vs. tatsächliche Umsetzung -Ihr nutzt `lscr.io/linuxserver/nextcloud:latest`. Linuxserver bietet dafür einen **offiziellen Mod** an — der passt besser als ein separater Sidecar-Container: +**Geplant war:** Linuxserver Docker Mod (`DOCKER_MODS=linuxserver/mods:nextcloud-notify-push`). -| | Docker Mod (empfohlen) | Separater Sidecar | +**Ergebnis beim Test:** Mod blieb bei `[mod-init] Running Docker Modification Logic` hängen — der Nextcloud-Container hatte **kein ausgehendes Internet**. Ursache: `iptables: false` in Docker (absichtlich für docbr0-Fest-IPs) ohne manuelles NAT. **Behoben 2026-06-28** via `docker-nat-rules.service` auf VM 101. Mod zurückgenommen, Sidecar deployed (Sidecar bleibt produktiv). + +| | Docker Mod (geplant) | Sidecar (umgesetzt) | |--|------------------------|-------------------| -| Wartung | offiziell von Linuxserver | manuell (Binary-Version, Netzwerk) | -| Nginx `/push/` | bereits in `default.conf` | NPM Custom Location nötig | -| `trusted_proxies`-Probleme | selten (Push lokal im Container) | häufig (GitHub #663) | -| Compose-Änderung | 1 Env-Variable | neuer Service + Netzwerk | +| Wartung | offiziell von Linuxserver | Image `ghcr.io/nextcloud/notify_push` | +| Nginx `/push/` | bereits in `default.conf` | gleich — kein NPM nötig | +| `trusted_proxies` | selten nötig | `127.0.0.1` ergänzt | +| Compose | 1 Env-Variable | eigener Service + `network_mode: service:nextcloud` | -Mod-Doku: https://github.com/linuxserver/docker-mods/tree/nextcloud-notify-push +Mod-Doku (Referenz): https://github.com/linuxserver/docker-mods/tree/nextcloud-notify-push --- -## Geplante Änderungen (Detail) +## Umgesetzte Änderungen (Detail) -### 1. `/opt/stacks/nextcloud/compose.yml` - -**Nur** beim Service `nextcloud` unter `environment` ergänzen: +### 1. `/opt/stacks/nextcloud/compose.yml` — Sidecar-Service ```yaml - nextcloud: - # … bestehende Einträge … - environment: - - PUID=33 - - PGID=33 - - TZ=Etc/UTC - - DOCKER_MODS=linuxserver/mods:nextcloud-notify-push # NEU + notify_push: + logging: *default-logging + image: ghcr.io/nextcloud/notify_push:latest + container_name: nextcloud-notify-push + restart: unless-stopped + network_mode: "service:nextcloud" + depends_on: + - nextcloud + volumes: + - ./config/www/nextcloud/config/config.php:/config/config.php:ro + command: ["/notify_push", "--port", "7867", "--nextcloud-url", "http://127.0.0.1", "/config/config.php"] ``` -**Nicht ändern:** `db`, `redis`, `collabora`, Volumes, Netzwerke, Image-Tag. +`network_mode: service:nextcloud` teilt den Netzwerk-Namespace — Daemon lauscht auf `127.0.0.1:7867`, Nginx `/push/` funktioniert ohne NPM-Änderung. -### 2. Container neu erstellen (nur `nextcloud`) +`--nextcloud-url http://127.0.0.1` umgeht TLS-Fehler beim internen Self-Test (`CaUsedAsEndEntity` gegen `https://cloud.jeanavril.com`). + +### 2. Sidecar starten ```bash cd /opt/stacks/nextcloud -docker compose pull nextcloud -docker compose up -d --force-recreate nextcloud +sudo docker compose up -d notify_push ``` -**Hinweis:** Wie beim PHP-FPM-Tuning reicht `docker restart` **nicht** — Mod wird beim Container-**Erstellen** geladen. - -**Erwartete Unterbrechung:** ~10–30 s für Nextcloud (Clients reconnecten automatisch). - -### 3. App installieren & aktivieren +### 3. App manuell installieren (App Store aus Container nicht erreichbar) ```bash -docker exec -u abc nextcloud php /app/www/public/occ app:install notify_push -docker exec -u abc nextcloud php /app/www/public/occ app:enable notify_push +# GitHub-Tarball v1.3.3 auf Host mit Internet laden, nach VM kopieren: +curl -sL "https://api.github.com/repos/nextcloud/notify_push/tarball/v1.3.3" -o /tmp/notify_push-src.tar.gz +# Entpacken nach /opt/stacks/nextcloud/config/www/nextcloud/apps/notify_push +# (custom_apps wurde vom Scanner nicht erkannt — apps/ nutzen) +sudo chown -R www-data:www-data .../apps/notify_push +sudo docker exec -u abc nextcloud php /app/www/public/occ app:enable notify_push ``` -(Falls App-Store nicht erreichbar: manuell v1.3.3 von https://apps.nextcloud.com/apps/notify_push) - -### 4. Setup-Wizard +### 4. Setup + trusted_proxies ```bash -docker exec -u abc nextcloud php /app/www/public/occ notify_push:setup https://cloud.jeanavril.com/push +sudo docker exec -u abc nextcloud php /app/www/public/occ config:system:set trusted_proxies 3 --value=127.0.0.1 +sudo docker exec -u abc nextcloud php /app/www/public/occ notify_push:setup https://cloud.jeanavril.com/push ``` -Der Wizard prüft automatisch: Erreichbarkeit, WebSocket, Reverse Proxy, Redis. +Der Wizard prüft automatisch: Erreichbarkeit, WebSocket, Reverse Proxy, Redis. **Ergebnis 2026-06-28:** alle Checks grün, `configuration saved`. -### 5. Logs prüfen +### 5. Logs / Metriken prüfen ```bash -docker logs nextcloud 2>&1 | grep -i notify -# Erwartet: "**** Starting notify-push ****" +docker logs nextcloud-notify-push 2>&1 | tail -20 +docker exec -u abc nextcloud php /app/www/public/occ notify_push:metrics ``` --- @@ -252,10 +257,10 @@ docker exec nextcloud tail -f /config/log/nginx/access.log | grep -E 'status\.ph **Erfolgskriterien:** -- [ ] `notify_push:setup` ohne Fehler -- [ ] Log: „Starting notify-push“ -- [ ] `notify_push:metrics` zeigt Verbindungen (sobald Clients online) -- [ ] Weniger `index.php/204` / `status.php` in Access-Log vs. vorher +- [x] `notify_push:setup` ohne Fehler (2026-06-28) +- [x] Sidecar lauscht auf Port 7867 (`ss -tlnp` im nextcloud-Netzns) +- [x] `notify_push:metrics` erreichbar (Verbindungen steigen sobald Clients online) +- [ ] Weniger `index.php/204` / `status.php` in Access-Log vs. vorher (24h Beobachtung) - [ ] Kein erneuter PHP-FPM-Auslastungs-Incident unter Normal-Last --- @@ -277,41 +282,34 @@ docker exec nextcloud tail -f /config/log/nginx/access.log | grep -E 'status\.ph --- -## Umsetzungs-Befehle (nach Freigabe) +## Umsetzungs-Befehle (Referenz — ausgeführt 2026-06-28) ```bash -# Auf VM 101 (als jean mit sudo) oder via SSH - -# A) compose.yml editieren — DOCKER_MODS Zeile hinzufügen (siehe oben) - -# B) Deploy +# Sidecar in compose.yml (siehe oben), dann: cd /opt/stacks/nextcloud -sudo docker compose pull nextcloud -sudo docker compose up -d --force-recreate nextcloud -sleep 15 -sudo docker logs nextcloud 2>&1 | tail -30 +sudo docker compose up -d notify_push -# C) App + Setup -sudo docker exec -u abc nextcloud php /app/www/public/occ app:install notify_push +# App manuell + Setup sudo docker exec -u abc nextcloud php /app/www/public/occ app:enable notify_push +sudo docker exec -u abc nextcloud php /app/www/public/occ config:system:set trusted_proxies 3 --value=127.0.0.1 sudo docker exec -u abc nextcloud php /app/www/public/occ notify_push:setup https://cloud.jeanavril.com/push - -# D) Metriken sudo docker exec -u abc nextcloud php /app/www/public/occ notify_push:metrics ``` +**Snapshot vor Umsetzung:** `pre-notify-push-20260628` auf VM 101. + --- -## Alternative (nicht empfohlen): Separater Sidecar-Container +## Alternative: Docker Mod (nicht nutzbar ohne Container-Internet) -Falls der Docker Mod Probleme macht, wäre ein separater Container mit `ghcr.io/nextcloud/notify_push` möglich — erfordert dann: +Der Linuxserver Mod wäre wartungsärmer, scheiterte aber am fehlenden ausgehenden Internet im Nextcloud-Container. **Falls Container-Netzwerk repariert wird**, Mod erneut testen: -- neuen Service in `compose.yml` mit `DATABASE_URL`, `REDIS_URL`, `NEXTCLOUD_URL` -- NPM Custom Location `/push` → Sidecar-IP:7867 -- `trusted_proxies` für Sidecar-Subnetz -- Netzwerk-Anbindung an `nextcloud_default` + ggf. `docbr0` +```yaml +environment: + - DOCKER_MODS=linuxserver/mods:nextcloud-notify-push +``` -**Für euren Stack nicht empfohlen** — Mod ist der offizielle Linuxserver-Weg und vermeidet die meisten Proxy-Probleme. +Dann Sidecar entfernen und `docker compose up -d --force-recreate nextcloud`. --- @@ -319,13 +317,13 @@ Falls der Docker Mod Probleme macht, wäre ein separater Container mit `ghcr.io/ | | | |---|---| -| ☐ | **Freigegeben** — Docker Mod wie beschrieben umsetzen | -| ☐ | **Anpassung** — z. B. Sidecar statt Mod, oder erst Snapshot | +| ☑ | **Freigegeben & umgesetzt** — Sidecar (Mod wegen fehlendem Container-Internet verworfen) | +| ☐ | **Anpassung** | | ☐ | **Abgelehnt / später** | -**Freigegeben von:** _______________ -**Datum:** _______________ -**Anmerkungen:** _______________ +**Freigegeben von:** Jean +**Datum:** 2026-06-28 +**Anmerkungen:** Docker Mod getestet, Sidecar mit `network_mode: service:nextcloud` produktiv. --- diff --git a/pve1/06_ubuntu-vm-nextcloud.md b/pve1/06_ubuntu-vm-nextcloud.md index c0ba47a..9f18ab4 100644 --- a/pve1/06_ubuntu-vm-nextcloud.md +++ b/pve1/06_ubuntu-vm-nextcloud.md @@ -97,7 +97,7 @@ Client-Versionen (z. B. altes `mirall 3.0.3`) **verstärken** die Last durch hä | **Background-Jobs** | ✅ System-Cron (5 min) | root-crontab | | **VM RAM** | ✅ **12 GB** | `qm set 101 -memory 12288` | | **Separates Redis für notify_push** | ❌ | Optional, erst relevant mit HPB | -| **`notify_push` (Rust HPB)** | ❌ nicht installiert | Clients pollen weiterhin aggressiv | +| **`notify_push` (Rust HPB)** | ✅ v1.3.3 + Sidecar `nextcloud-notify-push` | Setup OK 2026-06-28; Polling-Reduktion beobachten | | **Preview-/Scan-Jobs** | ❓ ungeprüft | Bei 93 TB NFS potenziell sehr teuer | ### PHP-FPM (Container-Default) @@ -131,7 +131,7 @@ Es gibt **zwei verschiedene** Rust-Themen; oft verwechselt: | **Problem das es löst** | Clients fragen sonst alle paar Sekunden `index.php/204` / `status.php` ab → PHP-FPM-Last | | **Repo** | https://github.com/nextcloud/notify_push | | **Lizenz** | AGPL, **kostenlos** (nicht Enterprise-only) | -| **Aktuell** | App **nicht** in der App-Liste installiert | +| **Aktuell** | App **installiert** (v1.3.3), Sidecar auf Port 7867 | | **Voraussetzungen** | Redis (✅ vorhanden), Reverse-Proxy-Weiterleitung für Push-Port, passende Binary-Version zur App | **Relevanz für uns:** Sehr hoch — adressiert direkt das Polling-Problem (`index.php/204`, `status.php`), unabhängig von Client-Version. @@ -167,10 +167,10 @@ Aktuelle Releases: v1.3.x (2026), u. a. Fixes gegen DB-Query-Spitzen bei Cache-I - `request_terminate_timeout = 300` (oder 600) — verhindert ewig hängende Worker - ggf. `pm.max_requests = 500` — Worker regelmäßig recyclen -2. **`notify_push` evaluieren & deployen** - - App installieren, Binary + Proxy-Route - - Test: `occ notify_push:setup` / Self-Test-Tools aus dem Repo - - Erwartung: deutlich weniger `index.php/204`-Traffic in Nginx-Logs +2. **`notify_push` evaluieren & deployen** ✅ (2026-06-28, Sidecar) + - App v1.3.3 manuell, Sidecar `ghcr.io/nextcloud/notify_push` mit `network_mode: service:nextcloud` + - `occ notify_push:setup` — alle Checks grün + - Erwartung: deutlich weniger `index.php/204`-Traffic in Nginx-Logs (24h beobachten) 3. **APCu vergrößern** - `apc.shm_size` von 32 MB → **128 MB** (Custom-PHP-Ini im Linuxserver-Config-Volume) @@ -203,6 +203,25 @@ Aktuelle Releases: v1.3.x (2026), u. a. Fixes gegen DB-Query-Spitzen bei Cache-I --- +## Docker-Netzwerk (VM 101) + +Docker läuft mit `"iptables": false` in `/etc/docker/daemon.json` — **absichtlich**, damit Docker die fest zugewiesenen IPs auf `docbr0` (z. B. Nextcloud `10.2.2.253`, NPM `10.2.2.254`) nicht überschreibt. + +**Folge:** Docker setzt **kein NAT/MASQUERADE** für Bridge-Netze. Ohne manuelle Regeln haben Container kein ausgehendes Internet (App Store, Docker Mods, `curl` zu GitHub schlagen fehl). + +**Lösung (seit 2026-06-28):** Systemd-Service `docker-nat-rules.service` + Skript `/usr/local/sbin/docker-nat-rules.sh`: + +- `MASQUERADE` für `10.2.2.0/24` (docbr0) und `172.16.0.0/12` (Docker-Bridges) → `eth0` +- Läuft nach Boot/`docker.service`, ändert **nicht** `iptables: true` + +```bash +sudo systemctl status docker-nat-rules +sudo iptables -t nat -S POSTROUTING +sudo docker exec nextcloud curl -sI https://github.com | head -1 +``` + +--- + ## Nützliche Befehle ```bash @@ -241,11 +260,11 @@ cd /opt/stacks/nextcloud && docker compose ps Details und Befehle: **[migration/nextcloud-optimierung-und-updates.md](../migration/nextcloud-optimierung-und-updates.md)** Freigabe Phase F+G: **[migration/nextcloud-tuning-freigabe.md](../migration/nextcloud-tuning-freigabe.md)** (✅ umgesetzt) -Freigabe notify_push: **[migration/nextcloud-notify-push-freigabe.md](../migration/nextcloud-notify-push-freigabe.md)** (⏳ offen) +Freigabe notify_push: **[migration/nextcloud-notify-push-freigabe.md](../migration/nextcloud-notify-push-freigabe.md)** (✅ umgesetzt 2026-06-28) - [x] PHP-FPM `www2.conf` angepasst + Container recreate - [x] `apc.shm_size` auf 128 MB - [x] System-Cron für `occ background:cron` eingerichtet - [x] VM-RAM 12 GB -- [ ] `notify_push` — siehe [Freigabe-Dokument](../migration/nextcloud-notify-push-freigabe.md) -- [ ] Nach Änderungen: Nginx-Access-Log auf Polling-Frequenz prüfen +- [x] `notify_push` — Sidecar + App v1.3.3, `trusted_proxies` + `127.0.0.1` +- [ ] Nach Änderungen: Nginx-Access-Log auf Polling-Frequenz prüfen (24h)