Nextcloud: Online-Office mit ONLYOFFICE (mit eigener Subdomain)

Nextcloud OnlyOffice Logo

Nextcloud bietet neben dem Speichern von Dateien auch noch erweiterte Funktionen wie z.B. die Verwaltung von Kontakten und Kalendern. Ebenso sind Online-Office-Funktionalitäten mit der eigenen Cloud-Lösung möglich: Hier gibt es die Alternativen ONLYOFFICE und Collabora. Für welche Lösung man sich hier entscheidet, ist zunächst einmal Geschmackssache.

Zum Thema ONLYOFFICE gab es bereits einen Artikel in diesem Blog. Die hier gezeigte Lösung hatte allerdings einen entscheidenden Nachteil: Die Office-Funktionalitäten waren nur verfügbar, wenn man über das lokale Netzwerk (LAN) auf die eigene Cloud zugegriffen hat. Das Bearbeiten von Dokumenten über das Internet war auf diese Art und Weise nicht möglich, da beim Bearbeiten von Dokumenten immer direkt auf die IP zugegriffen wurde, auf der ONLYOFFICE installiert wurde. Diese LAN-IP war über das Internet natürlich nicht erreichbar.

In diesem Artikel soll es daher wieder mal um die Einrichtung von ONLYOFFICE mittels Docker unter Nextcloud gehen. Dieses Mal sollen jedoch keine Einschränkungen für die Benutzung des Online-Office gelten: Somit ist dann der Zugriff sowohl über das lokale Netzwerk, also auch über das Internet möglich.

Als Grundlage dient wie immer der Artikel Nextcloud auf Ubuntu Server 18.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban.

Update-Historie (letztes Update 21.12.2021)
  • 21.12.2021:
    • Virtueller Host für OnlyOffice: Hinzufügen der listen-Direktive für IPv6.
  • 18.06.2021:
    • Aufruf von acme.sh mit Parameter „server“, so dass Zertifikate über Let’s Encrypt bezogen werden.
  • 03.02.2020:
    • Cipher Suite DHE-RSA-AES256-GCM-SHA384 entfernt.
  • 07.12.2019:
    • Troubleshooting: Hinweise bzgl. X-Frame-Options hinzugefügt.
  • 05.09.2019:
    • Hinweise hinzugefügt, falls acme.sh statt Certbot verwendet wird.
  • 23.12.2018:
    • Zeilenangaben für das Übertragen der SSL-Einstellungen in die ssl.conf hinzugefügt.
  • 19.12.2018:
    • Die SSL-Konfiguration wird nun in das Verzeichnis /etc/nginx/snippets/ssl.conf ausgelagert, ansonsten kam es z.T. zu Problemen mit den Setzen der HTTP-Header.
  • 12.11.2018:
    • Die SSL-Konfiguration wird nun unter /etc/nginx/conf.d/ssl.conf gespeichert/ausgelagert.

Zweite (Sub-)Domain für ONLYOFFICE

Ich gehe in diesem Artikel davon aus, dass der eigene Server, auf dem Nextcloud bereits läuft, über die DynDNS-Domain meindomain.de erreichbar ist. DynDNS sorgt hier dafür, dass die öffentliche IP-Adresse des Routers auf eine Domain gemappt wird. Im Router wird die Domain dazu in den DynDNS-Einstellungen hinterlegt. Leider unterscheidet sich das Vorgehen von Router zu Router, daher würde eine detaillierte Anleitung für verschiedene Router-Modelle dem Umfang des Artikels sprengen.

Voraussetzung für ONLYOFFICE ist nun eine zweite (Sub-)Domain, über die der Dokumenten-Server später erreichbar sein wird. Als Beispiel nehme ich hier einfach die Domain onlyoffice.meinedomain.de. Diese zweite Domain muss dabei ebenfalls auf die öffentliche IP-Adresse des Routers „zeigen“, ist sozusagen auch eine zweite (oder besser gesagt alternative) DynDNS-Domain.

Mehrere DynDNS-Domains mittels CNAME

Und genau das ist hier das Problem. In fast allen Router-Modellen kann nur ein DynDNS-Anschluss mit nur einer Domain festgelegt werden. Die Lösung für dieses Problem stellt ein sog. CNAME-Eintrag für eine zweite (Sub-)Domain dar. Mittels CNAME wird einfach ausgedrückt ein alternativer Name für eine Domain hinterlegt: Der CNAME-Eintrag der Office-Domain muss daher die bereits vorhandene DynDNS-Domain sein.

Wo kann man diesen CNAME-Eintrag nun hinterlegen? Dies passiert normalerweise in der Domain-Verwaltung des Webspace-Providers. Auch hier unterscheidet sich das Vorgehen von Anbieter zu Anbieter, gute Erfahrungen konnte ich hier allerdings mit All-Inkl.com (Affiliate-Link) machen.

Hier loggt man sich zunächst im Kundenportal (KAS) ein und legt eine neue Subdomain an. Dazu findet man im Menü den Eintrag Subdomain. Über den Punkt Neue Subdomain anlegen kann hier eine neue Subdomain beantragt werden. Hier kann man alle Einstellungen einfach übernehmen, da diese Domain später nicht auf den Webspace, sondern die öffentliche IP-Adresse des eigenen Routers zeigen wird.

All-Inkl.com: Neue Subdomain anlegen
All-Inkl.com: Neue Subdomain anlegen

Um nun noch den CNAME-Eintrag für die neue Subdomain hinzuzufügen, muss man die Domain-Einstellungen unter Tools > DNS-Einstellungen bearbeiten. Hier sieht man dann die eigene Domain, über die auch der DynDNS-Anschluss läuft (meinedomain.de). Mit einem Klick auf Bearbeiten kann diese Domain modifiziert werden. Hier klickt man dann auf den Punkt neuen DNS Eintrag erstellen. Folgende Einstellungen sind hier vorzunehmen:

  • Name: Der Name der Subdomain (hier also onlyoffice.meinedomain.de).
  • Typ/Prio.: CNAME
  • Data: Hier wird die eigentliche DynDNS-Domain eingetragen (also meinedomain.de).
