Nextcloud mit OnlyOffice Integration

7

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.


Du möchtest regelmäßig Neuigkeiten von meinem Blog? Trag dich für meinen Newsletter ein:

7 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.

  2. Tobias says

    Hallo,

    Ich hab das jetzt so gelöst. Eine Subdomain leitet via Ngnix Proxy via SSL Verschlüsselt auf den OnlyOffice Server weiter. Wenn ich OnlyOffice jetzt benutzte werden auch Daten von office.beispiel.de abgefragt. Was kann denn schlimstenfalls passieren bei einem nicht abgesicherten Server. Fremde können ihn benutzten und so Ressourcen verbrauchen oder ist es möglich Daten zu extrahieren?

    MFG

    1. Benjamin Hartwich says

      Ich weiß nicht, ob man etwas extrahieren kann, aber wieso nutzt du nicht die in der Anleitung beschriebene Variante zum Absichern? Das Hauptproblem ist eher, dass OnlyOffice nur 20 simultane Nutzer in der Community Variante gestattet.

  3. zaggynl says

    https://github.com/ONLYOFFICE/onlyoffice-nextcloud/issues/248#issuecomment-598086418 is the resolution for the 403 when using docker, apparently the docker commands don’t touch all the right variables.

  4. Eckhard says

    Hallo, ich habe einen Webserver über manitu.de Wie kann ich Onlyoffice dort in Nextcloud zum Laufen bringen?
    Wie erstelle ich einen documentserver online? Das erschließt sich mir nicht.

    1. Benjamin Hartwich says

      Du kannst einmal mit Nextcloud 18 bzw 19 nur mit der App OnlyOffice einen Server zum Laufen bringen und brauchst keinen zusätzlichen Server mehr. Ansonsten steht alles wesentliche in der Anleitung wenn du OnlyOffice als zusätzlichen Server betreiben magst. Wenn du weitere Unterstützung brauchst, kann ich dir diese gern auf Businessbasis anbieten. Schreib mir dann einfach übers Kontaktformular.

Leave A Reply

Your email address will not be published.