Nextcloud
Nextcloud
Nextcloud ist eine PHP-basierte Open Source Lösung für gängige Cloud-Anwendungen, u.a.:
- Filesharing unter Nutzern derselben Nextcloud, und mit der Öffentlichkeit
- Single-Sign-On Authentifizierung (SSO)
- Videokonferenzen (WebRTC)
- Online-Office Anwendung Collabora Online
Beispiel-Funktionalität, die über Plugins, sogenannte "Apps", bereit gestellt werden kann:
- Kalender, Aufgabenverwaltung, Adressbuch
- Datei-Kollaboration (Kommentare zu Dateien, Verschlagwortung)
- Feedreader
- E-Mail-Programm
- Fotogalerie
- Musik- und Videowiedergabe
Nextcloud installieren
Vorbereitungen
In hsadmin, zum Beispiel mit hsscript:
hsadmin-Shell starten mit:
hsscript -u xyz00 -i Password: ********
Dann nacheinander anlegen:
- Linux User als Domain-Administrator
- Subdomain cloud.example.org
- PostgreSQL-User
- PostgreSQL Datenbank
xyz00@hsadmin> user.add({set:{name:'xyz00-cloud',password:'geheim',shell:'/bin/bash',comment:'Nextcloud'}}) xyz00@hsadmin> domain.add({set:{name:'cloud.example.org',user:'xyz00-cloud'}}) xyz00@hsadmin> postgresqluser.add({set:{name:'xyz00_nextclusr',password:'geheim'}}) xyz00@hsadmin> postgresqldb.add({set:{name:'xyz00_nextcloud',owner:'xyz00_nextclusr'}})
Nextcloud installieren
Anmelden als Linux-User xyz00-cloud:
ssh -l xyz00-cloud xyz00.hostsharing.net
htdocs Verzeichnis vorbereiten
cd mkdir nextcloud cd doms/cloud.example.org rm -rf subs/www subs-ssl/www htdocs-ssl ln -s $HOME/nextcloud htdocs-ssl
Nextcloud herunterladen und entpacken.
cd wget https://download.nextcloud.com/server/releases/nextcloud-22.2.0.zip unzip nextcloud-22.2.0.zip rm nextcloud-22.2.0.zip mkdir data tmp chmod 700 data tmp
Nextcloud konfigurieren
Im Verzeichnis "$HOME/doms/cloud.example.org/fastcgi-ssl/" eine Datei "php.ini" anlegen mit folgendem Inhalt:
memory_limit=512M session.save_path=/home/pacs/xyz00/users/cloud/tmp
Dann mit einem Editor diese Datei bearbeiten: In der erste Zeile den korrekten Pfad des vorher angelegten tmp-Verzeichnisses eintragen.
Im Browser auf die Seite http://cloud.example.org gehen und den Anweisungen folgen.
Auf der ersten Seite sind anzugeben:
- Login und Passwort für den Administrator definieren
- PostgreSQL als Datenbanksystem
- PostgreSQL-User und Passwort aus dem ersten Schritt oben
- Name der PostgreSQL-Datenbank aus dem ersten Schritt
- "localhost" als Datenbankserver
- Das Verzeichnis "/home/pacs/xyz00/users/cloud/data/" als Daten-Verzeichnis
Achtung! Die Felder für die Datenbank sind auf dem Startscreen hinter einem unscheinbaren Link versteckt. Um man das Formular für die Datenbank-Daten zu gelangen, muss man auf den Link klicken. Anschließend kann man die gewünschte Datenbank auswählen und die entsprechenden Daten eintragen. Das sollte geschehen, bevor man die Installation abschließt! Tut man dies nicht, wird Nextcloud mit SQLite installiert. Eine Änderung der Datenbank soll zwar laut Dokumentation auch später noch möglich sein, ging aber bei einem Test schief.
Nextcloud beschleunigen
Dieser Teil ist optional.
Wenn regelmäßig im Browser mit Nextcloud gearbeitet werden soll, ist Nextcloud im Browser oft sehr langsam. Um dies zu verbessern, unterstützt Nextcloud die Anwendung von unterschiedlichen Cache-Verfahren (zum Beispiel Memcache, Redis).
Redis ist auf den Hostsharing-Servern vorinstalliert und wird von den Nextcloud-Entwicklern empfohlen. In Verbindung mit einem Managed Webspace muss Redis als eigener Server Daemon angemeldet werden und ist kostenpflichtig. Siehe zu Kosten im Webspace Konfigurator unter: https://www.hostsharing.net/angebote/managed-webspace/ – 1 individueller Serverdienst (Daemons).
Mit dem Hostsharing-Service wird ein IP-Port für die Nutzung von Redis vereinbart.
Für den Redis-Dienst lege ich folgende Struktur an:
cd ~ mkdir -p ~/redis/etc mkdir -p ~/redis/var
In ~/redis/etc lege ich eine Konfigurationsdatei redis.conf für den Redis-Dienst ab:
daemonize yes pidfile /home/pacs/xyz00/users/cloud/redis/var/redis-server.pid requirepass mein-redis-passwort unixsocket /home/pacs/xyz00/users/cloud/redis/var/redis-server.sock unixsocketperm 700 port 0 tcp-backlog 128 timeout 300 loglevel notice logfile /home/pacs/xyz00/users/cloud/redis/var/redis.log databases 16 save 900 1 save 300 10 save 60 10000 slave-serve-stale-data yes appendonly no dbfilename dump.rdb dir /home/pacs/xyz00/users/cloud/redis/var
Den Start und das Monitoring des Redis-Dienstes übernimmt monit. Hier eine geeignete Datei ~/.monitrc:
set daemon 60 with start delay 120 set logfile /home/pacs/xyz00/users/cloud/monit/var/monit.log set idfile /home/pacs/xyz00/users/cloud/monit/var/monit.id set statefile /home/pacs/xyz00/users/cloud/monit/var/monit.state set mailserver localhost set mail-format { from: monit@cloud.example.com } set alert webmaster@example.com set httpd port 32123 address 127.0.0.1 allow nextcloud:mein-monit-passwort check process redis with pidfile /home/pacs/xyz00/users/cloud/redis/var/redis-server.pid start program "/usr/bin/redis-server /home/pacs/xyz00/users/cloud/redis/etc/redis.conf" stop program "/bin/bash -c '/bin/kill $( cat /home/pacs/xyz00/users/cloud/redis/var/redis-server.pid )'"
Zugriffsrechte für die Datei ~/.monitrc setzen:
cd ~ chmod 600 .monitrc
Verzeichnis für monit anlegen:
cd ~ mkdir -p monit/var
In der Konfiguration der Nextcloud (in ~/nextcloud/config/config.php) wird der Redis-Cache wie folgt konfiguriert:
'memcache.local' => '\\OC\\Memcache\\Redis', 'memcache.distributed' => '\\OC\\Memcache\\Redis', 'memcache.locking' => '\\OC\\Memcache\\Redis', 'redis' => array ( 'host' => '127.0.0.1', 'port' => 32123, 'password' => 'mein-redis-passwort', 'timeout' => 1.5, ),
Um es perfekt zu machen, nutze ich logrotate um die Logdateien zu organisieren. Dazu die Konfiguration in ~/.logrotate
compress /home/pacs/xyz00/users/cloud/redis/var/redis.log { rotate 5 daily missingok } /home/pacs/xyz00/users/cloud/monit/var/monit.log { rotate 2 weekly missingok }
Eine Crontab sorgt für den Start von Monit und das tägliche Rotieren der Logdateien:
# m h dom mon dow command HOME=/home/pacs/xyz00/users/cloud PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games MAILTO=webmaster@example.com @reboot /usr/bin/monit -c $HOME/.monitrc 1 1 * * * /usr/sbin/logrotate -s $HOME/.logrotate.state $HOME/.logrotate */5 * * * * /usr/bin/php $HOME/nextcloud/cron.php
Die letzte Zeile der crontab enthält den Cronjob für die regelmäßigen Hintergrundprozesse der Nextcloud. Durch die Erledigung dieser Aufgaben mit Cron lässt sich die Nextcloud ebenfalls etwas beschleunigen.
Nextcloud mit Online Office
In Nextcloud können Office-Dokumente (Textverarbeitung, Tabellen und Präsentationen) im Browser bearbeitet werden. Dazu steht bei Hostsharing die Collabora Developer Version zur Verfügung. Bestellung und Konfiguration sind hier im Wiki auf der Seite Collabora_Online beschrieben.
Nextcloud mit Nextcloud Talk
Über die Nextcloud-App "Talk" können Videokonfererenzen mit Screensharing durchgeführt werden. Für die regelmäßige Nutzung kann es sinnvoll sein einen eigenen TURN Server zu betreiben. Siehe dazu Coturn_Installieren
Volltextsuche
Über die Dokumente einer Nextcloud kann ein Volltextindex erstellt werden. Die Volltextsuche ermöglicht über den Index eine Suche über beliebige Begriffe, die in Dokumenten vorkommen.
Voraussetzung ist der Betrieb eines Elasticsearch Servers. Der Betrieb im Managed Webspace erfodert die Buchung von zwei "Serverdiensten". Nutzer eines Managed Server müssen mit einem spürbaren Mehrbedarf an Hauptspeicher rechnen.
Zur Installation von Elasticsearch existiert eine eigene Wikiseite: Elasticsearch.
In der Nextcloud sind folgende Apps zu installieren:
- Full Text Search
- Full Text Search - Elasticsearch Platform
- Full Text Search - Files
nach der Installation der drei Apps steht in den Einstellungen ein neuer Menüpunkt "Volltextsuche" zur Verfügung.
Hier ist einzustellen:
- Suchplattform: Elasticsearch
- Adresse des Servlets: http://elastic:das-erzeugt-passwort@127.0.0.1:39200
- Index: frei-gewaehlter-name-idx
- Analyzer tokenizer: standard
Die anderen Einstellung nach den eigenen Vorstellungen vornehmen.
Der initiale Aufbau des Suchindex erfolgt über ein "occ"-Kommando auf der Shell:
cd nextcloud/ php occ fulltextsearch:index --output
Wenn dieser Fehler kommt:
TypeError: Return value of OCA\Files_FullTextSearch\Model\MountPoint::isGlobal() must be of the type bool, null returned in [...]/apps/files_fulltextsearch/lib/Model/MountPoint.php:103
sollte dieser Patch angewendet werden: https://github.com/nextcloud/files_fulltextsearch/issues/125#issuecomment-877789742
Zur Pflege des Indexes wird ein weiterer Hintergrundprozess gestartet:
cd nextcloud/ php occ fulltextsearch:live -q
Die Monit Konfiguration dafür sieht so aus:
~/bin/start-fulltextsearchlive
#!/bin/bash export HOME=/home/pacs/xyz00/users/cloud cd $HOME mkdir -p $HOME/var cd $HOME/nextcloud exec php occ fulltextsearch:live -q & echo $! >$HOME/var/fulltextsearchlive.pid
~/bin/stop-fulltextsearchlive
#!/bin/bash export HOME=/home/pacs/xyz00/users/cloud kill $( cat $HOME/var/fulltextsearchlive.pid )
~/.monitrc (siehe oben von der Redis Installation) entsprechend ergänzen:
check process fulltextsearchlive with pidfile /home/pacs/xyz00/users/cloud/var/fulltextsearchlive.pid start program "/home/pacs/xyz00/users/cloud/bin/start-fulltextsearchlive" stop program "/home/pacs/xyz00/users/cloud/bin/stop-fulltextsearchlive"
Nextcloud Updates
Updater über die Shell starten
Wenn die NextCloud sich nicht über das Webfrontend updaten lässt, kann der Updater auch per Shell im directory /updater durch ausführen des updater.phar gestartet werden:
xyz00-cloud@h00:~/nextcloud/updater$ chmod u+x updater.phar xyz00-cloud@h00:~/nextcloud/updater$ ./updater.phar
Für weitere Informationen kann auf die offizielle Doku ab Ziffer 2. zurückgegriffen werden.
Wartungsmodus per Shell ein- oder ausschalten:
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off
Webfrontend-Updater Probleme / Lösungen
Datenbank: Indizes | Primärschlüssel | Konvertierungen
Aufgetreten nach erfolgtem Versionsupdate Nextcloud 19 auf Nextcloud 20
Nach dem erfolgten Update lädt automatisch die Seite: Sicherheits- und Einrichtungswarnungen auf dieser wird angemerkt, dass manuelle Schritte für die Datenbank durchzuführen sind. Dies betrifft Indizes, Primärschlüssel und Konvertierungen.
Per Shell in der directory /nextcloud folgende Kommandos ausführen:
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-indices xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-primary-keys xyz00-cloud@h00:~/nextcloud$ php occ db:convert-filecache-bigint
Wichtig ist hier dem durch Nextcloud angegebenen Kommando ein php voranzustellen.
Update per Skript
Es ist möglich die regelmäßigen Updates weitgehend zu automatisieren. Ein Skript wäre etwa:
#!/bin/bash if [ -f $HOME/nextcloud/occ ]; then echo "Nextcloud Update"; cd $HOME/nextcloud; php updater/updater.phar -vv --no-backup --no-interaction php occ maintenance:mode --on php occ db:add-missing-primary-keys --no-interaction php occ db:add-missing-columns --no-interaction php occ db:add-missing-indices --no-interaction php occ db:convert-filecache-bigint --no-interaction php occ app:update --all php occ maintenance:mode --off else echo "Keine Nextcloud Installation gefunden"; fi
Daten auf HDD Storage
Einrichtung des HDD Storage
Um den langsameren aber günstigeren HDD Storage von Hostsharing zu nutzen, kann das data Verzeichnis von SSD auf HDD Storage verschoben werden. Über einen symbolischen Link findet Nextcloud das Verzeichnis auch weiterhin. Zur Sicherheit kann man auch den Pfad in der Nextcloud Konfigurationsdatei anpassen.
# Nextcloud in Wartungsmodus versetzen xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on # Daten auf HDD Storage verschieben xyz00-cloud@h00:~/nextcloud$ mv data /home/storage/xyz00/users/cloud/ # symbolischen Link anlegen xyz00-cloud@h00:~/nextcloud$ ln -s /home/storage/xyz00/users/cloud/data data # Pfad in config.php ändern nano config/config.php # Die Zeile mit 'datadirectory' finden und entsprechend ändern: # 'datadirectory' => '/home/pacs/xyz00/users/cloud/data', # Wartungsmodus beenden xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off
weiterführende Links