All-Inkl.com: CNAME-Eintrag für Subdomain erstellen
All-Inkl.com: CNAME-Eintrag für Subdomain erstellen

Nach einem Klick auf Speichern werden die Änderungen übernommen.

SSL-Zertifikat für die neue Domain hinzufügen

Damit die Verbindung zu ONLYOFFICE stets verschlüsselt, also über HTTPS abläuft, muss für die neue Subdomain noch ein SSL-Zertifikat über Let’s Encrypt erzeugt werden. Dazu wird das bereits für Nextcloud verwendete Zertifikat modifiziert, indem wir dieses Zertifikat um eine weitere (Sub-)Domain erweitern. Hierfür sind keine Änderungen an den virtuellen Hosts von nginx erforderlich. Ebenfalls müssen bereits vorhandene Diffie-Hellman-Parameter (siehe Beschreibung) nicht neu erzeugt werden und können aus der bestehenden Installation übernommen werden.

Certbot

Wenn für die Generierung der Zertifikate Certbot zum Einsatz kommt, dann reicht hier folgender Befehl auf der Kommandozeile, um neue Zertifikate für beide (Sub-)Domains auszustellen:

certbot certonly --webroot -w /var/www/letsencrypt -d meinedomain.de -d onlyoffice.meinedomain.de --rsa-key-size 4096

Wichtig ist hier die Angabe aller (Sub-)Domains mit dem Parameter -d. Nach diesem Befehl werden die Zertifikats-Dateien unter /etc/letsencrypt/live/meinedaomin.de erneuert. Nicht wundern, hier wird nicht für jede (Sub-)Domain ein Zertifikat erzeugt, sondern nur ein Zertifikat, welches für mehrere Domains ausgestellt ist.

acme.sh

Falls acme.sh für die Generierung der Zertifikate verwendet wird, sollten zunächst die Grundlagen zu acme.sh aus dem Artikel Let’s Encrypt Zertifikate mit acme.sh und nginx entnommen werden.

Der konkrete Befehl zum Erzeugen der Zertifikate sieht in diesem Fall dann so aus:

acme.sh --issue -d meinedomain.de -d onlyoffice.meinedomain.de --server letsencrypt --keylength 4096 -w /var/www/letsencrypt --key-file /etc/letsencrypt/meinedomain.de/key.pem --ca-file /etc/letsencrypt/meinedomain.de/ca.pem --cert-file /etc/letsencrypt/meinedomain.de/cert.pem --fullchain-file /etc/letsencrypt/meinedomain.de/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"

Hier werden dann ebenfalls alle (Sub-)Domains mittels des Parameters -d angegeben und in einem einzigen Zertifikat „verpackt“.

Auslagern der SSL-Einstellungen aus dem virtuellen Host für Nextcloud

Für die neue Domain muss nun natürlich ein neuer virtueller Host angelegt werden. Dieser zielt wieder auf SSL ab, daher sind hier auch sämtliche SSL-Einstellungen wie ssl_certificate, ssl_protocols, ssl_ciphers, etc. notwendig. Damit wir diese nicht doppelt pflegen müssen (im Gateway-Host und im virtuellen Host für ONLYOFFICE), lagern wir diese Anweisungen für SSL einfach aus.

Vorher sollten alle virtuellen Hosts gesichert werden, falls beim Umzug etwas schief gehen sollte.

Dazu erstellen wir zunächst einen neuen Ordner, in dem die SSL-Einstellungen gespeichert werden sollen:

mkdir /etc/nginx/snippets

In diesem Ordner erstellen wir anschließend eine neue Datei speziell für allgemeine SSL-Einstellungen, die für alle (Sub-)Domains gelten sollen.

Hinweis: Diese ausgelagerten Einstellungen dürfen nicht im selben Ordner wie die restlichen vHosts (/etc/nginx/conf.d) gespeichert werden, da es ansonsten Probleme mit dem Setzen der HTTP-Header gibt.

In diese Datei werden nun die Anweisungen übernommen, die für die SSL- und Header-Einstellungen zuständig sind. In diesem konkreten Beispiel (siehe hier) sind die Zeilen 32-95 im Gateway-Host betroffen. Dieser Block wird nun aus dem Gateway-Host kopiert und in die ssl.conf eingefügt.

nano /etc/nginx/snippets/ssl.conf

In diesem Beispiel sind es die folgenden Inhalte.

# Certificates used
ssl_certificate /etc/letsencrypt/live/meinedomain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/meinedomain.de/privkey.pem;

# Not using TLSv1 will break:
#	Android <= 4.4.40
#	IE <= 10
#	IE mobile <=10
# Removing TLSv1.1 breaks nothing else!
# TLSv1.3 is not supported by most clients, but it should be enabled.
ssl_protocols TLSv1.2 TLSv1.3;

# Cipher suite from https://cipherli.st/
# Max. security, but lower compatibility 
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384';

# Cipher suite from https://wiki.mozilla.org/Security/Server_Side_TLS
#ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';

# (Modern) cipher suite from https://mozilla.github.io/server-side-tls/ssl-config-generator/
#ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';

# Diffie-Hellman parameter for DHE ciphersuites, recommended 4096 bits
ssl_dhparam /etc/nginx/ssl/dhparams.pem;

# Use multiple curves.
# secp521r1: Not supported by Chrome
# secp384r1: Not supported by Android (DAVdroid)
ssl_ecdh_curve secp521r1:secp384r1:prime256v1;

# Server should determine the ciphers, not the client
ssl_prefer_server_ciphers on;

# OCSP Stapling
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

# This should be chain.pem
# See here: https://certbot.eff.org/docs/using.html
ssl_trusted_certificate /etc/letsencrypt/live/meinedomain.de/chain.pem;

resolver 192.168.178.1;

# SSL session handling
ssl_session_timeout 24h;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

