Если ваш проект успешен, количество хитов в сутки изменяется сотнями тысяч, то рано или поздно вам придется раскошелиться на 2 и более сервера. Проект разрастается, у него появляются все новые и новые возможности, а изменения кода приходится переносить на все большее количество серверов. Гораздо удобнее, если бы можно было перенести изменения на все сервера одной командой, не так ли? Развертывание приложения на новых серверах так же влечет за собой много операций и требует автоматизации. Инструмент, который будет описан в данной статье позволяет выполнять любую команду или скрипт сразу на нескольких серверах и помогает быстро развертывать web-приложения. Этот инструмент называется Capistrano.
Capistrano - это инструмент для автоматизации выполнения заданий на одном или более удаленных серверах. Программа выполняет команды параллельно на всех машинах и имеет механизм для отката изменений. Это идеальное решение для любого системного администратора (профессионала или любителя).

Для того, чтобы его использовать вам необходимо выполнение следующих условий.

  • У вас есть ssh-доступ к удаленным машинам. Telnet и FTP не поддерживаются.
  • Удаленные серверы имеют инсталлированный POSIX-совместимый shell. Он должен вызваться командой sh и быть расположен в системной папке по умолчанию.
  • Если вы используете пароли для доступа к серверам, то все они должны иметь одинаковый пароль. Но так как это не очень хорошо с точки зрения безопасности, то лучше если вы реализуете доступ с помощью публичного ключа. Убедитесь что вы выбрали хорошую фразу для вашего ключа.

Как работает Capistrano? Программа читает инструкции из cap-файлов и выполняет их. Cap-файлы содержат информацию о том, на каких серверах и какие команды надо выполнить с помощью Capistrano. По существу это Ruby-скрипт, который дополнен большим набором инсрукций для облегчения указания серверов и заданий. Cap-файл должен быть назван как “Capfile” или “capfile” без суффикса. Файл может быть расположен в любом месте, но лучше использовать для этого домашнюю директорию.

Рассмотрим простое задание для Capistrano

task :search_libs, :hosts => "www.capify.org" do
  run "ls -x1 /usr/lib | grep -i xml"
end

Этот код определяет задание с именем “search_libs”, который должен быть выполнен на “www.capify.org”. Задание при выполнении будет выводить все файлы и поддиректории для  /usr/lib, которые содержат текст “xml” в их именах. По умолчанию команда “run” будет отображать весь вывод в консоли.

Если ваш Capfile находится в текущей директории, то вы можете выполнить это задание так:

$ cap search_libs

В одном таком файле можно определить несколько таких заданий.

Можно так же сервер указать 1 раз. А в самих заданиях опустить сервер.

role :libs, "www.capify.org", "mail.capify.org"
 
task :search_libs do
  run "ls -x1 /usr/lib | grep -i xml"
end
 
task :count_libs do
  run "ls -x1 /usr/lib | wc -l"
end

Такие задания будут выполняться на всех серверах, которые вы определили в начале файла.

Здесь вы можете видеть указание роли libs. Вы можете указать несколько ролей, а затем в отдельных заданиях указывать роль, для которой хотите выполнить задание.

role :libs, "crimson.capify.org", "magenta.capify.org"
role :files, "fuchsia.capify.org"
 
task :search_libs, :roles => :libs do
  run "ls -x1 /usr/lib | grep -i xml"
end
 
task :count_libs, :roles => :libs do
  run "ls -x1 /usr/lib | wc -l"
end
 
task :show_free_space, :roles => :files do
  run "df -h /"
end

Роль будет определять набор серверов, для которых выполняется задание.

Список заданий можно увидеть с помощью такой команды

$ cap -T

Для выполнения простой разовой задачи есть команда invoke

$ cap invoke COMMAND="echo 'Hello World'"
$ cap  invoke COMMAND="top"  HOSTS=server.name.ru

Capistrano может обращаться к серверам как напрямую так и через ssh-туннель

set :gateway, "www.capify.org"
role :libs, "private.capify.org"

gateway - указывает имя сервера, который используется для реализации туннеля

Capistrano поддерживает пространство имен для группирования задач по областям. Например, deploy и web.

Вот вкратце основные принципы работы с Capistrano. На официальном сайте вы найдете полную документацию а так же инструкции по созданию собственных скриптов развертывания web-приложений.
Подпишитесь на email-рассылку или rss-ленту, чтобы не пропустить новых интересных статей. Если вы считаете что есть интересная тема для статей - пишите мне через форму обратной связи.

Tags:

Comments are closed.