Nextcloud warten mit OCC

Mi, 23. März 2022, Ralf Hersel

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