Развертывание приложения Ruby on Rails с помощью Capistrano

В этой статье мы настроим Capistrano в приложении Ruby on Rails. Затем мы развернем приложение в облаке, где в качестве операционной системы используется Ubuntu, независимо от вашего хостинг-провайдера. Вы можете использовать любой облачный сервис или даже локальный сервер для тестирования или повторения наших действий.

После развертывания приложения мы вкратце рассмотрим, как можно отслеживать развертывание приложения с помощью AppSignal.

Но сначала вы можете спросить: почему я должен использовать Capistrano?

Почему стоит выбрать Capistrano для вашего приложения на Ruby on Rails?

Вы можете задаться вопросом, имеет ли смысл продолжать использовать Capistrano для развертывания в наши дни. Сейчас у нас есть множество инструментов и сервисов для развертывания и непрерывной интеграции.

Но чтобы ответить на этот вопрос, нам нужно вернуться к истокам Capistrano и его эволюции до сегодняшнего дня. Первый тег, созданный в репозитории Capistrano, появился в 2006 году. Его целью было позволить выполнять команды удаленно через SSH параллельно на нескольких машинах, используя DSL. С тех пор Capistrano развивался, добавляя несколько функций в каждую версию.

В настоящее время, спустя 16 лет, Capistrano находится в версии 3, продолжает активно развиваться и теперь известен как фреймворк для создания сценариев автоматического развертывания.

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

Благодаря этому, а также тому, что большое сообщество до сих пор использует Capistrano, он остается отличным инструментом для автоматического развертывания.

Добавление Capistrano в ваше приложение Ruby on Rails

Сначала вам нужно настроить приложение Ruby on Rails, чтобы интегрировать его с Capistrano. Вы можете следовать документации Capistrano. Однако в ней содержится больше информации, чем вам нужно в рамках данной статьи. Поэтому для простоты эта статья включает только необходимые шаги и конфигурацию, которые вам понадобятся.

Чтобы начать настройку, добавьте гем Capistrano в раздел разработки вашего Gemfile:

group :development do
  # Deployment
  gem "capistrano", "~> 3.10", require: false
  gem "capistrano-rails", "~> 1.3", require: false
end
Войти в полноэкранный режим Выйти из полноэкранного режима

Гем capistrano-rails нужен для запуска миграции вашей базы данных и работы с активами, которые мы увидим в следующих разделах.

Теперь запустите bundle install, чтобы добавить Capistrano в ваше приложение:

bundle install
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Затем вы можете установить Capistrano:

bundle exec cap install
Войти в полноэкранный режим Выйти из полноэкранного режима

Эта команда создаст файл под названием Capfile, который импортирует и конфигурирует необходимые библиотеки. Кроме того, файл под названием deploy.rb (созданный внутри папки config) будет содержать все конфигурации, которые должны быть включены в развертывание с Capistrano.

Примечание: Capistrano создает файл, переопределяющий конфигурацию deploy.rb как для staging, так и для production окружения, но это не будет рассматриваться в данной статье.

После этого вы готовы приступить к настройке и взаимодействию между вашим приложением Ruby on Rails и сервером.

Конфигурация сервера с Capistrano для вашего Rails-приложения

В этом шаге мы добавим инструкции в файл конфигурации Capistrano. Эти инструкции будут сообщать вашему серверу, на котором будет развернуто ваше приложение. Здесь мы определим информацию о доступе и конфигурацию безопасности.

Чтобы убедиться, что в вашей производственной среде используется та же версия Ruby, что и в разработке, используйте менеджер версий Ruby, такой как RVM или rbenv (Capistrano поддерживает оба).

В этой статье мы будем использовать RVM. Убедитесь, что RVM установлен на вашей машине разработки и на рабочем сервере. Также проверьте, одинакова ли версия Ruby в вашем окружении и проекте.

Добавление гема capistrano-rvm

Проект Capistrano предоставляет гем под названием capistrano-gem, который позволяет вам легко настроить RVM. Чтобы включить его в свой проект, добавьте его в Gemfile вашей группы разработчиков и снова запустите bundle install.

gem "capistrano-rvm"
Вход в полноэкранный режим Выйдите из полноэкранного режима

Обновите ваш Capfile с помощью импорта capistrano-rvm:

# Capfile
require 'capistrano/rvm'
Войдите в полноэкранный режим Выйдите из полноэкранного режима

В файл deploy добавьте конфигурацию для установки версии Ruby и пути к RVM (особенно если вы использовали другой путь для установки RVM).

