Deployment

多伺服器部署策略 - 生產伺服器上的 Git?

  • March 28, 2015

主要問題:在生產伺服器上使用 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(我更熟悉)這樣的工具已經內置了所有這些步驟,你可以改變行為等等。

我認為最好的方法是使用capistranoVlad the Deployer 之類的部署工具,如果您已經擁有 Chef(或其他配置管理工具),甚至可以使用Chef 部署。

例如,Capistrano 預設情況下有點針對 Rails,但您可以對其進行定制以部署任何東西。它將連接到您的伺服器,更新程式碼(保留一些舊版本以防您需要回滾到以前的版本),執行數據庫遷移或清理等任務,然後在需要時重新啟動服務。你可以為你的環境定制它,甚至有不同的環境(我在生產中工作,說明 + 3 其他)。

所有其他工具都可以讓你做類似的事情,我認為花時間編寫部署腳本只有在你的系統真的不同於“通常”的系統時才有效。

引用自:https://serverfault.com/questions/463497