Nextcloud mit Docker installieren

Wie man Nextcloud samt Datenbank als Docker-Container installieren kann

In einem früheren Beitrag habe ich die Software Nextcloud schon einmal vorgestellt und gezeigt, wie sie Synchronisationsdienste wie Apples iCloud, Google oder Dropbox ersetzen kann. Nun möchte ich zeigen, wie man Nextcloud auf einem lokalen Computer, beispielsweise einem Raspberry Pi mit Hilfe von Docker installieren und nutzen kann.

Docker ist eine Software, die es erlaubt, einzelne Anwendungen als Container auszuführen, wodurch einerseits eine gewisse Abkapselung vom Grundsystem erreicht wird, andererseits Updates der Docker-Anwendung, aber auch das Übertragen auf ein anderes System deutlich einfacher und unkomplizierter ablaufen und auch Rollbacks auf eine frühere Programm-Version möglich sind, sollte es Probleme mit einem Update geben. Dabei sind Docker-Container nicht gleichzusetzen mit virtuellen Maschinen. Während eine virtuelle Maschine immer ihr eigenes Betriebssystem erfordert und dadurch erheblich mehr Arbeits- und Festplattenspeicher beansprucht, nutzt ein Docker-Container den Kernel des Grundsystems und bringt nur die für das jeweilige Programm benötigten Abhängigkeiten mit.

Vorbereitung

Da ich für die Installation Docker nutze, muss zunächst Docker auch auf dem System installiert werden, falls dies noch nicht der Fall ist. Dies geschieht mit den folgenden Befehlen:

$ curl -sSL https://get.docker.com | sh

