Nextcloud + Redis + MariaDB

Änderungsstand: 2023-11-17

Nachtrag: Am Ende sollte es egal sein, ob man diese Variante oder NextcloudPi verwendet. Sicherlich spricht einiges für NextcloudPi, speziell, wenn mehrere Benutzer davon profitieren. Auch das Backup ist unter NextcloudPi etwas komfortabler gelöst – von Snapshots Mal ganz abgesehen. Aber nicht immer habe ich einen weiteren Pi zur Hand und auch diese Variante lässt sich relativ gut einrichten und verwenden.

Ich verwende in diesem Setup linuxserver/mariadb, redis:alpine und linuxserver/nextcloud.

1. Docker-Compose | Nextcloud installieren

Zeile 42 im Script unbedingt anpassen! Hier sollte der direkte Pfad für /mnt/ssd/sharedfolders/appdata/lsnextcloud/data zu einer Freigabe auf einer großen Platte zeigen. Es können, bei intensiver Benutzung, große Datenmengen, im Laufe der Zeit, anfallen! Ich verwende für meine Tests ebenfalls den Ordner /mnt/ssd/sharedfolders/appdata/…, was ich allerdings hier nicht empfehle.

Alternative: Im Nextcloud selbst „ext. Datenträger“ einrichten und verwenden.

Erstellen des Compose-Verzeichnisses, des NC-Verzeichnisses und anlegen der docker-compose.yml:

sudo mkdir -p /home/dockervolumes/lsnextcloud
cd /home/dockervolumes/lsnextcloud && sudo nano docker-compose.yml
version: '2'
   
services:
  lsdb:
    image: lscr.io/linuxserver/mariadb
    hostname: lsdb
    restart: unless-stopped
    volumes:
      - /mnt/ssd/sharedfolders/appdata/lsnextcloud/db:/config
    environment:
      - PUID=1000
      - PGID=1000
      - MYSQL_ROOT_PASSWORD=PASSWORT4568
      - MYSQL_DATABASE=lsnextcloud
      - MYSQL_USER=lsnextcloud
      - MYSQL_PASSWORD=PASSWORT456
      - TZ=Europe/Berlin
    ports:
      - 3307:3306
    networks:
      - lsdb_network

  lsredis:
    image: arm64v8/redis
    hostname: lsredis
    restart: unless-stopped
    command: redis-server --requirepass PASSWORT789 # Redis Passwort
    ports:
      - 6378:6379
    networks:
      - lsdb_network
 
  lsapp:
    image: lscr.io/linuxserver/nextcloud:latest
    hostname: lsnextcloud
    restart: unless-stopped
    volumes:
      - /mnt/ssd/sharedfolders/appdata/lsnextcloud/config:/config
#
# Achtung! Hier ein Verzeichnis einer HDD wählen! data ist nicht angebracht, wenn dieses auf einer kleinen ssd liegt!
#
      - /mnt/ssd/sharedfolders/appdata/lsnextcloud/data:/data
#
    environment:
      - PUID=1000
      - PGID=1000
      - REDIS_HOST=lsredis
      - REDIS_HOST_PASSWORD=PASSWORT789 # Redis Passwort von oben
      - TZ=Europe/Berlin
    ports:
      - 444:443
    links:
      - lsdb
      - lsredis
    networks:
      - lsdb_network

volumes:
  lsdb:
  lsnextcloud:
  lsredis:

networks:
  lsdb_network:
    attachable: true

Strg-x, y, Enter

Quelle:

https://hub.docker.com/r/linuxserver/mariadb

https://hub.docker.com/_/nextcloud

cd /home/dockervolumes/lsnextcloud && sudo docker compose up -d

Jetzt, nachdem alle 3 Container gestartet wurden, mind. 1 Minute warten, damit nach dem ersten Start die Datenbank initialisiert werden. Das dauert einen Moment.

Auf zur Einrichtung Nextcloud

