- PVSM.RU - https://www.pvsm.ru -
Это вторая часть моего руководства о том, как самостоятельно администрировать Redmine в долгосрочной перспективе. Первая часть была посвящена управлению собственной версией Redmine с помощью Git [1] (ссылка на перевод).
Имея собственный репозиторий Redmine, пришло время ...
Серьезно. Не пытайтесь развернуть старомодным способом, копируя всё вручную.
Автоматизация развертывания — это однократное вложение, окупающееся сэкономленным временем и усилиями каждый раз, когда нужно (ну, или приходится) обновить Redmine. Цель автоматизации — сделать последующие развертывания максимально легкими. Даже самое незначительное исправление или улучшение может быть выполнено мгновенно, потому что автоматизированная процедура обновления быстра, надежна и может быть запущена одной командой.
Я прошу вас научиться тому, как «профи» (то есть люди, которые зарабатывают на жизнь тем, что разрабатывают и запускают Rails-приложения, развертывают свои системы. И неважно, кто вы — локальный администратор сервера или разработчик Python, которому поручено поддерживать Redmine в организации. За прошедшие годы много умных людей потратили кучу времени на разработку набора инструментов, который после установки одним легким нажатием клавиши сокращает время простоя Rails-приложений до нуля. Такие инструменты существуют, ими просто нужно воспользоваться. И вполне возможно, вы узнаете пару новых фокусов, которые пригодятся вне контекста Redmine.
Capistrano [2] — удаленный многосерверный инструмент автоматизации — идеальный выбор, когда дело доходит до автоматизации развертывания. Он внедрен в Ruby, но не ограничен развертыванием Ruby- или Rails-приложений. С помощью Capistrano реально автоматизировать все действия, производящиеся в SSH. И это можно осуществить на любом количестве серверов параллельно. Как Chef предназначен для развертывания серверов, Capistrano предназначен для развертывания систем, но им гораздо проще пользоваться.
Я привожу очень краткое введение в специфику Redmine, прочитать подробнее можно на capistranorb.com [3]. Readme [4] для этого — хорошая отправная точка.
В ветке Redmine local/x.y-stable
создайте файл с именем Gemfile.local
. Это позволит удержать любые gems локальными по отношению к частной установке Redmine.
Gemfile.local
group :development do
# uncomment if you're using modern (and secure!) ed25519 ssh keys
# gem 'net-ssh', '4.0.0.alpha2'
gem 'capistrano', '~> 3.4.0'
gem 'capistrano-rails', require: false
end
После создания этого файла запустите команду 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
# config valid only for current version of Capistrano
lock '3.4.0'
set :application, 'redmine'
set :scm, :git
set :repo_url, 'git@code.yourcompany.com:redmine.git'
# Target directory in the server.
# Should exist and the user account you're using for deployment should
# have write access.
set :deploy_to, '/srv/webapps/redmine'
set :pty, true
set :log_level, :info
# Linked files are expected to exist below /srv/webapps/redmine/shared and will be
# symlinked into the deployed # code. Create them either manually or through an
# automation tool like chef. The reason for doing so is to not keep database
# credentials and server secrets in your git repository.
set :linked_files, fetch(:linked_files, []).push('config/database.yml',
'config/secrets.yml')
# Directories with contents you want to keep across deployments are declared here.
# Most important is files where Redmine stores any uploaded files.
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp',
'vendor/bundle', 'files')
# keep the last 5 deployed versions on the server.
# Useful in case you have to revert to an older version.
set :keep_releases, 5
namespace :deploy do
# Declares a task to be executed once the new code is on the server.
after :updated, :plugin_assets do
on roles(:app) do
within release_path do
with rails_env: fetch(:rails_env) do
# Copy over plugin assets
execute :rake, 'redmine:plugins:assets'
# Run plugin migrations
execute :rake, 'redmine:plugins:migrate'
end
end
end
end
# This will run after the deployment finished and is used to reload
# the application. You most probably have to change that depending on
# your server setup.
after :published, :restart do
on roles(:app) do
sudo "/etc/init.d/unicorn reload redmine"
end
end
# cleans up old versions on the server (keeping the number of releases
# configured above)
after :finished, 'deploy:cleanup'
end
Остается только настроить сервер, на который вы собираетесь развертывать, пользователя Capistrano для входа на этот сервер и ветвь для развертывания:
config/deploy/production.rb
set :branch, 'local/3.2-stable'
server 'redmine.yourcompany.com', user: 'deploy', roles: %w{web app db}
Если вы используете одну и ту же машину для тестирования и производства, просто перенесите параметр deploy_to
в файлы конфигурации stage, чтобы иметь возможность установить отдельный каталог для каждого stage. Не забудьте добавить и зафиксировать Gemfile.local, Gemfile.lock и конфигурацию Capistrano, которую вы только что настроили. Эти файлы — часть кастомного Redmine и должны быть сохранены вместе с ним в системе управления версиями.
Если вы используете подмодули Git для добавления плагинов или тем для Redmine, обратите внимание на стратегию субмодулей Git для Capistrano [5], чтобы автоматически разворачивать и их.
Capistrano использует SSH и полагается на правильно настроенную аутентификацию на основе ключей. Это также очень удобно при использовании какого-либо агента SSH или перенаправления агентов для доступа к репозиторию git через сервер развертывания со своим локальным ключом.
Обязательно прочтите главу «Аутентификация и авторизация» [6] в руководстве по Capistrano.
Теперь, когда всё на месте, пришло время для первого развертывания:
$ bundle exec cap production deploy
Если вы настроили все правильно, эта команда совершит развертывание Redmine за вас. Обычно неудачи случаются из-за проблем с разрешениями или аутентификацией, но в большинстве случаев их легко исправить.
Автор: Southbridge
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ruby/257205
Ссылки в тексте:
[1] управлению собственной версией Redmine с помощью Git: https://habrahabr.ru/company/southbridge/blog/329872/
[2] Capistrano: http://www.capistranorb.com/
[3] capistranorb.com: http://capistranorb.com/
[4] Readme: https://github.com/capistrano/capistrano/blob/master/README.md
[5] стратегию субмодулей Git для Capistrano: https://github.com/ekho/capistrano-git-submodule-strategy
[6] «Аутентификация и авторизация»: http://capistranorb.com/documentation/getting-started/authentication-and-authorisation/
[7] Deploying Redmine with Capistrano: https://jkraemer.net/2016/04/deploying-redmine-with-capistrano
[8] Deploy and maintain Redmine the right way: https://jkraemer.net/2016/03/deploy-and-maintain-redmine-the-right-way
[9] Источник: https://habrahabr.ru/post/330210/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.