Настройка и деплой Sidekiq 6.0.0 при помощи Capistrano

Сначала думал дополнить предыдущую статью по деплою ассетов, но в итоге решил вынести этот пункт отдельно.

Дело в том, что помимо компиляции ассетов я столкнулся с проблемой деплоя Sidekiq для фоновых задач в с своём рельсовом приложении.

Проблема capistrano/sidekiq

Для капистрано есть гем, который запускает весь процесс из коробки (capistrano/sidekiq), но у него поломана совместимость с sidekiq версии 6. Он работает только для версии 5, а тот пулл-реквест, который фиксит баг до сих пор не принят. Есть отдельный форк этого гема (который вроде как решает проблему), но видимо я слишком туп, чтобы он у меня заработал.

Изучая документацию Sidekiq в части деплоя, я выяснил, что можно воспользоваться системной утилитой управления сервисами: systemd

И для меня это был выход, потому что Redis (который работает в связке с Sidekiq и уже должен быть установлен у вас на сервере) запускается / останавливается / рестартуеся при помощи этой утилиты (и я хочу сказать, что это очень удобно).

Ниже я описал, что нужно сделать, чтобы и на вашем сервере работал Sidekiq тоже.

Настройка systemd

Для начала вам нужно настроить конфиг для работы Sidekiq на вашем сервере.

  1. Заходим на сервер и создаем файл конфига:
sudo nano /lib/systemd/system/sidekiq.service

Вот ссылка на конфиг: https://gist.github.com/mkhuda/132787f9d54890a183d665eb4560f196

Несмотря на то, что он написан для Ubuntu 16, он прекрасно работает и на Ubuntu 18.04. Но его конечно нужно будет немного поправить.

Помещаем данные конфига в файл sidekiq.service и кое-что редактируем.

  1. Заменяем эти данные на свои:
User=deploy # Название пользователя, под которым вы заходите на сервер для деплоя
Group=deploy # Дублируем его же

WorkingDirectory=/home/deploy/my_app/current # Сюда вводим путь, где лежит текущая версия вашего приложения

ExecStart=/home/deploy/.rbenv/shims/bundle exec sidekiq -e production # Запускаем sidekiq используя rbenv

-C config/sidekiq.yml # Добавить к последней команде, чтобы подтянуть настройки
  1. Перезагружаем systemctl, чтобы новые настройки успешно подхватили:
sudo systemctl daemon-reload
  1. Включаем sidekiq:
sudo systemctl enable sidekiq
  1. Теперь мы можем его стартовать/останавливать/рестартовать/проверять текущий статус:
sudo systemctl start|stop|restart|status sidekiq

Таск для Capistrano

  1. В config/deploy нужно добавить следующую таску, которая каждый раз после деплоя будет рестартовать sidekiq:
after :deploy, "deploy:sidekiq_restart"

namespace :deploy do
  desc 'Sidekiq restart'
  task :sidekiq_restart do
    on roles(:app) do
      execute :sudo, :systemctl, :restart, :sidekiq
    end
  end
end
  1. Чтобы наша таска корректно отработала, нужно дать ей доступ на сервере:
sudo visudo # Находясь на сервере, введите эту команду

%deploy ALL=NOPASSWD:/bin/systemctl restart sidekiq # Введите в самому внизу файла, это команду, сохраните изменения
  1. Всё. Комитим изменения, пушим в репозиторий и запускаем деплой:
cap production deploy

После чего заходим на сервер и проверяем работоспособность сайдика:

sudo systemctl status sidekiq

Status должен быть «active». Обратите внимание на время, когда был совершен последний запуск:

Active: active (running) since Wed 2020-03-11 19:19:07 UTC; 6s ago

Как видите всё работает. Теперь можете гонять свои фоновые задачи в хвост и в гриву)

Поделиться
Отправить
Популярное