#
# Add headers to serve security related headers
#  
# HSTS (ngx_http_headers_module is required)
# In order to be recoginzed by SSL test, there must be an index.hmtl in the server's root
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload;";
add_header X-Content-Type-Options "nosniff";	
add_header Referrer-Policy "no-referrer";	
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;

# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;

Im nächsten Schritt werden nun diese SSL-Einstellungen aus dem Gateway-Host entfernt. Beispielweise also wieder die Zeilen 32-95. Damit die SSL-Einstellungen nun auch für den Gateway-Host gelten, wird nun statt dem entfernten Block einfach folgende Zeile mit übernommen:

include /etc/nginx/snippets/ssl.conf;

Wichtig ist hier v.a., dass die Anweisungen nicht doppelt aufgeführt sind (einmal im Gateway-Host direkt und einmal durch den Include). Daher müsen die eigentlichen SSL-Anweisungen auch aus dem Gateway-Host entfernt werden.

Anschließend starten wir den Webserver neu:

service nginx restart

Nun sollte man zunächst einmal testen, ob alle vorhandenen Web-Anwendungen (wie z.B. Nextcloud) noch wie erwartet funktionieren. Erst wenn diese Überprüfung erfolgreich war, sollte man hier weitermachen.

Virtuellen Host für ONLYOFFICE hinzufügen

Alles funktioniert noch? Gut! Dann weiter…

Im nächsten Schritt wird für die neue Subdomain ein eigener vHost hinzugefügt:

nano /etc/nginx/conf.d/onlyoffice.meinedomain.de.conf

Der Inhalt ist hier recht übersichtlich:

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name onlyoffice.meinedomain.de;

        # Include SSL configuration
        include /etc/nginx/snippets/ssl.conf;

        #
        # Configuration for OnlyOffice
        #
        location / {
                proxy_pass https://192.168.178.60:4433;
                proxy_redirect off;
                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-Host $server_name;
                proxy_set_header X-Forwarded-Proto $scheme;
        }
}

Die SSL-Einstellungen haben wird ja zuvor ausgelagert, so dass diese nun in diesem zweiten vHost einfach wiederverwendet werden können.

Wichtig bei der Angabe des proxy_pass:

  • Für die Verbindung zur Maschine, auf der später ONLYOFFICE laufen wird, nutzen wir ebenfalls HTTPS. Wenn dies der gleiche Rechner ist, auf dem auch Nextcloud schon läuft, könnte man hier auch einfach auf HTTP setzen, da die Kommunikation dann nur Rechner-intern abläuft (dazu später mehr).
  • Die IP ist hier die lokale IP-Adresse des Rechners, auf dem ONLYOFFICE später laufen wird. Dies kann also die IP der Maschine sein, auf der auch der Webserver (und z.B. Nextcloud) läuft, oder auch eine andere Maschine im LAN.
  • Als Port habe ich hier 4433 angegeben. Dies ist besonders wichtig, wenn ONLYOFFICE auf dem gleichen Rechner installiert wird, auf dem auch der Webserver/Nextcloud läuft. Der Standard-Port für HTTPS 443 wäre hier schon (durch den Gateway-Host) belegt, also muss man auf einen anderen Port ausweichen.

Installation und Einrichtung ONLYOFFICE

Nachdem nun sämtliche Voraussetzungen erfüllt sind, kann es an die Installation von ONLYOFFICE gehen. Ich bevorzuge hier den Weg über Docker, da eine komplett manuelle Installation sehr aufwendig ist. Hier ist es auch egal, auf welcher Maschine ONLYOFFICE installiert wird. Entweder man installiert das Online-Office direkt auf dem Rechner, auf dem auch Nextcloud bereits läuft, oder man nimmt eine zweite Maschine (oder VM), auf der dann nur ONLYOFFICE betrieben wird.

Docker sollte auf jeden Fall bereits installiert sein. Fall nicht, sollte dieser Schritt wie im Artikel Docker auf Ubuntu Server nun nachgeholt werden.

Alle folgenden Schritte müssen auf der Maschine ausgeführt werden, auf der ONLYOFFICE installiert werden soll.

Vorbereitungen für die Installation

Die Verbindung zu ONLYOFFICE sollte aus Sicherheitsgründen immer verschlüsselt, also über HTTPS ablaufen. Durch den vHost für ONLYOFFICE ist die Verbindung über das Internet auch bereits verschlüsselt. Bleibt nur der Verbindungsweg vom Webserver auf die Maschine, auf der das Online-Office später laufen wird (also die Verbindung im lokalen Netzwerk). Diese Verbindung sollte ebenfalls verschlüsselt werden, damit auch LAN-intern stets sichere Verbindungen aufgebaut wird.

Wenn ONLYOFFICE auf dem gleichen Rechner gehostet wird, auf dem schon Nextcloud und der Webserver laufen, ist dieser Schritt eigentlich optional, da hier nur eine Rechner-interne Verbindung zustande kommt. Trotzdem empfehle ich diese Schritte auszuführen, besonders wenn die Office-Lösung und der Webserver/Nextcloud auf unterschiedlichen Maschinen installiert werden.

Da wir hier ja nur mit einer IP-Adresse arbeiten (die beim proxy_pass angegeben wird), können wir hierfür kein Let’s Encrypt Zertifikat erstellen, da diese Zertifikate nicht auf IP-Adressen, sondern nur auf Domains ausgestellt werden können. Daher greifen wir hier auf ein selbst signiertes Zertifikat zurück.

Dieses wird mit folgenden Befehlen erzeugt:

