Назад |
Перейти на главную страницу
Современное развертывание приложений Rails с помощью git
Я хочу сгруппировать информацию о текущих передовых методах развертывания приложения Rails на сервере, который я запускаю (а не, скажем, Heroku). Приложение разрабатывается несколькими людьми, и у всех есть разрешение на его развертывание. Приложение будет работать на сервере, на котором может быть более одного приложения.
- Используйте Apache или Nginx с Passenger
- Я использую Ubuntu, но это не должно иметь большого значения.
- Capistrano, кажется, лучший способ пойти на сервер.
Теперь у меня есть некоторые сомнения:
- Использовать RVM или нет? Passenger может использовать только одну версию Ruby, так что это бесполезно, не так ли?
- Как бы вы структурировали разрешения пользователей и ключи ssh? Я считаю, что вы определенно хотите, чтобы пользователь был не «самим собой» (например, на сервере), а ролевой учетной записью. Подходят ли для этого www-данные Ubuntu или лучше создать другого пользователя? По одному на каждое приложение? Какого рода конфигурация (оболочка в / etc / passwd, например, группы и т. Д.) Должна быть у этих пользователей, чтобы сделать систему максимально безопасной, если кто-то обнаружит уязвимость в веб-приложении? Какие рецепты капистрано вы бы использовали для этого?
- Теперь мы добавляем git в микс: git должен иметь возможность извлекать без пароля с сервера git, поэтому будет происходить обмен ключами. Как должна выглядеть удаленная настройка git, чтобы все было красиво и безопасно?
- Что-нибудь еще, что я не освещаю?
- Nginx / unicorn (Passenger - это больше проблем, чем он того стоит, особенно когда вы имеете дело с несколькими версиями Ruby). Единороги под управлением daemontools / Аллах, потому что бог шуршит моими джимми.
- rbenv, а не RVM (rbenv разработан, чтобы делать что-то одно, и делать это хорошо, а не подход RVM «делать половину работы всего за болезненную»)
- Пользователь для каждого приложения с ключами SSH для каждого разработчика, который имеет право управлять каждым отдельным приложением.
- Вы можете запустить само приложение как отдельный пользователь и использовать списки управления доступом, чтобы разрешить доступ только к тем частям файловой системы, которые необходимы приложению; этот пользователь приложения не должен разрешать вход в систему. Я лично считаю это излишним, но это возможно, если вы хотите иметь немного постепенного разделения.
- Capistrano - еще один инструмент "болезненной половинки всего"; Я рекомендую Легкомысленный до, хотя это может быть потому, что это я написал.
Я написал электронную книгу о более или менее точно такой же настройке, которая бесплатна для людей из моего списка рассылки.
Он охватывает настройку сервера с nginx, Unicorn, MySQL и rbenv с нуля и развертывание (и обновление) образца приложения Rails, чтобы помочь вам понять, как этот процесс работает под капотом.
Если вы думаете, что это что-то для вас, вы можете это получить Вот.
Обновить: Прошло довольно много времени с тех пор, как я написал этот комментарий. С тех пор я выпустил Эффективный Rails DevOps, профессиональная книга по данной теме, которая не только охватывает большинство вышеперечисленных вопросов, но также и о том, как делать вещи контролируемым, воспроизводимым способом (с использованием Ansible в качестве инструмента управления конфигурацией и развертывания).