透明思考


Transparent Thoughts


Chef学习手记之贰:基本套餐

现在我要配置一台体面的Rails服务器。也许我会用它来跑1.HourFor.me

要配置一台Rails服务器,首先要有一台服务器。于是我到EC2搞了一台服务器。EC2之于DevOps就像SourceForge之于轻量级J2EE:它让你有机会去尝试那些原来只有在超级大企业里才会出现的东西。你可以在自己家里、在业余时间积累经验,而且不花多少钱。我装了一台Fedora8的机器。

学习手记之壹里我说需要有一个Chef服务器。其实Chef有三种运行的方式:你自己装Chef服务器;压根不要Chef服务器(叫Chef Solo);或者用OpsCode做你的Chef服务器。第三种方式蛮好,又不用自己多架台服务器,又可以在世界任何地方共享我的大餐。所以我就要这样做。

首先要在OpsCode注册,并创建一个组织(organization)。这部分蛮简单,照着网站的指示一步步做就行了。我创建了一个叫“thoughtworkers”的组织。创建组织的时候小心,有免费的plan可以用的。我现在还不需要收费plan那么强的功能。

紧跟着要搞定开发环境。我要在自己的机器上建一个Chef Repository,配置与Chef服务器连接的身份认证信息。基本上,按照这个文档来操作就可以了。

接下来要在EC2那台Fedora机器上安装Chef客户端。这也蛮简单,也有一个文档。其实关键就是要把RubyGems升级到1.3.7以上,然后就可以“gem installchef”啦。装好之后执行一下“chef-client”,应该会报错,需要从本地环境拷贝/etc/chef下面的client.rb和validation.pem去Fedora机器上。

现在可以写程序咯~在ChefRepository下面的roles目录里建一个base.json文件。先不管是Rails服务器还是Django服务器,我的体面服务器必须满足一些基本条件,比如有GCC啦,有Git啦,之类的。所以我在base.json里这样描述我的体面服务器:

{“name”: “base”,”default_attributes”: {“chef”: {“server_url”: “https://api.opscode.com/organizations/thoughtworkers","cache_path“: “/var/chef/cache”,”backup_path”: “/var/chef/backup”,”validation_client_name”: “thoughtworkers-validator”,”run_path”: “/var/chef”}},”json_class”: “Chef::Role”,”run_list”: [“recipe[build-essential::default]”,”recipe[openssl::default]”,”recipe[chef::client]”,”recipe[chef::delete_validation]”,”recipe[git::default]”],”description”: “Basic Server”,”chef_type”: “role”,”override_attributes”: {}}

然后涅…那台Fedora机器咋知道它自己应该有“base”这个角色呢?当然答案是它不知道。我得告诉它。Knife是Chef的便利命令行工具。比如说,可以列出所有可管的节点(必须在Chef Repository目录下):

$ knife node list# 下面是输出回显[“ip-10-130-9-17.ap-southeast-1.compute.internal”,”jeffxiong3650”]

有两台机器。下面这个是我自己的笔记本电脑,上面那个名字很长的就是在EC2的Fedora。我要让它知道,自己有“base”这个角色要扮演:

$ knife node run_list add \ip-10-130-9-17.ap-southeast-1.compute.internal “role[base]”# 下面是输出回显{“run_list”: [“role[base]”]}

好乖~现在ssh登录到Fedora上去,执行一把“chef-client”…体面的服务器就这样装好啦~试试git,没问题的说~嗯嗯,当然这只是第一步。接下来要配置好体面的Rails服务器才行呢。

(未完待续)