nextcloud und docker mit collabora

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

nextcloud und docker mit collabora

Beitrag von scientific » 07.05.2018 01:42:50

Hi Leute!

Ich bin am Rande meiner Erkenntnisfähigkeit angelangt. (Und die Geduld ist nach 4 Tagen probieren, suchen und wieder probieren auch ganz wenig geworden...).

Nextcloud ist ja ein wirklich feines Ding. Und Collabora (eine Libreoffice-Online-Version) ebenfalls. Und Nextcloud verspricht, dass man mit einem einfachen Klick das Ding installieren und nutzen kann. (Zumindest würd ich es so vermuten, wenn ich bei den "Apps" auf "Aktivieren" klicke).

Doch dem ist nicht so. Dazu muss man einen Collabora-Server aufsetzen.

Ich möchte das ganze wartungsarm und technologiefreundlich mit Docker realisieren. (auch für die Fingerübung).

Jetzt bietet nextcloud auf Github eine ganze Palette an Examples für docker-compose.yml-Files an, wo man verschiedene Szenarien ganz einfach damit starten kann.
Für Collabora hab ich auch so ein feines docker-compose.yml gefunden.

Ein einziges Mal gelang es mir allerdings nur, mit einem docker-compose.yml für nextcloud+mariadb die Nextcloud und mit einem einfachen "docker run..." Befehl collabora zu starten und auch tatsächlich online das "About.odt" und ein neues Dokument editieren zu können.

Dann wollte ich alles in ein einziges docker-compose.yml-File zusammenfassen (damit ich dieses dann bei einer Neuinstallation einfach auf den neuen Server kopiere und mit docker-compose starten kann)... Und es klappt einfach nicht.

Meine Voraussetzung ist, dass ich das ganze mittels einem reverse-Proxy und letsencrypt absichere. Für nextcloud klappt auch das. Das Example von nextcloud funktioniert aus dem Stand heraus.
Ich habe das Example von hier gewählt https://github.com/nextcloud/docker
Konkret: https://github.com/nextcloud/docker/tre ... ariadb/fpm
In den Files habe ich nur meine Domain (cloud.example.org) und zwei verschiedene Passwörter für MariaDB eingesetzt.
Ein

Code: Alles auswählen

docker-compose up --build 
startet die Container und übers Web ist schon Nextcloud unter https://cloude.example.org erreichbar. Es dauert ca. eine Minute bis die Zertifikate aktuell sind, und schon klappt alles. Wunderbar und TLS-verschlüsselt.

Dann hab ich mein docker-compose.yml und das von hier erweitert:

Code: Alles auswählen

https://github.com/nextcloud/docker/issues/223
Aber damit funktioniert es nicht. Will heißen, ich krieg eine Fehlermeldung dass die Anfrage nicht beendet werden kann.
In den Einstellungen von collabora-office in Nextcloud habe ich office.example.org eingetragen. Das wird bemängelt, da dies das selbe Protokoll wie nextcloud selbst haben muss. Also https://office.example.org. Auch das liefert eine Fehlermeldung.

Irgendwo in den Untiefen des Internetz hab ich gefunden, dass für collabora noch im Environment VIRTUAL_NETWORK=... angegeben werden muss. wenn ich da dieses proxy-tier einsetze, kann ich zumindest auf https://office.example.org ein "OK" als Body abrufen. In Nextcloud kommt wieder die Fehlermeldung, dass die Anfrage nicht beendet werden kann. Setze in in nextcloud http://office.example.org, dann krieg ich die Fehlermeldung, dass das Dokument beschädigt sein könnte, oder aus einem anderen Grund nicht geöffnet werden kann. Wenn ich es manuell herunterlade und mit Libreoffice öffne, klappt das aber einwandfrei.

Also mit einem Protokollmix scheint das Dokument kaputt zu sein, mit gleichem Protokoll gibts von "Anfrage kann nicht beendet werden" bis "502 Bad Gateway" alle Fehlermeldungen...

Ich zuck bald aus...

Sieht vielleicht jemand das Problem? Ich finde es einfach nicht:

[EDIT]
Und dann finde ich das:
https://help.nextcloud.com/t/collabora- ... perty/5927

Es gibt in Debian diese Kernel-Module zwar nicht, aber es gibt Debianlinux-image-cloud-amd64
Hab diesen Kernen (4.15) installiert und neu gebootet, und schon kann ich das Dokument mit collabora-Office online öffnen...

