Benutzer-Werkzeuge

Webseiten-Werkzeuge


nextcloud:notify_push

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
nextcloud:notify_push [2026/07/27 09:04] – [Zweck] franznextcloud:notify_push [2026/07/27 10:18] (aktuell) – [11. Client prüfen] franz
Zeile 20: Zeile 20:
 ^Platzhalter^Beispiel^Bedeutung| ^Platzhalter^Beispiel^Bedeutung|
 |<PROJEKTVERZEICHNIS>|/home/docker/dein_projekt|Verzeichnis der compose Datei| |<PROJEKTVERZEICHNIS>|/home/docker/dein_projekt|Verzeichnis der compose Datei|
-| | | | +|<DOMAIN>|nextcloud.example.at|öffentliche Nextcloud Domain
-| | | | +|<NEXTDCLOUD_IMAGE|nextcloud:34.0.2-apache|Image des Nextcloud Containers
-| | | | +|<APP_SERVICE>|app|Compose Service der Nextcloud Anwendung
-| | | | +|<APP_CONTAINERT>|nextcloud-dein_projekt|Name des Nextcloud Containers
-| | | | +|<NETWORK>|dein_prjekt-netzwerk|Docker Netzwerk des Projektes
-| | | | +|<PUSH_CONTAINER>|nextcloud-dein_projekt-notify_push|Name des push Containers
-| | | |+|<APACHEE_BACKEND_PORT>|8095|Host-Port des Push Daemons| 
 +|<PUSH_PORT>|7867|Port des Push Daemons| 
 + 
 +Vor jeder Änderung: 
 +<code> 
 + 
 +cd <PROJEKTVERZEICHNIS> 
 +cp docker-compose.yml docker-compose.yml.bak-$(date +%Y%m%d-%H%M%S) 
 + 
 +</code> 
 +===== 2. Voraussetzungen prüfen ===== 
 + 
 +==== 2.1 Redis prüfen ==== 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ config:system:get redis 
 + 
 +</code> 
 + 
 +zusätzlich 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ status 
 + 
 +</code> 
 + 
 +''notify_push'' setzt einen funktionierenden Redis-Server voraus. 
 +==== 2.2. App installieren und aktivieren ==== 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ app:install notify_push 
 + 
 +</code> 
 + 
 +Falls die App bereits installiertist 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ app:enable notify_push 
 + 
 +</code> 
 + 
 +Status prüfen 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ app:list | grep -A3 -B3 notify_push 
 + 
 +</code> 
 +==== 2.3. Prozessorarchitektur und Binary prüfen ==== 
 +<code> 
 + 
 +docker compose exec <APP_SERVICE> uname -m 
 + 
 +</code> 
 + 
 +Ausgabe bei einem AMD64/Intel Server 
 + 
 +x86_64 
 + 
 +Binary suchen 
 + 
 +<code> 
 +docker compose exec <APP_SERVICE> sh -c \ 
 +  'find /var/www/html/custom_apps/notify_push/bin \ 
 +  -type f -name notify_push -ls 2>/dev/null' 
 + 
 +</code> 
 + 
 +Für ''x86_64'' muss diese Datei ausführbar sein: 
 +<code> 
 +/var/www/html/custom_apps/notify_push/bin/x86_64/notify_push 
 + 
 +</code> 
 + 
 +Falls erforderlich 
 + 
 +<code> 
 +chmod 755 custom_apps/notify_push/bin/x86_64/notify_push 
 + 
 +</code> 
 +===== 3. Compose Service ergänzen ===== 
 + 
 +Der Push-Daemon wird als eigener Service im bestehenden Nextcloud-Projekt betrieben. 
 + 
 +<blockquote> 
 + 
 +Wichtig: Port ''7867'' darf nicht gleichzeitig beim Nextcloud-Service ''app'' und beim Dienst ''notify_push'' veröffentlicht werden. 
 + 
 + </blockquote>==== 3.1. bei Bedarf Falsche Portfreigabe beim App-Service entfernen ==== 
 + 
 +Unter dem Nextcloud-Service darf nur der Web-Port stehen, zum Beispiel: 
 + 
 +<code> 
 +services: 
 +  app: 
 +    ports: 
 +      - "127.0.0.1:<APACHE_BACKEND_PORT>:80" 
 + 
 +</code> 
 +==== 3.2. Dienst mit notify_push ==== 
 + 
 +Den folgenden Service auf derselben Ebene wie ''app'', ''db'' und ''redis'' ergänzen: 
 +<code> 
 +services: 
 +  notify_push: 
 +    image: <NEXTCLOUD_IMAGE> 
 +    container_name: <PUSH_CONTAINER> 
 +    restart: unless-stopped 
 +    user: www-data 
 + 
 +    entrypoint: 
 +      - /var/www/html/custom_apps/notify_push/bin/x86_64/notify_push 
 + 
 +    command: 
 +      - /var/www/html/config/config.php 
 + 
 +    environment: 
 +      PORT: "7867" 
 +      NEXTCLOUD_URL: "http://<APP_SERVICE>" 
 +      TZ: "Europe/Vienna" 
 + 
 +    depends_on: 
 +      - <APP_SERVICE> 
 +      - db 
 +      - redis 
 + 
 +    networks: 
 +      - <NETWORK> 
 + 
 +    ports: 
 +      - "127.0.0.1:7867:7867" 
 + 
 +    volumes: 
 +      - nextcloud:/var/www/html:ro 
 +      - ./config:/var/www/html/config:ro 
 +      - ./custom_apps:/var/www/html/custom_apps:ro 
 +      - /etc/localtime:/etc/localtime:ro 
 + 
 +    secrets: 
 +      - db_user_password 
 +      - smtp_password 
 + 
 +</code> 
 +==== 3.3. Volume Section anpassen ==== 
 + 
 +Die Volume-Namen und Bind-Mounts müssen zum vorhandenen ''app''-Service passen. 
 + 
 +Den App-Service anzeigen: 
 + 
 +<code> 
 +docker compose config | sed -n \ 
 +  '/ <APP_SERVICE>:/,/ [a-zA-Z0-9_-]*:/p' 
 + 
 +</code> 
 + 
 +Mindestens erforderlich sind normalerweise: 
 + 
 +  * Zugriff auf ''/var/www/html/config'' 
 +  * Zugriff auf ''/var/www/html/custom_apps'' 
 +  * Zugriff auf das Nextcloud-Volume, sofern der Binary-Pfad oder weitere Dateien daraus stammen 
 +  * dieselben Secrets, sofern ''config.php''  daraus Werte liest 
 +  * dasselbe Docker-Netzwerk wie Nextcloud, Datenbank und Redis 
 + 
 +Die Mounts im Push-Service können schreibgeschützt ('':ro'') eingebunden werden. 
 + 
 + 
 +===== 4. Compose Konfiguration prüfen und starten ===== 
 + 
 +Syntax prüfen 
 + 
 +<code> 
 +cd <PROJEKTVERZEICHNIS> 
 +docker compose config --quiet 
 + 
 +</code> 
 + 
 +Dienste anzeigen 
 + 
 +<code> 
 +docker compose config --services 
 + 
 +</code> 
 + 
 +''notify_push'' muss in der Liste enthalten sein. 
 + 
 +Container erstellen 
 + 
 +<code> 
 +docker compose up -d --force-recreate notify_push 
 + 
 +</code> 
 + 
 +Status prüfen 
 + 
 +<code> 
 +docker compose ps notify_push 
 + 
 +</code> 
 + 
 +erwartet wird 
 + 
 +STATUS: Up\\ 
 +PORTS: 127.0.0.1:7867->7867/tcp 
 + 
 +eventuell logs prüfen 
 + 
 +<code> 
 +docker compose logs --tail=100 notify_push 
 + 
 +</code> 
 + 
 +Bei ''Restarting'' oder ''Exited'': 
 +<code> 
 +docker compose ps -a notify_push 
 +docker compose logs --tail=200 notify_push 
 + 
 +</code> 
 +===== 5. Apache Reverse-Proxy konfigurieren ===== 
 + 
 +Im HTTPS-VirtualHost der betreffenden Nextcloud-Domain müssen die Push-Regeln **vor** einer allgemeinen ''ProxyPass / ...''-Regel stehen. 
 + 
 +Beispiel:\\ 
 +<code> 
 +<VirtualHost *:443> 
 +    ServerName <DOMAIN> 
 + 
 +    ProxyPreserveHost On 
 + 
 +    # Nextcloud Client Push 
 +    ProxyPass        /push/ws  ws://127.0.0.1:7867/ws 
 +    ProxyPass        /push/    http://127.0.0.1:7867/ 
 +    ProxyPassReverse /push/    http://127.0.0.1:7867/ 
 + 
 +    # Nextcloud 
 +    ProxyPass        /  http://127.0.0.1:<APACHE_BACKEND_PORT>/ 
 +    ProxyPassReverse /  http://127.0.0.1:<APACHE_BACKEND_PORT>/ 
 + 
 +    # Bestehende TLS-, Header- und Zertifikatskonfiguration 
 +    # bleibt unverändert. 
 +</VirtualHost> 
 + 
 +</code> 
 + 
 +Die Reihenfolge ist wichtig!! 
 + 
 +<code> 
 +ProxyPass /push/ ... 
 +ProxyPass / ... 
 + 
 +</code> 
 +==== 5.1. Apache Module prüfen ==== 
 + 
 +<code> 
 +sudo a2enmod proxy proxy_http proxy_wstunnel headers 
 + 
 +</code> 
 + 
 +Konfiguration prüfen 
 + 
 +<code> 
 +sudo apachectl configtest 
 + 
 +</code> 
 + 
 +bei erfolgreichem Test 
 + 
 +<code> 
 +sudo systemctl reload apache2 
 + 
 +</code> 
 + 
 +aktiven virtual-host prüfen 
 + 
 +<code> 
 +sudo systemctl reload apache2 
 + 
 +</code> 
 + 
 +Push Regeln suchen 
 + 
 +<code> 
 +sudo grep -RniE \ 
 +  'ServerName|ProxyPass.*push|ProxyPass[[:space:|]]+/'
 +  /etc/apache2/sites-enabled /etc/apache2/conf-enabled 
 + 
 +</code> 
 +===== 6. Docker-Netz als vertrauenswürdigen Proxy eintragen ===== 
 + 
 +Der Push-Container ruft Nextcloud intern über den Service-Namen auf: 
 + 
 +<code> 
 +NEXTCLOUD_URL: "http://<APP_SERVICE>" 
 + 
 +</code> 
 + 
 +Nextcloud muss daher: 
 + 
 +  - das interne Docker-Netz als Proxy vertrauen und 
 +  - den internen Service-Namen als Domain akzeptieren. 
 + 
 +==== 6.1 Docker-Netzwerk und Subnetz ermitteln ==== 
 + 
 +<code> 
 +NETWORK=$(docker inspect <APP_CONTAINER>
 +  --format '{{range $name, $conf := .NetworkSettings.Networks}}{{$name}}{{end}}'
 + 
 +SUBNET=$(docker network inspect "$NETWORK"
 +  --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}'
 + 
 +echo "Netzwerk: $NETWORK" 
 +echo "Subnetz:  $SUBNET" 
 + 
 +</code> 
 + 
 +Beispiel: 
 + 
 +Netzwerk: privat_privat-network \\ Subnetz:  172.29.0.0/16 
 + 
 +==== 6.2 Bestehende Proxy-Einträge prüfen ==== 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ \ 
 +  config:system:get trusted_proxies 
 + 
 +</code> 
 + 
 +Beispiel: 
 + 
 +127.0.0.1 
 + 
 +==== 6.3 Docker-Subnetz ergänzen ==== 
 + 
 +Den nächsten freien Index verwenden: 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ \ 
 +  config:system:set trusted_proxies 1 --value="$SUBNET" 
 + 
 +</code> 
 + 
 +Kontrolle 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ \ 
 +  config:system:get trusted_proxies 
 + 
 +</code> 
 + 
 +erwartet wird beispielsweise 
 + 
 +127.0.0.1 \\ 172.29.0.0/16 
 + 
 +**Nur kontrollierte Proxy-Adressen oder interne Docker-Netze eintragen. Vertrauenswürdige Proxys dürfen die von Nextcloud erkannte Client-IP beeinflussen.** 
 + 
 +===== 7. Internen Service-Namen als Trusted Domain eintragen ===== 
 + 
 +Vorhandene Einträge prüfen 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ \ 
 +  config:system:get trusted_domains 
 + 
 +</code> 
 + 
 +Den Service-Namen mit dem nächsten freien Index ergänzen: 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ \ 
 +  config:system:set trusted_domains 1 --value="<APP_SERVICE>" 
 + 
 +</code> 
 + 
 +Kontrolle 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ \ 
 +  config:system:get trusted_domains 
 + 
 +</code> 
 +===== 8. Verbindung testen ===== 
 + 
 +==== 8.1 Containerstatus ==== 
 + 
 +<code> 
 +docker compose ps notify_push 
 +docker compose logs --tail=100 notify_push 
 + 
 +</code> 
 +==== 8.2 Lokaler Port ==== 
 + 
 +<code> 
 +curl -i http://127.0.0.1:7867/test/cookie 
 + 
 +</code> 
 + 
 +eine Antwort wie 
 + 
 +HTTP/1.1 400 Bad Request 
 + 
 +ist bei einem direkten Aufruf über ''127.0.0.1'' möglich und zeigt bereits, dass der Push-Daemon antwortet. 
 + 
 +''Connection refused'' bedeutet dagegen: 
 + 
 +   * Container läuft nicht, 
 +  * Container startet ständig neu, 
 +  * Port ist nicht veröffentlicht oder 
 +  * kein Prozess lauscht im Container auf Port ''7867''
 + 
 +==== 8.3 Öffentlicher Pfad ==== 
 + 
 +<code> 
 +curl -i https://<DOMAIN>/push/test/cookie 
 + 
 +</code> 
 +===== 9.   notify_push  konfigurieren ===== 
 + 
 +Setup über den öffentlichen Push-Endpunkt ausführen: 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ \ 
 +  notify_push:setup https://<DOMAIN>/push 
 + 
 +</code> 
 + 
 +erwartetes Ergebnis 
 + 
 +✓ redis is configured \\ ✓ push server is receiving redis messages \\ ✓ push server can load mount info from database \\ ✓ push server can connect to the Nextcloud server \\ ✓ push server is a trusted proxy \\ ✓ push server is running the same version as the app \\ configuration saved 
 + 
 +Gespeicherten Endpunkt prüfen: 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ \ 
 +  config:app:get notify_push base_endpoint 
 + 
 +</code> 
 + 
 +erwartet wird 
 + 
 +https://<DOMAIN>/push 
 + 
 +===== 10. Firewall ===== 
 + 
 +Port ''7867''  wird nur an Loopback gebunden: 
 + 
 +<code> 
 +ports: 
 +  - "127.0.0.1:7867:7867" 
 + 
 +</code> 
 + 
 +Daher ist keine öffentliche UFW-Freigabe nötig. 
 + 
 +===== 11. Client prüfen ===== 
 + 
 +Nach erfolgreichem Setup: 
 + 
 +  - Nextcloud Desktop oder Nextcloud Talk Desktop vollständig abmelden. 
 +  - Client auch im Infobereich beziehungsweise Tray beenden. 
 +  - Client neu starten. 
 +  - Konto erneut anmelden. 
 +  - Diagnose prüfen. 
 + 
 +Die Diagnose sollte nicht mehr melden: 
 + 
 +<code> 
 +notify_push app enabled = no 
 + 
 +</code> 
 + 
 +Metriken des Push-Dienstes prüfen: 
 + 
 +<code> 
 +docker compose exec -u www-data <APP_SERVICE> php occ \ 
 +  notify_push:metrics 
 + 
 +</code>
  
  
nextcloud/notify_push.1785135883.txt.gz · Zuletzt geändert: von franz

Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki