[gelöst] Nextcloud und OnlyOffice in einer UCS Domäne, in Verbindung mit einem Hetzner Mietserver mit Debian und ProxMox VE, einer OPNsense Firewall, und einem Nginx reverseProxy

Stand 20.11.2024 - wie folgt gelöst und funktionsfähig

Umgebung

Ein Hetzner Mietserver mit Debian und ProxMox VE, alle Anfragen TCP und UDP werden auf auf die OPNsense VM umgeroutet.
Dieses leitet die Ports 80, 443 und 8443 (Dav) auf den Nginx reverseProxy um.
Dieser nimmt Anfragen auf der Domain orange.abcde.com an (80 wird dabei auf 443 umgeleitet) und leitet sie weiter an den webAppXyz01.xyz.ucs weiter.
Dort nimmt dann die Nextcloud an.

Beteiligte Systeme

  • Hetzner Mietserver mit Debian, ProxMox VE, fester IPv4 und IPv6
  • OPNsense VM :: intern 10.200.0.86/16
  • pdcXyz.xyz.ucs VM :: primärer UCS Domänen Controller :: 10.200.0.21/16
  • webAppXyz01.xyz.ucs VM :: UCS Replica Web Applikationsserver :: 10.200.0.17/16
    • Nextcloud (UCS Docker Container)
    • OnlyOffice Doc Server (UCS Docker Container)
  • reverseProxyXyz.xyz.ucs Debian VM :: Nginx reverse Proxy :: 10.200.0.11/16

Ansprache von Aussen

https://orange.abcde.com


Lösung

In der UMC

  • Installiere die OnlyOffice App in der UCS Domäne auf dem webAppXyz01.xyz.ucs.

Im DNS auf dem PDC

  • Lege auf dem PDC im DNS eine neue Forward Lookup Zone “orange.abcde.com” an und verweise diese auf die IPv4 und ggf. die IPv6 des reverseProxy’s > 10.200.0.11

Auf dem reverse Proxy

  • Lege die Nginx Konfiguration $ vi /etc/nginx/sites-available/orange.abcde.com mit dem folgenden Inhalt an:
server {
    if ($host = orange.abcde.com) {

        return 301 https://$host$request_uri;

    } # managed by Certbot

    listen 80;
    listen [::]:80;
    server_name orange.abcde.com;
    return 301 https://$host$request_uri;
}

server {

    listen 443 ssl;
    listen [::]:443 ssl;
    server_name orange.abcde.com;
    client_max_body_size 999M;

    # Server SSL
    ssl_certificate /etc/letsencrypt/live/orange.abcde.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/orange.abcde.com/privkey.pem; # managed by Certbot

    # Einstellungen für Mutual SSL (Auth mit Client Zertifikat)
    # ---

    # Globale Einstellungen
    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
    fastcgi_hide_header X-Powered-By;

    proxy_read_timeout 180;
    proxy_http_version 1.1;
    proxy_pass_request_headers on;

    proxy_pass_header Date;
    proxy_pass_header Server;
    proxy_pass_header Authorization;
    proxy_buffering off;
    proxy_set_header Connection "Keep-Alive";

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Accept-Encoding "";

    more_set_input_headers 'Authorization: $http_authorization';
    more_set_headers -s 401 'WWW-Authenticate: Basic realm="orange.abcde.com"';

     location / {

        proxy_pass          https://webAppXyz01.xyz.ucs/;
        proxy_redirect      https://webAppXyz01.xyz.ucs/ https://orange.abcde.com/;
    }

    rewrite ^/$ /nextcloud/ last;

    location = /.well-known/carddav {
      return 301 $scheme://$host/nextcloud/remote.php/dav;
    }

    location = /.well-known/caldav {
      return 301 $scheme://$host/nextcloud/remote.php/dav;
    }

    location /.well-known/acme-challenge {
    }

    location = /.well-known/webfinger {
      return 301 $scheme://$host/nextcloud/index.php/.well-known/webfinger;
    }

    location = /.well-known/nodeinfo {
      return 301 $scheme://$host/nextcloud/index.php/.well-known/nodeinfo;
    }

    # redirect server error pages to the static page
    error_page 403 /error403.html;
    location = /error403.html {
        root /var/www/error;
    }

}

Die Konfiguration muss verknüpft sein…

$ ln -s /etc/nginx/sites-available/orange.abcde.com /etc/nginx/sites-enabled/
$ service nginx restart

In der Nextcloud

  • Navigiere in der Nextcloud als Administrator in die App Übersicht und aktiviere dort die App ONLYOFFICE
  • Navigiere in der Nextcloud als Administrator in die Verwaltungs-Einstellungen, Register ONLYOFFICE und setze dort die folgenden Parameter:

Auf dem Web Applikationsserver

Nun muss im Docker Container des OnlyOffice Document Servers die Prüfung des Sicherheitstoken auf true gesetzt und der Geheime Schlüssel hinterlegt werden.

Diese Einstellung wird jedoch mit jedem Neustart des Containers, also auch mit jedem Reboot des Servers selbst zurück gesetzt.

Da wir keine Möglichkeit gefunden haben dies zu umgehen, haben wir uns mit einem Script beholfen und dieses im crontab hinterlegt.

$ mkdir /root/nc_oo

$ touch nc_oo/change_secret_and_token.sh

$ chmod 700 nc_oo/change_secret_and_token.sh

$ vi nc_oo/change_secret_and_token.sh

#!/bin/bash

cd /root/nc_oo/

CONTAINER_NAME=$(docker ps -a | grep -i 'onlyoffice' | awk '{print $1}')

DATEIPFADE=$(find /var/lib/docker/overlay2 -type f -name 'local.json')
DATEIPFAD_ANZAHL=$(find /var/lib/docker/overlay2 -type f -name 'local.json' | wc -w)

for ((i=1;i<=$DATEIPFAD_ANZAHL;i++))
    do
        DATEI=$(echo $DATEIPFADE | cut -d ' ' -f$i)
        cp $DATEI /root/nc_oo
        sed -i "s/\"string\": \".*\"/\"string\": \"Uevd6TFAZA37WxLUGJg6eBds83Ga8wG4\"/g" local.json
        sed -i "s/\"inbox\": false/\"inbox\": true/g" local.json
        sed -i "s/\"outbox\": false/\"outbox\": true/g" local.json
        sed -i "s/\"browser\": false/\"browser\": true/g" local.json
        cp -f local.json $DATEI
        rm local.json
    done

sleep 5

# Starten Sie den Dienst im Container neu
docker exec $CONTAINER_NAME supervisorctl restart all

exit 0

$ vi /etc/crontab

...
@reboot             root    sleep 90 && /root/nc_oo/change_secret_and_token.sh

$ reboot

Nach dem Neustart des Servers kann die Konfiguration von OnlyOffice in den Nextcloud Verwaltungs-Einstellungen erneut gespeichert werden, diesmal sollte die Speicherung jedoch mit einer Vollzugmeldung gelingen.

Somit sollte OnlyOffice innerhalb der Nextcloud nun funktionieren.

Sprich, nach einem Reboot des Servers wird das “Korrektur Script” automatisch ausgeführt, bei einem reinen OnlyOffice Docker Container Neustart hingegen müsst Ihr das Script manuell laufen lassen, um OnlyOffice in der Nextcloud wieder lauffähig zu machen.

Bei Fragen meldet Euch einfach…

1 Like
Mastodon