Nextcloud warten mit OCC

  Ralf Hersel   Lesezeit: 6 Minuten  🗪 6 Kommentare

Wie man Wartungsarbeiten an Nextcloud durchführt, ohne Root-Rechte zu besitzen.

nextcloud warten mit occ

Wenn man eine Nextcloud-Instanz betreibt, sammeln sich über die Zeit und über die Versionen diverse Wartungsarbeiten an. Um diese Arbeiten auszuführen, gibt es das eingebaute Werkzeug OCC (OwnCloud Console). Dabei handelt es sich um das Command Line Interface für Nextcloud.

Je nach Hosting-Umgebung kann die Verwendung des OCC-Befehls zu Problemen führen, weil das PHP welches die Nextcloud Webseite anzeigt, eine andere Verzeichnisstruktur sieht als es die SSH Bash-Shell tut. Unser Leser Michel hat eine Lösung gefunden, wie man die Wartungsarbeiten bei einem solchen 'managed Hosting' dennoch durchführen kann.

Das beschriebene Vorgehen ist nicht allgemeingültig, sondern bezieht sich auf einen bestimmten Hoster: Metanet.ch. Trotzdem denke ich, dass der Lösungsvorschlag (evtl. mit einigen Anpassungen) auch für andere Hostings-Umgebungen sinnvoll sein kann.

Was ist mit Wartungsarbeiten gemeint? Beim Menüpunkt 'Einstellungen → Übersicht' erhält man eine Übersicht über die anstehenden Aufgaben:

Hier geht es insbesondere um Korrekturen, die mit dem occ-Befehl ausgeführt werden müssen. Um das zu ermöglichen, sind folgende Schritte nötig (Hinweis: bei eurem Hoster kann das anders aussehen):

Zuerst müsst ihr bei eurem Hoster nachsehen, wie ihr per SSH auf den Server zugreifen könnt. In meinem Fall sieht das so aus:

ssh USERNAME@example.com.marissa.ch-meta.net -p2121
Eingabe des Passwortes

Ein Problem war, dass das php welches die Nextcloud Webseite anzeigt, eine andere Verzeichnisstruktur sieht als es die SSH Bash-Shell tut. Die Nextcloud Webseite sieht Nextcloud im Verzeichnis:

/home/httpd/vhosts/example.com/httpdocs/nextcloud

Aus Sicht der SSH Bash-Shell liegt Nextcloud aber im Verzeichnis:

/httpdocs/nextcloud

Im ersten Schritt müssen wir also dafür sorgen, dass ein aus der Shell gestartetes PHP dieselbe Verzeichnisstruktur sieht wie die das PHP der Webseite. Somit erzeugt ihr als Erstes auf Root-Ebene ein paar Verzeichnisse:

cd
mkdir /home/httpd/vhosts
cd vhosts

Im Verzeichnis 'vhosts' erstellt ihr nun einen symbolischen Link auf das Root-Verzeichnis und nennt ihn so, wie die Domain eurer Seite heisst, zum Beispiel: (statt 'example.com' sollte dort eure Domain stehen):

ln -s / example.com
cd example.com
ls
Hier sollte nun das Listing eures Root-Verzeichnisses erscheinen.

Als Nächstes werden wir uns um die Datenbankverbindung kümmern. Metanet ist hier zu loben. Die SQL Datenbank ist standardmässig nur über localhost erreichbar. Diese Adresse ist auch in der Config der Nextcloud hinterlegt. In der SSH Bash-Shell haben wir über localhost leider keinen Zugriff auf die Datenbank.

Wichtig: das Abschotten der SQL Datenbank ist ein Sicherheitsfeature. Mit dem Zulassen der IP-Adresse wird theoretisch ein Angriffsvektor für die Datenbank über die SSH Bash-Shell möglich. Deshalb geht ihr jetzt in den Admin-Bereich eures Hosters, klickt dort auf die Datenbank-Einstellungen und dann auf den Benutzer der Nextcloud-Datenbank. Das kann so aussehen:

Im Dialog des Datenbank-Benutzers lasst ihr die Remoteverbindung über '127.0.0.1' zu:

Jetzt geht ihr in das Config-Verzeichnis der Nextcloud-Installation und editiert die Datei 'config.php':

cd /httpdocs/nextcloud/config
nano config.php

//  'dbhost' => 'localhost',
  'dbhost' => '127.0.0.1',

