自動化伺服器部署
我發現我經常為我的許多客戶設置幾乎相同的伺服器和 VPS,這可能非常耗時。通常,每次部署之間唯一變化的是要服務的不同網站。有沒有一種簡單的方法可以自動完成所有這些工作,並擺脫設置 56 台相同伺服器的無聊單調?
到目前為止我部署的伺服器只有 Ubuntu,但我可能會開始使用其他 linux 作業系統甚至 Windows。到目前為止,我已經看過 Capistrano,但它似乎專注於編寫小的 ruby 程序來完成這項工作,而我根本沒有任何知識
Puppet聽起來非常適合您嘗試做的事情,但需要注意的是,目前尚不支持 Windows。
在您的情況下,您將根據所有機器上相同的包來定義一個伺服器節點。然後,您將各個主機定義為從 Server 繼承的節點,並為其設置特定的獨特事物。
Puppet 是聲明性的——它允許你根據每個盒子應該擁有的資源來描述你的盒子。因此,如果您願意
ssh
- 您為該資源編寫一個類 - 在該類中您可以包含有關如何在 FreeBSD 和 Ubuntu 上呼叫 ssh 略有不同的邏輯。它還知道yum
在 Redhat 和apt-get
基於 Debian 的發行版以及ports
BSD 中使用。現在,在您的伺服器節點中,您將有一行類似include ssh
- 並且 puppet 會做正確的事情並將 SSH 放在機器上,而您不必記住那是 Ubuntu、Redhat 還是 FreeBSD。好的是所有伺服器的東西都放在一個地方——如果你在任何時候添加到伺服器節點定義,所有機器都會相應地更新它們的配置。
現在,我只使用 Puppet 管理三個盒子 - 但它已經得到了回報。在花了一周時間設置了一個我們將在實驗中用於刺激展示的盒子後,結果發現顯卡驅動程序在我安裝的 Ubuntu 版本(8.04)中太舊了。我必須安裝最新的 Ubuntu (9.04),但之後我只需要 apt-get 並執行 puppet - 我花了一周時間設置的所有東西都恢復了。
Puppet 確實有一點學習曲線,但我成功地避免了學習 Ruby——我知道我正在使用它,因為那是 puppet 的編寫方式——但到目前為止,我已經成功地修改了中的範例wiki 上的文件和食譜。另一個缺點是 puppet 第一次做事確實需要更長的時間。好處是您在所有機器上更改的所有內容都儲存在一個地方 - 將 puppet 配置保存在版本控制系統中是標準做法 - 因此您可以隨時回顧並查看過去是如何設置伺服器的- 或回滾一些不成功的更改。
最後,這是一個快速影片,它做了一個簡單的木偶展示,讓我快速入門。