AppsDockerNextcloud

Collabora Online Office mit Docker und Apache bereitstellen und in Nextcloud einbinden

In meinem ersten Beitrag Collabora Online Office mit Docker in Plesk bereitstellen und an Nextcloud anbinden, habe ich Euch gezeigt, wie man Collabora Online Office in Plesk bereitstellt. Jetzt wollen wir das ganze ohne Plesk und auf dem gleichen VPS bereitstellen, auf dem auch unsere Nextcloud läuft.

Als erstes müssen wir Docker installieren:

sudo apt-get install docker.io

und den entsprechenden Docker Container starten:

docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=nextcloud\\.deine-domain\\.tld' -e 'username=Benutzername' -e 'password=Dein-Passwort' --restart always --cap-add MKNOD collabora/code

Wenn Ihr von mehreren Nextcloud-Instanzen auf den Docker-Container zugreifen wollt, müsst Ihr einfach die FQDNs mit einer Pipe trennen:

'domain=host1\\.deine-domain\\.tld|host2\\.deine-domain\\.tld'

Danach aktivieren wir einige Module im Apache2, um ihn als Reverse Proxy zu verwenden:

sudo a2enmod proxy
sudo a2enmod proxy_wstunnel
sudo a2enmod proxy_https
sudo a2enmod proxy_http
sudo a2enmod ssl

jetzt legen wir den vhost an:

sudo nano /etc/apache2/sites-available/002-office.deine-domain.tld.conf

Inhalt (bitte enstprechend Eurer Domain anpassen):

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        ServerName office.deine-Domain.tld

        ServerAdmin webmaster@deine-Domain.tld
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

und die Site aktivieren:

sudo a2ensite 002-office.deine-domain.tld.conf

Den vhost sichern wir wieder mit einem SSL-Zertifikat von LetsEncrypt ab:

sudo certbot --authenticator standalone --installer apache -d office.deine-domain.tld --pre-hook "service apache2 stop" --post-hook "service apache2 start"

dieses mal wieder die Option 2 (redirect) wählen, aber bevor wir den Indianer neu starten bearbeiten wir die soeben angelegte conf:

sudo nano /etc/apache2/sites-available/002-office.deine-domain.tld-le-ssl.conf
<VirtualHost *:443>
ServerName office.deine-domain.tld:443

# SSL configuration, you may want to take the easy route instead and use Lets Encrypt!
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/office.deine-domain.tld/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/office.deine-domain.tld/privkey.pem
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SH$
SSLHonorCipherOrder     on

# Encoded slashes need to be allowed
AllowEncodedSlashes NoDecode

# Container uses a unique non-signed certificate
SSLProxyEngine On
SSLProxyVerify None
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off

# keep the host
ProxyPreserveHost On

# static html, js, images, etc. served from loolwsd
# loleaflet is the client part of LibreOffice Online
ProxyPass           /loleaflet https://127.0.0.1:9980/loleaflet retry=0
ProxyPassReverse    /loleaflet https://127.0.0.1:9980/loleaflet

# WOPI discovery URL
ProxyPass           /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0
ProxyPassReverse    /hosting/discovery https://127.0.0.1:9980/hosting/discovery

# Main websocket
ProxyPassMatch "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon

# Admin Console websocket
ProxyPass   /lool/adminws wss://127.0.0.1:9980/lool/adminws

# Download as, Fullscreen presentation and Image upload operations
ProxyPass           /lool https://127.0.0.1:9980/lool
ProxyPassReverse    /lool https://127.0.0.1:9980/lool
<VirtualHost>

jetzt können wir den Webserver neustarten:

sudo service apache2 restart

In Nextcloud unter Einstellungen für Collabora Online die URL eintragen

Wenn gespeichert, können wir Dokumente direkt im Browser bearbeiten:

 

Unter der folgenden URL findest Du die Admin-Konsole von Collabora:

https://office.deine-domain.tld/loleaflet/dist/admin/admin.html

Dort kannst Du ein paar Einstellungen anpassen.

Gutes Gelingen 😉 und bei Fragen wie immer fragen…

