Zum Hauptinhalt springen

Migrieren einer Webseite und Datenbank auf einen neuen Server

Dieser Artikel beschreibt, wie du eine Webseite mit möglichst kurzem Unterbruch von einem auf einen anderen Server migrieren kannst. Bitte ersetze DEINEDOMAIN mit der Domain / dem Verzeichnis, welche(s) du migrieren möchtest. Diese Anleitung setzt voraus, dass die Virtual-Host-Konfiguration auf dem Ziel-System bereits existiert.

Vorbereitung

Um sicherzustellen, dass die Migration möglichst schnell durchgeführt werden kann, empfehlen wir die folgenden Konfigurationen vorzubereiten:

.htaccess

Falls im Verzeichnis der zu migrierenden Domain bereits eine .htaccess Datei existiert, empfehlen wir eine Kopie anzulegen.

Quellsystem

cp /home/www-data/DEINEDOMAIN/.htaccess /home/www-data/DEINEDOMAIN/.htaccess_backup

DNS

Wir empfehlen, bereits zwei Tage im Voraus die TTL ("Time To Live", Gültigkeitsdauer des Eintrags) deiner DNS-Einträge auf einen tiefen Wert, bspw. 300 Sekunden, zu setzen. Dies beschleunigt die Verteilung der später anzupassenden DNS-Einträge.

Wartungsseite

Während der Datenmigration soll sichergestellt sein, dass keine Daten verändert werden. Wir empfehlen für die Dauer der Datenmigration eine Wartungsseite auszuliefern.

Sollte die von dir eingesetzte Software keine Wartungsfunktion unterstützen, erstelle im "DocumentRoot" der zu migrierenden Domain bitte eine Datei mit dem Namen maintenance.html.

Beispielhaft kann folgender Inhalt hinterlegt werden:

(DE) Wir verbessern derzeit das Benutzererlebnis unserer Webseite und freuen uns, dich in Kürze wieder begrüssen zu dürfen.
(EN) We are currently improving the user experience of our website and look forward to welcoming you again soon.

HTML Version

<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Under Maintenance</title>
<style type="text/css">
body {
text-align: center;
padding: 150px;
}

h1 {
font-size: 50px;
}

body {
font:
20px Helvetica,
sans-serif;
color: #333;
}

main {
display: block;
text-align: left;
width: 650px;
margin: 0 auto;
}

a {
color: #dc8100;
text-decoration: none;
}

a:hover {
color: #333;
text-decoration: none;
}
</style>
</head>

<body>
<main>
<h1>We&rsquo;re back soon</h1>
<article>
<p>
(DE) Wir verbessern derzeit das Benutzererlebnis unserer Webseite und
freuen uns, dich in Kürze wieder begrüssen zu dürfen.
</p>

<p></p>
<p>
(EN) We are currently improving the user experience of our website and
look forward to welcoming you again soon.
</p>
</article>
</main>
</body>
</html>

Um die Wartungsseite zu einem späteren Zeitpunkt zu aktivieren, bereite die dazu nötige .htaccess Datei mit folgendem Inhalt vor:

Quellsystem

/home/www-data/.htaccess_maintenance :

RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteRule .* /maintenance.html [R=302,L]

Domainweiterleitung zum neuen Server

Trotz sorgfältiger Vorbereitung und einem Verringern der TTL der DNS-Einträge einer Domain, kann es in Einzelfällen dazu kommen, dass die Aktualisierung der DNS Einträge für Endbenutzer einige Zeit in Anspruch nimmt.

Um Aufrufe des Quellsystems zu vermeiden, bereiten wir eine weitere .htaccess Datei vor, die das Quellsystem als Reverse-Proxy fungieren lässt. So ist sichergestellt, dass alle Aufrufe auf dem Zielsystem verarbeitet werden, während die DNS-Änderungen im Internet propagiert werden.

Als Ziel der Reverse-Proxy-Konfiguration wird die Server-Subdomain des Zielsystems verwendet.

Erstelle dazu bitte eine .htaccess Datei mit dem Namen /home/www-data/.htaccess_proxy und folgendem Inhalt:

Quellsystem

RewriteEngine on
ProxyPreserveHost on
RewriteBase /
RewriteRule ^(.*)$ http(s)://YOURDOMAIN.NEWSERVERNAME.nine.ch/$1 [P]
ProxyPassReverse / http(s)://YOURDOMAIN.NEWSERVERNAME.nine.ch/

Migration

Bevor du mit der Migration beginnst, aktiviere zunächst die vorbereitete Wartungsseite. So wird sichergestellt, dass keine Änderungen am Datenbestand mehr vorgenommen werden können.

Quellsystem

