Это вторая часть моего руководства о том, как самостоятельно администрировать Redmine в долгосрочной перспективе. Первая часть была посвящена управлению собственной версией Redmine с помощью Git (ссылка на перевод). Имея собственный репозиторий Redmine, пришло время ... Серьезно. Не пытайтесь развернуть старомодным способом, копируя всё вручную. Автоматизация развертывания — это однократное вложение, окупающееся сэкономленным временем и усилиями каждый раз, когда нужно (ну, или приходится) обновить Redmine. Цель автоматизации — сделать последующие развертывания максимально легкими. Даже самое незначительное исправление или улучшение может быть выполнено мгновенно, потому что автоматизированная процедура обновления быстра, надежна и может быть запущена одной командой. Я прошу вас научиться тому, как «профи» (то есть люди, которые зарабатывают на жизнь тем, что разрабатывают и запускают Rails-приложения, развертывают свои системы. И неважно, кто вы — локальный администратор сервера или разработчик Python, которому поручено поддерживать Redmine в организации. За прошедшие годы много умных людей потратили кучу времени на разработку набора инструментов, который после установки одним легким нажатием клавиши сокращает время простоя Rails-приложений до нуля. Такие инструменты существуют, ими просто нужно воспользоваться. И вполне возможно, вы узнаете пару новых фокусов, которые пригодятся вне контекста Redmine. Capistrano — удаленный многосерверный инструмент автоматизации — идеальный выбор, когда дело доходит до автоматизации развертывания. Он внедрен в Ruby, но не ограничен развертыванием Ruby- или Rails-приложений. С помощью Capistrano реально автоматизировать все действия, производящиеся в SSH. И это можно осуществить на любом количестве серверов параллельно. Как Chef предназначен для развертывания серверов, Capistrano предназначен для развертывания систем, но им гораздо проще пользоваться. Я привожу очень краткое введение в специфику Redmine, прочитать подробнее можно на capistranorb.com. Readme для этого — хорошая отправная точка. В ветке Redmine local/x.y-stable создайте файл с именем Gemfile.local. Это позволит удержать любые gems локальными по отношению к частной установке Redmine. Gemfile.local После создания этого файла запустите команду bundle install и добавьте/зафиксируйте как файл Gemfile.local, так и появившийся Gemfile.lock. Теперь запустите команду bundle exec cap install чтобы настроить Capistrano. Это добавит несколько новых файлов: config/deploy.rb и два файла в каталоге config/deploy/, которые соответствуют двум целевым установкам (или "stages" — "стадиям") по умолчанию. Если у вас есть отдельная установка Redmine для тестирования, например, новых плагинов, то это будет ваша "staging target", в то время как живая (рабочая) stage — это производство. Основная идея состоит в том, что всё общее идет в deploy.rb, а отличающееся для разных stage— в соответствующие файлы в каталоге config/deploy. Чаще всего здесь указывается только целевой хост и, возможно, настраивается другая ветвь git или имя пользователя для развертывания. Вот как может выглядеть минимальная конфигурация Capistrano: config/deploy.rb Остается только настроить сервер, на который вы собираетесь развертывать, пользователя Capistrano для входа на этот сервер и ветвь для развертывания: config/deploy/production.rb Если вы используете одну и ту же машину для тестирования и производства, просто перенесите параметр deploy_to в файлы конфигурации stage, чтобы иметь возможность установить отдельный каталог для каждого stage. Не забудьте добавить и зафиксировать Gemfile.local, Gemfile.lock и конфигурацию Capistrano, которую вы только что настроили. Эти файлы — часть кастомного Redmine и должны быть сохранены вместе с ним в системе управления версиями. Если вы используете подмодули Git для добавления плагинов или тем для Redmine, обратите внимание на стратегию субмодулей Git для Capistrano, чтобы автоматически разворачивать и их. Capistrano использует SSH и полагается на правильно настроенную аутентификацию на основе ключей. Это также очень удобно при использовании какого-либо агента SSH или перенаправления агентов для доступа к репозиторию git через сервер развертывания со своим локальным ключом. Обязательно прочтите главу «Аутентификация и авторизация» в руководстве по Capistrano. Теперь, когда всё на месте, пришло время для первого развертывания: Если вы настроили все правильно, эта команда совершит развертывание Redmine за вас. Обычно неудачи случаются из-за проблем с разрешениями или аутентификацией, но в большинстве случаев их легко исправить. CEO в Southbridge