Wie kann ich meine Website aktualisieren, ohne Benutzer zum Warten zu zwingen?

8

Ausfallzeiten sind für Benutzer unpraktisch und sie müssen derzeit jedes Mal warten, wenn die Engine einer Site aktualisiert wird. Darüber hinaus besteht bei Verwendung von Standard-Skripten das Risiko, dass eine Einstellungsänderung nicht so gut funktioniert wie beabsichtigt (selbst wenn sie auf einer Staging-Site getestet wurden).

Wie kann ich mehrere Versionen einer Site auf einem Server behalten und zwischen ihnen wechseln, ohne Ausfallzeiten zu verursachen (z. B. mit einer htaccess-Datei)?

Gelatine
quelle

Antworten:

6

Sind Sie auf einem Linux / BSD-Computer? In diesem Fall können Sie leicht symbolische Links verwenden, um dieses Ziel zu erreichen.

Erstellen Sie hier Version 1 der Site:

/var/www/www.example.org.v1

Erstellen Sie einen symbolischen Link, der auf dieses Verzeichnis verweist

cd /var/www
ln -s www.example.com.v1 www.example.com

Dies sollte Ihnen eine Verzeichnisliste ( ls -la) geben, die ungefähr so ​​aussieht:

lrwxr-xr-x   1 userid  users    18 Aug  3 03:35 www.example.com -> www.example.com.v1
drwxr-xr-x   2 userid  users   512 Aug  3 03:35 www.example.com.v1

Stellen Sie Ihren Webserver so ein, dass er /var/www/www.example.comals Dokumentstamm verwendet wird. Sie müssen dies niemals ändern. Alle erneuten Verweise erfolgen auf Dateisystemebene.

Wenn Sie nun Version 2 der Site austauschen möchten, müssen Sie nur noch die neue Version einfügen in:

/var/www/www.example.org.v2

Aktualisieren Sie den symbolischen Link, um auf diese Version zu verweisen:

ln -sfh www.example.com.v2 www.example.com

So sieht Ihre Verzeichnisausgabe folgendermaßen aus:

lrwxr-xr-x   1 userid  users    18 Aug  3 03:43 www.example.com -> www.example.com.v2
drwxr-xr-x   2 userid  users   512 Aug  3 03:42 www.example.com.v1
drwxr-xr-x   2 userid  users   512 Aug  3 03:41 www.example.com.v2

Wie Sie sehen können, verweist der symbolische Link www.example.com jetzt auf Version 2 Ihrer Website. Dies ist eine atomare Operation und sollte keine Ausfallzeiten verursachen, wenn Dateien nicht verfügbar sind.

Natürlich ist immer noch eine erhebliche Komplexität erforderlich, um sicherzustellen, dass die Datenbankstrukturen aktualisiert werden, statische Ressourcen verfügbar sind (und mit der richtigen Version verknüpft sind) usw. Dies sorgt jedoch zumindest dafür, dass alle richtigen Ressourcen für die Datenbank verfügbar sind Neue Seiten sind sofort verfügbar.

Windows Vista und Server 2008 unterstützen auch symbolische Links mit dem mklinkBefehl, obwohl ich keine direkte Erfahrung mit ihnen habe.

JasonBirch
quelle
7

Sie können virtuelle Hosts in Apache verwenden, um 2 Versionen des Codes mit 2 verschiedenen URLs zu haben. Ein häufig verwendetes Beispiel ist:

test.example.com -> /var/www/version1.2

www.example.com -> /var/www/version1.1

Beide befinden sich auf demselben Server, aber möglicherweise ist nur einer für die Welt zugänglich. Sobald Sie zufrieden sind, dass test.example.com funktioniert, können Sie einfach ändern, wo sie in Ihrer Apache-Konfiguration und ... presto verweisen. Neue Seite, neuer Code. Vorausgesetzt, es wurden keine Änderungen am Datenbankschema vorgenommen, sollte dies funktionieren. Nachdem Sie die Änderung vorgenommen haben, wird Folgendes angezeigt:

test.example.com -> / var / www / newtestversion

www.example.com -> /var/www/version1.2

Hier ist ein Beispiel für eine Apache-Konfigurationsanweisung für einen virtuellen Host:

<VirtualHost *:80>

     ServerAdmin gabe@localhost

     DocumentRoot "/var/www/version1.1"

     ServerName test.example.com

</VirtualHost>

Weitere Informationen dazu finden Sie in der Dokumentation zum virtuellen Apache-Host

Ich bin mir nicht sicher, wie ich das in IIS machen soll, aber ich stelle mir vor, dass es auch einen Weg gibt.

Wenn etwas schief geht, schalten Sie den virtuellen Host wieder auf das Original um und Ihre alte Site ist wieder da ... keine Probleme. Sie müssen Apache neu starten, damit diese Änderungen wirksam werden. Dies ist jedoch im Allgemeinen sehr schnell erledigt.

gabe.
quelle
0

Was ich vorschlagen würde:

  • Testen Sie lokal auf einem Entwicklungsserver, bevor Sie Änderungen hochladen. Nehmen Sie die Änderungen erst auf einem Live-Server vor, wenn Sie ziemlich sicher sind, dass sie auf dem Testserver funktionieren.
  • Führen Sie die Wartung zu Ihrer am wenigsten frequentierten Zeit durch. Bei den meisten Websites erfolgt dies an den Wochenenden in den frühen Morgenstunden. Wenn Wochenenden keine Option sind, tun Sie dies während Ihrer am wenigsten frequentierten Zeit während der Woche.
  • Warnen Sie Ihre Benutzer vor geplanten Wartungsarbeiten.
Virtuosi Media
quelle
Gibt es eine Möglichkeit, einfach mehrere Versionen einzurichten und nahtlos zwischen ihnen zu wechseln?
Gelatine
Ich habe es noch nie gemacht, aber ich würde mir vorstellen, dass Sie es über ein Setup mit mehreren Servern oder virtuellen Servern machen könnten. Wenn Sie danach suchen, ist dies möglicherweise eine bessere Frage für ServerFault.
Virtuosi Media
@ Simon: Ja, verwenden WampServer und installieren Sie die verschiedenen Module für verschiedene Versionen von Apache, PHP und MySQL die Live - Server entsprechen - wampserver.com/en
DisgruntledGoat