Nextcloud mit http s://Server-IP:444 starten und einrichten. Dazu einfach ein Administrator-Konto mit Passwort anlegen und die Installation starten. Fertig

Erweitert –> Weiter zu (IP-Adresse (unsicher)

Das ist im privatem Netzwerk normal, da kein anerkanntes, sondern nur ein selbst signiertes Zertifikat installiert ist.

Im Startfenster auf „Speicher & Datenbank“ klicken, MySQL/MariaDB wählen und den Rest ausfüllen, wie im rechten Fenster zu sehen. Benutzername und dazugehöriges Passwort werden neu angelegt.

Wurde Nextcloud installiert, kann man es intern verwenden.

PS: Der Fehler „504 Gateway Time-out“, sollte dieser erscheinen (meist bei den Raspis oder betagter Hardware der Fall), ist nicht weiter relevant. Einfach etwas warten und das Browserfenster aktualisieren.

Kleine Makulatur, inkl. Hinzufügen von Redis:

sudo nano /mnt/ssd/sharedfolders/appdata/lsnextcloud/config/www/nextcloud/config/config.php

Folgendes am Ende, aber vor der letzten Klammer einfügen:

  'default_phone_region' => 'DE',

Folgendes eine Zeile vor vor dieser Zeile

  'dbtype' => 'mysql',

eintragen (Eigenes Passwort, eigenen Port und IP-Adresse des eigenen Servers verwenden):

  'overwriteprotocol' => 'https',
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' =>
  array (
    'host' => '192.168.1.200',
    'password' => 'PASSWORT789',
    'port' => 6378,
  ),

Strg-x, y, Enter

sudo nano /mnt/ssd/sharedfolders/appdata/lsnextcloud/config/nginx/site-confs/default.conf

Folgende Zeile einfügen (da steht schon einiges an add_header drin – einfach dort mit rein):

   add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Strg-x, y, Enter

cd /home/dockervolumes/lsnextcloud && sudo docker compose stop

Folgender Befehl ist Optional:

cd /home/dockervolumes/lsnextcloud && sudo docker compose rm

mit y bestätigen

Docker-Compose Neustart:

cd /home/dockervolumes/lsnextcloud && sudo docker compose up -d

Wer nun Nextcloud nur intern verwenden möchte, kann hier aufhören. NC funktioniert, mit einigen Warnhinweisen unter Administrationseinstellungen, die aufgrund der bisherigen Konfigurationen, bestehen bleiben, aber für den reinen internen Betrieb, nicht relevant sind.

Folgende Schritte sind nur notwendig, wenn man Nextcloud von Außen, über eine Domain, erreichbar machen möchte.

Installation NPM (Nginx Proxy Manager)

Meine angelegte Domain bei DuckDNS lautet troubadix.

Konfiguration Nginx Proxy Manager für Nextcloud

„NginX Proxy Manager“ Weboberfläche:

  • „Host“
    • „Proxy Host“
      • „Add Proxy Host“
        • Details:
          • Domain Names: lsnextcloud.troubadix.duckdns.org
            • (Eigene Domain verwenden)
          • Scheme: https
            • (444 ist ein HTTP S-Port)
          • Forward Hostname / IP: die Server-IP, worauf sich Nextcloud befindet
          • Forward Port: 444
          • (444 ist mein verwendeter linuxserver/nextcloud – Port)
          • Cache Assets: On
          • Websockets Support: On
          • Block Common Exploits: On
          • Access List: nichts ändern
        • SSL:
          • SSL Certificate: „Request a new SSL Certificate“
          • Force SSL: On
          • Http/2 Support: On
          • HSTS Enabled: ON
          • Email Address for Lets‘ Encrypt: Eine gültige Email-Adresse
          • I Agree to the LE Terms of Service: On
        • Advanced:
location ^~ /.well-known {
location = /.well-known/carddav     { return 301 /remote.php/dav/; }
location = /.well-known/caldav      { return 301 /remote.php/dav/; }
location ^~ /.well-known            { return 301 /index.php$uri; }
try_files $uri $uri/ =404;
  }

Save

Nach ca. 10-20 Sekunden wurde das Zertifikat erstellt und der Dienst Nextcloud ist unter der angewendeten Domain, gesichert, von Außen erreichbar. Allerdings würde jetzt Nextcloud den Zugriff mit folgendem Fehler verweigern:

Dafür muss ich noch die Konfigurationsdatei ändern.

Nextcloud-Konfigurationsdatei anpassen

(eigenes Konfigurationsverzeichnis verwenden)

sudo nano /mnt/ssd/sharedfolders/appdata/lsnextcloud/config/www/nextcloud/config/config.php

Folgendes am Ende, aber vor dem letzten ); einfügen:

