Redmine + Apache + Passenger + Subversion на примере Gentoo
Как ранее писал, решил я настроить себе subversion сервер с багтрекером Redmine. Для этого обзавёлся виртуальным выделенным сервером на 1GB.ru . В качестве операционной системы там установлен Gentoo 2008. Для запуска сайта на Ruby on Rails существует много возможных комбинаций серверов. Например, я пробовал Apache + proxy_balancer + Mongrel , просто Mongrel. Так же всевозможные замены Apache на альтернативные веб-сервера. Но посоветовавшись с админом форума http://rubyclub.com.ua/, пришел к тому, что буду использовать Apache + Passenger. Кстати, в сети не нашел какого-либо мануала про Redmine и эту связку, с чем связаны многие часы раздумий. Ну и для полного счастья, точнее для более быстрой работы Passenger устанавливал Ruby Enterprise Edition. Я не рассматриваю установку и настройку базы данных, т.к. у меня она стоит на мощностях хостинга, а не на моем vds.
Цель поста — систематизировать свои знания, оставить себе шпаргалку, ну и показать некоторые нетривиальные места. Практически все собиралось из исходников, так что привязки конкретно к Gentoo практически нет. Ну и как некоторый показатель — после изучения всех граблей, настройка сервера заняла часа 3-4, и то в связи с ограничением на ресурсы сервера.
Ну и собственно поехали.
1. Так как я все собирал из исходников, то для начала нужно зачистить систему от установленного apache, php, subversion (svn старая версия, лучше поновее). Но в начале сохраните файл /etc/init.d/svnserve . Он пригодится для запуска svn после установки из исходников. В Gentoo последовательно выполняем следующие команды ( php я не планирую использовать, поэтому и удаляю )
emerge -C subversion
emerge -C apache
Подчищаем директории от не удалившихся файлов. Например у меня осталась папка /etc/apache с конфигами, ну и в /usr/lib/php5 остались модули.
2. Теперь проверим установленную версию rubygems, выполнив команду
У меня было RUBYGEMS VERSION: 1.1.1 . Как оказалось, это было очень плохо. Когда я пытался установить гемы для ruby, на сервере происходило громадное выделение памяти, после чего программа аварийно завершалась из-за нехватки памяти. Так что обновится нужно, да и в требованиях к Redmine написано «RubyGems 1.3.1 is required». Выполняем следующее
3. Для сборки Ruby Enterprise Edition нам потребуется OpenSSL, так же он может пригодиться для настройки subversion ( это как душе угодно) и apache. Скачиваем с сайта нужную нам версию исходников (вам может не нужна прям последняя, всяко может быть), и распаковываем
tar xzvf openssl-0.9.8j.tar.gz
Затем конфигурируем OpenSSL, компилируем, и устанавливаем
./config shared
make
make install
Ну и нужно сказать системе где искать библиотеки от OpenSSL
/sbin/ldconfig
4. На этом шаге установим apache. Берем исходники на этой странице. Скачиваем, распаковываем.
tar xzvf httpd-2.2.11.tar.gz
Далее конфигурируем, указав путь до OpenSSL ( раз уж мы поставили OpenSSL, то почему бы не собрать все с поддержкой оного?), компилируем, и устанавливаем
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-deflate --enable-so --enable-ssl=shared --with-ssl=/usr/local/ssl
make
make install
Теперь нужно позаботиться о том, чтобы при старте системы запускался апач. Для этого копируем скрипт запуска апача, и добавляем его в список автозагрузки
chmod +x /etc/init.d/apachectl
rc-update add apachectl default
5. Настало время Ruby Enterprise Edition (ruby-ee). Важный момент — после установки ruby-ee у нас в системе будет два Ruby. Один общесистемный, зарытый в каталогах /usr или /var (не уточнял), и второй ruby-ee, который будет использоваться только в apache. Нужно учесть то, что при запуске скриптов/программ ruby из консоли (например gem install, rake...) , будет запускаться общесистемный Ruby. В дальнейшем при использовании Redmine для задач обслуживания ( вне apache) нужно указывать полный путь до ruby/gem/rake ( /opt/ruby-ee-186/bin/rake). Иначе система будет ругаться на не установленные компоненты. Другой вариант, это установить в общесистемный ruby эти компоненты командой
до установки ruby-ee.
Берем последнюю версию от сюда . Скачиваем, распаковываем.
tar xzvf ruby-enterprise-1.8.6-20090201.tar.gz
Важный момент: следующие действия лучше делать из консоли, а не из под запущенного Midnight Commander (если вдруг он у вас запущен). Я не разбирался почему, но при запущенном MC глобальные переменные не определялись. Ruby-ee попутно ставит «пакет» для Passenger и другие. Для нормальной установки нужно определить две глобальные переменные (набрав эти строки в консоли)
export APXS2=/usr/local/apache2/bin/apxs
Плюс еще одна возможная проблема. На Gentoo с ruby-enterprise-1.8.6-20090201 это проявляется точно. При компиляции возникают ошибки связанные с OpenSSL. Чтобы исправить это, нужно пропатчить три файла в папке ruby-enterprise-1.8.6-20090201\ruby-enterprise-1.8.6-20090201\source\ext\openssl\ как показано по ссылке . Вот теперь мы можем приступить к установке
Во время установки появится вопрос «куда ставить?» Я ввел путь /opt/ruby-ee-186/ (далее некоторые настройки будут идти от этого пути).
(update 9.07.2009) На данную дату вышла новая версия ruby on rails 2.2.3 . Ruby-ee ставит по умолчанию последнию версию. У меня при установке произошли ошибки. В итоге он не поставил ruby on rails. Так что даже если он и поставит, то после этого нужно выполнить следующую команду
После установки ruby-ee поставим Passenger.
К настройке работы apache и Passenger приступим после установки Redmine.
6. Сейчас установим Subversion. Можно конечно было поставить Redmine, но я хочу поставить его из репозитария, а для этого нужен subversion ( а мы его удалили на 1 шаге ). Скачиваем последнюю версию, разархивируем, ставим. Проблем возникнуть не должно.
tar xzvf subversion-1.5.6.tar.gz
cd subversion-1.5.6
./configure
make
make install
7. Теперь приступим к установке Redmine. Важный момент: при установке Файлы будем хранить в /home/www/redmine . Я не буду полностью описывать шаги установки, приведу только последовательность действий, а расшифровку смотрите на сайте . Скачиваем последнюю версию с репозитория
svn co http://redmine.rubyforge.org/svn/trunk redmine
Создаем базу данных, с кодировкой по умолчанию UTF8. Далее переименовываем файл config/database.yml.example в config/database.yml и редактируем в нем раздел production, внеся настройки нашей базы данных. После этого, находясь в корне папки redmine выполняем следующие действия
rake redmine:load_default_data RAILS_ENV="production"
rake config/initializers/session_store.rb
chmod -R 755 files log tmp public/plugin_assets
Для работы почты переименовываем файл config/email.yml.example в config/email.yml и редактируем его, внеся учетные данные почтового сервера. В файле config/enviroment.rb раскомментируйте строку ENV['RAILS_ENV'] ||= 'production' . Ну и почти что самое главное — для работы через Passenger, нужно удалить файл public/.htaccess. Иначе не будут отображаться стили оформления.
8. А теперь настроим связку Apache + Passenger и запустим первый раз Redmine.
Апач будет работать под пользователем apache (или любой другой). Если у вас его нет, то нужно создать. Одно из важных условий — у пользователя apache должен быть домашний каталог /home/www (либо любой другой , но он должен быть доступен для записи пользователем apache). Теперь нужно дать пользователю apache права на папку /www/home/redmine.
Не забывайте после создания каких либо файлов в этой папке под root`ом менять права. Это решает большую часть ошибок.
Теперь собственно Apache. Правим конфигурационный файл /usr/local/apache2/conf/httpd.conf ( я опускаю моменты настройки apache такие как адрес сервера, почта админа и подобное. об этом много разных мануалов). Ищем строку «User daemon» , и заменяем daemon на apache. Также и в следующей строке. В конце файла нужно добавить следующие строки
PassengerRoot /opt/ruby-ee-186/lib/ruby/gems/1.8/gems/passenger-2.0.6
PassengerRuby /opt/ruby-ee-186/bin/rubyPassengerUserSwitching off
PassengerDefaultUser apache
PassengerMaxPoolSize 1
PassengerUseGlobalQueue on
PassengerMaxInstancesPerApp 1
<VirtualHost your_server_name>
ServerName your_server_name
DocumentRoot /home/www/redmine/public
<Directory /home/www/redmine/public>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
В строках 1-3 мы указываем откуда запускать passwnger и ruby. Путь должен указывать на папку, которую вы указали в пункте 5 (/opt/ruby-ee-186/) . Строки 4-5 мы указываем от имени какого пользователя запускать Passenger и отключаем смену пользователя. Строки 6-8 ограничивают количество процессов/ресурсов потребляемых passenger`ом. Ну а в остальных строках мы создаем виртуальный хост — наш сайт. Сохраняем файл.
Теперь можно запускать Apache
Заходим на сайт и видим главную страницу Redmine ( а может и не видим -) )
9. Далее настраиваем subversion. Я использую связку subversion и sasl. Небольшую инструкцию можно взять тут и официальный мануал тут . Пара замечаний по этой инструкции. После добавления пользователей в базу не забудьте поправить права доступа к ней, иначе процесс subversion не сможет получить к нему доступ. Для запуска subversion скопируйте в /etc/init.d/ файл svnserve, сохраненный в пункте 1. Правим в нем путь до папки с репозиторием, и имя пользователя. Ну и опять самое важное — для папки с репозиторием смените владельца, иначе опять получим отказ доступа. Права на файлы самое важное!!
10. А теперь последний штрих, на который у меня ушло двое суток. Пробуем создать тестовый проект, добавляем в него ссылку на svn репозиторий.
Заходим на вкладку Хранилище, и если мы видим такую же часть, как выделенная на картинке — все работает отлично. Иначе — плохо. Если мы откроем логи апача, то увидим ошибку « не могу найти svn». Т.е. процесс пытается получить данные из хранилища с помощью программы svn, но не может её найти. Для решения этой проблемы нужно отредактировать файл lib/redmine/scm/adapters/subversion_adapter.rb исправив переменную SVN_BIN
SVN_BIN = "/usr/local/bin/svn --config-dir /home/www/.svnconfig"
Этим мы говорим от куда запускать svn и где хранить конфиги. Кстати папку для конфигов надо создать и поменять владельца, на того под которым работает svn. Ну и для полного счастья и работы, нужно выполнить в консоли какую-нибудь команду svn указав папку для конфигов. Это нужно для того чтобы установить некоторые параметры настройки svn. Иначе в логах apache будет висеть ошибка, и вывод консоли , с предложение установить один из параметров. Его кстати можно установить вручную в файле — читайем лог ошибки. После этого все должно работать.
--------------------
Вот эти вроде простые действия заняли почти неделю копания. Главная ошибка, это права доступа к файлам. В итоге получился багтрекер projects.dobrih.net.
Ну и на последок несколько ссылок на инструкции по установке Redmine на других связках Redmine 0.8.x Installation Tutorial
Setting up a Redmine site on Ubuntu
русская инструкция по установке на Windows
мая 18, 2009 - 14:40
Пасиб за инструкцию.
Очень помогла. Правда для установки на Suse
мая 24, 2009 - 05:49
Огромное спасибо.
Благодоря тому что Вы потратили на настройку РедМайна неделю, я эту неделю сэкономил.
Точнее вообще поставил, а то-бы просто плюнул и дальше мучался-бы с мантисом.
июня 8, 2009 - 15:36
> Вот эти вроде простые действия заняли почти неделю копания.
5ый день — подхожу к связке apache+redmine
августа 12, 2009 - 04:45
Большое спасибо за помощь в решении проблемы с доступом к subversion
августа 14, 2009 - 14:03
wget www.openssl.org/source/openssl-0.9.8j.tar.gz
tar xzvf openssl-0.9.8j.tar.gz
...
кагбэ это дженту...
echo «www-servers/apache ssl» >> /etc/portage/package.use
emerge apache
августа 14, 2009 - 17:55
ну да. генту.
я с никсами ни так много общаюсь. но сделал для себя такой вывод — зачем заучивать специфичные команды и различия в установке из пакетов на разных os, когда можно собрать из исходников и все будет по стандарту, оперделенному разработчиком программы.
перед тем как ставить, я прочитал много разных статей. в большистве из них было — посмотрите файлик в такой то папке, если нет его там, то возможно он тут...
Да и порой в пакетах нет последних версий нужных программ
августа 21, 2009 - 09:18
Это всё здорово, но пакеты позволяют более грамотно управлять версиями и зависимостями (особенно в Gentoo) программ. Если компилять всё самому, то зачем Вам Gentoo? Используйте LFS
P.S. По поводу версий — как раз в Gentoo последние версии достаточно быстро появляются в портеже. Опять же, зачем если Вам нужны _самые последние_ версии? Если Вы беспокоитесь о секурити — то свежачок не всегда является лучшим вариантом... Лучше довериться менеджеру пакетов и в кроне проверять пакеты на известные уязвимости через GLSA, тем более что делается это очень просто:
$ glsa-check -l affected
P.P.S. Это я всё к тому, что если уж сели на дженту, так поизучайте её хотя бы немного, у неё очень много приятных и удобных возможностей.
сентября 3, 2009 - 00:57
Да, друх, ты сломал себе систему. Настанет час, когда ты на собственной шкуре познаешь правило 14443.
сентября 3, 2009 - 16:47
я тебя породил, я тебя и убью ©
я только рад буду, если придется познать. Только так можно получить нужный опыт и знания. Я не рядовой пользователь, мне интересны программные проблемы и поиск их устранения. Это превращается в спорт — смогу ли я ? ( тварь ли я дрожащая ? © )
ну и я понимаю, что поставив что то с сайта производителя, то все вопросы к нему.
для меня gentoo на этом сервере всего лишь оболочка, я не хочу заострять внимание на ней. из-за частностей не увидишь общую картину.
сентября 29, 2009 - 02:58
Однако ж хуже того, что ты сам на это наткнешься, так ты еще других этому учишь. Зачем, спрашивается, создавать это руководство, если оно в корне неправильное?
сентября 29, 2009 - 10:08
Почему оно в корне не правильное ?
у каждой задачи есть несколько путей решения. Я показал один из них. Что меншает заменить компиляцию из исходников, на сборку пакетов ? самое главное, тут озвучены некоторые сложные моменты, которые я с трудом нашел.
Тем более вверху написано же — это больше для меня подсказка на будущее.
октября 1, 2009 - 11:55
Да потому что ты в начале наделал кучу косяков, замусорил систему левыми файлами, а потом в конце «успешно» боролся с собственными же косяками. Сделай все по-правильному — статья была бы в 2 раза меньше и не было бы таких очевидных ляпов.
И что помешало тебе «компиляцию исходников заменить на сборку пакетов»?
Напиши сверху — больше так не делать.
сентября 3, 2009 - 01:11
make
make install
Омерзительно!
сентября 3, 2009 - 16:48
что в этом омерзительно? правило 14443? тогда смотри ответ выше.
октября 9, 2009 - 22:01
Омерзительно говно в столовке на прилавке.
Это гораздо хуже — это провокация , причем как выясняется сознательная.
1) Аффтор идиот- причина помимо слома себе системы он ,в добавок ко всему
умидрился собрать все без --as-needed , теперь про расход памяти пусть не плачет.
апреля 6, 2010 - 11:10
Спасибо автору за статью.
мая 22, 2010 - 12:21
Подскажите, установил: Debian + Lighttpd + MySQL + Redmine, Подключил хранилище к проекту. Все отображается и работает красиво, однако... Из редмайна доступ к хранилищу должен быть только на просмотр? Потому как явных кнопок на редактирование, загрузку или удаление файлов в хранилище я не могу найти, подскажите пож.
июня 22, 2010 - 15:37
извини, что долго не отвечал. уже наверное вопрос не актуален. но все же.
Redmine — это система для управления проектом, списком ошибок и т.п. . А доступ к хранилищу тут само собой только на чтение. на запись ты можешь получить только с помощью спец. программ.