Ý tưởng đầu tiên của tôi là:
# deploy into public_html_new, and then:
rsync -vaH --delete public_html_new/ public_html/
Một giải pháp tốt là sử dụng rsync. Nó chỉ thay đổi các tập tin thực sự thay đổi. Hãy coi chừng, dấu gạch chéo ở cuối ot các đường dẫn ở đây rất quan trọng.
Thông thường apache không cần khởi động lại, đó không phải là thế giới java. Nó kiểm tra sự thay đổi của mọi tệp php theo yêu cầu và tự động đọc lại (và mã hóa lại) khi thay đổi.
Git pull có hiệu quả tương tự, mặc dù kịch bản khó hơn một chút. Tất nhiên, nó cho phép một loạt các khả năng phát hiện thay đổi / hợp nhất khác nhau.
Giải pháp này sẽ chỉ liền mạch nếu không có thay đổi thực sự lớn - nếu có những thay đổi lớn trong quá trình triển khai, một chút nguy hiểm không thể được đóng lại, bởi vì có một khoảng thời gian không đáng kể, khi mã sẽ được thay đổi một phần và đặc biệt là không.
Nếu có thay đổi lớn, đề xuất của tôi là giải pháp ban đầu của bạn (hai lần đổi tên).
Đây là một chút khó khăn, nhưng giải pháp nguyên tử 100%:
(1) thực hiện thay thế một số hệ thống tập tin của bạn, nơi magento của bạn diễn ra:
mount /dev/sdXY /mnt/tmp
(2) thực hiện việc --bindgắn kết public_html_new của bạn thành public_html:
mount --bind /path/to/public_html_new /path/to/public_html
Từ thời điểm này, apache sẽ thấy triển khai mới của bạn. Mọi thay đổi của 404 là không thể.
(3) thực hiện quá trình tổng hợp với rsync, nhưng trên điểm gắn kết thay thế):
rsync -vaH --delete /mnt/tmp/path/to/public_html_new/ /mnt/tmp/path/to/public_html/
(4) loại bỏ gắn kết liên kết
umount /path/to/public_html