Um bei Docker-Befehlen nicht jedes Mal sudo eintippen zu müssen, wird der Benutzer (in dem Fall pi der Gruppe Docker hinzugefügt:

$ sudo usermod -aG docker pi

Ich nutze außerdem docker-compose, weshalb dieses ebenfalls installiert werden muss:

$ sudo apt install docker-compose

Da die Daten innerhalb eines Docker-Containers nur so lange bestehen bleiben, wie der Docker-Container existiert, sollte man für persistenten Speicher ein zusätzliches Docker-Volume oder einfach ein lokales Verzeichnis auf dem Grundsystem anlegen, in dem die Dateien gespeichert werden. In meinem Fall könnte dies z. B. das Verzeichnis /srv/docker-persist/ sein.

Installation von Nextcloud mit docker-compose

Nextcloud benötigt zur Speicherung der Daten eine Datenbank. Zwar funktioniert Nextcloud prinzipiell auch mit einer SQLite-Datenbank, die keinen Datenbankserver erfordert, jedoch ist dies für den Produktiveinsatz von Nextcloud nicht empfehlenswert. Statt dessen nutze ich eine MariaDB-Datenbank .

Ich möchte mir also einen Nextcloud- und einen MariaDB-Container installieren. Mittels docker-compose lassen sich beide Container einfach installieren. Hierzu wird eine Datei namens docker-compose.yml erstellt und z. B. im Verzeichnis /srv/docker-compose/nextcloud abgespeichert. Die Datei hat beispielsweise den folgenden Inhalt:

version: '2'

services:

  nextcloud-db:
    image: mariadb:latest
    container_name: nextcloud-db
    restart: always
    hostname: nextcloud-db
    environment:
      MYSQL_ROOT_PASSWORD: my-password
      MYSQL_DATABASE: ncdb
      MYSQL_USER: nextcloud-dbuser
      MYSQL_PASSWORD: dbuser-password
    volumes:
      - /srv/docker-persist/MariaDB/nextcloud-sql:/var/lib/mysql
      
  nextcloud:
    image: nextcloud:stable
    container_name: nextcloud
    restart: unless-stopped
    ports:
      - 8080:80
    volumes:
      - /srv/docker-persist/Nextcloud:/var/www/html
    depends_on:
      - nextcloud-db

Hier werden also die beiden Docker-Container nextcloud:latest und mariadb:latest installiert mit einigen zusätzlichen Parametern installiert, auf die ich nachfolgend kurz eingehe.

  • Nextcloud-Container:

    • image: nextcloud:stable <- bedeutet, dass ich die jeweils aktuelle Nextcloud-Version installieren möchte

    • ports: 8080:80 <- bedeutet, dass der Container-interne Port 80 nach außen hin über den Port 8080 erreicht werden soll, d.h. über die IP-Adresse des Rechners + diese Port-Adresse kann ich die Nextcloud aufrufen. Theoretisch kann der Port frei gewählt werden, es sollte jedoch darauf geachtet werden, dass der Port nicht bereits durch eine andere Anwendung genutzt wird.

    • volumes: /srv/docker-persist/Nextcloud:/var/www/html <- hier wird das lokale Verzeichnis /srv/docker-persist/Nextcloud im Container in das Verzeichnis var/www/html eingebunden. Dies bedeutet, dass Dateien, die der Container eigentlich in diesem Verzeichnis abspeichern würde (im Falle von Nextcloud die Nextcloud-Daten) im lokalen Verzeichnis auf dem Server abgespeichert werden und damit nicht verloren gehen, falls der Container nicht mehr existiert.

    • depends_on: nextcloud-db <- bedeutet, dass der Nextcloud-Container auf den Datenbank-Container angewiesen ist

  • Datenbank-Container:

    • image: mariadb:latest <- bedeutet, dass ich die aktuelle MariaDB-Version installieren möchte

    • volumes <- s.o.

    • MYSQL_ROOT_PASSWORD: my-password <- Passwort für den root-Benutzer der Datenbank. Dies ist erforderlich, um die Datenbank verwalten zu können.

    • MYSQL_DATABASE: ncdb <- Name der Datenbank, in die Nextcloud seine Daten schreiben soll

    • MYSQL_USER: nextcloud-dbuser <- Benutzername, den Nextcloud für die Datenbank nutzen soll

    • MYSQL_PASSWORD: dbuser-password <- Passwort, das Nextcloud für die Datenbank nutzen soll

Um die Container zu starten, wechselt man in das Verzeichnis, in dem sich die docker-compose.yml-Datei befindet und gibt anschließend den folgenden Befehl ein:

$ docker-compose up -d

Beim ersten Mal werden daraufhin die Docker-Container heruntergeladen und anschließend installiert. Nextcloud sollte kurz darauf über die IP-Adresse des Gerätes, auf dem es installiert wurde unter dem angegebenen Port aufrufbar sein (z. B.: 192.168.1.27:8080). Beim ersten Mal muss Nextcloud nun noch konfiguriert und die Datenbank verknüpft werden.

/img/nextcloud/nextcloud_start.png

Startseite von Nextcloud bevor die Datenbank eingerichtet wurde

Hier wird bereits gewarnt, dass gegenwärtig noch eine SQLite-Datenbank verwendet wird, dies jedoch nicht für den Produktiveinsatz empfohlen wird. Über Klick auf Storage & database gelangt man zu weiteren Einstellungsoptionen, bei denen man auch eine MySQL/MariaDB auswählen kann.

/img/nextcloud/nextcloud_setup.png

Nextcloud mit Datenbank verknüpfen

Oben vergibt man den Benutzernamen und das Passwort, mit dem man sich bei Nextcloud anmelden möchte. Der Datenpfad darunter bleibt unverändert. Als Datenbank wählen wir MySQL/MariaDB aus und geben in den darunter liegenden Feldern die Daten ein, die wir in der docker-compose.yaml-Datei für die Datenbank vergeben haben, d.h. im Falle des obigen Beispiels als Database user nextcloud-dbuser, als Database password dbuser-password und als Database name ncdb. Im letzten Feld, in dem zunächst localhost steht, müssen wir den Namen des Datenbank-Containers eintragen, also im obigen Beispiel nextcloud-db. Anschließend klicken wir auf Finish setup und warten, bis der Vorgang beendet ist.

Bei weiteren Neustarts oder Aktualisierungen des Docker-Containers entfallen diese Einstellungen, da sie im persistenten Speicher abgespeichert sind.

Möchte man die Container aktualisieren, werden die Container zunächst mit dem folgenden Befehl gestoppt, wobei man sich auch hierfür in dem entsprechenden Verzeichnis befinden muss:

$ docker-compose down

Anschließend können die Container über den nachfolgenden Befehl aktualisiert werden:

$ docker-compose pull

Um Nextcloud von Außerhalb erreichen zu können, nutze ich die Möglichkeit des VPN-Zugangs meiner Fritzbox.

Die folgenden Beiträge könnten Dich auch interessieren: