Meine erste Idee ist:
# deploy into public_html_new, and then:
rsync -vaH --delete public_html_new/ public_html/
Eine gute Lösung wäre die Verwendung von rsync. Es wurden nur die wirklich geänderten Dateien geändert. Achtung, die Schrägstriche am Ende der Pfade sind hier wichtig.
Normalerweise braucht Apache keinen Neustart, es ist nicht die Java-Welt. Es prüft auf Anfrage, ob jede PHP-Datei geändert wurde, und liest sie bei Änderungen automatisch neu (und tokenisiert sie erneut).
Git-Pull war ähnlich effizient, obwohl es etwas schwieriger war, Skripte zu schreiben. Selbstverständlich ermöglichte es ein breites Spektrum verschiedener Möglichkeiten zur Erkennung von Zusammenführungen / Änderungen.
Diese Lösung funktioniert nur dann reibungslos, wenn keine größeren Änderungen vorgenommen wurden. Bei großen Änderungen in der Bereitstellung kann ein gewisses Risiko nicht ausgeschlossen werden, da ein nicht zu vernachlässigendes Zeitintervall vorliegt, in dem der Code teilweise geändert wird und teilweise nicht.
Wenn es große Änderungen gibt, war mein Vorschlag Ihre ursprüngliche Lösung (zwei Umbenennungen).
Hier ist ein bisschen hardcore, aber 100% atomare Lösung:
(1) mounten Sie einen Teil Ihres Dateisystems, in dem Ihr Magento stattfindet:
mount /dev/sdXY /mnt/tmp
(2) --bind
mounten Sie public_html_new in public_html:
mount --bind /path/to/public_html_new /path/to/public_html
Ab diesem Zeitpunkt sieht der Apache Ihre neue Bereitstellung. Eine Änderung eines 404 ist nicht möglich.
(3) Führen Sie die Synchronisation mit rsync durch, aber auf dem alternativen Mount-Punkt):
rsync -vaH --delete /mnt/tmp/path/to/public_html_new/ /mnt/tmp/path/to/public_html/
(4) Entfernen Sie die Bindehalterung
umount /path/to/public_html