Nextcloud mit OnlyOffice Integration

0

Es kann so einfach sein, wenn man das Prinzip verstanden hat bzw. einfach ein YouTube Video schaut: der Documentserver von OnlyOffice kann in Nextcloud ganz einfach integriert werden. Als Installationsmethode wird docker empfohlen (den Community Server müsst ihr NICHT installieren).

Als erstes sollte das offizielle Docker Package für eure Distribution installiert sein. Nehmt nicht das aus der Distributionsrepository! In meinem Beispiel ist es Debian 9.

1. Software installieren

Mittels Docker ladet ihr euch als erstes den Documentserver herunter und startet ihn direkt. Damit der Server nur über einen nginx Proxy zur Verfügung steht und alle Dateien bei einem Update nicht direkt im Docker Container versaut werden, sollten die App-Daten auf dem Hauptsystem liegen (Log, Data, Lib, DB). Ebenso habe ich den Port auf einen individuellen gemappt, damit es keine Kollision mit nginx etc. gibt:

docker run -i -t -d --restart=always --name onlyoffice-document-server -p 127.0.0.1:8099:80 \
-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \
-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \
-v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \
-v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql \
onlyoffice/documentserver

2. nginx Proxy

Der nginx Proxy zum lokalen Documentserver ist schnell aufgesetzt, muss allerdings auf https gestellt sein, da sonst die Nextcloud App die Verbindung nicht akzeptiert (auch wenn mir persönlich eine lokale Anbindung bei Installation auf gleicher Maschine am liebsten wäre). Einen Beispiel-Proxy stellt OnlyOffice zur Verfügung.

Das wäre mein Block:

upstream docservice {
server localhost:8099;
}

map $http_host $this_host {
"" $host;
default $http_host;
}


map $http_x_forwarded_proto $the_scheme {
default $http_x_forwarded_proto;
"" $scheme;
}

map $http_x_forwarded_host $the_host {
default $http_x_forwarded_host;
"" $this_host;
}

map $http_upgrade $proxy_connection {
default upgrade;
"" close;
}

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


## Normal HTTP host
server {
listen 80;
listen [::]:80;
server_name xy.de;
rewrite ^ https://$host$request_uri? permanent;
}

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name xy.de;
root /usr/share/nginx/html;

ssl_certificate /etc/letsencrypt/live/xy/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xy/privkey.pem;

add_header Strict-Transport-Security max-age=31536000;
# add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

location / {
proxy_pass http://docservice;
proxy_http_version 1.1;
}
}

3. Docker Container absichern

Da der Documentserver nun für jeden frei im Netz verfügbar ist und damit beliebig an externe Dienste wie Nextcloud weltweit angebunden werden kann, solltet ihr auf jeden Fall ein Secret und auch eine IP Limitierung festlegen. Beides geht direkt im Docker Container und ist teils nicht wirklich dokumentiert, sondern im Tutorialvideo und im Hilfeforum auf Nextcloud nachzulesen.

Secret festlegen

Meldet euch im Docker Container an. Zuerst findet heraus, welche ID der onlyoffice Container hat mittels docker ps -a. Kopiert euch die ID.

Anschließend melden wir uns im Container an:


docker ps -a

docker exec -it ContainerID bash

Alle Änderungen zur Sicherheit werden in /etc/onlyoffice/documentserver/default.json vorgenommen:


nano /etc/onlyoffice/documentserver/default.json

Dort nun mittels Passwortgenerator das Passwort bei folgenden Einträgen hinterlegen:

"secret": {
"browser": {
"string": "eigenessecret",
"file": "",
"tenants": {}
},
"inbox": {
"string": "eigenessecret",
"file": "",
"tenants": {}
},
"outbox": {
"string": "eigenessecret",
"file": ""
},
"session": {
"string": "eigenessecret",
"file": ""
}
},

Abschließend noch bei Token die Verwendung der Secretstrings aktivieren:

"token": {
"enable": {
"browser": true,
"request": {
"inbox": true,
"outbox": true
}
},

IP-Adresse beschränken

In der gerade geöffneten Datei legen wir jetzt noch die IP-Adresse der Nextcloud fest, auf die wir Aufrufe des Documentservers beschränken möchten:

"ipfilter": {
"rules": [
{
"address": "185.207.105.47",
"allowed": true
},
{
"address": "*",
"allowed": false
}
],
"useforrequest": true,
"errorcode": 403
},

Damit alle Änderungen angewendet werden, muss der Service neu gestartet werden:


supervisorctl restart all

4. Nextcloud App konfigurieren

Abschließend noch das Secret und die URL des nginx Proxys in den Settings der OnlyOffice Nextcloud App festlegen. Danach kann es bereits losgehen.

Mögliche Probleme

Seit dem letzten Onlyoffice Docker Update kommt standardmäßig der Error:

Error: Error response: statusCode:403 ;body:
{„message“:“Access denied“}

Das liegt anscheinend daran, dass das Secret nicht sauber nach oder von Nextcloud übermittelt wird. Ich habe schon einiges probiert, aber nichts klappt. Daher secret komplett deaktivieren und nur mit IP-Adressfilter arbeiten – siehe oben.

Leave A Reply

Your email address will not be published.