2016-11-26 61 views
1

我正在使用lftp通過Travis CI部署網站。在部署之前有一個構建過程,因此構建目錄存在並被推送到ftp服務器的根目錄。使用lftp鏡像防止停機時間

lftp $FTP_URL -e "glob -d mirror build . --reverse --delete-first --parallel=10 && exit" 

它工作得很好,但我不喜歡因爲在我的網站上丟失文件而導致停機/臨時PHP解析錯誤。圍繞這個問題開展工作的最佳方式是什麼?


我的第一種方法是設置臨時目錄的選項,但lftp手冊頁說只有臨時文件的選項。我仍然嘗試了這個選項,但沒有幫助。


我的第二種方法是使用「鏡像構建溫度」來使用臨時文件夾,然後用它替換根。這裏的問題是,我不能在刪除舊文件和文件夾(如rm -rf *)時排除臨時文件夾。

+0

您是否嘗試過xfer:use-temp-file設置? – lav

+0

你有權訪問Web根目錄的父目錄嗎? – lav

+0

臨時文件設置不適用於目錄。我沒有訪問父目錄的想法,因爲每個cronjob都有單獨的訪問權限 - 可以訪問父目錄可以解決我的問題,但是ftp用戶可以訪問其他項目。 – redaxmedia

回答

1

對於不涉及添加/刪除php文件set xfer:use-temp-file的小改動應該就足夠了。也不要使用--remove-first,因爲它會導致lftp在上傳前刪除過時的文件。

對於較大的更改,我會爲每個版本的站點創建一個單獨的目錄,並使用.htaccess mod_rewrite或其他某個配置文件將Web服務器重定向到該目錄。這種技術將允許原子切換到新版本(如果需要,可以返回)。此外,如果您根據您的IP地址或使用其他規則有條件地重定向到新版本,您將能夠對新版本進行最終的預生產測試。

如果你不想重新上傳整個網站的每個新版本和FTP服務器支持FXP與本身,那麼你就可以舊版本複製到使用mirror old_directory ftp://[email protected]/new_directory一個新的目錄,然後更新使用mirror -eR local_dir new_directory新目錄。