Nextcloud mit OnlyOffice Integration

2

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.

2 Comments
  1. Thomas Friedrich says

    Moin.
    Ich habe auf meinem Server bereits Collabora laufen. Beißen sich die beiden Dienste? Ich wollte OnlyOffice einmal im Vergleich testen. Wo liegen die Unterschiede? Sehe ich das richtig, dass OnlyOffice bei gewerblicher Nutzung nicht kostenlos ist?

    Viele Grüße
    Thomas

    1. Benjamin Hartwich says

      Die beiden Dienste beißen sich nicht – sind ja dann letztlich unterschiedliche Ports und der Rest erledigt der Reverse Proxy z.B. Die Unterschiede liegen ganz simpel daran, dass Collabora für Libreoffice Dokumente gedacht ist und OnlyOffice für Microsoft Office Dokumente. Da OnlyOffice wie Collabora freu über hub.docker.com herunterladbar sind, gehe ich von keiner lizenzrechtlichen Problematik aus. Natürlich gibt es eine Enterprise Version oder Cloudversion, die etwas kostet bzw. nur bei nicht-kommerzieller Nutzung günstiger bzw. kostenlos ist. Mit der Community Edition kannst du in der Regel machen, was du magst.

Leave A Reply

Your email address will not be published.