DecaTec

Home-Server | Linux | Nextcloud | Raspberry Pi | Programmierung | Fotografie

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 23.12.2018)
  • 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, es reicht einfach folgender Befehl auf der Kommandozeile:

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.

Die Diffie-Hellman-Parameter (siehe Beschreibung) müssen nicht neu erzeugt werden können aus der bestehenden Installation übernommen werden.

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:

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.

In diesem Beispiel sind es die folgenden Inhalte.

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:

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:

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:

Der Inhalt ist hier recht übersichtlich:

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:

  • 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:

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:

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:

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

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

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

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:

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:

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

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

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

 

, , , , , , , , , , , , , , ,

Kommentare: 117

  • Kevin sagt:

    Hallo Jan,
    super Anleitungen + Erklärungen die du hier veröffentlichst! Gefällt mir sehr und hat mir schon viel weitergeholfen. Danke dafür.

    Nun zu meinem Anliegen: bin derzeit am Verzweifeln weil die zweite Subdomain mit OnlyOffice nicht zum Laufen gebracht werden will.

    Kurz zu meiner Konfiguration:
    Habe nach deiner Anleitung Nextcloud 16 auf Ubuntu Server 18.04 mit nginx, mariadb, acme.sh, redis, fail2ban etc installiert. Des Weiteren habe ich WordPress, den Coturn-Server, Onlyoffice(im localnetwork) zum laufen gebracht. Gestern habe ich dann einige Updates (NC + NC-Apps + Ubuntu Updates) installiert und daraufhin die Domainadresse gewechselt (nach deiner Anleitung – anderer Artikel). Habe die .conf-Dateien alle angepasst, die Domainnamen ausgetauscht, dann aber über Certbot statt acme.sh neue Certificates von LE geholt (war schon spät und wollte mir das System nicht noch mehr zerschießen bevor ich schlafen gehe => Deswegen nach dieser Anleitung halt neue Certs von Certbot). Hat auch funktioniert, da ein grünes Vorhängeschloss in der URL-Leiste zu finden ist.

    Zur Domain: Habe eine „Subdomain“ hier nun: h.meinedomain.de als meine Domain für nextcloud,wp, etc. verwendet und nun eine zweite Subdomain o.meinedomain.de auf meine Fritzbox eingerichtet (mit gleicher Dyndns-Adresse wie für Nextclout,…, aber halt für OnlyOffice).

    Nach dem Umzug habe ich Nextcloud wieder funktionsfähig gemacht und dabei sind Probleme, Probleme und noch mehr Probleme entstanden. Der Coturn-Server-Test (in NC) ging seit dem nicht mehr (obwohl die turnserver.conf angepasst wurde). Also: deinstalliert, neuinstalliert + konfiguriert, in NC alle aktiven Apps deaktiviert, aktiviert. Nun scheint der Coturn-Server und die anderen Apps wieder zu funktionieren, eine Bestätigung von NC habe ich aber seit dem nicht mehr bekommen bei dem OO-Test. Aber er macht was er soll, auch wenn NC es nicht so anzeigt.

    WordPress, etc. läuft auch alles. Nur krieg ich den Wurm bei der 2ten Subdomain für OnlyOffice nicht zum laufen. Bekomme meist ein: „502 Bad Gateway“ oder ein (glaube es war) „403 Forbidden“ Status zu sehen bzw. auch ab und an gar keine Verbindung. Liegt das nun daran das ich eine zweite Subdomain nutze, während NC16 auf einer anderen Subdomain läuft und nicht auf der Main-Domain oder liegt das an meinen Konfigurationen oder…? Habe auch schon Docker einmal komplett reinstalliert und die ONLYOFFICEDOCKER ebenfalls mehrfach gelöscht und neuinstalliert. Bin momentan echt für jeden Tipp zu haben. ;D

    Grüße,
    Kevin

  • Kevin sagt:

    Hallo Jan,
    nochn kleiner Edit: über die Dockerlogs sieht man das da was im Zusammenspiel mit nginx nicht ganz rund läuft. Hast du da vielleicht ne Idee?

    root@weekend:/home/party# docker logs ONLYOFFICEDOCKER
    * Starting PostgreSQL 9.5 database server [ OK ]
    * Starting RabbitMQ Messaging Server rabbitmq-server [ OK ]
    Starting redis-server: redis-server.
    Starting supervisor: supervisord.
    * Starting periodic command scheduler cron [ OK ]
    * Starting nginx nginx [fail]
    Generating AllFonts.js, please wait…Done
    ds:docservice: stopped
    ds:docservice: started
    ds:converter: stopped
    ds:converter: started
    * Reloading nginx configuration nginx [fail]
    ==> /var/log/onlyoffice/documentserver/converter/err.log /var/log/onlyoffice/documentserver/converter/out.log /var/log/onlyoffice/documentserver/docservice/err.log /var/log/onlyoffice/documentserver/docservice/out.log /var/log/onlyoffice/documentserver/gc/err.log /var/log/onlyoffice/documentserver/gc/out.log /var/log/onlyoffice/documentserver/metrics/err.log /var/log/onlyoffice/documentserver/metrics/out.log /var/log/onlyoffice/documentserver/spellchecker/err.log /var/log/onlyoffice/documentserver/spellchecker/out.log <==
    [2019-06-13T13:10:42.527] [WARN] nodeJS – start cluster with 1 workers
    [2019-06-13T13:10:42.535] [WARN] nodeJS – worker 689 started.
    [2019-06-13T13:10:43.217] [WARN] nodeJS – Express server starting…
    [2019-06-13T13:10:43.289] [WARN] nodeJS – Express server listening on port 8080 in production-linux mode

    Grüße
    Kevin

    • Kevin sagt:

      bin eben nochmal dein Troubleshooting durchgegangen.
      vi var/log/nginx/error.log:

      2019/06/13 16:56:22 [error] 7517#7517: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 194.xx.xx.54, server: o.meinedomain.de, request: „GET / HTTP/2.0“, upstream: „https://192.xx.xx.39:4433/“, host: „o.meinedomain.de“

      und ausm ONLYOFFICEDOCKER-Container:
      nano /var/log/nginx/error.log:

      2019/06/13 16:56:03 [emerg] 697#697: SSL_CTX_use_PrivateKey_file(„/var/www/onlyoffice/Data/certs/onlyoffice.key“) failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
      2019/06/13 16:56:29 [emerg] 4466#4466: SSL_CTX_use_PrivateKey_file(„/var/www/onlyoffice/Data/certs/onlyoffice.key“) failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)

      also liegt es an den Zertifikaten?

      • Jan sagt:

        Hi Kevin,

        sorry, dein ursprünglicher Kommentar (glaube ich) ist im Spam-Filter gelandet, daher musste ich diesen erst manuell freigeben. Wenn dein Kommentar nicht direkt angezeigt wird, dann brauchst du diesen nicht mehrfach zu posten, ich versuche hier mindestens einmal am Tag rein zu schauen und gebe Kommentare ggf. manuell frei.

        So, zu deinem Problem:
        Sieht wirklich so aus, als ob es ein Problem mit den Zertifikaten gäbe (nicht die Let’s Encrypt Zertifikate, sondern die self-signed Zertifikate, die du für OnlyOffice brauchst).
        Daher würde ich mal probieren, diese neu zu erzeugen (einfach die Schritte aus dem ersten Code-Block hier ausführen). Danach den OO-Container nochmal komplett neu herunter laden (wie hier beschrieben).

        Danach einfach mal die Office-Domain im Browser eingeben und sehen was passiert.

        Gruß,
        Jan

        • Kevin sagt:

          Hi Jan,
          danke für deine Hilfe. Hat super funktioniert. Läuft würd ich sagen ;D Waren tatsächlich die Zertifikate. Habe erst docker bereinigt (mit rm und prune -a, etc.), bevor ich die Schritte oben nochmal durchgegangen bin und hat dann ohne Probleme funktioniert.

          Zu dem Kommentar: Sorry, hab mich nur gewundert, weil die Kommentare die ich über ein öffentliches bzw halb-öffentliches Wlannetz (Uni-Wlan) mit Uni-Computern abgeschickt habe, wurden nie angezeigt, während die über VPN mit eigenem Mac von Daheim doch „manchmal“ angezeigt wurden. Hatte dann aber auch keine Lust mehr da weiter herum zu probieren und als dann eine Email mit Freibier (perfekt bei dem Wetter!!) reinkam, war ich auch schon wieder weg ;D

          Danke nochmal ;D
          Grüße
          Kevin

  • rantanplan sagt:

    Vielen Dank für diese Anleitung, sie ist wie deine anderen Anleitungen auch wirklich sehr gut. Vor allem auch deien Erklärungen sind super!

    Ich habe bei mir jetzt auch OO über Docker am laufen und es funktioniert gut!
    Mir ist jetzt allerdings aufgefallen, dass seit der Installation von Docker (und OO) mehrere beam.smp Prozesse am laufen sind und diese auch ohne das onlyoffice aktiv genutz wird mit rund 20% CPU Auslastung laufen.
    Ist das bei dir auch so?

    • Jan sagt:

      Hi,

      ich finde bei mir schon einige beam.smp Prozesse, aber diese brauchen nicht wirklich CPU-Leistung.
      Auch denke ich nicht, dass dies direkt mit OO zu tun hat. Schau dir mal diesen Link an, vielleicht findest du ja eine Lösung wegen der hohen CPU-Last.

      Gruß,
      Jan

  • Marvin sagt:

    Hallo Jan,

    danke für den Tipp.

    Da ich die Domain über spdyn am laufen habe und die kein C-Name anbieten habe ich eine zweite Sub-Domain eingerichtet (nextcloud läuft auch über eine Subdomain) die auf meinen Server zeigt.
    Also als Beispiel so:
    Nextcloud nc.spdyn.de
    Onlyoffice office.spdyn.de

    immer wenn ich „office.spdyn.de“ aufrufe werde ich zu „nc.spdyn.de“ weitergeleitet. Und bekomme einen 403 Fehler. Ich habe schon verschiedene Sachen ausprobiert. Mal ist es dann ein 404 oder 502 Fehler aber die Willkommensseite von Onlyoffice habe ich noch nie zu Gesicht bekommen. Ich habe auch verschiedene Browser ausprobiert.

    Weißt du wieder Rat?

    Danke schonmal

    • Jan sagt:

      Hi Marvin,

      eine Weiterleitung reicht hier nicht aus, es muss wirklich ein CNAME-Eintrag sein: Beide Domains müssen auf die gleiche IP verweisen.

      Vielleicht ein Tipp: Du könntest für die Office-Domain ja eine Domain von einem Anbieter nehmen, der CNAME unterstützt (z.B. dynv6.com). Das fällt auch nicht weiter auf, da Cloud-Nutzer diese Domain ja nie zu Gesicht bekommen.

      Gruß,
      Jan

  • Marion Rogel sagt:

    Hallo Jan,

    ich habe auch keine Weiterleitung eingerichtet sondern eine 2. Domain die auf die auf die selbe IP zeigt. Trotzdem wird immer von „office.spdyn.de“ auf „nc.sydyn.de“ weitergeleitet.

    • Jan sagt:

      Hi,

      damit die Domains unterschieden werden, benötigst du zwei vHosts. Welcher vHost von einem Request „getroffen“ wird, wird über den server_name festgelegt.
      Du benötigst also einen vHost für office.spdyn.de und einen für nc.spdyn.de.
      Wenn hier auch korrekte Weiterleitungen von HTTP auf HTTPS erfolgen sollen, dann sind es natürlich vier vHosts.

      Gruß,
      Jan

  • quelsh sagt:

    Hallo Jan,

    in diesem Tutorial wird ja noch Certbot verwendet, bei der Einrichtung von NC bist du mittlerweile ja auf acme.sh umgestiegen. Kann ich hier dennoch Certbot nutzen (auch, wenn das sicherlich nicht sonderlich elegant ist), oder gibt es etwas, was definitiv dagegen spricht?

    Lg

    • Jan sagt:

      Hi,

      nein, gegen Certbot spricht eigentlich nichts, wenn es bei dir richtig funktioniert.
      Ich würde nur davon abraten, certbot und acme.sh parallel zu nutzen.

      Gruß,
      Jan

  • Marvin Rogel sagt:

    Hallo Jan,

    ich habe keine Weiterleitung gemacht sondern eine 2. Domain eingerichtet die auf die auf die selbe IP zeigt und aktualisiert wird. Aber immer wenn ich in den Browser „office.spdyn.de“ eingebe wird auf „nc.sydyn.de“ weitergeleitet.

    • Jan sagt:

      Hallo Marvin,

      ich vermute mal, dass in dem vHost für nc.sydyn.de die Angabe „default_server“ angegeben ist.
      Das bedeutet dann, dass alle Requests, die zwar bei deinem Server ankommen, aber keinem vHost eindeutig zugeordnet werden können, zu diesem default Server weitergeleitet werden.
      Kontrolliere doch mal, ob die server_name Angaben in deinen vHosts korrekt sind.

      Gruß,
      Jan

  • Leo W. sagt:

    Hi Jan,

    in bin inzwischen soweit komplet auf OMV zu verzichten und alles über NC laufen zu lassen, dann muss ich eben Samaba manuell installieren und konfigurieren. Aber das ist erstmal nicht mein Problem.
    Mein Aktuelles Problem ist Folgendes:
    Ich habe inzwischen zwei Tage lang deine, wie immer super ausführliche Anleitung, immer und immer wieder befolgt, aber komme immer wieder zum selben Ergebnis…

    Wenn ich bei NC in den App-Einstellungen für OnlyOffice die Daten eingebe, erscheint immer der Fehler :
    „Fehler beim Anschließen (Im Dokumentenservice ist ein Fehler aufgetreten: Error while downloading the document file to be converted.)“.

    Wenn ich absichtlich ein falsches Passwort eingebe, sagt er korrekt dass ich ein falsches Passwort benutze, wenn ich meine lokale Ip eingebe mit Port 4433 kommt die Fehlermeldung: „Fehler beim Anschließen (cURL error 60: SSL certificate problem: self signed certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html))“.

    Wenn ich meine Subdomain eingebe, dann erscheint erstere Fehlermeldung.

    Mein Nginx-Log ist sauber, auser zwei „Infos“.
    Im Dockerlog zeigt er mir allerdings folgenden Fehler an, den ich leider nicht zu deuten schaffe, könntest du mir einen Tipp geben?

    „[2019-08-12T21:12:39.498] [ERROR] nodeJS – error downloadFile:url=https://nc.lv-w.de/apps/onlyoffice/empty?doc=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhY3Rpb24iOiJlbXB0eSJ9.qgt5Oq2uKcK4_8_lKYRNJp2SuxWwfOdp8lRybZ6qCvg;attempt=3;code:EPROTO;connect:null;(id=conv_check_341152751_docx)
    Error: write EPROTO 140671834888000:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:../deps/openssl/openssl/ssl/s23_clnt.c:802:

    at WriteWrap.afterWrite [as oncomplete] (net.js:868:14)“.

    Mit freundlichen Grüßen
    Leo W.

    • Jan sagt:

      Hallo Leo,

      die Fehlermeldung im Container sehen so aus, als ob sie etwas mit der Verbindung über HTTPS (also NC -> Docker) zu tun hätten.
      Hast du diese Schritte durchgeführt und auch darauf geachtet, dass der proxy_pass im vHost für OnlyOffice über HTTPS abgewickelt wird?

      Gruß,
      Jan

      • Leo sagt:

        Ja, eigentlich habe ich alles genau so gemacht. Und wenn ich über den Browser onlyoffice.domain.de aufrufe wird mir das zu der Domain zugehörige Zertifikat angezeigt und wenn ich über ip:4433 drauf zugreife dann wird mir das selbstgemachte Zertifikat für die IP angezeigt.
        Ich habe einmal meine normale Domain als default_server, darüber läuft aber nur Let’s Encrypt. Dann habe ich eine nc.domain.de und eine onlyoffice.domain.de. Die Nginx configs sehen so aus:

        domain.de:

        „server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name domain.de;

        root /var/www;

        location ^~ /.well-known/acme-challenge {
        proxy_pass http://127.0.0.1:81;
        proxy_redirect off;
        }

        }

        server {
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2;
        server_name domain.de;

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

        location = / {
        # Disable access to the web root, otherwise nginx will show the default site here.
        deny all;
        }
        }“

        nc.domain.de:

        „upstream php-handler {
        server unix:/run/php/php7.3-fpm.sock;
        }

        server {
        listen 80;
        listen [::]:80;
        server_name nc.domain.de;
        # Enforce HTTPS
        # Use this if you always want to redirect to the DynDNS address (no local access).
        return 301 https://$server_name$request_uri;

        # Use this if you also want to access the server by local IP:
        #return 301 https://$server_addr$request_uri;
        }

        server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name nc.domain.de;

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

        # Path to the root of your installation
        root /var/www/nextcloud;

        location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
        }

        # The following 2 rules are only needed for the user_webfinger app.
        # Uncomment it if you’re planning to use this app.
        #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
        #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

        # The following rule is only needed for the Social app.
        # Uncomment it if you’re planning to use this app.
        #rewrite ^/.well-known/webfinger /public.php?service=webfinger last;

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

        # set max upload size
        client_max_body_size 512M;
        fastcgi_buffers 64 4K;

        # Enable gzip but do not remove ETag headers
        gzip on;
        gzip_vary on;
        gzip_comp_level 4;
        gzip_min_length 256;
        gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
        gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

        # Uncomment if your server is build with the ngx_pagespeed module
        # This module is currently not supported.
        #pagespeed off;

        location / {
        rewrite ^ /index.php$request_uri;
        }

        location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
        deny all;
        }
        location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
        }

        location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
        fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        # Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        # Enable pretty urls
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
        }

        location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
        try_files $uri/ =404;
        index index.php;
        }

        # Adding the cache control header for js, css and map files
        # Make sure it is BELOW the PHP block
        location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control „public, max-age=15778463“;
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        add_header Strict-Transport-Security „max-age=15768000; includeSubDomains; preload;“;
        #
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        add_header X-Content-Type-Options nosniff;
        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;
        add_header Referrer-Policy no-referrer;

        # Optional: Don’t log access to assets
        access_log off;
        }

        location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$request_uri;
        # Optional: Don’t log access to other assets
        access_log off;
        }
        }“

        und die onlyoffice.domain.de:

        „server {
        listen 443 ssl http2;
        server_name onlyoffice.domain.de;

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

        #
        # Configuration for OnlyOffice
        #
        location / {
        proxy_pass https://192.168.178.27: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;
        }
        }“

        • Jan sagt:

          Hallo Leo,

          sieht eigentlich alles soweit ganz gut aus. Unter der Konfiguration zu OnlyOffice musst du dann einfach nur die Domain https://onlyoffice.domain.de eingeben.
          Wenn das dann immer noch nicht funktioniert, würde ich den kompletten Container zu OnlyOffice mal löschen und neu pullen.

          Was mir sonst noch aufgefallen ist: Auf deiner Website wird der HSTS Header doppelt gesetzt und damit ignoriert. Das kannst du vielleicht auch gleich mit ändern.

          Gruß,
          Jan

          • Leo sagt:

            Könnte es daran liegen, dass Nextcloud bzw PHP keinen Zugriff auf andere Verzeichnisse als die eigenen hat?

          • Jan sagt:

            Hi Leo,

            nein, dran kann es eigentlich nicht liegen.
            Ich habe OnlyOffice die Tage mal nach dem Tutorial auf einem Test-System eingerichtet und da hat es funktioniert. Ich kann bei deinem Setup, so wie du es mir geschildert hast, keinen Fehler entdecken. Kontrollier doch bitte nochmals alle Schritte. Das hast du ja sicher schon getan, aber irgend eine Kleinigkeit scheint hier nicht zu passen.

            Gruß,
            Jan

          • Leo sagt:

            Ich habe die lösung gefunden, und wie so oft ist sie so easy dass ich dirchdrehen könnte. Der einfachheit halber habe ich auf die „Diffie-Hellman-Parameter“ verzichtet, weil ich zu faul war für meinen Testserver die paar minuten zu warten. Dass ich dafür dann Tage voller Verzweiflung investieren muss bis es Funktioniert habe ich mir natürlich nicht gedacht -.-. Den doppelten HSTS-Header habe ich nebenbei auch gefunden :D also jetzt läuft alles genau so wie gewünscht ;) Danke noch mal für die Super anleitung ;)

          • Jan sagt:

            Hallo Leo,

            OK, dann war das wirklich nur eine Kleinigkeit.
            Auf jeden Fall danke für die Rückmeldung. Super, dass nun alles wie gewünscht funktioniert.

            Gruß,
            Jan

        • Leo sagt:

          Den docker habe ich schon mehrfach neu gepullt, aber keine Änderung….

          Ich finde keine doppelten Einträge, bin ich blind?

          Gruß
          Leo

  • Lorenz sagt:

    Hallo Jan,

    vielen Dank für deine Mühen. Ich hätte ohne deine Anleitung das sicherlich nicht so schnell zum Laufen gebracht.

    Meine Frage:
    In deiner Nextcloud-Anleitung ist die Nextcloud über meinedomain.de/nextcloud erreichbar. Ich würde mein System gerne folgendermaßen strukturieren:

    meinedomain.de –> WordPress
    meinedomain.de/nextcloud –> Nextcloud
    meinedomain.de/onlyoffice –> Onlyoffice
    meinedomain.de/sonstirgendwas –> sonstirgendwas

    Ist das technisch möglich oder muss ich zwangsweise für z.B. onlyoffice eine subdomain anlegen?

    Besten Dank schonmal für deine Antwort :)

    • Jan sagt:

      Hallo Lorenz,

      also für OnlyOffice wirst du eine Subdomain (oder eine gesonderte Domain) brauchen, da man dies meines Wissens nach nicht über ein „Unterverzeichnis“ abbilden kann.
      Alles andere ist nur eine Sache der vHost-Konfiguration.

      Gruß,
      Jan

1 2

Schreibe einen Kommentar

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