Deployment
多伺服器部署策略 - 生產伺服器上的 Git?
主要問題:在生產伺服器上使用 Git 進行部署是一個好策略嗎?
我看到的許多部署策略都圍繞著在您的伺服器上安裝 Git(開發、登台和生產)。
對於部署到階段/生產來說,這樣做的優點似乎很明顯:
- 快速引入變化的能力
- 更容易自動化
- 如果需要可以切換分支(也許每個測試伺服器的分支)
- 可以查看文件是否在生產伺服器中以某種方式更改
但是,我看到了一些缺點:
- 安全性——Git 似乎是一個潛在的攻擊媒介,即使生產環境具有隻讀訪問權限
git pull
如果生產中存在某種未分階段的更改,生產伺服器上可能會失敗(儘管可以使用 -f 克服)部署即服務公司(例如 Beanstalkapp.com、deployhq.com)使用 FTP、SFTP 或 SSH。Beanstalkapp 尤其擅長僅根據 git 歷史修改文件(而不是重新部署每個文件)。這些服務不要求您在舞台/生產伺服器上安裝 git(如果您通過 SSH 部署,那麼您會/可以使用該策略是有爭議的)。
我發現我喜歡使用 sftp:
- 仍然可以在部署前/部署後執行腳本
- 覆蓋、移動、刪除文件,無論生產伺服器上有什麼(這對我來說是一個加分項)
- 在生產環境中沒有 .git 目錄或任何基於 git 的攻擊漏洞
就最佳實踐和安全性而言,在生產伺服器上輕鬆使用 git 是否值得?如果不是,那麼在跳過持續集成工具的同時進行部署的好方法是什麼?
(我只詢問是否跳過 CI 工具,因為時間/預算/客戶限制不允許它們在我的日常使用中使用)。
回答您的問題:是的,使用 git(或任何其他版本控制)進行部署是可行的方法,特別是當您的基礎設施開始變得複雜/龐大時。
回答您的顧慮
- 安全必須分層完成,即使 git 是一個真正令人擔憂的攻擊媒介,仍然有人必須獲得對伺服器的訪問權才能做到這一點。擁有良好的伺服器安全性、基於 SSH 密鑰的身份驗證和訪問控制/日誌記錄,您在這方面的風險將非常低。
- 如果你想編寫一個部署工具,當然你必須考慮一個回滾過程,以防程式碼更新失敗。好消息是像 capistrano(我更熟悉)這樣的工具已經內置了所有這些步驟,你可以改變行為等等。
我認為最好的方法是使用capistrano或Vlad the Deployer 之類的部署工具,如果您已經擁有 Chef(或其他配置管理工具),甚至可以使用Chef 部署。
例如,Capistrano 預設情況下有點針對 Rails,但您可以對其進行定制以部署任何東西。它將連接到您的伺服器,更新程式碼(保留一些舊版本以防您需要回滾到以前的版本),執行數據庫遷移或清理等任務,然後在需要時重新啟動服務。你可以為你的環境定制它,甚至有不同的環境(我在生產中工作,說明 + 3 其他)。
所有其他工具都可以讓你做類似的事情,我認為花時間編寫部署腳本只有在你的系統真的不同於“通常”的系統時才有效。