Jedno z možných řešení, kterým jsem se však nikam nedoiteroval a setkal jsem se s nejrůznějšími errory na úrovni php kódu aplikace:
sudo -u www-data php --define apc.enable_cli=1 /var/www/html/nextcloud/updater/updater.phar
A zbytek můžete nechat doběhnout, nicméně v mém případě to nepomohlo:

Ultimátní řešení – automatizovaný manuální upgrade na novější verzi
Pomocí ChatGPT jsem zprasil docela použitelný skript, který jsem použil pro upgrade pokusné verze Nextcloudu z verze 30.0 na 31.0.0. Otestováno na ubuntu-server 24.04 LTS.
V případě /var/www/html/nextcloud/data/ je přimountovaná samba na jiný stroj, aby VMko nezabíralo skoro nic a všechna uživatelská data se sypala na jinou mašinu. Tento adresář je přimountován v /etc/fstab takže stačí pro opětovné přimountování zavolat příkaz mount -a
Přesto preventivně uvádím, ať skript nepoužíváte nikde na produkci, ale je to spíš takové hezké „cvičení“. Pokud byste to chtěli použít na produkci, prověřte funkčnost skriptu předtím na dev/test prostředí.
#!/bin/bash
# Konfigurace
NEXTCLOUD_VERSION="31.0.0" # Nastav požadovanou verzi
NEXTCLOUD_DIR="/var/www/html/nextcloud" #adresář, kde se nachází nextcloud
BACKUP_DIR="/var/www/html/nextcloud-backup"
DOWNLOAD_DIR="/tmp/nextcloud_upgrade"
NEXTCLOUD_ARCHIVE="nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"
WEB_USER="www-data"
# Zastavení webového serveru
systemctl stop apache2 || systemctl stop nginx
# Zakomentování Nextcloud cron jobu
crontab -u $WEB_USER -l | sed '/occ/c\# & ' | crontab -u $WEB_USER -
# Odmountování Samba sdílení
umount ${NEXTCLOUD_DIR}/data || echo "Samba mount nebyl nalezen."
# Stažení a rozbalení nové verze
mkdir -p "$DOWNLOAD_DIR"
wget -O "$DOWNLOAD_DIR/$NEXTCLOUD_ARCHIVE" "https://download.nextcloud.com/server/releases/$NEXTCLOUD_ARCHIVE"
tar -xjf "$DOWNLOAD_DIR/$NEXTCLOUD_ARCHIVE" -C "$DOWNLOAD_DIR"
# Záloha stávající instalace (bez /data složky)
mv "$NEXTCLOUD_DIR" "$BACKUP_DIR"
mkdir -p "$NEXTCLOUD_DIR"
mv "$BACKUP_DIR/config" "$NEXTCLOUD_DIR/"
mv "$BACKUP_DIR/apps-external" "$NEXTCLOUD_DIR/" 2>/dev/null || true
# Přesunutí nové verze
mv "$DOWNLOAD_DIR/nextcloud"/* "$NEXTCLOUD_DIR/"
# Obnovení config souboru
cp -r "$BACKUP_DIR/config/" "$NEXTCLOUD_DIR/"
# Nastavení oprávnění
chown -R $WEB_USER:$WEB_USER "$NEXTCLOUD_DIR"
find "$NEXTCLOUD_DIR/" -type d -exec chmod 750 {} \;
find "$NEXTCLOUD_DIR/" -type f -exec chmod 640 {} \;
# Spuštění upgradu
sudo -u $WEB_USER php "$NEXTCLOUD_DIR/occ" upgrade
# Opětovné povolení Nextcloud cron jobu
crontab -u $WEB_USER -l | sed 's/^# \(.*occ.*\)/\1/' | crontab -u $WEB_USER -
# Znovu připojení Samba sdílení
mount -a
# Restart webového serveru
systemctl start apache2 || systemctl start nginx
# Uklid
rm -rf "$DOWNLOAD_DIR"
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
echo "Upgrade na Nextcloud $NEXTCLOUD_VERSION dokončen."
Závěr
Příkazy jsem použil z oficiální dokumentace nextcloudu, které jsem vložil do ChatGPT. V ChatGPT jsem stanovil v promptu požadavky co od toho chci. Také jsem specifikoval cesty k /var/www/html/nextcloud/data/ což je adresář přimountěný přes sambu na jinou mašinu, u které mám zadefinováno vše v /etc/fstab, takže opakovaný příkaz mount -a provede opakovaný remount adresáře.
Pokud to není váš případ, tak stačí tyto řádky umazat, nebo zakomentovat.
Preventivně však uvádím, že se nejedná o produkční řešení a cílem je rychlý a automatizovaný upgrade, který vždy projde v pořádku, přičemž je nutné mít přístup na terminál serveru.