mkdir -p /app/onlyoffice/DocumentServer/data/certs
cd /app/onlyoffice/DocumentServer/data/certs
openssl genrsa -out onlyoffice.key 4096
openssl req -new -key onlyoffice.key -out onlyoffice.csr
openssl x509 -req -days 3650 -in onlyoffice.csr -signkey onlyoffice.key -out onlyoffice.crt
openssl dhparam -out dhparam.pem 4096
chmod 400 onlyoffice.key
chmod 400 onlyoffice.crt
chmod 400 onlyoffice.csr
chmod 400 dhparam.pem
  • Beim Befehl openssl req -new -key onlyoffice.key -out onlyoffice.csr wird man nach dem „Common Name“ gefragt (Common Name (e.g. server FQDN or YOUR name)). Hier ist einfach die IP des lokalen Systems anzugeben (in diesem Fall 192.168.178.60). Ebenso kann man ein „challenge password“ angeben. Dieses kann man einfach leer lassen (einfach mit Enter bestätigen).
  • Achtung: Die Erzeugung der sog. Diffie-Hellmann-Parameter mit einer Länge von 4096 Bit (openssl dhparam -out dhparam.pem 4096) kann u.U. sehr lange dauern. Auf schwacher Hardware kann das schon einmal mehrere Stunden in Anspruch nehmen. Wer nicht so lange warten möchte, kann die Schlüssel-Länge auf 2048 Bit reduzieren (openssl dhparam -out dhparam.pem 2048).
  • Das Zertifikat hat eine Gültigkeit von 3650 Tagen (10 Jahre). Hier kann bei Bedarf auch eine andere Gültigkeitsdauer angegeben werden.

Installation ONLYOFFICE

Die Installation beschränkt sich dann dank Docker auf einen einzigen Befehl:

docker run --name=ONLYOFFICEDOCKER -i -t -d -p 4433:443 -e JWT_ENABLED='true' -e JWT_SECRET='geheimes-secret' --restart=always -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver

Hier gilt es folgende Punkte zu beachten:

  • Den Container nennen wir hier ONLYOFFICEDOCKER, damit dieser später über diesen Namen und nicht über eine kryptische ID angesprochen werden kann.
  • Da bereits der Webserver auf Port 443 lauscht (wenn ONLYOFFICE auf dem gleichen Rechner gestartet wird), müssen wird hier auf einen alternativen Port ausweichen. Der Parameter -p 4433:443 sorgt hier dafür, dass der Port 4433 des Docker-Hosts auf den Port 443 innerhalb des Docker-Containers gemappt wird. Wichtig ist hier, dass dieser Port (4433) mit demjenigen übereinstimmt, der beim proxy_pass im vHost für ONLYOFFICE angegeben wurde.
  • Die nächsten zwei Parameter (-e JWT_ENABLED=’true‘ -e JWT_SECRET=’geheimes-secret‘) erhöhen die Sicherheit, da zur Kommunikation mit dem Container ein sog. JSON Web Token benötigt wird. Im Grunde genommen handelt es sich dabei um ein Passwort (geheimes-secrethier sollte man natürlich ein eigenes Passwort wählen), welches später in Nextcloud hinterlegt werden muss, damit die Verbindung zu ONLYOFFICE aufgebaut werden kann. Dies verhindert, dass der ONLYOFFICE-Container „unbemerkt“ von anderen Verbindungen genutzt werden kann.
  • Mit —restart=always wird der Container bei jedem Systemstart automatisch gestartet.
  • Mit dem letzten Parameter (-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver) wird ein sog. Volume definiert: Alle Dateien, die im Verzeichnis /app/onlyoffice/DocumentServer/data des Hosts liegen, werden innerhalb des Containers im Verzeichnis /var/www/onlyoffice/Data onlyoffice/documentserver bereitgestellt. Diese Funktion wird benötigt, damit der Container das zuvor erzeugte Zertifikat finden und nutzen kann.

Nun wird das entsprechende Docker-Image heruntergeladen und auch gleich gestartet.

Installation von ONLYOFFICE mittels Docker
Installation von ONLYOFFICE mittels Docker

Nach dem Starten des Containers läuft ONLYOFFICE bereits. Wenn man nun im Browser die Domain onlyoffice.meinedomain.de oder die IP-Adresse der jeweiligen Maschine (dann aber mit dem alternativen Port 4433) aufruft, sollte folgende Seite erscheinen:

ONLYOFFICE läuft
ONLYOFFICE läuft

Einbinden von ONLYOFFICE in Nextcloud

Nachdem ONLYOFFICE läuft, geht es nun mit der eigenen Nextcloud weiter, damit hier Online-Office-Funktionalitäten hinzugefügt werden können.

Die passende App findet man dabei im Nextcloud App Store in der Kategorie Büro & Text:

ONLYOFFICE im Nextcloud App-Store
ONLYOFFICE im Nextcloud App-Store

Wenn die App aktiviert wurde, können die Einstellungen nun in der Admin-Oberfläche von Nextcloud unter dem Punkt ONLYOFFICE angepasst werden (damit alle Einstellungen angezeigt werden, muss man auf den Punkt Erweiterte Servereinstellungen klicken).

Nextcloud: ONLYOFFICE-Einstellungen in der Admin-Oberfläche
Nextcloud: ONLYOFFICE-Einstellungen in der Admin-Oberfläche
  • Serviceadresse der Dokumentbearbeitung: Hier wird die Subdomain angegeben, die wir extra für ONLYOFFICE angelegt habe, in diesem Beispiel also https://onlyoffice.meinedomain.de.
  • Geheimer Schlüssel (freilassen, um zu deaktivieren): Hier ist das JWT-Token anzugeben, welches beim Starten des Docker-Containers angegeben wurde (geheimes-secret).
  • Alle anderen Felder kann man leer lassen.

Nach einem Klick auf Speichern sollte eine Meldung erscheinen, dass die Einstellungen erfolgreich übernommen wurden.

Anschließend können Office-Dokumente ganz einfach direkt in der Cloud bearbeitet werden:

Online-Office mit Nextcloud und ONLYOFFICE
Online-Office mit Nextcloud und ONLYOFFICE

Update von ONLYOFFICE

Von Zeit zu Zeit erscheint ein neues Docker-Image für ONLYOFFICE. Leider ist es etwas umständlich herauszufinden, welche Version gerade installiert ist und ob es eine neue Container-Version gibt.