'trusted_proxies' => 
 array (
   0 => '192.168.1.200:80',
),

Die Ip-Adresse unter Trusted Proxies ist die IP-Adresse des „Nginx Proxy Manager“ inkl. Portangabe.

Die Zeile:

'overwrite.cli.url' => 'https://192.168.1.200:444',

ändern in (eigene Domain verwenden):

'overwrite.cli.url' => 'https://lsnextcloud.troubadix.duckdns.org',

Dann die „Trusted Domains“ erweitern:

array (
0 => '192.168.1.200:444',
1 => 'lsnextcloud.troubadix.duckdns.org',
2 => 'localhost',
),

Strg-x, y, Enter

Info: So in etwa sieht die Nextcloud-Config am Ende aus, wenn diese geändert wurde:

Beispiel-Config einer früheren Installation:

<?php
$CONFIG = array (
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' =>
  array (
    'host' => '192.168.1.200',
    'password' => 'PASSWORT789',
    'port' => 6378,
  ),
  'datadirectory' => '/data',
  'instanceid' => 'rgzj3hhidl8f',
  'passwordsalt' => 'DH8bsk5rF+gkfsRPKrkdZn62Wjps5N',
  'secret' => 'gHks7kdhste8KDtNlSdThRsBdhe5j3U72Nr/zFudrL/fL2',
  'trusted_domains' =>
  array (
    0 => '192.168.1.200:444',
    1 => 'lsnextcloud.troubadix.duckdns.org',
    2 => 'localhost',
  ),
  'dbtype' => 'mysql',
  'version' => '25.0.2.3',
  'overwrite.cli.url' => 'https://lsnextcloud.troubadix.duckdns.org',
  'dbname' => 'lsnextcloud',
  'dbhost' => 'lsdb',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'lsnextcloud',
  'dbpassword' => 'PASSWORT456',
  'installed' => true,
  'default_phone_region' => 'DE',
  'overwriteprotocol' => 'https',
  'trusted_proxies' =>
   array (
     0 => '192.168.1.200:80',
  ),
);


Optional: Docker neu starten (wird aber nicht benötigt):

cd /home/dockervolumes/lsnextcloud && sudo docker compose stop
cd /home/dockervolumes/lsnextcloud && sudo docker compose up -d

Nextcloud kann nun über die Domain geöffnet werden. In meinem Fall ist das:

lsnextcloud.troubadix.duckdns.org

Es wird automatisch zu http s verbunden und Nextcloud ist erreichbar.

Nun noch die E-Mail Konfiguration erledigen:

Zuerst unter „Persönliche Informationen“ eine gültige E-Mail angeben. Dann:

  • Administratoreinstellungen
    • Grundeinstellungen

E-Mail-Server: SMTP-Einstellungen vornehmen. Web.de funktioniert zuverlässig.

Wurde alles soweit übernommen, sind alle Sicherheitshinweise behoben.

SSL Labs bringt ein A+ zur Ausgabe.

Weitere Infos zu Nextcloud gibt es hier unter Nextcloud.

Erstelle eine Website wie diese mit WordPress.com
Jetzt starten