Если версия Ruby не определена, Capistrano выбирает последнюю версию, установленную на сервере, где будет развернуто ваше приложение.

# config/deploy.rb
set :rvm_ruby_version, "ruby-2.6.3"
set :default_env, { rvm_bin_path: "~/.rvm/bin" }
Войти в полноэкранный режим Выход из полноэкранного режима

Capistrano::RVM имеет и другие настройки для RVM, но приведенные здесь — это то, что вам понадобится для начала работы.

Настройка конфигурации сервера

Хорошей практикой является определение пользователя для развертывания. Не забудьте выполнить эти шаги на своем сервере перед началом развертывания:

  1. Добавьте открытый ключ, сгенерированный на вашей локальной машине, в файл ~/home/YOUR_USER/.ssh/authorized_keys.
  2. Создайте ключ и включите открытый ключ в репозиторий кода. Это даст вам доступ к клонированию вашего проекта на рабочем сервере. Если вы используете GitHub, вы можете следовать этой документации.
  3. Установите разрешения на запись в каталог /var/www/.

Вы можете настроить Capistrano для любой среды, которая вам необходима. Вам просто нужно создать новый файл конфигурации внутри config/deploy/<имя_среды>.rb, затем настроить IP или DNS, а также имя пользователя для подключения к вашему серверу.

# config/deploy/production.rb

server "11.22.333.444", user: "ubuntu", roles: %w{app db web}
Вход в полноэкранный режим Выход из полноэкранного режима

Чтобы завершить настройку развертывания, включите информацию о вашем приложении, такую как имя приложения и URL репозитория кода. Любая информация, одинаковая для всех сред, должна быть добавлена в config/deploy.rb. Сохраняйте конкретные конфигурации среды в config/deploy/<имя_среды>.rb.

# config/deploy.rb

set :application, "ruby_rails_app"
set :repo_url, "git@github.com:username/ruby_rails_app.git"
Вход в полноэкранный режим Выход из полноэкранного режима

Установка гема capistrano-secrets-yml для вашего Rails-приложения

Вам также необходимо установить гем capistrano-secrets-yml.

Добавьте гем в свой Gemfile и запустите пакет для установки:

# Gemfile
gem "capistrano-secrets-yml"
Войдите в полноэкранный режим Выйти из полноэкранного режима

Импортируйте его в Capfile:

# Capfile
require "capistrano/secrets_yml"
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем создайте config/secret.yml в вашем приложении и включите базу секретных ключей в качестве переменной окружения. Эта переменная будет создана на вашем рабочем сервере. Не забудьте не фиксировать этот файл в репозитории.

# config/secrets.yml
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Вход в полноэкранный режим Выход из полноэкранного режима

Внутри папки вашего приложения в терминале выполните эту команду для генерации базы секретных ключей:

$ rails secret
Войти в полноэкранный режим Выйти из полноэкранного режима

Скопируйте сгенерированный ключ и используйте его для установки SECRET_KEY_BASE на рабочем сервере. Зайдите на свой рабочий сервер и экспортируйте переменную SECRET_KEY_BASE в финальный файл ~/.bashrc, чтобы она всегда была доступна:

# ~/.bashrc
export SECRET_KEY_BASE="YOUR_SECRET_KEY_BASE"
Войти в полноэкранный режим Выйти из полноэкранного режима

Запустите исходный текст, чтобы он был мгновенно доступен в вашем окружении:

$ source ~/.bashrc
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь, вернувшись на свою машину, зайдите в папку приложения в терминале и выполните приведенную ниже команду Capistrano для создания config/secrets.yml на рабочем сервере:

$ cap production setup
Войти в полноэкранный режим Выйти из полноэкранного режима

Все готово! Теперь пришло время настроить Capistrano для выполнения миграции.

Настройка Capistrano для выполнения миграции базы данных

Теперь пришло время настроить Capistrano для выполнения команд, связанных с базой данных.

Гем capistrano-rails, уже включенный в ваш Gemfile, может быть настроен на выполнение миграции при каждом развертывании. Нам просто нужно импортировать его в Capfile:

# Capfile
require "capistrano/rails/migrations"
Войти в полноэкранный режим Выйти из полноэкранного режима

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

# config/deploy.rb

namespace :deploy do
  desc "Run seed"
  task :seed do
    on roles(:all) do
      within current_path do
        execute :bundle, :exec, 'rails', 'db:seed', 'RAILS_ENV=production'
      end
    end
  end

  after :migrating, :seed