Um zu ermitteln, welche Version aktuell installiert ist, öffnet man am besten ein beliebiges Office-Dokument. Mit der Info-Schaltfläche wird die installierte Version von ONLYOFFICE angezeigt:

Über die Info-Schaltfläche kann die installierte Version ermittelt werden
Über die Info-Schaltfläche kann die installierte Version ermittelt werden

Die Version des aktuellsten Images kann nun über Docker Hub (eine Art Suche für Docker-Images) ermittelt werden. Dazu sucht man einfach nach onlyoffice und lässt sich dann die Tags anzeigen. Schneller geht es über diesen Direktlink. Hier werden dann alle Versionen des Images angezeigt:

Die aktuelle Version im Docker Hub
Die aktuelle Version im Docker Hub

Zwar werden in der ONLYOFFICE-Hilfe nur drei Versionsnummern angezeigt, allerdings sollte man auch anhand des Datums sehen können, wenn eine neue Version des Containers bereitsteht.

Das Update selbst kann man dann in wenigen Schritten durchführen:

Zunächst wird der aktuelle Container gestoppt und entfernt:

docker stop ONLYOFFICEDOCKER 
docker rm ONLYOFFICEDOCKER

ONLYOFFICEDOCKER ist hier der Name des Containers, den wir beim ersten Start angegeben haben. Hier könnte man auch die ID des Containers angeben (kann man mit docker ps ermitteln).

Optional: Bei der Arbeit mit Docker bleiben oft Reste auf dem System zurück (z.B. alte, ungenutzte Container). Gerade wenn auf dem System ausschließlich ONLYOFFICE per Docker betrieben wird, empfiehlt es sich, das komplette Docker-System zu bereinigen. Dazu werden einfach folgende Befehle ausgeführt:

docker system prune -a 
docker image prune -a 
docker container prune

Anschließend wird die neuste Version des Containers heruntergeladen und über den bekannten Befehl gestartet:

docker pull onlyoffice/documentserver 
docker run --name=ONLYOFFICEDOCKER -i -t -d -p 4433:443 -e JWT_ENABLED='true' -e JWT_SECRET='geheimes-secret' --restart=always -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver

Beim zweiten Befehl ist hier nur wichtig, dass genau das gleiche JWT_SECRET wie schon beim Start des Containers angegeben wird, ansonsten kann nach dem Update keine Verbindung mehr von Nextcloud hergestellt werden.

Troubleshooting

Generelle Fehlersuche

Manchmal kann es vorkommen, dass ONLYOFFICE nicht wie erwartet funktioniert. Bei dem System sind ziemlich viele Komponenten beteiligt (Webserver, Nextcloud, Docker-Container), so dass man zunächst einmal das Problem eingrenzen sollte.

Zunächst sollte immer erst die Subdomain für ONLYOFFICE aufgerufen werden: onlyoffice.meinedomain.de

Erscheint hier nicht die Übersichtsseite von ONLYOFFICE, dann tritt das Problem wohl auf dem Verbindungsweg vom Internet zum Webserver auf. Dann sollten zunächst einmal die Logs des Webservers kontrolliert werden (auf der Maschine, wo der Gateway-Host zu finden ist und auch Nextcloud installiert ist).

nano /var/log/nginx/error.log

Hier sollten dann Fehlermeldungen zu finden sein, mit den man das Problem weiter eingrenzen kann.

Wenn die Seite erreichbar ist, aber ONLYOFFICE trotzdem nicht funktioniert, sollte in diesem Fall zunächst einmal das Nextcloud-Log überprüft werden (in der Admin-Oberfläche von Nextcloud unter Protokollierung).

Falls hier auch nichts auffälliges zu sehen ist, sollten die Logs des Docker-Containers überprüft werden:

docker logs ONLYOFFICEDOCKER

Hier sind dann u.U. Hinweise zu finden, dass ein benötigter Dienst nicht gestartet werden konnte. In diesem Fall hilft es meistens, den Rechner, auf dem ONLYOFFICE läuft, einfach mal neu zu starten.

Erst wenn dies auch zu keinen neuen Erkenntnissen führt, kann man sich auch auf die Kommandozeile des Containers selbst einloggen. Dazu einfach auf der Docker-Maschine folgenden Befehl ausführen:

sudo docker exec -it ONLYOFFICEDOCKER bash

Auf der Kommandozeile des Containers kann dann eine detaillierte Fehlersuche stattfinden. Mit folgendem Befehl kann man beispielsweise die Webserver-Logs einzusehen:

nano /var/log/nginx/error.log

Um die Kommandozeile des Containers wieder zu verlassen, reicht folgender Befehl:

exit

Spezifische Fehler

Das Öffnen eines Dokuments resultiert in einem leeren Browser-Fenster, obwohl der Document Server läuft

