2012-01-11 59 views
6

我在想使用Vagrant來開發Django應用程序,但是我有點困惑,我不確定我想要做什麼甚至是可能的。共享和自動化的流浪盒子

我成功地安裝了lucid32盒子,並創建了一個新的流浪者「實例」,帶有Vagrantfile,一些共享目錄和轉發端口。

  • 的第一個問題是,這在一個團隊中工作時,似乎並沒有給我最好的選擇。我們如何(例如我和其他10個開發人員)分享這個盒子,以便共享它的每一個變化?例如,如果在6個月內我們需要postgresql,我需要讓它工作而無需安裝11次postgresql。

  • 另外,當盒子啓動時,我該如何讓事物(如:postgresql,django,this-service等)啓動?我不認爲我必須ssh並手動啓動n次所有n我每次需要的東西。

  • 最後:如果像木偶和廚師這樣的東西完全取代手動安裝(例如通過pip或apt-get),我不太明白。是這樣嗎?

謝謝。
我對不起英語很抱歉。 :-)

回答

13

我會說你選擇的Vagrant已經是你尋找的好開始,但是現在你需要深入研究一下Chef或Puppet,以便進一步自動化你的配置過程。

我想你的場景中的一個好選擇是首先將Vagrantfile和相應的Puppet清單放在版本控制下作爲項目的一部分。另外,關於這臺機器的所有配置也應該放入版本控制和/或通過某種工件存儲庫提供。

其次,如果團隊成員認爲已經準備好了,那麼在環境中建立規則(至少應該長期居住的環境)需要檢查。

關於你的第二個問題,回到我的開頭:Puppet(我喜歡)或Chef是你的首選工具,可以爲你和你的同事在將來節省很多工作。我會在這裏堅持木偶,因爲我不知道廚師太好。

使用puppet,您可以管理所需的所有內容,安裝軟件包,更改配置並確保某些服務正在運行,或者通常系統具有您希望的狀態。更妙的是,如果您或其他團隊成員提出了一些惡意chages他/她的箱子,你可以回滾在Vagrantfile /木偶表現,類型的變化

vagrant destroy && vagrant up 

和盒子很容易被帶回最新的版本狀態。

例如,採取以下清單文件:

package { "mysql-server-5.1": 
    ensure => present 
} 

file { "/etc/mysql/my.cnf": 
    owner => "root", 
    content => "http://myrepository.local/myProject/configurations/mysql/my.cnf", 
    require => Package["mysql-server-5.1"] 
} 

service { "mysql": 
    ensure => running, 
    subscribe => File["/etc/mysql/my.cnf"], 
    require => File["/etc/mysql/my.cnf"] 
} 

這樣做是什麼,它首先檢查的操作系統在你的盒子包裝機構(例如姓名假設最近的Ubuntu)如果包「mysql-server-5。1「,如果沒有安裝它,通過'require'屬性,第二個指令將在第一個指令之後執行(並且只有在它工作的時候),才能將MySQL配置更改爲您也檢查過的配置和/或發佈到你可以到達的地方(這也可以放在與流浪文件相同的文件夾中,然後在/ vagrant下面的框中)。最後一步,只有在改變配置工作,將確保「MySQL的」服務啓動並運行,或者得到重新啓動,如果它時,已更改配置已經正在運行

現在,您可以連接這體現在您的Vagrantfile:

Vagrant::Config.run do |config| 

    config.vm.box = "lucid32" 
    config.vm.box_url = "http://files.vagrantup.com/lucid32.box" 

    config.vm.define "node1" do |cfg| 
    cfg.vm.network "10.23.5.11" 
    cfg.vm.provision :puppet do |puppet| 
     puppet.manifests_path = "manifests" 
     puppet.manifest_file = "node1.pp" 
    end 
    end 
end 

除了像這樣對環境做出「嘗試性的東西」之外的所有變化,所有團隊成員都保證只需輕點指尖即可輕鬆完成相同的設置和再現。

我個人喜歡用手工在盒子上試用東西,當我找到正確的設置和配置時,將它翻譯成Puppet清單,以備日後使用和與團隊成員共享。由於Puppet(和廚師也)可以管理幾乎所有你需要的東西(用戶,cron作業,包,服務,文件,...),這對於確切的問題是一個很好的選擇,你甚至可以如果您願意,可以稍後使用這些配置來設置登臺或測試環境。他們有更多的選擇與木偶,並通過the language guide讀應該給你一個好主意,你可以用它做更多。

希望我可以幫助:)

+0

感謝您的幫助。 – Donovan 2012-01-21 00:56:00

+0

+1不錯的完整答案 – steveax 2012-05-23 23:16:22

+0

這是一個**偉大的答案**! – Robert 2014-01-20 21:52:36