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

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

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

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

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

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

现在可以写程序咯~在Chef Repository下面的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服务器才行呢。

(未完待续)

blog comments powered by Disqus