Руководство по развертыванию приложений на Rails 3.1 - PullRequest
11 голосов
/ 14 ноября 2011

Я ищу хорошее руководство по развертыванию приложения Rails 3.1.1 на сервере.И под добром я на самом деле имею в виду полный.Причина, по которой я публикую этот вопрос, заключается в том, что, хотя в Интернете существует множество учебных пособий (Google, блоги, книги, другие вопросы, связанные с переполнением стека и т. Д.), Кажется, что все они посвящены либо проблеме процесса развертывания.или сделайте некоторые предположения о среде развертывания, которые не соответствуют тому, что мне нужно.

Я понимаю, что для развертывания приложения Rails на сервере требуются различные программы и инструменты, которые необходимо настроить, и я всегда так или иначезастрять на явно "маленьких" вещах, которые меня очень расстраивают.

Итак, начнем с самого начала.Теперь у меня есть сервер, к которому я могу получить доступ через SSH и доменное имя, назовем его www.example.com .На сервере установлена ​​свежая версия Ubuntu 10.04 x64, на которой установлен только пользователь, а именно root (через root я обращаюсь к серверу по SSH).Заметка!Не установлены Apache, Ruby, PHP, MySQL, cPanel или любая другая панель, только минимум, который поставляется с новой установкой.

Также на веб-сервере будет размещаться одно приложение, и база данных будет работать натот же компьютер.

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

  • Установка Ruby

Я уже сделал это, используя RVM, используя многопользовательский процесс установки (просто потому, что у меня есть только пользователь root, и он делает это автоматически).Это, кажется, хорошо работает после этого, но у меня есть несколько вопросов:

Было бы более разумно устанавливать Ruby напрямую, а не через RVM (я думаю, может быть, с точки зрения эффективности - также RVM делает немногомагия за кулисами, модифицирующая некоторые файлы bash_profile способами, которые я не понимаю, и это как-то кажется инвазивным ...)?

Было бы более целесообразно установить в качестве отдельного пользователя через RVM (может быть какая-то безопасностьвозникают проблемы)?

  • необходимые драгоценные камни

Теперь, когда установлен Ruby, какой наилучший начальный набор камней можно установить вдоль него?

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

Вопрос - стоит ли устанавливатьрельсы драгоценный камень перед рукой?Есть ли какие-либо другие драгоценные камни, которые нужно установить?

  • Веб-сервер

Вот где мне становится сложно.Я пытаюсь использовать apache и mod-passenger для развертывания (они кажутся самыми популярными).Поэтому я установил веб-сервер apache, пассажирский гем и все связанные с ним зависимости (библиотеки, упомянутые в пассажире).

