So ziehen Sie eine Website vom Shared Hosting auf einen VPS um
Der Umzug selbst dauert ein paar Stunden, Fehler passieren meist drumherum: ein vergessener Cron-Job, .htaccess-Regeln, die nginx nicht liest, ein AAAA-Eintrag mit der alten Adresse oder E-Mails, die mit dem IP-Wechsel verschwinden. Hier finden Sie die Reihenfolge mit Befehlen und Prüfungen für eine Website mit PHP und MySQL.
In diesem Artikel geht es darum, wie Sie umziehen. Ob sich ein Umzug überhaupt lohnt und welchen Server Sie nehmen sollten, erklärt der Artikel Wann sich der Umstieg von Shared Hosting auf einen VPS lohnt. Hier gehen wir davon aus, dass der VPS bereits gekauft ist und die Website mit WordPress, Bitrix, Laravel oder einem anderen PHP-System mit MySQL-Datenbank läuft. Für andere Stacks ist die Reihenfolge dieselbe, nur die Befehle ändern sich.
Zeitplan: Umzug in vier Etappen
- Zwei Tage vorher: alles notieren, was beim Hosting läuft, und die TTL der DNS-Einträge senken.
- Einen Tag vorher: den Server vorbereiten, Dateien und Datenbank kopieren, die Website unter der neuen Adresse testen.
- Am Umzugstag: die Website für Schreibzugriffe sperren, die aktuellen Daten übertragen, DNS umstellen.
- Ein bis zwei Wochen danach: das Hosting als Reserve aktiv lassen.
Was Sie beim Hosting notieren sollten
Fast alle Probleme nach einem Umzug betreffen Dinge, die beim Hosting von selbst liefen und vergessen wurden. Gehen Sie das Hosting-Panel durch und notieren Sie:
- PHP-Version und Erweiterungen. Sie sehen sie im Panel oder per SSH mit den Befehlen
php -vundphp -m. Installieren Sie auf dem VPS dieselbe Version und aktualisieren Sie PHP später separat. - Version und Größe der Datenbank, die Zeichenkodierung der Tabellen.
- Cron-Jobs: was wie oft gestartet wird. Die Dateipfade auf dem VPS werden andere sein.
- Regeln in .htaccess: Weiterleitungen, sprechende URLs, Zugriffsbeschränkungen für Ordner.
- E-Mail: Postfächer, Weiterleitungen, wohin die MX-Einträge zeigen.
- Subdomains und alle DNS-Einträge, auch TXT-Einträge zur Bestätigung von Diensten.
- Externe Dienste, die die IP der Website kennen. Zahlungsanbieter, der Datenaustausch mit 1C, Partner-APIs und Maildienste lassen Anfragen oft nur von freigegebenen Adressen zu. Die neue IP müssen Sie dort vorab eintragen.
Senken Sie ein bis zwei Tage vor dem Umzug die TTL der A- und AAAA-Einträge der Domain auf 300 Sekunden. Dann verbreitet sich die neue Adresse am Umstellungstag in Minuten statt in einem Tag.
Bereiten Sie den Server vor
Beginnen Sie mit dem Grundschutz: Updates, Anmeldung per Schlüssel, Firewall. All das finden Sie im Artikel Die ersten 10 Schritte nach dem VPS-Kauf: Sicherheit. Danach gibt es zwei Wege.
Mit Control Panel. ISPmanager, FASTPANEL oder aaPanel installieren Webserver, die passende PHP-Version und die Datenbank mit wenigen Klicks und bieten eine vom Hosting gewohnte Oberfläche. Tarife damit: VPS mit ISPmanager, VPS mit FASTPANEL, VPS mit aaPanel.
Ohne Panel. Unter Ubuntu und Debian installieren Sie die Grundausstattung mit einem Befehl; Pakete ohne Versionsnummer bringen das PHP mit, das zum System gehört:
apt install nginx mariadb-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl
Lief beim Hosting eine ältere oder neuere PHP-Version als im System, installieren Sie sie aus Drittanbieter-Repositorys mit PHP-Paketen für Ubuntu und Debian.
Beachten Sie den wichtigsten Unterschied zum Hosting: nginx liest keine .htaccess. Weiterleitungen und sprechende URLs müssen in die Konfiguration der Website übertragen werden. Für WordPress sieht die Hauptregel so aus: try_files $uri $uri/ /index.php?$args;. Gibt es viele Regeln, ist es einfacher, Apache hinter nginx zu betreiben: So arbeiten die meisten Panels, und .htaccess wirkt weiter.
Übertragen Sie die Dateien
Haben Sie beim Hosting SSH-Zugang, holen Sie die Dateien am schnellsten direkt vom VPS aus per rsync:
rsync -avz user@old-host.example:~/public_html/ /var/www/example.com/
Ein erneuter Lauf desselben Befehls überträgt nur Geändertes, das ist am Umzugstag nützlich. Ohne SSH gibt es zwei Möglichkeiten: im Dateimanager des Panels ein Archiv erstellen und es per wget auf den Server laden oder die Dateien per FTP mit dem Werkzeug lftp abholen:
lftp -u user old-host.example -e "mirror --parallel=4 public_html /var/www/example.com; quit"
Normales FTP überträgt das Passwort im Klartext; unterstützt das Hosting SFTP oder FTPS, nutzen Sie diese. Übergeben Sie die Dateien nach dem Kopieren dem Webserver-Benutzer und setzen Sie die üblichen Rechte:
chown -R www-data:www-data /var/www/example.com
find /var/www/example.com -type d -exec chmod 755 {} +
find /var/www/example.com -type f -exec chmod 644 {} +
Übertragen Sie die Datenbank
Erstellen Sie den Dump beim Hosting. Per SSH:
mysqldump --single-transaction --default-character-set=utf8mb4 -u user -p dbname | gzip > db.sql.gz
Ohne SSH exportieren Sie den Dump über phpMyAdmin, doch große Datenbanken schafft es wegen des Zeitlimits beim Hosting womöglich nicht; bitten Sie dann den Support um einen Dump oder exportieren Sie in Teilen. Legen Sie auf dem VPS Datenbank und Benutzer an und spielen Sie den Dump ein:
mysql -e "CREATE DATABASE site CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'site'@'localhost' IDENTIFIED BY 'sicheres_passwort';
GRANT ALL PRIVILEGES ON site.* TO 'site'@'localhost';"
zcat db.sql.gz | mysql site
Ein häufiger Fehler beim Einspielen ist Unknown collation: 'utf8mb4_0900_ai_ci'. Er bedeutet, dass der Dump in MySQL 8 erstellt wurde, auf dem VPS aber MariaDB läuft, die diese Sortierung nicht kennt. Installieren Sie entweder auf dem VPS dasselbe Datenbanksystem wie beim Hosting oder ersetzen Sie im Dump die Sortierung durch utf8mb4_unicode_ci.
Tragen Sie danach die neuen Datenbankzugangsdaten in die Einstellungen der Website ein: bei WordPress in wp-config.php, bei Bitrix in /bitrix/.settings.php und /bitrix/php_interface/dbconn.php, bei Laravel in die Datei .env. Der Datenbankserver ist jetzt localhost.
Übertragen Sie die Cron-Jobs
Starten Sie die Jobs als Benutzer der Website, nicht als root: crontab -u www-data -e. Prüfen Sie die Pfade: Beim Hosting lag die Website etwa unter /home/user/public_html, auf dem VPS unter /var/www/example.com, und auch der Pfad zu PHP kann abweichen (which php). Prüfen Sie gesondert die Aufgaben, die der Hoster selbst ausgeführt hat: Bitrix-Agenten per Cron, den Datenaustausch mit 1C, den Versand von E-Mails aus der Warteschlange.
Testen Sie die Website vor der DNS-Änderung
Die Besucher landen vorerst noch beim Hosting, Sie selbst können aber schon den neuen Server aufrufen. Tragen Sie die Domain mit der IP des Servers in die hosts-Datei Ihres Computers ein (/etc/hosts unter Linux und macOS, C:\Windows\System32\drivers\etc\hosts unter Windows):
203.0.113.10 example.com www.example.com
Gehen Sie Startseite, Katalog, Produktseite, Suche, Formulare, Warenkorb und die Anmeldung im Admin-Bereich durch und laden Sie ein Bild hoch. Beobachten Sie parallel das Fehlerlog: tail -f /var/log/nginx/error.log. Die Antwort des Servers prüfen Sie ohne Browser schnell so: curl -I --resolve example.com:80:203.0.113.10 http://example.com/.
Typische Probleme in diesem Schritt:
- 502 Bad Gateway – nginx erreicht PHP-FPM nicht: Der Socket-Pfad in der Konfiguration der Website stimmt nicht mit dem in den Einstellungen des PHP-Pools überein.
- Weiße Seite oder Fehler 500 – eine PHP-Erweiterung fehlt. Den genauen Namen finden Sie im Fehlerlog.
- Große Dateien lassen sich nicht hochladen – in nginx ist der Request-Body standardmäßig auf 1 MB begrenzt (
client_max_body_size), in PHP durch die Parameterupload_max_filesizeundpost_max_size. - Links führen zu 404 – die Regeln aus .htaccess wurden nicht übertragen.
TLS-Zertifikat
Die übliche Domainprüfung für ein kostenloses Zertifikat läuft per HTTP über die Adresse, auf die DNS gerade zeigt, also auf das Hosting. Vor der Umstellung gibt es daher drei Wege:
- Das Zertifikat per DNS-Prüfung erhalten:
certbot certonly --manual --preferred-challenges dns -d example.com -d www.example.com. certbot bittet Sie, einen TXT-Eintrag anzulegen. Ein solches Zertifikat verlängert sich nicht von selbst, stellen Sie nach dem Umzug also ein normales aus. - Das aktuelle Zertifikat samt Schlüssel vorübergehend vom Hosting übernehmen, wenn das Panel den Export erlaubt.
- DNS umstellen und sofort ein Zertifikat mit
certbot --nginx -d example.com -d www.example.comausstellen. Einige Minuten liefert die Website per HTTPS einen Fehler, für eine kleine Website ist das vertretbar.
Prüfen Sie nach der Ausstellung die automatische Verlängerung: certbot renew --dry-run.
Der Umzugstag
- Sperren Sie die Website für Schreibzugriffe: Aktivieren Sie den Wartungsmodus oder stoppen Sie zumindest die Annahme von Bestellungen und Kommentaren. Für einen Shop sind das einige Minuten.
- Starten Sie denselben rsync-Befehl noch einmal – er überträgt nur die Änderungen.
- Erstellen Sie einen frischen Datenbank-Dump und spielen Sie ihn auf dem VPS über den alten ein.
- Ändern Sie den A-Eintrag der Domain und von www auf die IP des Servers. Hat die Domain einen AAAA-Eintrag mit der IPv6-Adresse des Hostings, ersetzen Sie ihn durch die IPv6 des Servers oder löschen Sie ihn, sonst landet ein Teil der Besucher weiter auf dem alten Server.
- Prüfen Sie, dass die neuen Einträge sichtbar sind:
dig +short example.com A @8.8.8.8unddig +short example.com AAAA @8.8.8.8. - Geben Sie die Website auf dem VPS wieder für Schreibzugriffe frei.
Verlieren Sie nicht die E-Mail
Das ist das häufigste Ärgernis bei einem Umzug. Sehen Sie nach, wohin MX zeigt: dig +short example.com MX. Steht dort example.com oder mail.example.com, der auf dieselbe IP wie die Website zeigt, schickt die Änderung des A-Eintrags die E-Mails auf den VPS, wo es keinen Mailserver gibt. Legen Sie vor der Umstellung für die E-Mail einen eigenen Eintrag mit der alten IP des Hostings an und tragen Sie ihn als MX ein, oder verlegen Sie die E-Mail der Domain besser vorab zu einem separaten Maildienst.
Verschickt die Website E-Mails (Bestellungen, Passwort-Wiederherstellung), prüfen Sie diese nach dem Umzug. E-Mails von einer neuen IP ohne SPF-Eintrag landen im Spam: Nehmen Sie entweder die IP des Servers in SPF auf oder versenden Sie über den SMTP eines Maildienstes. Ein eigener Mailserver auf dem VPS ist eine eigene Aufgabe, Tarife dafür finden Sie in der Auswahl VPS für einen Mailserver.
Nach dem Umzug und Rückweg
Kündigen Sie das Hosting ein bis zwei Wochen lang nicht. Prüfen Sie in den ersten Stunden die alte Datenbank: Hat zwischen dem letzten Dump und der DNS-Änderung jemand auf dem alten Server bestellt, übertragen Sie die Bestellung von Hand. Sehen Sie nach ein paar Tagen in das Zugriffslog des Hostings: Kommen dort noch Besucher an, ist irgendwo die alte Adresse geblieben, meist im AAAA-Eintrag oder bei www.
Der Rückweg ist einfach, solange das Hosting läuft: Tragen Sie im DNS die alte IP wieder ein, und dank der kurzen TTL landen die Besucher in Minuten wieder beim Hosting. Läuft alles stabil, setzen Sie die TTL auf die üblichen Werte zurück und richten Backups nach dem Artikel VPS-Backups: Strategien und Werkzeuge sowie ein externes Monitoring ein. Tarife für Websites: VPS für eine Website, VPS für WordPress, VPS für einen Onlineshop, VPS für Bitrix. Für einen ersten Probeaufbau ist die stundenweise Abrechnung praktisch.