cp /home/www-data/.htaccess_maintenance /home/www-data/DEINEDOMAIN/.htaccess
nine-flush-fpm

nine-flush-fpm leert den PHP OpCode-Cache. So wird sichergestellt, dass die geänderte .htaccess unmittelbar eingelesen wird.

Wenn die Wartungsseite wie gewünscht erscheint, kannst du den Datenabgleich zum Zielsystem beginnen:

Hinweis: Wir empfehlen, bei umfangreicheren Datenbeständen einen ersten Abgleich einige Tage vor der geplanten Migration durchzuführen. Dies verringert die zum Datenabgleich benötigte Zeit drastisch.

Die Option --delete löscht auf dem Zielsystem Daten aus dem Verzeichnis /home/www-data/DEINEDOMAIN/, die auf dem Quellsystem nicht (mehr) vorhanden sind. So wird sichergestellt, dass die nach einem vorherigen Datenabgleich auf dem Quellsystem gelöschten Daten auch auf dem Zielsystem entfernt werden.

Quellsystem

rsync -avzH --delete /home/www-data/DEINEDOMAIN/ \
ZIELSYSTEM:/home/www-data/DEINEDOMAIN

Während des Kopiervorgangs kannst du dich um die Migration der Datenbank kümmern. Wenn ein aktueller Stand der Datenbank benötigt wird, gehe bitte wie folgt vor.

Bitte ersetze die Platzhalter DEINDATENBANKBENUTZER, DATENBANKNAME, SSHBENUTZER und ZIELSYSTEM mit den entsprechenden Werten.

Quellsystem

mysqldump --opt --quote-names --single-transaction --user=DEINDATENBANKBENUTZER --password DATENBANKNAME | \
ssh SSHBENUTZER@ZIELSYSTEM mysql --user=DEINDATENBANKBENUTZER --password DATENBANKNAME

Die Passwortabfrage erfordert die Eingabe des Passwortes des SSH-Benutzers, mit dem du zum Zielsystem verbinden möchtest.

Nine erstellt nächtliche Sicherungen deiner Datenbanken. Wenn die Sicherung der vorangegangenen Nacht genügt, findest du in diesem Artikel die nötigen Informationen.

Nachdem der Datenabgleich sowie der Import der Datenbank abgeschlossen ist, kannst du auf dem Zielsystem die Datei /home/www-data/DEINEDOMAIN/.htaccess mit deiner gesicherten .htaccess austauschen. Die .htaccess, die zur Aktivierung der Wartungsseite verwendet wurde, wurde durch den Datenabgleich ebenfalls kopiert.

Zielsystem

cp /home/www-data/DEINEDOMAIN/.htaccess_backup /home/www-data/DEINEDOMAIN/.htaccess

Unter der URL "http(s)://YOURDOMAIN.NEWSERVERNAME.nine.ch/" kannst du deine Webseite auf dem Zielsystem aufrufen und testen.

Bitte beachte, dass viele CMS eine Weiterleitung auf die verwendete Domain durchführen. Eventuell ist es daher erforderlich, das CMS vor der Migration anzupassen oder die hosts Einträge auf deinem PC für die Testphase zu ändern. Eine Anleitung zur Anpassung der hosts Datei findest du unter How to Edit Your Hosts File.

Nachdem du die korrekte Funktionsweise auf dem Zielsystem überprüft hast, kannst du auf dem Quellsystem die vorbereitete Proxykonfiguration aktivieren.

Quellsystem

cp /home/www-data/.htaccess_proxy /home/www-data/DEINEDOMAIN/.htaccess

Alle Zugriffe werden nun vom Zielsystem verarbeitet.

Zum Abschluss der Arbeiten ist die Anpassung der DNS-Einträge notwendig. Passe alle DNS A-Einträge, die auf das Quellsystem verweisen, an, sodass diese auf das Zielsystem verweisen. Bitte beachte, dass diese Anpassung in Abhängigkeit der gewählten TTL der Einträge sowie der geographischen Lage der Zugriffe mit bis zu 24 Stunden Verzögerung in Kraft treten kann.

Vergewissere dich einige Tage nach der DNS Anpassung, dass diese erfolgreich durchgeführt wurde. Die einfachste Art, dies zu überprüfen, ist die .htaccess Datei zu deaktivieren, die die Reverse-Proxy Konfiguration bereitstellt:

Quellsystem

mv /home/www-data/DEINEDOMAIN/.htaccess /home/www-data/DEINEDOMAIN/.htaccess_disabled

Wurde die DNS-Anpassung korrekt vorgenommen, sollten alle Zugriffe zur Webseite weiterhin fehlerfrei funktionieren.