單節點部署CloudFoundry方法
作者:egg
郵箱:xtfggef@gmail.com
微博:http://weibo.com/xtfggef
部落格:http://blog.csdn.net/zhangerqing(轉載請說明出處)
一、環境需求
官方系統內容要求:
Setup a VM with a pristine Ubuntu 10.04 Server 64-bit image
Setup your VM with 1G or more of memory
要求是server版的,但是我們實驗裝的是desktop版的,也能正常運行。
注意:千萬不要在不符合環境的機器上安裝,否則會嘗盡苦頭,各種問題,而且適合cloudfoundry無關的,很多都是一些系統庫缺失,所以,一定要選擇ubuntu10.04 64bit。雖然最終也能安裝成功,但是大大浪費時間!
二、步驟
步驟很簡單,不需要我們做太多,因為cloudfoundry內建安裝指令碼,我們只需要執行就行了,先安裝curl工具:
sudo apt-get install curl
接下來執行:
bash < <(curl -s -k -B https://raw.github.com/cloudfoundry/vcap/master/dev_setup/bin/vcap_dev_setup)
系統會自動開始download所需的一切,中間會遇到一些地方需要輸入密碼,所以在安裝開始後,需要經常盯著,不過這個安裝過程比較耗時,下載完還有很多需要編譯的東西,所以就算是很順利,完全沒有報錯,也得三個小時,但是我安裝的幾次都是多於三個小時,因為中途總會有一些問題。
三、可能遇到的問題及解決辦法及注意事項
可能會報下面錯誤而停止:
1、Giving up. Cannot connect to the web. Check your proxy settings if you are behind a proxy.
2、Error executing action `install` on resource 'gem_package[sinatra]'
3、Error executing action `install` on resource 'gem_package[rack]'
4、Error executing action `create` on resource 'deployment_remote_file[/var/cache/dev_setup/rabbitmq-server-with-plugins-generic-unix-2.8.7.tar.gz]'
....
統一的解決方案:重新執行
bash < <(curl -s -k -B https://raw.github.com/cloudfoundry/vcap/master/dev_setup/bin/vcap_dev_setup)
原因是ruby的源rubygems.org被託管於amazons EC2(有人這樣說),所有有時會被牆,但是只要碰到問題,重新執行上面的安裝指令碼就行。不用擔心重新執行會完全重新開始,有些下載過的或者已經編譯過的東西,就不會再去重複執行了。
5、Processing deployment_remote_file[/var/cache/dev_setup/otp_src_R14B01.tar.gz] action create (erlang::default line 12)
Error executing action `create` on resource 'deployment_remote_file[/var/cache/dev_setup/otp_src_R14B01.tar.gz]'
這個是我遇到的一個手動解決的問題,是我重複執行上述指令碼後仍然不能解決的問題,根據上下文描述,這個過程是將otp_src_R14B01.tar.gz檔案部署到/var/cache/dev_setup/下,後來我在自己的機子上找到該檔案,發現足足64M,怪不得會timeout,估計是因為網路環境,我之前成功安裝過三次,都沒有遇到這個問題。所以我手動將otp_src_R14B01.tar.gz拷貝到了/var/cache/dev_setup/下,重新執行上述那個安裝指令碼,最後成功了。
6、如果最初執行安裝指令碼的時候用的是root許可權(sudo方式),那麼在以後使用的時候,啟動或者停止cloudfoundry都需要root許可權,其實安裝的時候並不需要root許可權,普通的./執行就OK了,所以我們為了方便,就別用sudo方式安裝了。
7、預設的安裝路徑在目前使用者的根路徑下,安裝完在根路徑下會出現cloudfoundry檔案夾。
最後安裝完,如果顯示:
就說明安裝成功了!
切換到使用者目錄下的:cloudfoundry/vcap/dev_setup/bin目錄下,執行:./vcap_dev start即可啟動cloudfoundry了,同樣除了start還有stop、restart等命令。執行./vcap_dev start 後,開始啟動,最終出現:就說明成功了!
共啟動了18個模組。
四、vmc的安裝
安裝完後,需要安裝vmc,直接:gem install vmc,會報錯:
就是關於vmc0.4.7依賴multi_json1.4.0的問題,預設在執行gem install vmc時,會先安裝multi_json這個包,但是安裝的是1.5.0,所以我們需要刪除1.5.0版本的,安裝1.4.0的。需要兩個檔案和一個檔案夾:
我在我的機子上找到這些檔案,分別拷貝到相應的目錄,就OK了。
multi_json-1.4.0對應放在/usr/lib/ruby/gems/1.8/gems下
multi_json-1.4.0.gemspec放在/usr/lib/ruby/gems/1.8/specifications下
multi_json-1.4.0.gem放在/usr/lib/ruby/gems/1.8/cache下
基本沒有問題了,繼續執行gem install vmc就可以了。
有時候網路不穩定還會報下面的錯:
ERROR: http://rubygems.org/ does not appear to be a repository
ERROR: could not find gem vmc locally or in a repository
重新執行,直到完成安裝。
安裝完vmc後,執行:vmc target api.vcap.me
上面的步驟都執行下,出現圖中的資訊,說明安裝成功了,現在就可以在上面部署應用了。
五、在其他機子上執行已經安裝好的鏡像
啟動虛擬機器後,start cloudfoundry,但是發現,只有cloud controller模組不能啟動,其他的都能起。問題原因:cloudfoundry裡面的很多設定檔都將ip寫死了。在~/cloudfoundry/.deployment/devbox/config下的很多檔案和/etc/postgresql檔案夾中,都將ip直接寫在檔案裡。
解決辦法:
1、修改上述檔案夾裡的所有需要修改的檔案,這個比較費工夫,不過用sed指令碼也快。採用下面的指令碼,請先看說明:
本指令碼已經放在了我的資源裡:http://download.csdn.net/detail/zhangerqing/5077211 沒有分的TX,微博、郵箱聯絡我啊!
2、設定虛擬機器裡的ip為初始環境的ip,需要修改虛擬機器的/etc/network/下的interfaces檔案,在裡面增加網卡對應的ip等資訊,我將interfaces檔案的內容改為:
3、修改/etc/postgresql下的所有ip,為新虛機的ip。
這樣,cloudfoundry就可以完全啟動了。但是,這樣手動更改了虛擬機器裡的ip會造成虛擬機器不能訪問網路。因此我們需要去vmware workstation裡修改資訊,使外網和內網映射好。在Edit->Virtual Network Settings裡面的NAT標籤裡設定成一致的就行了。此時,我們既可以正常啟動cloudfoundry,也可以訪問網路。
注意:
如果我們使用vmware player的話,是沒有辦法設定網路的,所以,上面的操作,需要使用workstation,我在操作的過程中還遇到一個問題,就是我開始用vmware player 9.0,所以當我將鏡像匯出後,在VMware Workstation 6.0 上無法開啟,只能進行鏡像轉換,這裡用到官方提供的一個工具:VMware vCenter Converter Standalone Client,將9.0的鏡像直接轉換成6.0的。
六、遠端存取
因為我們目前是將cloudfoundry安裝在虛擬機器裡的,虛擬機器裡是靜態ip,沒法通過SSH工具訪問,所以我們需要做連接埠重新導向,來保證大家都可以使用,具體步驟比較簡單:
Edit->Virtual Network Settings->NAT->Edit->Port Forwarding->Add一個就行了,輸入主機連接埠、虛機ip、虛機連接埠就行了。接下來就可以通過SSH工具訪問了。
(如果虛擬機器改成橋接模式,則無需重新導向,因為虛機裡也可以分配到動態IP,這樣的話,想讓cloudfoundry跑起來困難了,需要去修改很多地方的IP)