Backups und Updates
Legen Sie vor jedem Update des Kerns oder einer App eine Sicherung an. Zurück
auf die alte Version geht es nur über diese Sicherung: occ upgrade ändert die
Datenbank, und eine ältere Version lehnt der Server danach ab („Downgrading is
not supported …“).
Die Beispiele verwenden dieselben Werte wie die
Installationsanleitung: Installationsverzeichnis
/var/www/owncloud.online, Datenverzeichnis /var/oco-data, Datenbank
owncloud_online, Apache mit PHP-FPM. Die Befehle laufen als root. Das
tatsächliche Datenverzeichnis Ihrer Instanz zeigt:
sudo -u www-data php8.4 /var/www/owncloud.online/occ config:system:get datadirectory
Sicherung
Drei Teile gehören zusammen und müssen vom selben Zeitpunkt stammen: das
Programmverzeichnis mit config/config.php, das Datenverzeichnis und die
Datenbank. Der Wartungsmodus hält währenddessen Webzugriffe und Hintergrund-Jobs
an (occ system:cron überspringt seine Läufe im Wartungsmodus).
sudo -u www-data php8.4 /var/www/owncloud.online/occ maintenance:mode --on
systemctl stop apache2
systemctl stop php8.4-fpm
mkdir -p /var/backups/owncloud.online
cd /var/backups/owncloud.online
tar -czf code-$(date +%F).tar.gz -C /var/www owncloud.online
tar -czf data-$(date +%F).tar.gz -C /var oco-data
mysqldump --single-transaction -u root -p owncloud_online > db-$(date +%F).sql
systemctl start php8.4-fpm
systemctl start apache2
sudo -u www-data php8.4 /var/www/owncloud.online/occ maintenance:mode --off
Bei nginx heißt der Dienst nginx statt apache2. Folgt direkt ein Update,
lassen Sie die Dienste angehalten und den Wartungsmodus an.
Im Datenverzeichnis liegen auch versteckte Dateien, die zur Funktion gehören,
etwa .ocdata und bei aktiver Verschlüsselung die Schlüssel. tar auf das
ganze Verzeichnis erfasst sie. Bewahren Sie eine Kopie der Sicherung außerhalb
des Servers auf.
Update
Ein Update tauscht das Programmverzeichnis gegen das neue Release-Paket aus und
passt danach mit occ upgrade die Datenbank an. Aus dem alten Verzeichnis
übernehmen Sie nur config/config.php und die Apps aus dem Marktplatz unter
apps-external/. Das Paket selbst enthält nur die Kern-Apps und die Market-App.
Ohne SSH-Zugang beschreibt Webhosting den Weg über FTP und die Update-Seite im Browser.
1. Release herunterladen und prüfen. Der Abgleich muss OK ausgeben:
cd /tmp
curl -fLO https://github.com/BWTECH-github/owncloud.online/releases/download/v11.0.25/owncloud-online-11.0.25.tar.gz
curl -fLO https://github.com/BWTECH-github/owncloud.online/releases/download/v11.0.25/SHA256SUMS.txt
sha256sum --ignore-missing -c SHA256SUMS.txt
2. Sichern wie oben, aber ohne die letzten drei Befehle: Die Dienste bleiben angehalten, der Wartungsmodus bleibt an.
3. Programmverzeichnis tauschen. Das alte Verzeichnis bleibt als
owncloud.online.alt liegen, bis das Update geprüft ist:
mv /var/www/owncloud.online /var/www/owncloud.online.alt
tar -xzf /tmp/owncloud-online-11.0.25.tar.gz -C /var/www
mv /var/www/owncloud /var/www/owncloud.online
4. Konfiguration und Apps übernehmen:
cp -a /var/www/owncloud.online.alt/config/*config.php /var/www/owncloud.online/config/
rsync -a --exclude=/market /var/www/owncloud.online.alt/apps-external/ \
/var/www/owncloud.online/apps-external/
chown -R www-data:www-data /var/www/owncloud.online
*config.php erfasst config.php und weitere Dateien der Form
<name>.config.php. rsync (gleichnamiges Paket) kopiert alle Apps aus dem
Marktplatz, nur die Market-App selbst kommt aus dem neuen Paket. Liegt das
Datenverzeichnis ausnahmsweise im Programmverzeichnis (data/), verschieben
Sie es vor dem Start ebenfalls in das neue Verzeichnis.
5. Datenbank aktualisieren und Wartungsmodus beenden:
cd /var/www/owncloud.online
sudo -u www-data php8.4 occ upgrade
sudo -u www-data php8.4 occ maintenance:repair
systemctl start php8.4-fpm
systemctl start apache2
sudo -u www-data php8.4 occ maintenance:mode --off
occ upgrade lässt den Wartungsmodus an, wenn er schon vorher an war. Deshalb
schaltet ihn der letzte Befehl ab. occ maintenance:repair läuft nur im
Wartungsmodus. Ist htaccess.RewriteBase gesetzt, schreibt occ upgrade den
Rewrite-Block wieder in die neue .htaccess, sofern overwrite.cli.url
gesetzt ist.
6. Prüfen:
sudo -u www-data php8.4 occ status
sudo -u www-data php8.4 occ app:list
occ status muss die neue Version zeigen. Fehlt eine App in app:list, fehlt
meist ihr Verzeichnis unter apps-external/. Prüfen Sie danach das
Serverprotokoll auf neue Fehler. Läuft alles, löschen Sie
/var/www/owncloud.online.alt.
Haben Sie OPcache-Preloading eingerichtet, legen Sie build/preload.php vor dem
Start von PHP-FPM wieder ab, siehe Performance.
Updates einzelner Apps aus dem Marktplatz beschreibt Apps verwalten.
Wartungsmodus vor dem Austausch von Theme-Apps
Bis owncloud.online 11.0.11 lud der Kern Apps vom Typ theme (etwa
theme-owncloudonline), session und license schon beim Start jeder Anfrage,
auch beim Start von occ selbst. Wurde ein solches App-Verzeichnis durch eine
Version mit geänderter Haupt- oder Nebenversion ersetzt (etwa 1.2.x auf 3.0.0),
brach jeder occ-Aufruf mit OC\NeedsUpdateException ab, also auch das
occ upgrade, das die Lage auflösen soll:
An unhandled exception has been thrown:
OC\NeedsUpdateException in lib/private/legacy/app.php:194
Seit 11.0.12 lädt der Kern diese Apps erst, wenn kein Update mehr aussteht, und
occ upgrade läuft durch. Patch-Versionen waren nie betroffen.
Unabhängig von der Version gilt beim automatisierten Ausrollen: Wartungsmodus
vor dem Austausch eines App-Verzeichnisses einschalten. Im Wartungsmodus
überspringt OC_App::loadApps() das Laden der Apps, occ startet also auch auf
älteren Versionen:
sudo -u www-data php8.4 occ maintenance:mode --on
# erst jetzt das neue App-Verzeichnis einspielen
sudo -u www-data php8.4 occ upgrade
sudo -u www-data php8.4 occ maintenance:mode --off
Ist occ schon blockiert, weil das Verzeichnis bereits getauscht wurde, hilft
der direkte Eintrag in config/config.php:
'maintenance' => true,
Bricht ein App-Update ab, weil die Datenbank eine neuere Version meldet als der ausgerollte Code, wurde ein falsches oder älteres Paket ausgeliefert. Die Meldung nennt beide Versionen; die in der Datenbank vermerkte Version bleibt dabei unverändert. Liefern Sie das richtige Paket nach und aktualisieren Sie erneut.
Zurück auf die alte Version
- Wartungsmodus aktivieren und Dienste anhalten.
- Programmverzeichnis aus der Sicherung zurückspielen.
- Datenbank-Dump in eine leere Datenbank einspielen.
- Datenverzeichnis aus der Sicherung zurückspielen.
occ maintenance:repairausführen.- Dienste starten, Wartungsmodus deaktivieren.
sudo -u www-data php8.4 /var/www/owncloud.online/occ maintenance:mode --on
systemctl stop apache2
systemctl stop php8.4-fpm
cd /var/backups/owncloud.online
mv /var/www/owncloud.online /var/www/owncloud.online.defekt
tar -xzf code-JJJJ-MM-TT.tar.gz -C /var/www
mysql -u root -p -e "DROP DATABASE owncloud_online;
CREATE DATABASE owncloud_online CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
mysql -u root -p owncloud_online < db-JJJJ-MM-TT.sql
mv /var/oco-data /var/oco-data.defekt
tar -xzf data-JJJJ-MM-TT.tar.gz -C /var
sudo -u www-data php8.4 /var/www/owncloud.online/occ maintenance:repair
systemctl start php8.4-fpm
systemctl start apache2
sudo -u www-data php8.4 /var/www/owncloud.online/occ maintenance:mode --off
Die Datenbank muss vor dem Einspielen leer sein: Tabellen, die erst das Update
angelegt hat, stünden sonst neben den Daten aus dem Dump. DROP DATABASE nimmt
dem Datenbankbenutzer seine Rechte auf owncloud_online.* nicht. Die
Verzeichnisse mit der Endung .defekt löschen Sie, sobald die Instanz wieder
läuft.