end
Войти в полноэкранный режим Выйти из полноэкранного режима

После этого ваше приложение наконец-то готово к развертыванию!

Начало развертывания вашего приложения Ruby on Rails

Давайте посмотрим, как выполнить развертывание с нашей локальной машины, напрямую обновив наш сервер до новой версии нашего приложения.

Когда вы выполните команду развертывания, Capistrano подключится к вашему серверу. Оттуда Capistrano попытается клонировать код из репозитория, определенного в конфигурационном файле (config/deploy.rb). Затем будут выполняться другие задачи, следуя потоку развертывания.

Команда Capistrano deploy:check проверяет, что конфигурация Git в порядке и что Capistrano имеет правильный доступ к каталогам, которые будут использоваться в развертывании.

Чтобы использовать ее, передайте окружение. В данном случае мы используем production:

$ cap production deploy:check
Войти в полноэкранный режим Выйти из полноэкранного режима

Если с конфигурацией все в порядке, вы можете начать развертывание в production:

$ cap production deploy
Войти в полноэкранный режим Выйти из полноэкранного режима

Кроме того, вы можете проверить все доступные задачи в Capistrano с помощью команды:

$ cap --tasks
Enter fullscreen mode Выйти из полноэкранного режима

Теперь, на последнем этапе, давайте интегрируем наше Ruby on Rails приложение с AppSignal и начнем его мониторинг.

Как интегрировать AppSignal с Capistrano и вашим Rails-приложением

AppSignal — это инструмент мониторинга, поэтому вы можете задаться вопросом, почему он включен в эту статью. Это правильный вопрос, поскольку мониторинг не имеет прямого отношения к развертыванию.

Тем не менее, AppSignal является ценным инструментом, когда речь идет о мониторинге вашего приложения Ruby on Rails и отслеживании развертываний в каждой среде. Итак, давайте посмотрим, как мы можем настроить AppSignal для вашего приложения.

Вам понадобится учетная запись AppSignal, которую вы можете создать на странице регистрации AppSignal. Выберите Ruby в качестве языка и выполните шаги по установке AppSignal в ваше приложение.

После установки будет создан файл для настройки AppSignal. Здесь важно определить ревизию — информацию, которая будет проверяться после развертывания, чтобы узнать, была ли развернута новая версия приложения. В данном случае мы будем использовать журнал Git в качестве информации о ревизии, чтобы гарантировать, что каждое новое развертывание кода будет уведомлять AppSignal.

# config/appsignal.yml

production:
  <<: *defaults
  active: true
  revision: "<%= `git log --pretty=format:'%h' -n 1` %>"
Вход в полноэкранный режим Выход из полноэкранного режима

Также хорошей практикой является экспорт переменных окружения AppSignal на ваш рабочий сервер (особенно ключа API, чтобы не хранить его в конфигурационном файле AppSignal).

export APPSIGNAL_PUSH_API_KEY=XXX
Вход в полноэкранный режим Выход из полноэкранного режима

И теперь мы можем повторно запустить развертывание. Если все настроено правильно, в конце развертывания вы увидите сообщение, подобное этому:

Notifying AppSignal of deploy with: revision: ee5e626fd31613ef068873f9cddb5f8c91538396, user: monteirobrena
AppSignal has been notified of this deploy!
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь вы сможете увидеть ваше приложение в AppSignal! 🎉

И информацию о всех развертываниях:

Посетите страницу документации AppSignal по развертыванию, чтобы узнать больше об интеграции развертывания и других возможностях, доступных для приложений Ruby on Rails.

Подведение итогов и следующие шаги

В этом посте мы рассмотрели, как использовать Capistrano для развертывания приложения Ruby on Rails. Сначала мы добавили Capistrano в приложение, затем настроили и развернули его, после чего настроили мониторинг с помощью AppSignal.

Если вы хотите исследовать дальше, вы можете настроить Capistrano на запуск из интеграции, подключенной к конвейеру вашего хранилища. Такие инструменты, как Bitbucket, GitHub и GitLab, предоставляют настройки для управления этим процессом и могут использоваться совместно с Capistrano.

Счастливого кодинга!

P.S. Если вы хотите читать посты Ruby Magic, как только они выходят из печати, подпишитесь на нашу рассылку Ruby Magic и не пропустите ни одного поста!

Оцените статью
devanswers.ru
Добавить комментарий