Моя перша ідея:
# deploy into public_html_new, and then:
rsync -vaH --delete public_html_new/ public_html/
Хорошим рішенням було використання rsync. Він змінив лише дійсно змінені файли. Будьте обережні, підстрибування в кінці від патьоків тут важливі.
Зазвичай apache не потребує перезавантаження, це не світ java. Він перевіряє на зміну кожного файлу php за запитом і автоматично читає (і повторно маркує) зміни.
Git pull були аналогічно ефективними, хоча сценарій був трохи складніше. Звичайно, це дозволило отримати широкий спектр різних можливостей виявлення злиття / зміни.
Це рішення буде безпроблемно, лише якщо не буде дійсно великих змін - якщо великі зміни в розгортанні, трохи небезпеки не можна буде закрити, оскільки існує незначний часовий інтервал, коли код буде частково змінений а частково - ні.
Якщо є великі зміни, то моя пропозиція була вашим початковим рішенням (дві перейменування).
Ось трохи хардкор, але 100% атомне рішення:
(1) зробіть альтернативне змонтування частини вашої файлової системи, де знаходиться ваш магент:
mount /dev/sdXY /mnt/tmp
(2) зробіть --bind
кріплення свого public_html_new для public_html:
mount --bind /path/to/public_html_new /path/to/public_html
З цього моменту апаш побачить ваше нове розгортання. Будь-яка зміна 404 неможлива.
(3) виконайте синхроністацію з rsync, але в альтернативній точці монтажу):
rsync -vaH --delete /mnt/tmp/path/to/public_html_new/ /mnt/tmp/path/to/public_html/
(4) зняти кріплення кріплення
umount /path/to/public_html