Dieses Tutorial ist VALID.

Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Haftungsausschluss / Disclaimer

Nextcloud Docker Container

Verzeichnisse und docker-compose Datei erstellen

Das ist wieder eine grundlegende Designentscheidung, die VOR der Installation getroffen werden muss. Hinterher bekommen wir sonst beim Updaten von Nextcloud ein Problem, wenn wir das zwischen der Installation und dem Update geändert hätten :/

Wir legen wie erwartet ein Verzeichnis „nextcloud.xp-server.de“ unterhalb von „/var/www“ an. In diesem Verzeichnis befinden sich dann die „docker-compose“-Datei und das Verzeichnis mit der eigentlichen Anwendung von Nextcloud.

Innerhalb dieses Verzeichnises gibt es das „data“ Verzeichnis, in das später alle unsere Dateien hochgeladen werden. Und das hätte ich gerne an einer anderen Stelle, wegen der Datensicherung.

Zur Datensicherung habe ich ein relativ einfaches Script, dass die ganzen Verzeichnisse in „/var/www“ packt und in jeweils eine große zip-Datei schreibt. Da das Datenverzeichnis eines Cloud-Servers aber sehr schnell ziemlich riesig wird, möchte ich das getrennt von den „www“-Daten wegsichern. Also „Anwendung“ und „Daten“ trennen.

Dazu legen wir direkt in „/var“ ein Verzeichnis „nextclouddata“ an, das wir als Volume an den richtigen Punkt einhängen, um die Daten dort abzulegen, während der Rest der Anwendung wie erwartet in „/var/www/nextcloud.xp-server.de“ liegt.

Hier müssen wir das Datenverzeichnis per Hand anlegen. Docker würde das zwar für uns machen, genau wie das Erstellen des Datenverzeichnisses von MariaDB, aber das Verzeichnis für Nextcloud braucht besondere Benutzerrechte. Hier muss der Webserver hineinschreiben dürfen, also ist es wichtig, vorher dem „www-data“-Benutzer das Eigentum an dem Verzeichnis zu übertragen.

Ansonsten ist die Konfiguration der von phpMyAdmin recht ähnlich…

