Ghostboard pixel

Setup Onlyoffice Server mit Docker-compose

Setup Onlyoffice Server mit Docker-compose

Heute habe ich meinen Nextcloud umgestellt von Collabora/code auf eine OnlyOffice Installation umgestellt. Dies hat zu einem den Grund, dass OnlyOffice etwas performanter ist und zum anderen auch mit Microsoft Office Dateien umgehen kann. Nun eine kurze und schnelle Beschreibung, wie ich das aufgesetzt habe.

In dieser Anleitung gehe ich davon aus, dass bereits Docker und Docker-compose installiert ist!

Docker-compose Konfiguration für OnlyOffice erstellen

Zuerst muss eine docker-compose.yml Datei erstellt werden. In diese schreiben wir folgendes ein und speichern dies dann ab.

version: '2.2'
services:
     onlyoffice:
       image: onlyoffice/documentserver:latest
       restart: always
       volumes:
       - /home/onlyoffice/data:/var/www/onlyoffice/Data
       environment:
       - JWT_ENABLED=true
       - JWT_SECRET=SuperSecretKey
       ports:
       - '8833:80'

Zur Erklärung: Das Volume wird genötigt für Dateien, die nicht bei einem Container Update verloren gehen sollen. Die Environment Variablen (JWT_ENABLED und JWT_SECRET) benötigen wir, damit nicht jeder, der die externe URL oder Port kennt, Zugriff auf OnlyOffice hat und dies mitbenutzen kann.

Wenn die Docker-compose Datei erstellt ist, kann der Container gestartet werden. Dieser sollte nun laufen, wir können aber mit folgendem Befehl überprüfen, ob der Container auf den Port 8833 richtig lauscht.

sudo netstat -tulpn | grep 8833 

Dann geht es weiter. Wir öffnen nun den Port 833 anschließend muss noch eine Konfiguration für Nginx erstellen.

 sudo ufw allow 8833

Nginx einrichten

sudo vi /etc/nginx/sites-available/onlyoffice.conf
upstream docservice {
  server 0.0.0.0:8833;
}
map $http_host $this_host {
    "" $host;
    default $http_host;
}
map $http_x_forwarded_proto $the_scheme {
     default $http_x_forwarded_proto;
     "" $scheme;
}
map $http_x_forwarded_host $the_host {
    default $http_x_forwarded_host;
    "" $this_host;
}
map $http_upgrade $proxy_connection {
  default upgrade;
  "" close;
}
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
## Normal HTTP host
server {
  listen 0.0.0.0:80;
  listen [::]:80 default_server;
  server_name office.domain.tld;
  server_tokens off;
  ## Redirects all traffic to the HTTPS host
  root /nowhere; ## root doesn't have to be a valid path since we are redirecting
  rewrite ^ https://$host$request_uri? permanent;
}
server {
  listen 0.0.0.0:443 ssl;
  listen [::]:443 ssl default_server;
  server_tokens off;
  root /usr/share/nginx/html;
  ## Strong SSL Security
  ## https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
  ssl on;
  ssl_certificate /etc/letsencrypt/live/office.domain.tld/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/office.domain.tld/privkey.pem;
  ssl_verify_client off;
  ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
  #ssl_session_cache  builtin:1000  shared:SSL:10m;
  ssl_prefer_server_ciphers   on;
  add_header Strict-Transport-Security max-age=31536000;
  # add_header X-Frame-Options SAMEORIGIN;
  add_header X-Content-Type-Options nosniff;
  ## [Optional] If your certficate has OCSP, enable OCSP stapling to reduce the overhead and latency of running SSL.
  ## Replace with your ssl_trusted_certificate. For more info see:
  ## - https://medium.com/devops-programming/4445f4862461
  ## - https://www.ruby-forum.com/topic/4419319
  ## - https://www.digitalocean.com/community/tutorials/how-to-configure-ocsp-stapling-on-apache-and-nginx
  # ssl_stapling on;
  # ssl_stapling_verify on;
  # ssl_trusted_certificate /etc/nginx/ssl/stapling.trusted.crt;
  # resolver 208.67.222.222 208.67.222.220 valid=300s; # Can change to your DNS resolver if desired
  # resolver_timeout 10s;
  ## [Optional] Generate a stronger DHE parameter:
  ##   cd /etc/ssl/certs
  ##   sudo openssl dhparam -out dhparam.pem 4096
  ##
  # ssl_dhparam /etc/ssl/certs/dhparam.pem;
  location / {
    proxy_pass http://docservice;
    proxy_http_version 1.1;
  }
}

Anschließend wird ein Symlink erzeugt damit Nginx auch die Datei berücksichtigt beim Start.

ln -s /etc/nginx/sites-available/onlyoffice.conf /etc/nginx/sites-enabled/onlyoffice.conf

Zertifikate erstellen

Im nächsten Schritt muss ein Zertifikat für die Webseite erstellt werden. Dies geschieht mit:

sudo certbot certonly -d office.domain.tld

Wenn das Zertifikat erstellt ist, kann die Konfiguration überprüft und der Nginx Server neu gestartet werden.

sudo nginx -t
sudo service nginx restart

Ab diesem Zeitpunkt sollte bereits OnlyOffice laufen. Um das zu testen, wird einfach mal die Internetseite geöffnet.

Onlyoffice Setup mit Docker

Dann geht es an die Einstellungen in Nextcloud. Zuerst die Onlyoffice App herunterladen und installieren. Anschließend gehts in den Einstellungen weiter. Hier wird die URL eingetragen, sowie der Secretkey der zuvor im docker-compose File eingetragen wurde.

Danach sollte es funktionieren!
Herzlichen Glückwunsch!
Sollten Fragen aufkommen, einfach in die Kommentare posten. Ich melde mich auf jeden Fall.

Falls die Anleitung hilfreich war, würde ich mich über ein Kommentar und einer Bewertung freuen.