#!/usr/bin/env bash # --- # Nextcloud High Performance Backend für Dateien (notify_push) einrichten # --- # see: # https://github.com/nextcloud/notify_push # https://apfelcast.com/nextcloud-high-performance-backend-fuer-dateien-einrichten-schritt-fuer-schritt-anleitung/ # https://www.youtube.com/watch?v=jMCI7hFAU1Y HTTP_USER="www-data" PHP_BIN="/usr/local/php/bin/php" PHP_VERSION=8.3 # 0 Requirements # ================ # # - Nextcloud auf LAMP/LEMP Stack # LAMP - (Linux Apache MySQL PHP) # LEMP - (Linux Nginx MySQL PHP) # # - Redis Memory Caching Service WEBSITE="cloud-test.oopen.de" WEBSITE="cloud-02-test.oopen.de" WEBSITE="cloud-01.oopen.de" WEBSITE="cloud-test-01.oopen.de" WEB_BASE_DIR="/var/www/${WEBSITE}" NC_INSTALL_DIR="${WEB_BASE_DIR}/nextcloud" IPv4="$(dig +short "${WEBSITE}" A)" IPv6="$(dig +short "${WEBSITE}" AAAA)" # 1 Install NC App 'Client Push" # ================================ # # Instead of using the 'occ' command, the 'Client Push' APP # can also be installed via the Nextcloud web interface (Nextcloud Appstore). # sudo -u ${HTTP_USER} ${PHP_BIN} ${WEB_BASE_DIR}/htdocs/occ app:install notify_push # 2 Configure ReversProxy # ========================= # # 2a Apache # a2enmod proxy a2enmod proxy_http a2enmod proxy_wstunnel # Add to your apache2 vhost configuration # # 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/ # restart apache2 # systemctl restart apache2 # 2b Nginx # Add to your nginx vhost configuration # # location ^~ /push/ { # proxy_pass http://127.0.0.1:7867/; # proxy_http_version 1.1; # proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection "Upgrade"; # proxy_set_header Host $host; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # reload nginx # nginx -s reload # 3 Configure NC - add truzsted proxy (IPv4 AND if exists IPv6 address to trusted proxies) # ========================================================================================== # # 'trusted_proxies' => # array ( # 0 => '${IPv4}', # 1 => '${IPv6}', # ) _parameter="trusted_proxies" _type="string" _value="${IPv4}" sudo -u ${HTTP_USER} ${PHP_BIN} ${WEB_BASE_DIR}/htdocs/occ config:system:set ${_parameter} 0 \ --value="${_value}" --type="${_type}" _value="${IPv6}" sudo -u ${HTTP_USER} ${PHP_BIN} ${WEB_BASE_DIR}/htdocs/occ config:system:set ${_parameter} 1 \ --value="${_value}" --type="${_type}" systemctl restart php-${PHP_VERSION}-fpm # 4 Create Service 'notify_push' # ================================ # # Metrics # # The push server can expose some basic metrics about the number of connected clients and # the traffic flowing through the server by setting the METRICS_PORT environment variable. # # Once set the metrics are available in a prometheus compatible format at /metrics on the # configured port. Inside the service file set: # # Environment=METRICS_PORT=7868 # # Run 'curl http://localhost:7868/metrics # # Additionally you can manually check the metrics by running the occ notify_push:metrics # command, this will function even if you haven't setup METRICS_PORT. # cat < /etc/systemd/system/notify_push.service [Unit] Description = Push daemon for Nextcloud clients Documentation=https://github.com/nextcloud/notify_push [Service] # Change if you already have something running on this port Environment=PORT=7867 # Run 'curl http://localhost:7868/metrics' to eee some metrivcs Environment=METRICS_PORT=7868 Environment=NEXTCLOUD_URL=https://${WEBSITE} ExecStart=${NC_INSTALL_DIR}/apps/notify_push/bin/x86_64/notify_push ${NC_INSTALL_DIR}/config/config.php # requires the push server to have been build with the systemd feature (enabled by default) Type=notify User=${HTTP_USER} Restart=always RestartSec=60 [Install] WantedBy = multi-user.target EOF # enable service at boot time # systemctl daemon-reload systemctl enable --now notify_push systemctl start notify_push # 5. Testing and final Nextcloud configuration # ============================================= # sudo -u ${HTTP_USER} ${PHP_BIN} ${WEB_BASE_DIR}/htdocs/occ notify_push:setup systemctl restart php-8.3-fpm.service