mkdir /var/nextclouddata && chown -R www-data:www-data /var/nextclouddata
mkdir -p /var/www/nextcloud.xp-server.de
nano /var/www/nextcloud.xp-server.de/docker-compose.yml
### Nextcloud
### docker-compose.yml
###
###
##START
version: '3'
services:

 nextcloud:
  image: nextcloud-php74-apache:latest
  container_name: nextcloud
  restart: always
  networks:
   - intern
   - web
  ports:
   - 80
  environment:
   MYSQL_HOST: maria104master:3306
   MYSQL_PASSWORD: 'unglaublichsicherespasswort'
   MYSQL_DATABASE: nxcloud
   MYSQL_USER: nxcloud
  labels:
   - "traefik.enable=true"
   - "traefik.http.routers.nextcloud.entrypoints=http"
   - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.xp-server.de`)"
   - "traefik.http.routers.nextcloud.middlewares=https-redirect@file"
   - "traefik.http.routers.nextcloud-sec.entrypoints=https"
   - "traefik.http.routers.nextcloud-sec.middlewares=calcarddav,default-headers@file"
   - "traefik.http.routers.nextcloud-sec.rule=Host(`nextcloud.xp-server.de`)"
   - "traefik.http.routers.nextcloud-sec.tls=true"
   - "traefik.http.routers.nextcloud-sec.tls.options=myTLSOptions@file"
   - "traefik.http.routers.nextcloud-sec.tls.certresolver=le"
# Reverse-Proxy "Traefik" Redirects für CalDAV / CardDAV:
   - "traefik.http.middlewares.calcarddav.redirectregex.permanent=true"
   - "traefik.http.middlewares.calcarddav.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav"
   - "traefik.http.middlewares.calcarddav.redirectregex.replacement=https://$$1/remote.php/dav/"
#   - "traefik.http.routers.nextcloud-sec.middlewares=calcarddav"
  volumes:
   - /var/nextclouddata:/var/www/html/data
   - ./wwwdata:/var/www/html
  external_links:
   - maria104master

networks:
  intern:
    external: true
  web:
    external: true
##EOF

Die „docker-compose“-Datei ist bis auf kleine Anpassungen ziemlich das, was wir bei den vorhergehenden Dateien schon kennengelernt haben:

Zeilen 5-9: Wir deklarieren die Version und den Namen des Services.

Zeile 10: Als Image verwenden wir unser frisch gebackenes eigenes Nextcloud Image des vorherigen Kapitels. Die Versionsbezeichnung „:latest“ sorgt dafür, dass wir immer das mit „:latest“ getaggte Image laden.

Zeile 11: Containername für Docker: nextcloud
Ist an der Stelle vielleicht inkonsequent, da ich die Container eigentlich mit der vollen URL benennen sollte. Da wir aber wissen, was gemeint ist, und wir von Nextcloud ja nur eine Instanz hochfahren, verzichte ich auf den vollen Domainnamen…

Zeile 12: Der Cloud-Server soll immer laufen, daher „restart: always“.

Zeilen 13-15: Wir brauchen beide Docker-Netzwerke. Das Interne für die Verbindung zur Datenbank und das „Web“ zum Internet über unseren Reverse-Proxy Traefik.

Zeilen 16+17: Wir docken Traefik auf Port 80 an den Container an.

Zeilen 18-22: Über die „Environment“-Variablen übergeben wir den Datenbank-Server, den Namen der Datenbank, des Benutzers und das Passwort an die Nextcloud Anwendung.

Zeilen 23-38: Die Traefik-Label. Neu sind Zeilen 35-38, in denen eine Adress-Umschreibung für die CalDAV- und CardDAV-Dienste vorgenommen wird. Die sind für die Kalender- und Adressbuch-Funktion nötig.
Ansonsten musst Du Zeilen 26 und 30 mit Deiner URL ersetzen, damit die Verbindung ins Internet und das Anfordern des Zertifikats klappt!

Zeilen 39-41: Hier werden die Volume-Mounts eingerichtet. Wie oben erwähnt, legen wir einen Link außerhalb des „/var/www“-Verzeichnisses für unsere Daten an. Der zeigt auf „/var/nextclouddata“. Der Inhalt des „html“-Verzeichnisses wird relativ zum Basisverzeichnis „/var/www/nextcloud.xp-server.de“ in das neue Verzeichnis „wwwdata“ gespeichert.

Zeilen 42+43: Der externe Link zur MariaDB wird eingerichtet.

Zeilen 45-49: Die Netzwerke werden noch einmal aufgelistet und über „external“ mitgeteilt, dass diese Netzwerke beim Schließen des Containers nicht gelöscht werden sollen.

Update 22.03.2020
Eike hat mich in diesem Kommentar darauf hingewiesen, dass in der Config ein Fehler gesteckt hat.
Resultat ist das Auskommentieren von Zeile 38 und der Umbau der Zeile 29, die jetzt sowohl die „header“ als auch „calcarddav“ enthält. Noch mal vielen Dank für diesen Tipp!

Hier der Hintergrund dazu: https://community.containo.us/t/help-migrating-to-v2-0-wildcard-acme-and-non-existent-middleware/1854/8
tl/dr: Du darfst keine zwei Middlewares parallel anlegen, sondern die müssen entweder in einer Zeile stehen; kommagetrennt. Oder per Middleware-Chain definiert sein.

… Moment … Vielleicht hilft mir das bei meinem Problem mit WordPress, an dem ich mir bisher die Zähle ausgebissen hab. Werd ich gleich testen …
>>> JUHUU! Genau das löst das Weiterleitungsproblem! Wo hab ich den Sekt…?

Nextcloud Container starten, Logfile auswerten

Da wir das Image lokal erzeugt haben, brauchen wir das nicht mehr aus dem Internet herunterladen und können den Container gleich hochfahren lassen.

Bitte beachten: Dieser Vorgang ist zeitkritisch!
Sobald der Container läuft, kann sich theoretisch jeder auf unserer URL einloggen und das Setup beenden. Dann ist das „sein“ Cloud-Server, nicht unserer… :/
Also bitte gleich nach dem Hochfahren des Containers über den Browser einloggen und das Setup SELBST abschließen, bevor es jemand anders tut!

docker-compose -f /var/www/nextcloud.xp-server.de/docker-compose.yml up -d
docker ps -a
docker logs -f --tail="30" nextcloud

Anzeige *

18 Kommentare zu „Nextcloud Docker Container“

  1. Hallo Peter,
    vielen Dank für dein Tutorial – ich vermute die interne Statistik wird dir schon verraten das es gut genutzt wird! Daumen hoch.
    Ich habe leider weiterhin das Problem, dass mein LE-Zertifikat nicht angezogen wird und das Standard-Trafik-Zertifikat genutzt wird. Weißt du aus dem Stehgreif wo potenzielle Fehler liegen / wo ich mal näher reingucken sollte?

    Viele Grüße, Nao

    1. Peter Fiedler

      Hallo Nao,
      freut mich, wenn Dir die Tutorials gefallen.

      Leider müsste ich raten, wo da genau der Fehler steckt.
      Hast Du sonst noch was am Laufen wie WordPress oder Matomo? Werden da die Zertifikate richtig geholt? Falls ja, ist der Fehler in der Nextcloud Config.
      Ansonsten tippe ich auf die Traefik-Config, weil der für Let’s Encrypt zuständig ist.

      Hast Du die anderen Tutorials auch exakt nachgebildet? Läuft bei Dir das Basis-System wie beschrieben, also Debian 10?

      Beste Grüße
      Peter.

  2. Hallo,
    der André mal wieder.
    Sag mal, die Maileinstellungen, welche im Dockerfile angelegt, bzw. geändert wurden, wo kann ich diese „nach konfigurieren“?
    Ich bin mir mit den Einstellungen nicht so sicher, ob die so korrekt sind, weil auch keine Mails raus gehen.
    UND: Danke noch mal für die geilen Anleitungen!!
    BTW: mailcow vs. traefik Integration? Idee?
    Grüße
    André

    1. Peter Fiedler

      Hallo André,

      in der Anleitung zum Image beim Dockerfile Zeilen 178-183 kannst Du den Mailserver einstellen. Glaube aber eher, dass die Einstellung in der Nextcloud-Verwaltung falsch ist:

      Nextcloud E-Mail Server einstellungen

      Das steht bei der Anleitung zum Nextcloud Container auf Seite 3.

      Beim Problem Mailcow ./. Traefik hat Juno diesen Link ausgegraben:
      https://goneuland.de/mailcow-e-mail-komplettsytem-mit-antivirus-spam-filer-webmail-webfrontend-installieren-mittels-docker-und-traefik/

      Entscheidend sind die Punkte 4, 5 und 6, weil die sich von der „normalen“ Installation unterscheiden. Pass die Werte auf Deine Installation an und es „müsste“ laufen.
      Ich mach das nicht, weil ich a) nicht in die Mechanik der Mailcow eingreifen möchte und b) ein anderes Backup-Konzept für meine Mailserver habe, weswegen die Maschinen in jedem Fall getrennt laufen.

      Frohe Pfingsten!
      Peter.

  3. Hallo Peter

    Nochmals Besten Dank für deine hervorragenden Anleitungen. Hast Du Kenntnisse über OCR Scan in der Nextcloud. Diese Funktion würde mir noch fehlen. Habe zwar einiges darüber gelesen. Finde halt zur Zeit den Wald vor lauter Bäumen nicht!

    lg Siegfried

    1. Peter Fiedler

      Hallo Siegfried,
      hmm… Ich wüsste nicht, dass die Nextcloud OCR macht. Also nicht „out of the Box“.
      Wenn Du mehr Info hast, womit das laufen soll, poste doch bitte einen Link.

      Liebe Grüße
      Peter.

  4. Deine Anleitungen gefallen mir sehr gut!
    Aufgrund der aktuellen Situation durch viele Web-Meetings würde ich gerne jitsi-meet auf deiner basis installieren.
    Hast du dich damit schon beschäftigt und würdest support anbieten.

    Gruß
    Sven

    1. Peter Fiedler

      Hallo Sven,
      nein, mit dieser Anwendung hab ich mich noch nicht beschäftigt.
      Ein anderer Nutzer der Tutorials hat mir mal geschrieben, dass er ein Jitsi Image bauen möchte. Leider ist das wohl gescheitert…

      https://github.com/jitsi/docker-jitsi-meet
      Da wäre das offizielle Repository.
      Aber durch Traefik wird sich das nicht ohne Anpassungen schleusen lassen. Alleine schon wegen der zusätzlichen Ports.

      Viel Glück!
      Peter.

  5. Hallo klasse Anleitung. Nur die Hintergrund-Aufgaben lassen sich nicht über Cron automatiseren.
    Hast du eine Idee an was das liegen könnte?

    1. Peter Fiedler

      Hi Juli,
      danke für die Blumen!
      Zu Deinem Problem bräuchte ich aber schon ein bisschen mehr Info…

      Kommt eine Fehlermeldung?
      Falls nicht, brauche ich die Ausgabe von „docker ps -a“ und „crontab -l“ an fiedler@cpf.de

      Frohe Ostern!
      Peter.

  6. Vielen Dank für die wirklich guten Anleitungen! Dank euch habe ich’s geschafft den alten Traefik durch die v2 zu ersetzen. Es war der benötigte Anstoß um alles zu verstehen ;)

    Ein Hinweis, ich habe nach langem suchen einen Fehler in eurer Nextcloud Docker-Compose gefunden.

    Die Zeilen:
    – „traefik.http.routers.nextcloud-sec.middlewares=default-headers@file“
    – „traefik.http.routers.nextcloud-sec.middlewares=calcarddav“
    sorgen dafür, dass Traefik nur eins der beiden anwedet, dies hat bei mir dazu geführt, dass die headers nicht angewendet wurden. Aufgefallen ist es beim Selbsttest von Nextcloud (meckert über STS). Mit dem Label in einer einzigen Zeile
    – „traefik.http.routers.nextcloud-sec.middlewares=calcarddav,default-headers@file“
    Funktioniert es dann. Alternativ könntet ihr auch eine Middleware Chain bilden
    Grüße und weiter so! :)

    1. Peter Fiedler

      Hallo Eike,
      ganz vielen Dank dafür!
      Da ich diese Funktion selber nicht nutze ist mir das bis jetzt nicht aufgefallen…
      Den STS-Fehler hab ich gekonnt ignoriert, da der Wert ja in der Config gesetzt war. Silly me!
      Bleib gesund :)
      Peter.

    1. Peter Fiedler

      Ja, das ist eine blöde Geschichte… Da brauchst einen richtig schnellen Server.
      Ich verwende clientseitige Verschlüsselung mit Cryptomator. Das funktioniert super, wenn Du nur Computer an die Cloud stöpselst. Auf Handys soll das laufen, aber da ist die Geschwindigkeit dann auch grottig.

  7. Andreas Baumruck

    Hallo Peter!
    Die meisten meiner verbliebenen Fragen konnte ich, dank Deiner Anleitung und ein wenig gegoogle, selbst klären.
    Übrig geblieben sind noch diese Punkte:
    NextCloud/WordPress
    -> kann ich Updates einfach über die integrierten Updater einspielen, oder gibt es da etwas zu beachten (ausser vorab einen
    snapshot zu machen?
    Backups
    -> mich würde noch interessieren, wie backup/restore genau ablaufen. Das habe ich nicht wirklich durchschaut

    1. Peter Fiedler

      Bei Nextcloud sind die Updates leider etwas besonderes. Über den integrierten Updater kannst die leider nicht einspielen. Das Ganze läuft wie folgt:
      1.) Ins Nextloud Dockerfile und dort die Version durch die neueste ersetzen.
      2.) Image neu bauen lassen und wieder mit „latest“ taggen.
      3.) Den Container mit „docker-compose up -d“ neu erstellen lassen.
      4.) Einloggen und jetzt den „Aktualisieren“ Button anklicken.
      Das dauert dann ein Weilchen, aber sollte von Erfolg gekrönt sein und dann wieder einloggen.
      5.) Das alte Image löschen. Das geht mit „docker images“ zur Anzeige und dann „docker images rmi [ID]“. Dazu kommt noch ein extra Tutorial.

      Snapshots brauchst da keine machen, weil beide Images noch da sind. Läuft das neue nicht, einfach das alte wieder mit „latest“ taggen und den Container wieder neu bauen lassen – geht wieder.

      Backup / Restore von Nextcloud? Oder Deinen dort gespeicherten Daten? Oder beidem?

Kommentar verfassen

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

Verwendung
von Cookies

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung.

Scroll to Top