Starting with Rex

Tags:

В жизни каждого человека настает момент когда ему становится лениво делать одно и то же на удаленных серверах и хочется автоматизации.

В решении этой тяжелой жизненной проблемы нам поможет R(?)ex.

Небольшой F.A.Q

Что это?

Это приложение для управления удаленными(и не очень) серверами и приложениями.

Я могу просто написать bash/perl/pithon/ruby/etc-скрипт и он сделает то же самое.

Несомненно, но это будет очередное изобретение велосипеда с колесами разной степеньи квадратности.

Почему не Puppet/Ansible?

Потому что здесь про Perl, но сравнение Rex и Ansible я еще сделаю.

Поехали

Во первых, Rex можно использовать для простого запуска команд на удаленном сервере:

rex -H "example.com example.ru" -e "say run 'uptime'"

Задачи выполняются последовательно, так что придется подождать пока опросятся все сервера, особенно если их много.

Запуск из консоли это вариант если надо что-то и единоразово посмотреть что там на серверах творится. Но постоянно набирать команды в консоли это решение для сильных духом и памятью. Мы же как, настоящие программисты, будем осваивать командные файлы.

По умолчанию Rex использует файл под названием Rexfile (удивительное совпадение).

Попробуем сделать что-то полезное.

Создадим Rexfile который будет содержать команду deploy. По этой команде Rex пойдет на удаленный сервер и сделает там git pull для сайта. Простейшний вариант деплоя.

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

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

 group myservers => "example.ru";

 desc "Deploy the blog on example.ru";
 task "deploy", group => "myservers", sub {
   run "cd /srv/www/example.ru && git pull origin gh-pages";
 };

Теперь можно сказать: rex deploy

Дальше Rex залогинится под пользователем "myuser" с использованием указанных ключей и выполнит команду указанную в опции run. Если пользователь на удаленном сервер совпадает с текущим - то первую секцию можно опустить. Будет использоваться текущий пользователь и его настройки ключей для ssh. Но если планируется использование команды через cron - то указывать надо обязательно, иначе ничего работать не будет.

Так же можно обновлять конфигурацию копируя на хосты необходимые файлы (вы же не храните авторизационные данные в Git, правда?) приведем содержимое раздела task к виду:

 run "cd /srv/www/example.ru && git pull origin gh-pages";
 file "/srv/www/example.ru/test.conf",
     source    => "files/test.conf";

Теперь при выполнении rex deploy будет выполнен pull из репозитория на удаленном сервере, а затем туда будет скопирован файл files/test.conf.

В принципе, этого совершенно достаточно для деплоя простого сайта не требующего перезапуска сервисов. Таким скриптом деплоится этот блог. Пошаговый мануал о том, как сделать настройку сервера с нуля до продакшена одной командой будет в следующей статье.

А те кому не хочется ждать - могут почитать официальную документацию, она весьма подробная и с хорошими примерами.

Comments

Яндекс.Метрика