Dieser Fehler äußert sich meist so, dass der Document Server anscheinend ordnungsgemäß gestartet wurde und der Aufruf der OnlyOffice-Domain im Browser (https://onlyoffice.meinedomain.de) eine entsprechende Meldung anzeigt.
Allerdings können in Nextcloud keine Dokumente geöffnet werden – das Browser-Fenster bleibt einfach leer.

Hier werfen wir zunächst einen Blick in die Developer-Konsole des Browsers (F12). Hier wird vermutlich eine Fehlermeldung angezeigt, die auf ein Problem mit den „X-Frame-Options“ hinweist:

Laden verboten durch X-Frame-Options: „SAMEORIGIN“ von „https://onlyoffice.meinedomain.de/5.4.2-46//web-apps/apps/…46&lang=de-DE&customer=ONLYOFFICE&frameEditorId=iframeEditor“, Website erlaubt keine quellübergreifende (cross-origin) Frames von „https://meinedomain.de/nextcloud/apps/onlyoffice/169?filePath=test.ods“

Die Ursache ist dabei, dass der Header X-Frame-Options beim Aufruf der OnlyOffice-Domain gesetzt wurde. Dieser darf für den virtuellen Host, der für die OnlyOffice-Domain zuständig ist, nicht gesetzt werden.

Die Lösung besteht nun dain, die Stelle zu finden, an der dieser Header für die OnlyOffice-Domain gesetzt wird. Dazu durchsucht man den vHost für OnlyOffice und alle inkludierte Konfigurationen. Eine entsprechende Zeile kann dann beispielsweise folgendermaßen aussehen:

add_header X-Frame-Options "SAMEORIGIN" always;

Diese Anweisung ist dann für die OnlyOffice-Domain zu entfernen.

Nach den Änderungen und einem Neustart des Webservers kann es nun noch sein, dass der Browser-Cache einmal geleert werden muss. Anschließend sollten sich OnlyOffice-Dokumente über Nextcloud öffnen und bearbeiten lassen.

Fazit

Es sind schon einige Schritte notwendig, um ONLYOFFICE in Verbindung mit Nextcloud zum Laufen zu kriegen. Dennoch lohnt es sich, da man nun direkt in der eigenen Cloud ein Online-Office nutzen kann. Wer vorher beispielsweise Google Docs verwendet hat, wird sich auch bei ONLYOFFICE sehr schnell zurechtfinden – und das ohne die neugierigen Blicke von Google & Co, da alle Daten sicher in der eigenen Nextcloud gespeichert sind.

Weiterführende Artikel

Links

225 Kommentare zu „Nextcloud: Online-Office mit ONLYOFFICE (mit eigener Subdomain)“

  1. Hallo Jan,
    super Tutorial, habe es aber noch nicht probiert.

    Ich habe die Nextcloud Instanz nach Deiner Anleitung auf Basis 20.04 neu aufgesetzt.
    Jetzt wollte ich mich an OnlyOffice setzen.
    Muss ich das eigentlich noch machen oder reichen die zwei Schritte in

    https://nextcloud.com/blog/how-to-install-onlyoffice-in-nextcloud-hub-and-new-integration-feature/

    aus?
    Wenn ja, wie gehe ich mit der

    add_header X-Frame-Options „SAMEORIGIN“ always;

    Angabe, die ja in der headers.conf enthalten ist, um?

    Ist der location Block im vHost für OnlyOffice wie hier in der Anleitung noch korrekt?

    Viele Grüße
    Hans

    1. Hi Hans,

      diese „integrierte“ Version von OnlyOffice funktioniert meiner Erfahrung nach noch nicht so stabil. Daher empfehle ich immer noch die Docker-Variante.
      Wenn du die integrierte Variante ausprobieren willst, musst du eigentlich nichts weiter beachten, da du ja nicht mal mehr eine zweite (Sub-)Domain brauchst. Nextcloud handhabt all diese Sachen dann intern.

      Gruß,
      Jan

      1. Hi Jan,

        danke für die schnelle Antwort.

        Ich würde wohl dann doch die Docker Variante wählen.

        Dann bliebe noch die Frage nach dem

        add_header X-Frame-Options „SAMEORIGIN“ always;

        und dem location Block im vHost für OnlyOffice.

        Darf man dann die header.conf nicht im vHost OnlyOffice referenzieren?
        Ist der location Block noch richtig?

        Meiner Meinung müsste dann der vHost so aussehen:

        server {
        listen 443 ssl http2;
        server_name onlyoffice.meinedomain.de;

        # SSL configuration
        # RSA certificates
        ssl_certificate /etc/letsencrypt/onlyoffice.meinedomain.de/rsa/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/onlyoffice.meinedomain.de/rsa/key.pem;
        # ECC certificates
        ssl_certificate /etc/letsencrypt/onlyoffice.meinedomain.de/ecc/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/onlyoffice.meinedomain.de/ecc/key.pem;

        # Include SSL configuration
        include /etc/nginx/snippets/ssl.conf;

        # Include headers
        include /etc/nginx/snippets/headers.conf;

        #
        # Configuration for OnlyOffice
        #
        location / {
        proxy_pass https://192.168.178.33:4433;
        proxy_redirect off;
        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-Host $server_name;
        proxy_set_header X-Forwarded-Proto $scheme;
        }
        }

        Ist der so korrekt?

        Gruß
        Hans

        1. Hi Hans,

          klar kannst du die Header auch auslagern (so wie in anderen Tutorials auf der Seite gezeigt). Wichtig ist hier nur, dass die Header nirgends doppelt gesetzt werden. Wenn Nextcloud z.B. selbst (im PHP-Code) einen Header setzt, und du dann nochmal den Header via nginx setzt, dann wird dieser Header meistens ignoriert. Am besten in der Browser-Console mal analysieren, welche Header tatsächlich gesetzt werden und ob sich dies mit der nginx-Config deckt.

          Gruß,
          Jan

  2. Hallo Jan,
    ich habe OnlyOffice nach Deiner Anleitung installiert. Es funktioniert bis auf eine Ausnahme.
    Wenn ich versuche .doc oder .xls Dateien zu öffnen, wird die Datei zwar geöffnet, aber ich kann sie nicht editieren. Onlyoffice öffnet sich quasi als Anzeige, aber es erscheinen keine Symbolleisten und es ist nicht möglich Eingaben zu machen.
    Dateien mit .docx und .xlsx funktionieren einwandfrei. Onlyoffice öffent sich , Symbolleisten erscheinen und die Dateien werden gespeichert.

    In den Logs ist mir nichts besonderes aufgefallen. Die beiden Dateiendungen sind in den Einstellungsseite von Onlyoffice selektiert.
    In welchen Logs sollte so ein Fehler auftauchen? Hast Du noch ein Idee?

    Gruß
    Hans

    1. Hi Hans,

      das klingt mir aber sehr nach einem Fehler in OnlyOffice und hat denke ich nichts mit der Webserver-Konfiguration zu tun. Daher am besten mal bei GitHub einen Issue auch machen.

      Gruß,
      Jan

  3. Hi,
    mein Only Office funktioniert plötzlich nicht mehr. Es lief bisher seit bestimmt 2 Jahren problemlos.
    Wenn ich versuche die Einstellungen zu aktuallisieren bekomme ich als Fehlermeldung:
    GuzzleHttp\Exception\ConnectException: cURL error 6: Could not resolve host: onlyoffice.xxx.eu (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)

    Der Documentserver ist über die URL erreichbar.

    Hast du vielleicht eine Idee?

    Gruß Andreas

    1. Hi Andreas,

      was passiert, wenn du ein ping oder curl vom Nextcloud-Server auf die OnlyOffice-Domain machst?
      Die Fehlermeldung besagt nämlich, dass er die Domain nicht mehr auflösen kann.

      Gruß,
      Jan

      1. Hallo Jan,
        danke für die schnelle Antwort.

        Ping:
        Temporary failure in name resolution
        Curl:
        Could not resolve host: onlyoffice.xxx.eu

        von meinen Windowsrechner aus funktioniert der ping. Curl kenn ich mich jetzt nicht so aus, aber von windows aus bekomme ich das:

        301 Moved Permanently

        301 Moved Permanently
        nginx

        Gruß Andreas

        1. Hi Andreas,

          hier geht es glaube ich nicht darum, von einem anderen Rechner auf die OO-Domain zuzugreifen, der Fehler ist denke ich einzig und allein darauf zurück zu führen, dass der NC-Server selbst nicht mehr die OO-Domain auflösen kann.
          Wenn dies nicht mehr gegeben ist, dann kann OO nicht mehr funktionieren.
          Also würde ich erst einmal hier (also auf der NC-Server-Seite) nachbohren.

          Gruß,
          Jan

          1. Hallo Jan,

            Hast du vielleicht eine Idee was ich machen kann? Ich habe wie gesagt nichts geändert.

            Wäre echt dankbar:)

            Gruß Andreas

          2. Hi Andreas,

            naja, irgend etwas muss sich ja geändert haben.
            Hier würde ich zunächst mal im Netzwerk nachforschen, warum die OO-Domain nicht mehr aufgelöst werden kann.
            Wenn die Domain „von außen“ erreichbar ist, wäre vielleicht auch schon die Lösung, die Auflösung per /etc/hosts auf die lokale (LAN-)IP „umzubiegen“.

            Gruß,
            Jan

  4. Hallo Jan,
    Es funktioniert alles wieder. Hab allerdings nichts gemacht. Sehr merkwürdig, oder?.

    Trotzden dankeschön für deine Unterstützung

    Gruß Andreas

    1. Hi Andreas,

      OK, dann war es wohl nur ein temporärer Schluckauf. Hast du DynDNS? Vielleicht hatte sich hier etwas verhakt.
      Auf jeden Fall danke für die Rückmeldung!

      Gruß,
      Jan

      1. Hi Jan,
        ja hab DynDns. Wäre aber merkwürdig da meine Nextcloud ja auch darüber läuft und problemlos erreichbar war.

        Na egal, bin froh das es wieder funktioniert.

        Gruß Andreas

  5. Hallo Jan,
    ich habe auf meinem neuaufgesetzten Ubuntu-20.04-Server versucht, Onlyoffice zu installieren. Die Installation an sich war erfolgreich, ich kann die welcome-Seite aufrufen und habe auch den Port 4433 in ufw freigegeben. Allerdings lassen sich dennoch keine Dokumente in Onlyoffice öffnen. Am PC lädt die Seite einfach endlos, in der Android-App bekomme ich folgende Fehlermeldung:

    Webseite nicht verfügbar
    Die Website unter https://onlyoffice.TEST.de/6.4.0-121/web-apps/apps/documenteditor/mobile/index_loader.html?_dc=6.4.0-121&lang=de-DE&customer=ONLYOFFICE&frameEditorId=iframeEditor&compact=true&parentOrigin=https://TEST.de konnte nicht geladen, weil:
    net::ERR_BLOCKED_BY_RESPONSE

    Hast du eine Idee?

    Vielen Dank und liebe Grüße
    Flo

    1. Hi Flo,

      das sieht danach aus, dass die X-Frame-Options hier nicht richtig gesetzt sind.
      Setze mal für die Office-Domain keinen Header für X-Frame-Options und probiere es dann noch mal.

      Gruß,
      Jan

      1. Hallo Jan,

        das hatte ich eigentlich gemacht. Mittlerweile (nach drei Neustarts des Servers) funktioniert es auch. Ich habe keine Ahnung, weshalb, aber zumindest läuft es.

        1. Hi Flo,

          manchmal bleiben bei Änderungen an den Headern in nginx diese auch nach einem Neustart durch das Browser-Caching scheinbar enthalten. Daher teste ich nach solchen Änderungen immer in einem privaten Tab oder leere den Browser-Cache.

          Gruß,
          Jan

  6. Hallo Jan,
    jetzt habe ich gleich noch eine Frage: Wenn ich meine domain.de bei den SSL Labs überprüfe, erhalte ich das gewünschte Ergebnis. Mache ich den Test jedoch für onlyoffice.domain.de, bekomme ich zusätzlich eine orange Meldung: Server sent invalid HSTS policy. See below for further information.

    Die weitere Information besteht aus einem Satz: Server provided more than one HSTS header

    Weißt du, woran das liegen kann? Kann es sein, dass der Fehler auftritt, weil ich die snippets/ssl.conf auch in der /etc/nginx/conf.d/onlyoffice.domain.de eingebunden habe?

    Schönen Sonntag dir!
    Flo

    1. Hi Flo,

      die ssl.conf liste ich hier immer im Blog als „allgemeingültig“ auf, damit man diese in anderen vHosts wiederverwendet werden kann.
      Ich kenne nun den konkreten vHost für OnlyOffice nicht, aber sämtliche Header dürfen nur einmal gesetzt werden – egal ob „direkt“ im vHost oder per include.

      Gruß,
      Jan

  7. Vielen Dank für die Anleitung. :)
    Mit https://nextcloudserver:Port geht Office.
    Ich kann auch https://nextcloudserver:Port direkt in der Adressleiste eingeben und komme auf die Office Welcome page. Die Welcome page erreiche ich auch mit https://officeserver.
    Wenn ich aber https://officeserver in der Office App eingebe bekomme ich im Browser die Meldung: „office.domain.de hat die Verbindung abgelehnt.“ nachdem ich ein Office Dokument öffnen will.
    Hast du eine Idee, wie ich das lösen kann? Sämtliche Logs melden nichts.
    Danke und Gruss,
    Jakob

    1. Hi Jakob,

      die von dir genannten Domains passen hier nicht zusammen (https://officeserver und office.domain.de). Hier würde ich erst einmal kontrollieren, ob hier Webserver-technisch alles passt.
      „Verbindung abgelehnt“ klingt ein wenig nach einem fehlgeschlagenen TLS-Handshake beim Verbindungsaufbau. Hier müsste man denke ich aber auch eher am Webserver ansetzen.

      Gruß,
      Jan

  8. Hallo Jan,

    würde mich sehr über einen Blogpost zu Nextcloud 23 und Nextcloud Office freuen.
    Ist hierzu etwas in Planung?
    Vielen Dank

    Grüße Luca

    1. Hi Luca,

      für NC 23 wird vermutlich erst etwas kommen, wenn Ubuntu 22.04 draußen ist.
      Nextcloud Office ist ja eigentlich nur die „integrierte Version“ von Collabora, die man sich aus dem App Store herunter laden kann. Da gibt es eigentlich sehr wenig zu beachten, sogar noch einfacher als die Docker-Variante.

      Gruß,
      Jan

      1. Hallo Jan,

        wenn man sich im Internet und den Foren umschaut, dann haben einige ihre NC damit gecrashed – gibt unendlich lange Workarounds dazu – daher die Frage.

        Würde mich tatsächlich interessieren – gerne auch als kleines Unterkapitel in einem zukünftigen Nextcloudartikel.

        Grüße Luca

  9. Hallo zusammen,
    erstmal besten Dank für das Verfassen des tollen Tutorials. Ich habe eine Frage, ich wollte eine grosse Datei (180mb) mit Onlyoffice offnen, da erschien die Meldung, dass die Datei zu gross ist. Kann man irgendwo beim bilden des Dockers eine Setting-Variable für die Begrenzung der Dateigrösse definieren. Besten Dank für eure Rückmeldung.
    Viele Grüsse Marc

    1. Hi Marc,

      die Frage ist erst einmal, ob der Fehler hier bei OnlyOffice lieft, oder doch seitens Nextcloud/PHP. Welche maximale Dateigröße ist denn bei PHO bei dir angegeben (client_max_body_size, etc.)?

      Gruß,
      Jan

      1. Hallo Jan,
        danke für deine Antwort, ich habe die Einrichtung der Nextcloud auch nach deinem Tutorial „nextcloud-auf-ubuntu-server-20-04-lts-mit-nginx-mariadb-php-lets-encrypt-redis-und-fail2ban“ eingerichtet, daher sollte seitens PHP und Nextcloud bei einer Datei von 180mb keine Probleme bestehen. Daher gehe ich von einer Restriktion seitens des Document Servers aus, den ich gemäss dem Tutorial mit Docker am laufen habe. Ansonsten habe ich keine Probleme mit grossen Dateien up/download bei Nextcloud. Besten Dank für diene Antwort.
        Gruss Marc

        1. Hi Marc,

          sind denn in den Logs von Nextcloud oder vom OO-Container irgendwelche Fehlermeldungen zu erkennen?
          Eine Restriktion seitens OO ist mir zwar nicht bekannt, aber ein 180 MB Word-Dokument ist denke ich auch schon ziemlich speziell. ;-)

          Gruß,
          Jan

  10. Moin,

    vielen Dank für die tolle Anleitung. Leider funktioniert bei mir diese Lösung mit dem selbsignierten Zertifikat leider nicht, auf den Rechnern kommt die Fehlermeldung „ONLYOFFICE ist nicht erreichbar“, falls nicht vorher über aufrufen der ONLYOFFICE-Domain im Browser eine Ausnahmeregelung für das selbsignierte Zertifikat definiert wurde. Gibt es eine Möglichkeit, auf Basis dieser Anleitung die Lösung mit einem von Let’s Encrypt Zertifikat zu realisieren?

    Viele Grüße

    1. Hi,

      OnlyOffice benötigt neben den selbst signierten Zertifikaten noch echte Zertifikate, d.h. davor muss noch ein Reverse Proxy laufen, der die SSL-Terminierung übernimmt. Wenn NC dann OnlyOffice aufruft, dann werden nur diese echten Zertifikate genutzt, nicht die selbst signierten, die werden quasi nur für die interne Kommunikation benötigt.

      Gruß,
      Jan

  11. Hallo Jan,

    ich benötige noch einmal Deinen Rat: Ich hatte OnlyOffice erfolgreich installiert und benutzt, nach dem Internetanbieter- und Routerwechsel ist aber der Wurm drin.
    vHosts müssten passen habe ich kontrolliert, Zertifikate sind ausgestellt und Portfreigaben und DynDNS im Router auch eingerichtet.
    In den Admineinstellungen unter ONLYOFFICE kommt folgende Meldung:
    Fehler beim Anschließen (cURL error 60: SSL: no alternative certificate subject name matches target host name ‚office.lottecloud.de‘ (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://office.lottecloud.de/healthcheck).

    Das heißt ja, mit dem letsencrypt Zertifikat stimmt etwas nicht. Ich komme aber nicht darauf was.
    Nginx log taucht folgende Meldung auf:
    r3.o.lencr.org could not be resolved (110: Operation timed out) while requesting certificate status, responder: r3.o.lencr.org, certificate: „/etc/letsencrypt/next.lottecloud.de/ecc/fullchain.pem“

    Hast du einen Tipp, wo ich ansetzen soll?

    Liebe Grüße
    Samuel

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert