Nextcloud und Collabora mit Docker

Want the english version?? Here you go

Hier zeige ich meine „alles-in-einem“ Lösung für Nextcloud und Collabora auf Docker mit Docker Compose.

Dazu gibt es ebenfalls ein Youtube Video: https://youtu.be/K6R-0l9iWBM

Was brauchen wir?

  • CentOS 7 Server (Azure, AWS, Hetzner, whatever)
  • Installiertes Docker und docker-compose
  • Domäne mit 2 zum Server zeigenden DNS A Records (admin-schule.de z.B.)
    • einen für Nextcloud „cloud.admin-schule.de“
    • einen für Collabora „office.admin-schule.de“

Vorbereitung

Logge dich auf der Server per SSH ein. Schaue danach ob Docker installiert und erreichbar ist.

docker ps

Prüfe ob „docker-compose“ installiert ist.

docker-compose version

Ein Verzeichnis „docker_nextcloud“ erstellen, oder mein Repository clonen – https://github.com/bohlrich/docker_nextcloud

Die „docker-compose.yml“ erstellen

version: '2.1'
services:

  nginx-proxy:
    image: jwilder/nginx-proxy
    restart: always
    volumes:
      - nginx-proxy-certs:/etc/nginx/certs:ro
      - nginx-proxy-vhost:/etc/nginx/vhost.d
      - /opt/docker-files/nginx-proxy/network_internal.conf:/etc/nginx/network_internal.conf
      - /opt/docker-files/nginx-proxy/uploadsize.conf:/etc/nginx/conf.d/uploadsize.conf
      - /usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    ports:
      - 80:80
      - 443:443
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    networks:
      cloud-network:

  nginx-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion      
    restart: always
    volumes:
      - nginx-proxy-certs:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - nginx-proxy
    networks:
      cloud-network:

  ncdb:
    image: mariadb:10.5.4
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=qLwsPX9g4vQq
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=ncuser
      - MYSQL_PASSWORD=B7JtnBvv6rSg6Dug
    volumes:
      - ncdb-data:/var/lib/mysql
    networks:
      cloud-network:

  nc:
    image: nextcloud:19.0.1-apache
    restart: always
    depends_on:
      - ncdb
    volumes:
      - nc-nextcloud:/var/www/html
      - nc-apps:/var/www/html/custom_apps
      - nc-config:/var/www/html/config
      - nc-data:/var/www/html/data
    environment:
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=ncuser
      - MYSQL_PASSWORD=B7JtnBvv6rSg6Dug
      - MYSQL_HOST=ncdb
      - VIRTUAL_HOST=cloud.admin-schule.de
      - VIRTUAL_PORT=80
      - VIRTUAL_PROTO=http
      - LETSENCRYPT_HOST=cloud.admin-schule.de
      - LETSENCRYPT_EMAIL=info@admin-schule.de
      - RESOLVE_TO_PROXY_IP=true
    networks:
      cloud-network:
          
  office:
    image: collabora/code:4.2.6.2
    restart: always
    environment:
      - "domain=cloud\.admin-schule\.de"
      - "username=admin"
      - "password="
      - "SLEEPFORDEBUGGER=0"
      - VIRTUAL_HOST=office.admin-schule.de
      - VIRTUAL_PORT=9980
      - VIRTUAL_PROTO=https
      - LETSENCRYPT_HOST=office.admin-schule.de
      - LETSENCRYPT_EMAIL=info@admin-schule.de
      - RESOLVE_TO_PROXY_IP=true
      - NETWORK_ACCESS=internal
    expose:
      - 9980
    cap_add:
      - MKNOD
    networks:
      cloud-network:    
          
networks:
  cloud-network:
    driver: bridge
          
volumes:
  nginx-proxy-certs:
  nginx-proxy-vhost:
  ncdb-data:
  nc-nextcloud:
  nc-apps:
  nc-config:
  nc-data:

Erstelle ein Verzeichnis „/opt/docker-files/nginx-proxy/“

mkdir -p /opt/docker-files/nginx-proxy/
cd /opt/docker-files/nginx-proxy/

Und erstelle eine Datei „network_internal.conf“. Diese wird benötigt, damit der Nginx Container den Traffic zwischen den Containern durchlässt.

echo "allow all;" >> /opt/docker-files/nginx-proxy/network_internal.conf

Ganz wichtig ist ebenfalls die Konfigurationsdatei für die Uploadgröße. Diese legt ihr folgendermaßen an:

echo "client_max_body_size 10G;" >> /opt/docker-files/nginx-proxy/uploadsize.conf

Nun zurück zum „docker_nextcloud“ Ordner. Jetzt können die Docker Images mit docker-compose geladen werden.

docker-compose pull

Bitte prüfe, ob die DNS Einträge „cloud.domainname.com“ und „office.domainname.com“ schon auf die öffentliche IP Adresse des Servers auflösen.

Nach erfolgreichen pull, kann die Lösung gestartet werden.

docker-compose up -d

Prüfe ob alles läuft und gehe anschließend mit einem Webbrowser auf die konfigurierte Adresse des Nextcloud Servers.

https://cloud.domainname.com/

Jetzt muss ein Administrator Account für die Nextcloud angelegt werden. Vergib einen Benutzernamen und ein starkes Passwort. Die Checkbox für empfohlene Apps bitte NICHT anklicken. Das verbaut uns sonst die Konfiguration mit unserem Collabora Container.

Danach kann es sein, dass eine Warnung angezeigt wird und man die Checkbox erneut deaktivieren muss. Die Warnung für die Datenbankverbindung und Leistungseinbußen können an der Stelle ignoriert werden.

Nach ein paar Sekunden der Einrichtung müsste dann das Nextcloud Startfenster zu sehen sein.

Bitte zu „Apps“ und „Büro & Text“ navigieren. Hier die App „Collabora Online“ suchen und „Herunterladen und aktivieren“ klicken.

Nun kann unter „Einstellungen“ im Hauptmenü der Punkt „Collabora Online“ gesucht werden. Dort bitte den obersten Punkt „Verwende deinen eigenen Server“ wählen und diesen eintragen:

https://office.domainname.com

Danach „Save“.

Oooops, hier läuft etwas schief und wir bekommen einen Verbindungsfehler!

Lösung des Verbindungsfehlers

Um den Verbindungsfehler zu beheben, müssen wir die CentOS 7 Firewall konfigurieren. Dafür passen wir das Zone File der Public Zone an. Navigiere zu „/etc/firewalld/zones/“

cd /etc/firewalld/zones/

Bearbeite die Datei „public.xml“, damit sie wie unten zu sehen aussieht.

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  <rule family="ipv4">
     <source address="172.19.0.0/16"/>
     <accept/>
  </rule>
</zone>

Wir fügen eine Regel für das Subnetz „172.19.0.0./16“ hinzu. Das ist das Subnetz unserer Dockercontainer. Das kann bei dir anders sein. Um das richtige Subnetz herauszufinden, kannst du folgenden Befehl verwenden:

docker inspect docker_nextcloud_cloud-network | grep Subnet

Wenn die public.xml angepasst ist, muss der Firewall Dienst neu gestartet werden

systemctl restart firewalld

Anschließend testen wir die Verbindung erneut und es funktioniert! Nun ist die Nextcloud Umgebung einsatzbereit.

Hinterlasse einen Kommentar