Hinweis der Redaktion: Diesen Beitrag habt ihr euch in den
Artikelvorschlägen
gewünscht.
Die eigene Nextcloud wächst mit der Zeit – und irgendwann steht der Umzug auf einen neuen Server an, sei es weil der Speicher knapp wird, oder der Server nicht mehr den eigenen Anforderungen genügt. In diesem Artikel zeigen wir Schritt für Schritt, wie man eine klassische Installation von Server A auf Server B migriert.
Bei diesem Artikel setze ich einfach voraus, dass ihr den Server so weit eingerichtet habt. SSH-Zugang funktioniert, sowie Apache (LAMP) oder Nginx (LEMP) laufen. Auch setze ich voraus, dass Nextcloud im Standardpfad von Apache bzw. Nginx läuft (/var/www). Sollte dies anders sein, müsstet ihr die Pfade dementsprechend anpassen.
Voraussetzungen
-
Zugriff (SSH oder direkt) auf beide Server.
-
Auf Server B sollte LAMP oder LEMP eingerichtet sein (Apache/Nginx, PHP, MariaDB/MySQL).
-
Die Nextcloud-Versionen auf beiden Servern sollten identisch oder kompatibel sein.
-
Wichtig: Vor dem Umzug immer ein vollständiges Backup machen!
Schritt 1: Wartungsmodus aktivieren
Damit während des Umzugs keine Änderungen an der Cloud vorgenommen werden:
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
Pfad bitte anpassen, falls Nextcloud woanders installiert ist.
Schritt 2: Dateien kopieren
Die Nextcloud-Daten und die Webanwendung kopieren:
rsync -avz /var/www/nextcloud root@serverB:/var/www/
Falls die Daten (Data-Verzeichnis) außerhalb des Webroots liegen:
rsync -avz /pfad/zum/data/ root@serverB:/pfad/zum/data/
Tipp: Bei sehr großen Datenbeständen empfiehlt sich der rsync-Parameter --progress
.
Schritt 3: Datenbank exportieren
Auf Server A: (Benutzer und Passwort anpassen)
mysqldump --single-transaction -u nextclouduser -p nextclouddb > /home/nextcloud.sql
Schritt 4: Datenbank importieren
Nun die Datenbank mit dem gleichen Befehl aus Schritt 2 auf den neuen Server laden.
rsync /home/nextcloud.sql root@zielserver.de:/home/
4.1 MariaDB/MySQL installieren (falls noch nicht vorhanden)
Auf einem Debian/Ubuntu-basierten Server empfiehlt sich MariaDB:
sudo apt update && sudo apt install mariadb-server
sudo mysql_secure_installation
Alternativ für MySQL:
sudo apt update && sudo apt install mysql-server
sudo mysql_secure_installation
Das Skript führt Schritt für Schritt durch verschiedene Sicherheitseinstellungen. Zunächst werden Sie aufgefordert, das aktuelle root-Passwort der Datenbank einzugeben. Da noch kein Passwort gesetzt wurde, einfach die Eingabetaste drücken, um anzugeben, dass derzeit kein Passwort existiert.
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
Nach der Installation kann man den Dienst starten und aktivieren:
sudo systemctl enable mariadb && sudo systemctl start mariadb
4.2 Datenbank und Benutzer anlegen
Jetzt wird auf Server B die Datenbank und der passende Benutzer für Nextcloud erstellt: (hier das zuvor erstellte Root Passwort nutzen)
mysql -u root -p
Dann im MySQL/MariaDB-Prompt:
CREATE DATABASE nextclouddb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'starkes-passwort';
GRANT ALL PRIVILEGES ON nextclouddb.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Hinweis: Das Passwort sollte natürlich durch ein starkes, individuelles Passwort ersetzt werden. Beispielsweise mit pwgen 64 1
4.4 Datenbank importieren
Jetzt kann das Datenbank-Backup eingespielt werden:
mysql -u nextclouduser -p nextclouddb < /root/nextcloud.sql
4.5 Abhängigkeiten installieren
Damit Nextcloud überhaupt funktioniert, sind folgende Abhängigkeiten notwendig.
sudo apt install php8.3 php8.3-{cli,fpm,gd,mbstring,curl,xml,zip,common,imagick,intl,opcache,readline,mysql}
Schritt 5: Konfigurationsdatei prüfen
Die Datei config.php
(unter /var/www/nextcloud/config/
) muss eventuell angepasst werden, z. B. für die neue Domain und die Änderungen für die Datenbank.
'trusted_domains' =>
array (
0 => 'neuer-server.de',
),
'dbtype' => 'mysql',
'dbname' => 'nextclouddb',
'dbuser' => 'nextclouduser',
'dbpassword' => 'EinSehrSicheresPasswort',
'dbhost' => 'localhost',
Wenn sich der Datenbankname oder Benutzer geändert hat, müssen auch diese Angaben angepasst werden.
Schritt 6: Berechtigungen setzen
Auf Server B die Dateiberechtigungen anpassen:
chown -R www-data:www-data /var/www/nextcloud/
Sowie die Apache oder nginx Konfiguration vom alten Server übernehmen.
rsync -avz /etc/nginx/sites-available/nextcloud root@serverB:/etc/nginx/sites-available/nextcloud
Mit Certbot das Zertifikat für die Cloud aktualisieren, denn ohne startet Nginx/Apache nicht mehr.
sudo certbot certonly --nginx -d cloud.domain.tld
Jetzt die Seite aktivieren wenn der Letsencrypt Pfad passt, oder angepasst wurde.
sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/nextcloud
sudo nginx -t
sudo service nginx restart
Schritt 7: Wartungsmodus deaktivieren
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
Schritt 8: Tests
-
Funktioniert der Login?
-
Werden alle Daten angezeigt?
-
Apps überprüfen.
Schritt 8: Cronjobs einpflegen
zu guter Letzt müssen noch die Cronjobs angelegt werden, genauso wie auf dem alten Server. Danach sollte alles wieder funktionieren.
Quelle: Eigene Anleitung, basierend auf Nextcloud-Administrationshandbuch
Bild: erstellt mit ChatGPT
Eine hilfreiche Anleitung. Auf ähnliche Weise habe ich kürzlich meine LEPP (Linux/Nginx/Postgresql/PHP) Nextcloud in eine Container-Nextcloud überführt (Podman Quadlet).
Danke für den Artikel, insbesondere das der Artikelwunsch erfüllt wurde.
Gerne doch. :-) Einen schönen Sonntag noch.
Was mich in dem Zusammenhang besonders interessieren würde: Wie ziehe ich die zugehörige LetsEncrypt-Zertifikatslogik auf den neuen Server um? Welche Dateien/Ordner muss ich umziehen, damit die regelmäßige Aktualisierung des SSL-Zertifikats nahtlos weiterläuft?
Hallo,
dazu musst du die Ordner /etc/letsencrypt umziehen.
rsync -avz /etc/letsencrypt/ root@neuer-server.de:/etc/letsencrypt
Auf der / achten im ersten teil, sonst ersteht folgende Ordnerstruktur. /etc/letsencrypt/letsencrypt
... hmm - für mich liest sich das alles, als ob man dazu einen eigenen Server braucht, von und wegen root-Zugriff etc. - warum macht man dann nicht einfach 'ne größere Platte rein, wenn der Platz knapp wird (um am Eingangsbeispiel zu bleiben). Was mach ich, wenn ich einen Webspace bei einem Provider habe? Da scheitere ich in der Regel schon bei etlichen der Kommandos, die bei "Fehlern" in den Sicherheits- & Einrichtungswarnungen angegeben werden. Updates sind deshalb auch schon ein Glückspiel ...
Hallo,
Ja, na klar, kann man auch eine neue Platte anschließen und den Datenpfad verschieben. Aber bei dedizierten Servern ist das mit höheren Kosten gekoppelt. Manchmal macht es alleine aus dem Grund Sinn, den Server zu wechseln.
Sehr gute Anleitung, wird man sicherlich mal gebrauchen können, danke!
Wäre es nicht sinnvoll noch die PHP Optimierungen abzugeben, da die eigentlich unabdingbar sind?
Ja genau das ist eine gute Idee. Werde ich nachreichen.