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 Verzeichnisvar/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.
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.
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.