Hier mein docker-compose.yml (Das ersetzt in diesem Verzeichnis https://github.com/nextcloud/docker/tre ... ariadb/fpm das dortig vorhandene file.)

Code: Alles auswählen

version: '2'

services:
  db:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=verySecret
    env_file:
      - db.env

  app:
    image: nextcloud:fpm
    restart: always
    volumes:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_HOST=db
    env_file:
      - db.env
    depends_on:
      - db

  web:
    build: ./web
    restart: always
    volumes:
      - nextcloud:/var/www/html:ro
    environment:
      - VIRTUAL_HOST=cloud.example.org
      - LETSENCRYPT_HOST=cloud.example.org
      - LETSENCRYPT_EMAIL=cloud@example.org
    depends_on:
      - app
    networks:
      - proxy-tier
      - default

  collabora-code:
    image: collabora/code
    expose:
      - 9980
    environment:
      - VIRTUAL_HOST=office.example.org
      - VIRTUAL_PORT=9980
      - VIRTUAL_PROTO=https
      - VIRTUAL_NETWORK=default
      - LETSENCRYPT_HOST=office.example.org
      - LETSENCRYPT_EMAIL=admin@example.org
      - domain=cloud\\.example\\.org
    restart: always
    cap_add:
      - ALL
    networks:
      - proxy-tier

  proxy:
    build: ./proxy
    restart: always
    ports:
      - 80:80
      - 443:443
    labels:
      com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
    volumes:
      - certs:/etc/nginx/certs:ro
      - vhost.d:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - proxy-tier

  letsencrypt-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    restart: always
    volumes:
      - certs:/etc/nginx/certs
      - vhost.d:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - proxy-tier
    depends_on:
      - proxy

volumes:
  db:
  nextcloud:
  certs:
  vhost.d:
  html:

networks:
  proxy-tier:
  default:

Ich habe Docker für Debian nach dieser Anleitung installiert:
https://docs.docker.com/install/linux/docker-ce/debian/

Die Passwörter für MYSQL in docker-compose.yml und db.env habe ich mit

Code: Alles auswählen

pwgen 12 -n1
erzeugt.
Es muss noch das Verzeichnis certs in diesem Verzeichnis angelegt werden.

Außerdem muss im DNS noch cloud.example.org und office.example.org angelegt werden. (Wenn man es lokal betreibt im File /etc/hosts oder im lokalen DNS-Server oder eben im DNS-Server seiner Domain!!!)

Dann kann man das ganze mit

Code: Alles auswählen

docker-compose up --build
starten.

Da ich meinen LDAP-Server mit einem eigenen Zertifikat meiner eigenen CA versehen habe, fehlt oben im File docker-compose.yml noch das Mapping von /etc/ssl/certs in den Container.
Damit die lokalen Zertifikate im Container zur Verfügung stehen, muss der Abschnitt "app:" gegen folgenden noch ausgetauscht werden:

Code: Alles auswählen

  app:
    image: nextcloud:fpm
    restart: always
    volumes:
      - nextcloud:/var/www/html
      - /etc/ssl/certs:/etc/ssl/certs
    environment:
      - MYSQL_HOST=db
    env_file:
      - db.env
    depends_on:
      - db

Ich hoffe, ich hab nix vergessen zum Reproduzieren.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Re: nextcloud und docker mit collabora

Beitrag von s25a » 04.08.2018 06:41:34

Hi,

vielen Dank für deinen ausführlichen Bericht und deine Erfahrungen. Ich habe über Jahre eine Nextcloud betrieben aber das es mit dem Docker nun so einfach geht war mir neu :-)
Mir geht es primär mal um die Nextcloud das von dir angesprochene collabora war im ersten Schrtt noch nicht wichtig.

Nun habe ich eine Frage und eventuell bist du ja auf das gleich Problem gestoßen und kannst hier helfen.

Ich würde gerne weitere Apps hinzufügen und das Datenverzeichnis auf mein NAS auslagern. Nach dem ersten Start des Containers habe ich gesehen dass Nach Eingabe meines Usernamens ein entsprechendes Verzeichnis

Code: Alles auswählen

/var/lib/docker/volumes/fpm_nextcloud/_data
gebildet wurde.

Darunter sehe ich dann "APPS", "config", "DATA" etc. So kenne ich das auch. Nun würde ich gerne das DATA/USER/Files Verzeichnis auf mein Nas schieben. Zudem würde ich gerne die APP Previewgenerator installieren. In der Vergangenheit habe ich das wie hier beschrieben unter dem APPS Verzeichnis getan: https://help.nextcloud.com/t/how-to-install-use/33981

Mein Compose File sieht so aus... Unter Nextcloud habe ich bereits versucht das DATA Verzeichnis zu verschieben nach /mnt/nextcloud....Hat aber nichts gebracht.
Eventuell muss ich das Ganze ach nochmal von vorne starten bin mir da noch sehr unsicher.

Code: Alles auswählen

version: '2'
services:
  db:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=******
    env_file:
      - db.env

  app:
    image: nextcloud:fpm
    restart: always
    volumes:
      - nextcloud:/var/www/html
      - /mnt/nextcloud:/data
    environment:
      - MYSQL_HOST=db
    env_file:
      - db.env
    depends_on:
      - db

  web:
    build: ./web
    restart: always
    volumes:
      - nextcloud:/var/www/html:ro
    environment:
      - VIRTUAL_HOST=*****
      - LETSENCRYPT_HOST=*****
      - LETSENCRYPT_EMAIL=****
    depends_on:
      - app
    networks:
      - proxy-tier
      - default

  proxy:
    build: ./proxy
    restart: always
    ports:
      - 80:80
      - 443:443
    labels:
      com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
    volumes:
      - certs:/etc/nginx/certs:ro
      - vhost.d:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - proxy-tier

  letsencrypt-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    restart: always
    volumes:
      - certs:/etc/nginx/certs
      - vhost.d:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - proxy-tier
    depends_on:
      - proxy

volumes:
  db:
  nextcloud:
  certs:
  vhost.d:
  html:

networks:
  proxy-tier:
  default:

Antworten