# nextcloud_traefik 0. Grundvoraussetzung Docker & Docker Compose v2 (Debian / Ubuntu) Traefik V3 Installation, Konfiguration und CrowdSec-Security Als Grundlage meiner Anleitung dient die offizielle Nextcloud Anleitung für Docker. 1. Ordner anlegen Zuerst legen wir uns passende Ordner-Strukturen an. mkdir -p /opt/containers/nextcloud/{database,app,daten} 2. Docker Grundlagen 2.1 Docker Compose anlegen Nun legen wir die eigentliche Docker Datei an. Hierfür habe ich mir die offizielle Nextcloud Compose genommen und diese abgeändert für Traefik. nano /opt/containers/nextcloud/docker-compose.yml Inhalt mit neuer Traefik Anleitung services: nextcloud-db: image: mariadb:10.11 container_name: nextcloud-db command: --transaction-isolation=READ-COMMITTED --innodb_read_only_compressed=OFF restart: unless-stopped volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /opt/containers/nextcloud/database:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=test #SQL root Passwort eingeben - MYSQL_PASSWORD=test #SQL Benutzer Passwort eingeben - MYSQL_DATABASE=nextcloud #Datenbank Name - MYSQL_USER=nextcloud #SQL Nutzername - MYSQL_INITDB_SKIP_TZINFO=1 - MARIADB_AUTO_UPGRADE=1 networks: - default nextcloud-redis: image: redis:alpine container_name: nextcloud-redis hostname: nextcloud-redis networks: - default restart: unless-stopped command: redis-server --requirepass test # Redis Passwort eingeben nextcloud-app: build: . container_name: nextcloud-app restart: unless-stopped depends_on: - nextcloud-db - nextcloud-redis environment: TRUSTED_PROXIES: 172.30.255.254/16 OVERWRITEPROTOCOL: https OVERWRITECLIURL: https://nextcloud.euredomain.de OVERWRITEHOST: nextcloud.euredomain.de REDIS_HOST: nextcloud-redis REDIS_HOST_PASSWORD: test # Redis Passwort von oben wieder eingeben volumes: - ./app:/var/www/html - ./daten:/var/www/html/data labels: - "traefik.enable=true" - "traefik.http.routers.nextcloud.entrypoints=websecure" - "traefik.http.routers.nextcloud.rule=(Host(`nextcloud.euredomain.de`))" - "traefik.http.routers.nextcloud.tls=true" - "traefik.http.routers.nextcloud.tls.certresolver=http_resolver" - "traefik.http.routers.nextcloud.service=nextcloud" - "traefik.http.services.nextcloud.loadbalancer.server.port=80" - "traefik.docker.network=proxy" - "traefik.http.routers.nextcloud.middlewares=default@file" networks: - proxy - default networks: proxy: external: true Notwendige Anpassungen: MySQL Root Passwort ändern MySQL User Kennwort ändern MySQL User für Nextcloud ändern eure Domain bei Traefik anpassen (“nextcloud.euredomain.de”) OVERWRITECLIURL anpassen OVERWRITEHOST anpassen 2.2 Dockerfile erstellen Nun erstellen wir uns ein Dockerfile. Dies hat den Grund, dass wir so die Erweiterung bz2 zusätzlich installieren können. Dazu gebt ihr folgendes ein: nano /opt/containers/nextcloud/Dockerfile Inhalt: FROM nextcloud:latest RUN apt-get update && apt-get install -y libbz2-dev && rm -rf /var/lib/apt/lists/* RUN docker-php-ext-install bz2 2.3 Docker Image bauen Nun lassen wir uns das Image bauen. Dazu gebt ihr folgendes ein: cd /opt/containers/nextcloud docker compose build --no-cache 3. Nextcloud Server starten Den Server startet ihr wie gewohnt mit folgendem Befehl: docker compose -f /opt/containers/nextcloud/docker-compose.yml up -d 4. Nextcloud einrichten Zuerst klickt ihr auf “Speicher & Datenbank”. Hier wählt ihr nun “MySQL/MariaDB” aus. Jetzt solltet ihr folgendes sehen. Gebt hier nun folgendes ein: Administrator-Konto anlegen Benutzername: Wie euer Nextcloud Admin heißen soll Passwort: Wählt ein Passwort Datenbank Verbindung herstellen Datenbank-Benutzer: Holt den Namen aus dem Docker Compose Datei Datenbank-Passwort: Holt das Passwort aus dem Docker Compose Datei Datenbank-Name: Haben wir in Docker Compose auf “nextcloud” festgelegt Datenbank-Host: Haben wir in Docker Compose auf “nextcloud-db” festgelegt Wenn ihr anschließend auf “Installation abschließen” klickt, dauert es ca. 30 Sekunden, bis die Webseite neu lädt und ihr folgendes angezeigt bekommt. Hier könnt ihr auf “Abbrechen” klicken oder alle “Empfohlen Apps” direkt mit installieren lassen. Ich drücke immer abbrechen, da ihr die Apps auch später mit einem Klick installieren könnt. Anschließend werdet ihr von diesem Startbildschirm begrüßt. 6. Optimierungen Wenn ihr oben rechts auf eueren “Buchstaben”. Dann wählt ihr “Einstellungen” -> “Übersicht” aus. Nun solltet ihr feststellen, dass Nextcloud noch “Optimierungsbedarf” sieht. Dies wollen wir nun tun. 6.1 Standardtelefonregion festlegen Dazu öffnet ihr folgende Datei: nano /opt/containers/nextcloud/app/config/config.php Fügt nun folgende Zeile hinzu: 'default_phone_region' => 'DE', Dies setzt die Standardregion auf Deutschland. Beispiele dazu findet ihr hier. Nun könnt ihr die Datei wieder schließen. Bei mir sieht es dann so aus: . . . 'dbuser' => 'nextcloud', 'dbpassword' => 'test', 'installed' => true, 'default_phone_region' => 'DE', ); 6.2 Der Server hat keine konfigurierte Startzeit für das Wartungsfenster Dies könnt ihr sehr leicht beheben. Das Wartungsfenster geht immer 4 Stunden. Ihr müsst / könnt hier lediglich wählen, wann es beginnen soll. In unserem Fall soll es um “1” Uhr beginnen. Wir öffnen folgende Datei: nano /opt/containers/nextcloud/app/config/config.php Fügt dort folgendes hinzu: 'maintenance_window_start' => '1', Wer es um 2 Uhr beginnen lassen möchte, der schreibt hier eine “2” hin. Bei mir sieht es dann so aus: 'dbtableprefix' => 'oc_', 'mysql.utf8mb4' => true, 'dbuser' => 'nextcloud', 'dbpassword' => 'test', 'installed' => true, 'default_phone_region' => 'DE', 'maintenance_window_start' => '1', ); 6.3 .well-known/webfinger und .well-known/nodeinfo kann nicht aufgelöst werden (nur bis Nextcloud Version < 29) Diese Fehlermeldung solltet ihr nicht mehr bekommen, da wir sie in der Docker Compose Datei bereits behoben haben. Man behebt sie sehr leicht mit folgenden Codezeilen: nano /opt/containers/nextcloud/docker-compose.yml Hier fügt ihr folgendes hinzu: nextcloud-app: labels: - "traefik.http.routers.nextcloud.middlewares=nextcloud-wellknown,default@file" - "traefik.http.middlewares.nextcloud-wellknown.replacepathregex.regex=^(/.well-known.*)" - "traefik.http.middlewares.nextcloud-wellknown.replacepathregex.replacement=/index.php$${1}" 6.4 BadRequest Erwartete Dateigröße Falls ihr einen solchen Fehler beim Uploaden einer Datei habt: BadRequest Erwartete Dateigröße von 10485760 Bytes, aber 8306688 Bytes gelesen (vom Nextcloud-Client) und geschrieben (in den Nextcloud-Speicher). Dies kann entweder ein Netzwerkproblem auf der sendenden Seite oder ein Problem beim Schreiben in den Speicher auf der Serverseite sein. Öffnet folgende Datei: nano /opt/containers/nextcloud/app/.user.ini Fügt hier folgendes hinzu: php_value upload_max_filesize 16G php_value post_max_size 16G Nun solltet ihr Dateien bis maximal 16 GB hochladen können. 6.5 fehlende optionale Indizes erkannt Ich bekomme noch folgende Fehlermeldung, dass “Einige fehlende optionale Indizes wurden erkannt. Gelegentlich werden neue Indizes hinzugefügt (von Nextcloud oder installierten Anwendungen), um die Datenbankleistung zu verbessern” fehlen. Dies könnt ihr so beheben: docker exec -it -u 33 nextcloud-app /bin/bash ./occ db:add-missing-indices exit 6.6 One or more mimetype migrations are available Dies behebt ihr mit folgendem Befehl: docker exec -it -u 33 nextcloud-app /bin/bash ./occ maintenance:repair --include-expensive exit 6.7 Container neu starten Nun starten wir Nextcloud neu um sicherzugehen, dass alle Einstellungen übernommen werden. docker compose -f /opt/containers/nextcloud/docker-compose.yml down docker compose -f /opt/containers/nextcloud/docker-compose.yml up -d Nun sollten alle diese Fehlermeldungen behoben sein. 6.8 allgemeine Befehle im Nextcloud Container ausführen Speziell nach Updates bekommt ihr manchmal eine Meldung wie solche: One or more mimetype migrations are available. Occasionally new mimetypes are added to better handle certain file types. Migrating the mimetypes take a long time on larger instances so this is not done automatically during upgrades. Use the command `occ maintenance:repair --include-expensive` to perform the migrations. Ihr bekommt den Befehl angezeigt, welchen ihr ausführen sollt. Hier zeige ich euch, wie ihr dies schnell erledigen könnt. Dazu gebt ihr folgendes ein: docker exec -it -u 33 nextcloud-app /bin/bash Nun könnt ihr den Befehl eingeben. In meinem Fall also: ./occ maintenance:repair --include-expensive Wichtig: Achtet auf “./” vor dem Befehl. 7. Nextcloud mittels CrowdSec absichern Nun könnt ihr Nextcloud innerhalb weniger Minuten noch zusätzlich mittels CrowdSec absichern. Eine Anleitung dazu findet ihr hier. 8. Collabora Office integrieren Ich habe hier eine Anleitung geschrieben, wie ihr in wenigen Minuten Collabora Office mittels Docker installiert und in Nextcloud integrieren könnt. Collabora Office ermöglicht euch ein “komplettes online Office” innerhalb von Nextcloud. 9. OnlyOffice integireren Neben Collabora Office könnt ihr auch innerhalb weniger Minuten OnlyOffice mittels Docker installieren und integrieren. Es hat einen ähnlichen Funktionsumfang wie Collabora Office. 10. Nextcloud Cron einrichten Nun fügen wir auf unserem Server noch einen Cron Eintrag hinzu. Dieser bewirkt, dass Nextcloud alle 5 Minuten die Hintergrundjobs abarbeitet. Um Cron zu starten gebt ihr folgendes ein: crontab -e Beim ersten Start erscheint nun folgende Meldung. Wählt hier “1” aus. no crontab for root - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.tiny Choose 1-2 [1]: 1 Hier fügt ihr nun folgende Zeile hinzu: */5 * * * * docker exec -u www-data nextcloud-app php cron.php Diese Zeile bewirkt, dass euer Server alle 5 Minuten die “cron.php” Datei ausführt in eurem Nextcloud Container. Nachdem ihr dies eingerichtet habt, könnt ihr dies auch kontrollieren. Geht dazu in eure Nextcloud als Administrator. Wählt dann bei Hintergrundaufgaben noch “Cron (Empfohlen)”. Hier solltet ihr nun folgendes in den Einstellungen sehen. Wichtig ist, dass die “Letzte Aufgabe ausgeführt…” maximal 5 Minuten sein sollte. Wenn dies so ist, dann funktioniert alles. 11. Nextcloud updaten Docker bringt uns den Vorteil, dass wir neue Updates einfach mit wenigen Befehlen einspielen können. Da wir im Schritt 2.2 ein eigenes Image bauen, können wir den “normalen pull Befehl” nicht verwenden. Um ein Image upzudaten gebt ihr folgendes ein: cd /opt/containers/nextcloud docker compose down docker compose build --no-cache docker compose up -d Wenn ihr auf eine spezielle Version updaten wollt, öffnet ihr folgende Datei: nano /opt/containers/nextcloud/Dockerfile Hier könnt ihr nun die genaue Version angeben: FROM nextcloud:28.0-fpm-alpine