2008-10-13 76 views
17

我有一些批處理進程在Linux/PHP網站的幕後運行。他們的數量和複雜性都在不斷增長,所以我想爲他們帶來一小部分流程。將工具和腳本部署到生產的最佳實踐?

我的源代碼樹有一堆cpp文件和腳本,按照開發進行組織,但沒有考慮部署。編譯完所有的可執行文件後,我需要將各種腳本和二進制文件放在一組機器上。不同的機器需要不同的可執行文件,腳本和配置文件用於批處理。我也有一些我寫的屬於每臺機器的工具。目前,這個部署過程是手動且容易出錯的。

我在猜測我只是想結束一個腳本,它在源碼樹的根目錄下運行,併爲任何機器構建一個必需的小樹。然後,我將rsync到適當的機器。但我很好奇其他人如何管理這類問題。有任何想法嗎?

+0

哇7年後...現在有很多工具,特別是應用程序發佈自動化工具。以下是瞭解更多信息的最佳起始資源:https://en.wikipedia.org/wiki/Application_release_automation – 2016-06-27 20:51:57

回答

2

以您的發行版使用的格式創建您自己的包,例如Debian軟件包(.deb)。可以將它們複製到每臺機器並手動安裝,也可以設置自己的存儲庫,並將其添加到源列表中。

應該設置您的軟件包,以便它們包含的腳本可以查看每個主機上配置文件的不同,具體取決於每個主機上需要運行的腳本。

要將它們結合在一起,您可以創建一個元數據包,它僅取決於您創建的每個其他數據包。這樣,當你建立一個新的服務器時,你安裝了一個元包,而其他包作爲依賴被引入。

雖然這個過程聽起來有點複雜,但如果你有很多腳本和許多主機來部署它們,它從長遠來看可以真正付清。

1

我不得不頻繁地向幾個客戶推出PHP腳本和Apache配置。由於他們都運行Debian Linux,我在我的服務器上建立了一個Debian軟件包存儲庫,所有客戶所要做的就是鍵入apt-get upgrade並且他們獲得最新版本。

3

看看cfengine tutorial看看cfengine是否適合您的情況。對於小型網站來說這可能有些複雜,但如果將來會涉及更多的計算機和更多的配置,那麼在某些時候您最終會使用cfengine或類似的東西。

0

要做的第一件事就是將所有這些腳本放到一個源代碼控制庫中(svn或git很好),以便隨着時間的推移可以跟蹤這些腳本的變化。

如果您對ruby感興趣,請查看Capistrano,它非常適合在羣集中將多臺計算機部署到多臺計算機上,並且設置起來相當容易。它可以直接從您的版本控制系統讀取文件。

1

Puppet是另一種可以在這種情況下使用的工具。它與cfengine類似 - 您創建了所需部署的模型,Puppet會指出如何讓環境進入該狀態。

19

這裏有幾個類別的工具。有些人使用這些類別的工具組合。例如,我有時會使用Puppet和Capistrano。有關討論,請參見Puppet or Capistrano - Use the Right Tool for the Job

腳本工具旨在部署應用程序:

的工具這一類的一般模式是,你創建一個腳本和/或配置文件,經常用的命令集類似於一個Makefile,和工具將ssh轉移到您的生產箱,檢查您的源代碼,並運行其他必要的步驟。

該領域的工具通常具備回滾到先前版本的功能。所以他們會檢查你的源碼到發佈/目錄,並且如果一切順利的話,創建一個從「當前」到「發佈/」的符號鏈接。如果出現問題,可以通過運行一個命令來恢復到以前的版本,該命令將刪除「當前」並將其鏈接到以前的版本/目錄。

  • Capistrano來自Rails社區,但通用。 Capistrano用戶可能對deprec感興趣,Capistrano是一套部署配方。
  • Vlad the Deployer是Capistrano的另一種選擇,同樣來自Rails社區。
  • 編寫自己的shell腳本或Makefile。爲獲得這些文件到生產箱

選項:

  • 從源頭直接結賬。如果您的生產箱缺乏開發工具,特別是源代碼管理工具,則並非總是可行。
  • 本地簽出源碼,然後tar /壓縮。使用scp或rsync將tarball複製過來。有時候,這對於Amazon EC2部署而言是首選,其中壓縮tarball可以節省時間/帶寬。
  • 本地簽出源代碼,然後rsync將其複製到生產框中。

包裝工具

使用您的操作系統的包裝系統來生成包含文件您的應用程序包。創建一個具有依賴關係的主包,即您需要的其他包。 RubyWorks系統就是這樣一個例子,用於部署Rails堆棧和示例應用程序。那麼這是使用apt,yum/rpm,Windows msi或其他任何方法來部署給定版本的問題。回滾涉及卸載並重新安裝舊版本。

常規工具在安裝應用程序/ CONFIGS和維護一套系統的針對

這些工具並不專門針對部署Web應用程序的問題,而是部署/維護應用程序的更普遍的問題/配置一組服務器或整個公司的工作站。他們的目標更多的是系統管理員而不是Web開發人員,儘管他們可以找到它們很有用。

  • Cfengine是此類別中的工具。
  • Puppet旨在改善Cfengine。它有一個學習曲線,但很多人覺得值得花時間弄清楚如何完成配置。一旦你完成了,每個盒子都會定期檢查中央服務器,並確保一切都是最新的。如果有人編輯文件或更改權限,則會檢測並更正此問題。因此,與上述部署工具不同的是,Puppet不僅將文件放在適合您的位置,而且確保它們保持原樣。
  • Chef比Puppet稍微年輕一點。
  • Smartfrog是此類別中的另一種工具。
  • Ansible可與普通的YAML文件,並且不需要在服務器上運行它管理

對於這些這一類的比較,還有更多的工具代理,請參閱Wikipedia文章,Comparison of open source configuration management software

+0

偉大的答案,內容翔實,寫得很好。只需要注意一下:幾年過去了,現在Puppet也在使用Windows。 – Luke404 2013-01-25 16:30:35