Als Nächstes kopiert ihr dieses Shell-Skript in das Root-Verzeichnis: (bei mir heisst die Datei 'OCC-metanet.sh'; könnt ihr nennen wie ihr wollt):

#!/bin/bash
# PHP Version 8.0
phpcurrent1=80

# Pfad zur PHP Anwendung 
export phpvers=/opt/php$phpcurrent1/bin/php
# Pfad zu php.ini
export phpini=/etc/php.ini
#Pfad zur Nextcloud occ Anwendung
export occpath=/httpdocs/nextcloud/occ

alias php="$phpvers -c $phpini -f "
alias occ=$(echo php "$occpath" $@)

Wichtig ist, dass der 'occpath' mit eurem Pfad übereinstimmt. Der Rest ist generisch und sollte auch für andere Hoster passen. Nun könnt ihr das Skript ausführen und anschliessend die OCC-Befehle ausführen:

source OCC-metanet.sh
occ

Zu Testzwecken solltet ihr zunächst nur 'occ' ausführen. Falls das funktioniert, können anschliessend die occ-Befehle ausgeführt werden, wie sie im Menü 'Einstellungen → Übersicht' eurer Nextcloud aufgeführt sind, zum Beispiel:

occ db:convert-filecache-bigint
occ db:add-missing-columns
occ db:add-missing-indices
occ db:add-missing-primary-keys

Zwischendurch könnt ihr immer im Menü 'Einstellungen → Übersicht' verfolgen, wie die Warnhinweise weniger werden. Damit sind noch nicht alle Warnungen beseitigt, aber die kritischen sollten erledigt sein.

Einen Extrapunkt habe ich noch für euch. Wenn eure Nextcloud sich über die 'Standard-Telefonregion' beschwert (siehe zweites Bild), könnt ihr in der '/httpdocs/nextcloud/config/config.php' am Ende des Config-Arrays Folgendes eintragen: 'DE', 'CH', 'AT', je nachdem.

  'default_phone_region' => 'CH',
);

Ich weise nochmals darauf hin, dass die Anpassungen Hoster-spezifisch sind. Es kann sein, dass ihr mit dem OCC-Befehl gar keine Probleme habt, bzw. die beschriebene Lösung bei euch nicht funktioniert.

Dieser Artikel war nur durch die grosse Unterstützung von Michel möglich, der sich die Mühe gemacht hat, die beschriebenen Umwege herauszufinden. Herzlichen Dank dafür.

Tags

Nextcloud, SSH, Bash-Shell, PHP, CH, OCC, Hoster, Datenbank

anon
Geschrieben von anon am 24. März 2022 um 06:31

wie wärs mit nem occ plugin in der nextcloud ?

BastelAndi
Geschrieben von BastelAndi am 25. März 2022 um 00:21

Das funktioniert meines Wissens aber nur bis Version 19, oder?

anon
Geschrieben von anon am 25. März 2022 um 11:43

hab die 22,2,5 drauf, da ist recht schnell das occplugin geupdatet worden.. im übrigen sollte man hald mal nachschauen bevor man was tippert, denn das plugin war ein paar tage vor diesem report schon zu haben.. auf 22.2

BastelAndi
Geschrieben von BastelAndi am 25. März 2022 um 00:20

Man kann die occ-Befehle auch einfach mit einem PHP-Skript ausführen, indem man es z.B. in folgender Form in seinen Webspace hochlädt und im Browser ausführt:

<?php exec("/usr/bin/php ../cloud/occ -n db:add-missing-indices > occ-ausgabe.txt"); exec("echo \"Skript Beendet!\" > occ-beendet.txt"); header('Location: occ-beendet.txt'); ?>

Die Pfade müssen natürlich entsprechend angepasst werden und nach der Ausführung sollten die Dateien natürlich wieder entfernt werden.

Mischa
Geschrieben von Mischa am 21. Oktober 2023 um 15:50

Ich musste noch das datadirectory anpassen.

'datadirectory' => '/home/httpd/vhosts/hostname.ch/httpdocs/data' zu
'datadirectory' => '/httpdocs/data'

in der config/config.php.

danach konnte ich alle occ commands ausführen. Anschliessend musste ich das Directory wieder zurück ändern, damit die Seite wieder lief. Gibt es hier eine bessere Lösung?

Bruno
Geschrieben von Bruno am 10. April 2024 um 16:06

Danke für den Tipp mit dem datadirectory. Damit läufts nun bei mir auch. :)