Eigentlich kann eine Kurzbeschreibung Nextcloud nicht annähernd gerecht werden. Verglichen mit den anderen Anwendungen, die ich ausprobiert habe, ist Nextcloud eher ein Schwergewicht. Hier eine kurze Übersicht der Features, auf die ich ein Auge geworfen hatte:
Eine Reihe der vorinstallierten Apps habe ich deaktiviert, überhaupt nicht zum Laufen gebracht habe ich
Nextcloud Office. Aber meine Anwendungsfälle sind mehr als erfüllt, insbesondere in Kombination mit
dem Nextcloud Desktop Client den es u.a. auch für mein Xubuntu
gibt (Paket nextcloud-desktop
) und der die Synchronisation von Cloud-Ordnern mit lokalen Ordnern
ermöglicht.
Es gibt offizielle Docker-Images in verschiedenen Geschmacksrichtungen, ich verwende
nextcloud:apache
, das ca. 950 Megabyte umfasst. Um genau zu sein verwende ich sogar ein eigenes
Image, das auf dem offiziellen basiert und aus folgendem Dockerfile
entsteht:
FROM nextcloud:apache COPY setssl.sh /usr/local/bin/ RUN /usr/local/bin/setssl.sh admin@filebox filebox
Der Grund dafür ist, dass die Unterstützung von HTTPS auf dem "offiziellen" Weg vergleichsweise
umständlich ist, Let's Encrypt involviert und deshalb eine Erreichbarkeit aus dem Internet erfordert, die
ich für die ersten Experimente so nicht haben wollte. Stattdessen verwende ich ein selbst-signiertes
Zertifikat nach
dieser
Anleitung. Von dort stammt auch das Shellskript setssl.sh
, das den Apache 2 für SSL
konfiguriert:
# setssl.sh # USAGE: setssl.sh <email> <domain> echo 'SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder On Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff SSLCompression off SSLSessionTickets Off' > /etc/apache2/conf-available/ssl-params.conf echo "<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin $2 ServerName $1 " > /etc/apache2/sites-available/default-ssl.conf echo ' DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/nextcloud/cert.pem SSLCertificateKeyFile /etc/ssl/nextcloud/key.pem <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> </IfModule>' >> /etc/apache2/sites-available/default-ssl.conf a2enmod ssl >/dev/null a2ensite default-ssl >/dev/null a2enconf ssl-params >/dev/null
Das ganze kann man in eine docker-compose.yaml
verpacken, sodass das Starten und Stoppen wieder zum
(einfachen) Einzeiler wird:
services: app: build: . ports: - "9443:443" volumes: - ./data:/var/www/html - ./certs:/etc/ssl/nextcloud
Danach muss nur noch ein Zertifikat erstellt und im Verzeichnis
certs/
platziert werden, schon kann der Dienst mit docker-compose up -d
gestartet
werden. Begrüßt wird man von einer Startseite, auf der die Zugangsdaten für den Admin-Account
festgelegt werden. Weiterhin erscheint eine Performance-Warnung wegen der defaultmäßig verwendeten
SQLite-Datenbank. Für das erste Rumspielen ist das okay, für eine produktive Umgebung möchte man
vielleicht etwas anderes verwenden (siehe unten). Aber die erste Installation sollte man eh zum Kaputtbasteln
und Wegwerfen vorsehen, denn Nextcloud bietet viele Konfigurationsmöglichkeiten und Zusatzanwendungen, die
man erstmal kennenlernen muss. Das Schöne an diesem Setup ist, dass man innerhalb weniger Sekunden wieder
mit einer komplett frischen Installation aufsetzen kann:
$ docker-compose down $ sudo rm -rf data $ docker-compose up -d
Hier meine "Komplettlösung" für die ersten Handgriffe:
Viele der Apps haben benutzerspezifische Einstellungen, in denen zu stöbern sich sehr lohnen kann. Am besten Zettel und Stift bereithalten und notieren, was man ausprobiert hat, um später bewerten zu können, ob es was gebracht hat und ob man es in einer späteren Installation wieder tun möchte; so einfach wie jetzt wird es nie wieder; wenn man seine Nextcloud erstmal mit Daten betankt hat, wird man nicht mehr so leichtfertig neu aufsetzen wollen.
Für das produktive Setup sollte man sich Gedanken über eine andere Datenbank machen. Ich habe nur kurz mit SQLite vs. MariaDB herumgespielt und tatsächlich keine relevanten Unterschiede in den Ladezeiten bemerkt. Allerdings ist das ein Test-Setup mit sehr wenigen Daten und Nextcloud selbst sagt mehr als deutlich, dass man etwas "anständiges" benutzen soll, spätestens wenn man einen Client zur Synchronisation nutzen möchte. Außerdem, so meine Überlegungen, wird die einmal eingerichtete und beladene Instanz bestimmt eine ganze Weile leben und evtl. mal auf eine schnellere Maschine umziehen, bei der dann eine "echte" Datenbank plötzlich die Performance-Vorteile ausspielen kann, die jetzt auf einem RaspberryPi 3 durch andere Begrenzungen (CPU, RAM) nicht auffallen.
Folgende docker-compose.yaml
, die der Dokumentation des
offiziellen Nextcloud-Docker-Images entstammt, definiert eine
Anwendung, die aus MariaDB und Nextcloud besteht und beide miteinander bekannt macht (Passwörter
entsprechend einfüllen):
services: db: image: mariadb:10.5 command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW volumes: - ./db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD= - MYSQL_PASSWORD= - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud app: build: . ports: - "9443:443" links: - db volumes: - ./nextcloud:/var/www/html - ./certs:/etc/ssl/nextcloud environment: - MYSQL_PASSWORD= - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_HOST=db
Der erste Start dauert ein gutes Stück länger, aber danach läuft alles wie gewohnt (außer dass die nervigen Performance-Warnungen nicht mehr kommen).
Ich werde Nextcloud nicht benutzen. Das mag nach der ausführlichen Anleitung überraschen (die ich tatsächlich auch schon geschrieben hatte, bevor ich mich gegen Nextcloud entschieden habe), liegt aber auch weniger an der Software als an der verwendeten Hardware: der Raspberry Pi 3 packt es einfach nicht.
Wie gesagt: ich gehe davon aus, dass es ein reines Performance-Problem ist. Ein Raspberry Pi 3 ist keine Wundermaschine und 1 Gigabyte RAM ist in diesem Kontext lächerlich wenig. Ich nehme an, mit einem Raspberry Pi 4 sähe das schon ganz anders aus, insbesondere in der 4- oder 8-Gigabyte-Version.
An sich scheint Nextcloud auf dem Raspberry Pi durchaus zu funktionieren: ich bin im Laufe meiner Recherchen auf das Projekt NextcloudPi gestoßen, bei dem ein Nextcloud-Setup inklusive weiterer nützlicher Anwendungen (fail2ban, Redis, ...) erarbeitet wurde, direkt für den "Bare Metal"-Einsatz auf dem Raspberry Pi. Wer jetzt weniger am Docker-Szenario hängt, sich aber gerne mit Nextcloud beschäftigen möchte, der sollte sich das mal genauer ansehen.