Назад | Перейти на главную страницу

Современное развертывание приложений Rails с помощью git

Я хочу сгруппировать информацию о текущих передовых методах развертывания приложения Rails на сервере, который я запускаю (а не, скажем, Heroku). Приложение разрабатывается несколькими людьми, и у всех есть разрешение на его развертывание. Приложение будет работать на сервере, на котором может быть более одного приложения.

Теперь у меня есть некоторые сомнения:

  • Nginx / unicorn (Passenger - это больше проблем, чем он того стоит, особенно когда вы имеете дело с несколькими версиями Ruby). Единороги под управлением daemontools / Аллах, потому что бог шуршит моими джимми.
  • rbenv, а не RVM (rbenv разработан, чтобы делать что-то одно, и делать это хорошо, а не подход RVM «делать половину работы всего за болезненную»)
  • Пользователь для каждого приложения с ключами SSH для каждого разработчика, который имеет право управлять каждым отдельным приложением.
    • Вы можете запустить само приложение как отдельный пользователь и использовать списки управления доступом, чтобы разрешить доступ только к тем частям файловой системы, которые необходимы приложению; этот пользователь приложения не должен разрешать вход в систему. Я лично считаю это излишним, но это возможно, если вы хотите иметь немного постепенного разделения.
  • Capistrano - еще один инструмент "болезненной половинки всего"; Я рекомендую Легкомысленный до, хотя это может быть потому, что это я написал.

Я написал электронную книгу о более или менее точно такой же настройке, которая бесплатна для людей из моего списка рассылки.

Он охватывает настройку сервера с nginx, Unicorn, MySQL и rbenv с нуля и развертывание (и обновление) образца приложения Rails, чтобы помочь вам понять, как этот процесс работает под капотом.

Если вы думаете, что это что-то для вас, вы можете это получить Вот.

Обновить: Прошло довольно много времени с тех пор, как я написал этот комментарий. С тех пор я выпустил Эффективный Rails DevOps, профессиональная книга по данной теме, которая не только охватывает большинство вышеперечисленных вопросов, но также и о том, как делать вещи контролируемым, воспроизводимым способом (с использованием Ansible в качестве инструмента управления конфигурацией и развертывания).