Ich suche nach einer Lösung, um einen Bereitstellungsprozess unserer Anwendung zu automatisieren. Zu Beginn der Bereitstellung möchte ich den angegebenen Server programmgesteuert in den Wartungsmodus versetzen und schließlich nach Abschluss der Bereitstellung das Flag für den Wartungsmodus vom Nginx-Server entfernen.
Mit Wartungsmodus meine ich, dass nginx auf alle Anforderungen (mit einer möglichen benutzerdefinierten Seite) mit dem HTTP-Antwortcode 503 antworten sollte.
Ich weiß, wie der Serverblock so eingestellt wird, dass er mit 503-Code antwortet (siehe http://www.cyberciti.biz/faq/custom-nginx-maintenance-page-with-http503/ ), aber die Frage ist, wie dies programmgesteuert durchgeführt wird und am effizientesten.
Mir sind zwei Optionen in den Sinn gekommen:
Option 1: Schreiben Sie zu Beginn des Bereitstellungsprozesses eine Wartungsdatei in das Dokumentstammverzeichnis und überprüfen Sie bedingt, ob die Wartungsdatei in der Nginx-Serverkonfiguration vorhanden ist:
server {
if (-f $document_root/in_maintenance_mode) {
return 503;
}
}
Diese Methode enthält einen gewissen Overhead, da das Vorhandensein von Dateien für jede Anforderung überprüft wird. Ist es möglich, das Vorhandensein einer Datei nur beim Laden der Nginx-Konfiguration zu überprüfen?
Option 2: Das Bereitstellungsskript ersetzt die gesamte Konfigurationsdatei des Nginx-Servers durch eine Wartungsversion und tauscht sie am Ende der Bereitstellung zurück. Wenn diese Methode verwendet wird, bin ich besorgt über mögliche andere Automatisierungsprozesse wie Puppet, die möglicherweise die Wartungskonfigurationsdatei überschreiben.
quelle
/run/shm
damit die Überprüfung der Dateidexistenz nicht auf die Festplatte gelangt. Alle anderen Kommentare sind ebenfalls willkommen.Antworten:
Option 1 ist die beste Wahl. Wenn Sie eine zusätzliche Dateianforderung stört (obwohl fast kein Overhead darin liegt), können Sie sie durch die Variablenprüfung ersetzen:
quelle
Ich mache Folgendes:
Verwenden Sie das folgende Snippet:
quelle