(R)?ex 部署 & 配置管理框架

搜索

新闻

2016-03-07
(R)?ex 1.4.0 发布, 包含大量更新. 详情 发布文档.
2015-09-04
(R)?ex 1.3.3 released, fixing a bunch of bugs. See the release notes for more details.
2015-06-22
adjust GmbH is sponsoring the (R)?ex project with a new build server. Thank you for your support!
2015-06-17
(R)?ex 1.3.2 released, fixing issues related to file manipulation when run on BSDs. See the release notes for more details.
2015-06-09
Read the second part of "Rex in practice" series about Test-driven infrastructure.
2015-05-09
repositor.io 1.1.0 released. repositor.io is a repository management tool for apt, yum, yast and docker. This is a bugfix release with fixes for ubuntu and centos7 installation media mirroring.
2015-03-27
阅读 Andy Beverley 带来的演讲文稿 An introduction to Rex

会议

2015-05-07
German Perl Workshop 上做 Infrastructure as Code (ger) 的演讲。

培训

2015-11-30/2015-12-01 (Karlsruhe)

需要帮助吗?

Rex 是一个开源的项目,所以你可以找到社区的支持,连接如下:

  • IRC: #rex on freenode
  • 邮件组: rex-users
  • 问题列表: Github
  • 特性需求: 你需要什么 特性?
  • 商务支持: inovex
  • QQ群: 252744726

Professional support is also available.

如何开始使用 (R)?ex

(R)?ex 开始第一步 参考

基础架构

(R)?ex 是一个不需要在受控主机运行客户端的服务器流程工具。它采用 ssh 方式来执行指定的命令。

开始使用 (R)?ex 并不需要 Perl 基础。(R)?ex 提供了简单的 DSL 来描述你的服务器。甚至,你可以在你的 shell 脚本里使用 (R)?ex,完全不需要使用 perl。

当然,如果你稍微懂 一点点 perl,就更好了。

每个 (R)?ex 项目的起始点都是一个叫做 Rexfile 的文件。你可以理解他类似 Makefile。在这个文件里你定义各种任务。

一个 任务 是相关的命令的集合。比如安装一个软件包,上传配置文件,然后启动服务。你也可以在任务中调用其他任务,或者创建 rollback szenarios 来回滚执行出错的任务。

要求

运行 (R)?ex 不要太多预备。

一台中心机器

你会从自己的工作电脑或一台单独的中心机器上运行 (R)?ex。

你的中心 (R)?ex 机器上需要至少有个 Perl 5.8。最好是能有 Perl 5.10.1 以上的版本。

机器上还需要安装一些 Perl 模块。你可以通过自己发行版的仓库,或者我们的 (R)?ex 仓库来安装这些模块:

  • Net::SSH2
  • YAML
  • LWP
  • DBI(如果你想要数据库访问的话)
  • JSON::XS(如果你想要使用Jiffybox云主机的话)
  • XML::Simple(如果你想要用 FusionInventory 来采集系统信息,亚马逊云以及一些虚拟化命令的话)
  • String::Escape (如果你想在 ini 文件里定义服务器组的话)

受控端主机

受控端上只需要一个 Perl5 解释器和一个可用的 SSH 账户。

在远端主机上,Rex 不会尝试使用任何非核心的 Perl 模块,不过有些发行版(比如 RHEL/CentOS 7, Fedora 21)可能默认并不带。这样你得先自己提前安装好(目前来说,我们指的是 Digest::MD5 模块)。

如果要做一些管理任务,你可能需要 root 或者 sudo 权限。

准备

Linux 服务器上你可以通过很简单的单行命令安装 (R)?ex。其他系统上的做法请阅读 获取 Rex 页。

$ curl -L https://get.rexify.org | perl - --sudo -n Rex

这个命令会在你系统上安装好 Rex,不过你需要先安装好 libssh2 的开发包。

我们建议使用 里已有的包。

创建一个Rexfile

第一步我们需要创建一个新目录来存储你的 Rexfile 文件。

$ mkdir -p projects/my-first-rex-project

Now change into this directory and create a file called Rexfile with the following contents:

use Rex -feature => ['1.0'];

user "my-user";
password "my-password";

group myservers => "mywebserver", "mymailserver", "myfileserver";

desc "Get the uptime of all servers";
task "uptime", group => "myservers", sub {
   my $output = run "uptime";
   say $output;
};

这个例子将会用用户 my-user 和密码 my-password 登陆 myserver 服务器组里的所有机器,然后执行uptime 命令。

第一行这个特殊的 use Rex -feature => ['1.0']; 看起 v1.0 版所有可用的特性。如果想要了解关于特性标识更多细节,请阅读 该页

进入到你创建的 Rexfile目录下 (在终端中).

$ cd projects/my-first-rex-project

$ rex uptime

添加第二task

添加第二个task,只需要在Rexfile下一行添加如下.

desc "Start Apache Service";
task "start_apache", group => "myservers", sub {
    service "apache2" => "start";
};

这个task 将开启在 myservers组里的所有服务器的 apache2 .

显示所有的Rexfile 文件中的task

显示所有的Rexfile 文件中的task 可以这样做.

$ rex -T
Tasks
  start_apache                   Start Apache Service
  uptime                         Get the uptime of all servers
Server Groups
  myservers                       mywebserver, mymailserver, myfileserver

认证

前面的示例中我们演示了怎么通过用户名密码登录。其实也可以用密钥认证。

使用密钥认证只需要在 Rexfile 里定义你的公钥和私钥即可。

user "my-user";
private_key "/home/user/.ssh/id_rsa";
public_key "/home/user/.ssh/id_rsa.pub";
key_auth;

同样还可以使用带密码的密钥。修改 Rexfile 成这样:

user "my-user";
private_key "/home/user/.ssh/id_rsa";
public_key "/home/user/.ssh/id_rsa.pub";
password "key-passphrase";
key_auth;

如果你不想把自己的密钥密码写进 Rexfile 里,你也可以用 ssh-agent。(R)?ex 会自动在运行时候使用它,只需要删除掉那行 key_auth; 就行。

管理服务

如果你要管理服务,你经常要上传配置文件,注册服务到启动运行清单。

本例中,你会学到如何安装和配置 ntp 服务。你可以很容易的迁移这个例子到其他服务的配置上。

# Rexfile
use Rex -feature => ['1.0'];

user "root";
private_key "/root/.ssh/id_rsa";
public_key "/root/.ssh/id_rsa.pub";

group all_servers => "srv[001..150]";

task "setup_ntp", group => "all_servers", sub {

   # 首先安装软件包
   pkg "ntpd",
     ensure => "present";

   # 然后上传配置文件,文件位于 files/etc 子目录下
   file "/etc/ntp.conf",
      source    => "files/etc/ntp.conf",
      on_change => sub {
         # 定义一个 on_change 钩子,这样在文件有修改的时候 ntpd 服务自动重启
         service ntpd => "restart";
      };

   # 现在注册服务到主机启动的服务清单里
   service "ntpd",
     ensure => "started";
};

全部搞定。

这个任务可以在你的服务器上安装 ntpd,上传配置文件,启动服务。

你不用担心命令的顺序问题,(R)?ex 会从上到下的执行你的命令。

关于模块和模板的使用,请阅读 这个 howto

comments powered by Disqus
Fork me on GitHub
Google Group / Twitter / GitHub / Mailinglist / irc.freenode.net #rex   -.ô.-   Disclaimer

D