Теперь возникают проблемы.Первое, что связано с пользователем.Как работает Apache?Я имею ввиду под каждым пользователем?Если я установил и (пере) запустил его, используя пользователя root, будет ли он постоянно работать под пользователем root?Это плохо?Если да, я должен создать другого пользователя?Если да, то как?В какие группы я должен поместить нового пользователя, какие права он должен иметь (а именно, к каким папкам он должен иметь доступ).Как запустить apache в этом случае (под root, под этим пользователем добавить строку где-нибудь в файле конфигурации и т.*

Куда положить настройки сайта?Это нормально, чтобы положить его в apache.conf, или я должен создать новый файл на сайтах, доступных?Или я должен просто повторно использовать файл default , который там уже есть?Если на предыдущем шаге был создан новый пользователь, какие права он должен иметь по отношению к файлам конфигурации?

Кроме того ... где в конечном итоге поставить приложение рельсы? В какой папке это будет лучше? Где-то под домом? Может быть, в / var / www? Я хочу знать, как это повлияет на права процесса apache, обслуживающего приложение? (Обычно у меня возникают проблемы при обслуживании приложения, оно жалуется на то, что у него нет прав на определенную папку. Кроме того, при использовании новых конвейеров ресурсов - что я не совсем понимаю - создаются файлы активов, и они, похоже, не наследовать права родительской папки ...)

  • База данных

В качестве базы данных я использую MySQL, и установить его довольно просто. Вопрос, который у меня здесь, снова связан с пользователем. Должен ли я использовать специального пользователя для базы данных? Как MySQL фактически управляет пользователями (являются ли они внутренними, или они пользователи Linux или ...?). Должен ли пользователь базы данных быть таким же, как «веб-пользователь» сверху? Или это должен быть другой?

  • Активы

Здесь я действительно заблудился. У меня действительно есть проблемы с работой конвейера активов. Я проверил эпизод Railscasts, а также учебник на сайте rails, и я, кажется, теоретически понимаю эту вещь, но у меня есть проблемы на практике.

Таким образом, здесь возникнет вопрос: какие команды мне следует выполнить для предварительной компиляции ресурсов? (Попытка запустить рейк-ресурсы: прекомпиляция). Это нормально? Что я должен изменить в файле production.rb? Как сгенерированные ресурсы работают с веб-пользователем или пользователями базы данных, созданными выше? Я лично получаю проблему на этом этапе, а именно файлы журнала говорят, что некоторые CSS-файлы недоступны (например, у меня установлена ​​библиотека jqplot в папке vendor / assets, и ее файлы недоступны - следует ли мне как-то добавить файл манифеста здесь ?).

Было бы замечательно, если бы кто-то мог указать мне на хорошую статью или ресурс, который объясняет все это. Основная область, в которой у меня возникают проблемы, заключается в том, как Apache, Passenger, Ruby, Rails и MySQL взаимодействуют с пользователем Linux. Как правильно настроить разрешения для папки приложения Rails? Как конвейер ресурсов влияет на это разрешение пользователя?

Спасибо

1 Ответ

8 голосов
/ 15 ноября 2011

Вот мой способ развертывания Rails:

  • Установка Ruby

Я бы не стал использовать RVM, потому что очень сложно правильно запустить его в сочетании с такими вещами, как задания cron. Выполнимо (с обертками, например), но немного хлопот. Если вам не нужны другие версии Ruby на этом компьютере, просто установите его из исходного кода самостоятельно.

  • Gems

Просто позвольте Бандлеру творить чудеса. Не забудьте установить с флагами --without test development --deployment. Я бы не стал делать это заранее. Просто убедитесь, что у вас есть упаковщик.

  • Веб-сервер

Использование Passenger (с Apache или Nginx) - хороший и простой выбор. Когда вы устанавливаете Apache из apt, он запускается от имени специального пользователя.

Apache правильно настроен в Ubuntu. Запустится при перезагрузке.

  • Настройка сайта

Вся конфигурация находится в / etc / apache2. Поместите конфигурацию вашего виртуального хоста в / etc / apache2 / sites-available и используйте a2ensite, чтобы включить ее.

Поместите ваше приложение в /var/www, так как это местоположение по умолчанию в Ubuntu. Я обычно делаю пользователя развертывания.

Убедитесь, что пользователь может получить доступ к вашему приложению, назначив ваше приложение группе www-data.

  • База данных

MySQL имеет собственную пользовательскую систему. Войдите в систему как пользователь root и создайте нового пользователя с SQL: GRANT ALL ON 'application_production'.* TO 'deploy' IDENTIFIED BY 'some password';

  • Активы

Активы должны создаваться как пользователь, владеющий приложением. Вы должны добавить любые файлы CSS и JavaScript в production.rb. Например:

config.assets.precompile += %w(backend.css)
  • Заключение

Помогает использовать инструмент развертывания, такой как Capistrano . Когда вы запускаете capify, раскомментируйте соответствующую строку в Capfile, чтобы получить компиляцию активов. Вот мой:

ENV['RAILS_ENV'] = 'production'
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
load 'deploy/assets'
load 'config/deploy'
require 'capistrano/ext/multistage'
require "bundler/capistrano"
require 'capistrano_colors'

Так я обычно устанавливаю свои приложения rails. Я надеюсь, что это поможет вам. Недавно я написал гем для интеграции Chef -золо с Capistrano, который называется capistrano-chef-solo . Это очень альфа и может быть слишком сложно, если вы только начинаете развертывание, но это может вам помочь.

...