12 Gedanken zu „Collabora Online Office mit Docker und Apache bereitstellen und in Nextcloud einbinden

  1. Hallo Markus, ich finde deine Anleitungen super! Doch komme ich hier leider in einem Punkt nicht weiter. Nachdem ich den „docker run“ Befehl mit den abzuändernden Parametern starte und Collabora runtergeladen wird, kommt nach der extraction des letzten files eine Fehlermeldung: docker: failed to register layer: Error processing tar file(exit status 1): write /lib/x86_64-linux-gnu/libdbus-1.so.3.14.6: no space left on device.

    Die Nextcloud ist auf einer VM mit Ubuntu 18.04 installiert. 4Gb Ram, 50GB für den Server und nochmal 250GB für die Daten der Cloud.
    Deswegen verstehe ich nicht, warum ich nicht genügend Speicher zur Verfügung haben soll.
    Weißt du da vielleicht Rat?

    1. Hallo Oliver, docker hat seinen Speicherplatz unter /var/lib/docker. Schau mal mit df -h wie viel Platz da ist. Vielleicht hilft ein „docker system prune“ ja etwas Platz zu schaffen. Aber Vorsicht, damit werden alle gestoppten Container und deren Daten gelöscht. Ansonsten meld Dich nochmal.

          1. Genau,
            Sofern ich das richtig gemacht habe…
            Ich vermute mir ist ein Fehler beim erstellen unterlaufen, oder Ubuntu/nextcloud haben sich ihren eigenen Speicherplatz genommen/konfiguriert und nicht mehr…
            https://www.bilder-upload.eu/bild-66c6a3-1567707110.png.html

            Ich habe aber noch 2 andere Probleme,: Obwohl die maximale Upload size auf 10 GB gestellt ist, bekomme ich eine Fehlermeldung wenn ich z.b ein video mit 150 MB hochladen möchte…
            Hinzu kommt, das meine Kontakte unter der Rubrik „jeder“ leer sind, dort aber 4 Kontakte sein sollten und oben dann immer eine Fehlermeldung erscheint: „Es ist ein Fehler bei der Anfrage aufgetreten. Es kann nicht fortgefahren werden.“

            Hängt das vielleicht alles zusammen?

  2. Nachtrag:
    Wie der Zufall es so wollte, habe ich nach dem Post meines vorherigen Kommentars die Lösung dann doch noch gefunden.
    In der Apache SSL Conf habe ich nun den Abschnitt für CODE im Block “ … „. Dabei habe ich alle „127.0.0.1:9980“ ersetzt durch „meine-domain.de:portvonaußen“.

    Mein Befehl zum Starten des Containers sieht jetzt wie folgt aus:
    docker run –name=CODE -i -t -d -p 192.168.178.2:9980:9980 -e „domain=meine-domain\\.de“ -e „username=name“ -e „password=secret“ -e „DONT_GEN_SSL_CERT=true“ -v /app/collabora/loolwsd:/etc/loolwsd –restart always –cap-add MKNOD collabora/code

    Ich habe im Order „/app/collabora/loolwsd“ meine Let’s Encrypt Zertifikate manuell reinkopiert (Symlinks habe ich nicht direkt zum laufen bekommen) und die Dateien loolwsd.xml und loolkitconfig.xcu manuell aus dem Container per Copy/Paste eingefügt.

    Damit läuft nun auch mein CODE Container mit meinem Let’s Encrypt Zertifikat.

    1. Hi Hendrik,

      wenn Du den Container-Port auf 127.0.0.1 veröffentlichst, dann sollte dieser auch über Reverse Proxy erreichbar sein. Den Port über 192.xxx. freizugeben ist im internen Netz sicherlich ok, aber falls Du den irgendwo im Public-Bereich hast, dann solltest Du die Konfig noch mal prüfen.

      Markus

  3. Hallo,
    ich versuche seit mehreren Tagen Collabora mit meinem Let’s Encrypt Zertifikat zu verbinden. Ist dies irgendwie möglich? Ich muss nämlich immer einmal die Admin Konsole aufrufen und das Zertifikat von CODE bestätigen, um Collabora nutzen zu können. Collabora erzeugt beim Start nämlich immer ein Zertifikat der „Dummy Authority“. Ich habe auch schon versucht, beim Start von Collabora in Docker verschiedene Parameter wie DONT_GEN_SSL_CERT etc. ausprobiert -> siehe https://www.collaboraoffice.com/code/docker/

    Meine apache2 conf zu meiner Domain sieht jetzt exakt wie oben beschrieben aus, bis auf den ersten Teil nach . Dort habe ich folgendes stehen:
    ServerAdmin meine@email
    ServerName meine-domain.de
    ServerAlias http://www.meine-domain.de
    DocumentRoot /var/www/path/to/root
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Das dürfte aber nicht das Problem darstellen, denke ich. (Bin kein apache Profi 😉 ).

    Ich bin über jeden Ratschlag dankbar.

Schreibe einen Kommentar zu Anonymous Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht.