单节点部署CloudFoundry方法
一、环境需求
官方系统环境要求:
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)