Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

云计算之美[从菜鸟到高手演练]系列之单节点部署cloudfoundry

$
0
0

单节点部署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自带安装脚本,我们只需要执行就行了,先安装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下的很多文件中,都将ip直接写在文件里。

解决办法:

1、修改上述文件夹里的所有需要修改的文件,这个比较费工夫,不过用sed脚本也快。

2、设置虚拟机里的ip为初始环境的ip,需要修改虚拟机的/etc/network/下的interfaces文件,在里面增加网卡对应的ip等信息,我将interfaces文件的内容改为:

这样,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)


作者:zhangerqing 发表于2013-1-15 21:28:23 原文链接
阅读:35 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>