Как ранее писал, решил я настроить себе 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 я не планирую использовать, поэтому и удаляю )
Заходим на вкладку Хранилище, и если мы видим такую же часть, как выделенная на картинке - все работает отлично. Иначе - плохо. Если мы откроем логи апача, то увидим ошибку " не могу найти svn". Т.е. процесс пытается получить данные из хранилища с помощью программы svn, но не может её найти. Для решения этой проблемы нужно отредактировать файл lib/redmine/scm/adapters/subversion_adapter.rb исправив переменную SVN_BIN
--------------------
Вот эти вроде простые действия заняли почти неделю копания. Главная ошибка, это права доступа к файлам. В итоге получился багтрекер projects.dobrih.net (закрыт в 2010 г). Ну и на последок несколько ссылок на инструкции по установке Redmine на других связках Redmine 0.8.x Installation Tutorial
Setting up a Redmine site on Ubuntu
русская инструкция по установке на Windows
Ну и собственно поехали. 1. Так как я все собирал из исходников, то для начала нужно зачистить систему от установленного apache, php, subversion (svn старая версия, лучше поновее). Но в начале сохраните файл /etc/init.d/svnserve . Он пригодится для запуска svn после установки из исходников. В Gentoo последовательно выполняем следующие команды ( php я не планирую использовать, поэтому и удаляю )
emerge -C php emerge -C subversion emerge -C apacheПодчищаем директории от не удалившихся файлов. Например у меня осталась папка /etc/apache с конфигами, ну и в /usr/lib/php5 остались модули. 2. Теперь проверим установленную версию rubygems, выполнив команду
gem envУ меня было RUBYGEMS VERSION: 1.1.1 . Как оказалось, это было очень плохо. Когда я пытался установить гемы для ruby, на сервере происходило громадное выделение памяти, после чего программа аварийно завершалась из-за нехватки памяти. Так что обновится нужно, да и в требованиях к Redmine написано "RubyGems 1.3.1 is required". Выполняем следующее
emerge rubygems3. Для сборки Ruby Enterprise Edition нам потребуется OpenSSL, так же он может пригодиться для настройки subversion ( это как душе угодно) и apache. Скачиваем с сайта нужную нам версию исходников (вам может не нужна прям последняя, всяко может быть), и распаковываем
wget http://www.openssl.org/source/openssl-0.9.8j.tar.gz tar xzvf openssl-0.9.8j.tar.gzЗатем конфигурируем OpenSSL, компилируем, и устанавливаем
cd openssl-0.9.8j ./config shared make make installНу и нужно сказать системе где искать библиотеки от OpenSSL
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf /sbin/ldconfig4. На этом шаге установим apache. Берем исходники на этой странице. Скачиваем, распаковываем.
wget http://apache.rinet.ru/dist/httpd/httpd-2.2.11.tar.gz tar xzvf httpd-2.2.11.tar.gzДалее конфигурируем, указав путь до OpenSSL ( раз уж мы поставили OpenSSL, то почему бы не собрать все с поддержкой оного?), компилируем, и устанавливаем
cd httpd-2.2.11 ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-deflate --enable-so --enable-ssl=shared --with-ssl=/usr/local/ssl make make installТеперь нужно позаботиться о том, чтобы при старте системы запускался апач. Для этого копируем скрипт запуска апача, и добавляем его в список автозагрузки
cp /usr/local/apache2/bin/apachectl /etc/init.d/apachectl chmod +x /etc/init.d/apachectl rc-update add apachectl default5. Настало время 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 эти компоненты командой
gem install rails -v=2.2.2до установки ruby-ee. Берем последнюю версию от сюда . Скачиваем, распаковываем.
wget http://rubyforge.org/frs/download.php/51100/ruby-enterprise-1.8.6-20090201.tar.gz tar xzvf ruby-enterprise-1.8.6-20090201.tar.gzВажный момент: следующие действия лучше делать из консоли, а не из под запущенного Midnight Commander (если вдруг он у вас запущен). Я не разбирался почему, но при запущенном MC глобальные переменные не определялись. Ruby-ee попутно ставит "пакет" для Passenger и другие. Для нормальной установки нужно определить две глобальные переменные (набрав эти строки в консоли)
RUBYOPT="" 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\ как показано по ссылке . Вот теперь мы можем приступить к установке
./ruby-enterprise-1.8.6-20090201/installerВо время установки появится вопрос "куда ставить?" Я ввел путь /opt/ruby-ee-186/ (далее некоторые настройки будут идти от этого пути). (update 9.07.2009) На данную дату вышла новая версия ruby on rails 2.2.3 . Ruby-ee ставит по умолчанию последнию версию. У меня при установке произошли ошибки. В итоге он не поставил ruby on rails. Так что даже если он и поставит, то после этого нужно выполнить следующую команду
/opt/ruby-ee-186/bin/gem install /opt/ruby-ee-186/bin/rails -v=2.2.2После установки ruby-ee поставим Passenger.
/opt/ruby-ee-186/bin/passenger-install-apache2-moduleК настройке работы apache и Passenger приступим после установки Redmine. 6. Сейчас установим Subversion. Можно конечно было поставить Redmine, но я хочу поставить его из репозитария, а для этого нужен subversion ( а мы его удалили на 1 шаге ). Скачиваем последнюю версию, разархивируем, ставим. Проблем возникнуть не должно.
wget http://subversion.tigris.org/downloads/subversion-1.5.6.tar.gz tar xzvf subversion-1.5.6.tar.gz cd subversion-1.5.6 ./configure make make install7. Теперь приступим к установке Redmine. Важный момент: при установке Файлы будем хранить в /home/www/redmine . Я не буду полностью описывать шаги установки, приведу только последовательность действий, а расшифровку смотрите на сайте . Скачиваем последнюю версию с репозитория
cd /home/www svn co http://redmine.rubyforge.org/svn/trunk redmineСоздаем базу данных, с кодировкой по умолчанию UTF8. Далее переименовываем файл config/database.yml.example в config/database.yml и редактируем в нем раздел production, внеся настройки нашей базы данных. После этого, находясь в корне папки redmine выполняем следующие действия
rake db:migrate RAILS_ENV="production" 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.
chown -R apache:apache /home/www/redmineНе забывайте после создания каких либо файлов в этой папке под root`ом менять права. Это решает большую часть ошибок. Теперь собственно Apache. Правим конфигурационный файл /usr/local/apache2/conf/httpd.conf ( я опускаю моменты настройки apache такие как адрес сервера, почта админа и подобное. об этом много разных мануалов). Ищем строку "User daemon" , и заменяем daemon на apache. Также и в следующей строке. В конце файла нужно добавить следующие строки
LoadModule passenger_module /opt/ruby-ee-186/lib/ruby/gems/1.8/gems/passenger-2.0.6/ext/apache2/mod_passenger.so 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
/etc/init.d/apachectl startЗаходим на сайт и видим главную страницу Redmine ( а может и не видим -) ) 9. Далее настраиваем subversion. Я использую связку subversion и sasl. Небольшую инструкцию можно взять тут и официальный мануал тут . Пара замечаний по этой инструкции. После добавления пользователей в базу не забудьте поправить права доступа к ней, иначе процесс subversion не сможет получить к нему доступ. Для запуска subversion скопируйте в /etc/init.d/ файл svnserve, сохраненный в пункте 1. Правим в нем путь до папки с репозиторием, и имя пользователя. Ну и опять самое важное - для папки с репозиторием смените владельца, иначе опять получим отказ доступа. Права на файлы самое важное!! 10. А теперь последний штрих, на который у меня ушло двое суток. Пробуем создать тестовый проект, добавляем в него ссылку на svn репозиторий.
# SVN executable name SVN_BIN = "/usr/local/bin/svn --config-dir /home/www/.svnconfig"Этим мы говорим от куда запускать svn и где хранить конфиги. Кстати папку для конфигов надо создать и поменять владельца, на того под которым работает svn. Ну и для полного счастья и работы, нужно выполнить в консоли какую-нибудь команду svn указав папку для конфигов. Это нужно для того чтобы установить некоторые параметры настройки svn. Иначе в логах apache будет висеть ошибка, и вывод консоли , с предложение установить один из параметров. Его кстати можно установить вручную в файле - читайем лог ошибки. После этого все должно работать.
--------------------
Вот эти вроде простые действия заняли почти неделю копания. Главная ошибка, это права доступа к файлам. В итоге получился багтрекер projects.dobrih.net (закрыт в 2010 г). Ну и на последок несколько ссылок на инструкции по установке Redmine на других связках Redmine 0.8.x Installation Tutorial
Setting up a Redmine site on Ubuntu
русская инструкция по установке на Windows
Пасиб за инструкцию.
ОтветитьУдалитьОчень помогла. Правда для установки на Suse :)
Огромное спасибо.
ОтветитьУдалитьБлагодоря тому что Вы потратили на настройку РедМайна неделю, я эту неделю сэкономил.
Точнее вообще поставил, а то-бы просто плюнул и дальше мучался-бы с мантисом.
> Вот эти вроде простые действия заняли почти неделю копания.
ОтветитьУдалить5ый день - подхожу к связке apache+redmine :)
[...] установить связку Redmine по анологии моей инстукции . И что вы думаете , даже глядя краем глаза в неё, я [...]
ОтветитьУдалитьБольшое спасибо за помощь в решении проблемы с доступом к subversion
ОтветитьУдалитьwget http://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
ну да. генту.
ОтветитьУдалитья с никсами ни так много общаюсь. но сделал для себя такой вывод - зачем заучивать специфичные команды и различия в установке из пакетов на разных os, когда можно собрать из исходников и все будет по стандарту, оперделенному разработчиком программы.
перед тем как ставить, я прочитал много разных статей. в большистве из них было - посмотрите файлик в такой то папке, если нет его там, то возможно он тут....
Да и порой в пакетах нет последних версий нужных программ
Это всё здорово, но пакеты позволяют более грамотно управлять версиями и зависимостями (особенно в Gentoo) программ. Если компилять всё самому, то зачем Вам Gentoo? Используйте LFS :)
ОтветитьУдалитьP.S. По поводу версий - как раз в Gentoo последние версии достаточно быстро появляются в портеже. Опять же, зачем если Вам нужны _самые последние_ версии? Если Вы беспокоитесь о секурити - то свежачок не всегда является лучшим вариантом... Лучше довериться менеджеру пакетов и в кроне проверять пакеты на известные уязвимости через GLSA, тем более что делается это очень просто:
$ glsa-check -l affected
P.P.S. Это я всё к тому, что если уж сели на дженту, так поизучайте её хотя бы немного, у неё очень много приятных и удобных возможностей.
Да, друх, ты сломал себе систему. Настанет час, когда ты на собственной шкуре познаешь правило 14443.
ОтветитьУдалитья тебя породил, я тебя и убью (с)
ОтветитьУдалитья только рад буду, если придется познать. Только так можно получить нужный опыт и знания. Я не рядовой пользователь, мне интересны программные проблемы и поиск их устранения. Это превращается в спорт - смогу ли я ? ( тварь ли я дрожащая ? (с) )
ну и я понимаю, что поставив что то с сайта производителя, то все вопросы к нему.
для меня gentoo на этом сервере всего лишь оболочка, я не хочу заострять внимание на ней. из-за частностей не увидишь общую картину.
что в этом омерзительно? правило 14443? тогда смотри ответ выше.
ОтветитьУдалитьОднако ж хуже того, что ты сам на это наткнешься, так ты еще других этому учишь. Зачем, спрашивается, создавать это руководство, если оно в корне неправильное?
ОтветитьУдалитьПочему оно в корне не правильное ?
ОтветитьУдалитьу каждой задачи есть несколько путей решения. Я показал один из них. Что меншает заменить компиляцию из исходников, на сборку пакетов ? самое главное, тут озвучены некоторые сложные моменты, которые я с трудом нашел.
Тем более вверху написано же - это больше для меня подсказка на будущее.
Да потому что ты в начале наделал кучу косяков, замусорил систему левыми файлами, а потом в конце "успешно" боролся с собственными же косяками. Сделай все по-правильному - статья была бы в 2 раза меньше и не было бы таких очевидных ляпов.
ОтветитьУдалитьИ что помешало тебе "компиляцию исходников заменить на сборку пакетов"?
Напиши сверху - больше так не делать.
Омерзительно говно в столовке на прилавке.
ОтветитьУдалитьЭто гораздо хуже - это провокация , причем как выясняется сознательная.
1) Аффтор идиот- причина помимо слома себе системы он ,в добавок ко всему
умидрился собрать все без --as-needed , теперь про расход памяти пусть не плачет.
Спасибо автору за статью.
ОтветитьУдалитьПодскажите, установил: Debian + Lighttpd + MySQL + Redmine, Подключил хранилище к проекту. Все отображается и работает красиво, однако... Из редмайна доступ к хранилищу должен быть только на просмотр? Потому как явных кнопок на редактирование, загрузку или удаление файлов в хранилище я не могу найти, подскажите пож.
ОтветитьУдалитьизвини, что долго не отвечал. уже наверное вопрос не актуален. но все же.
ОтветитьУдалитьRedmine - это система для управления проектом, списком ошибок и т.п. . А доступ к хранилищу тут само собой только на чтение. на запись ты можешь получить только с помощью спец. программ.
лишний раз убедили, что главное не понять, а установить. И, возможно, в дальнейшем не пользоваться. Gentoo подразумевает системный подход. Я тоже в свое время записывал команды в виде шпаргалок на будущее. Как оказалось, ни разу не пригодилось ничего кроме вот этого:
ОтветитьУдалитьcd /
tar cvpzf /your_another_hdd_or_usb_stick/backup.tgz --exclude=/proc exclude=/sys /
понять важно, если планируешь пользоваться долго и уверено. А я к генту , да и вообще к линуксу практически не прикоснулся за последний год. сейчас и не вспомню ничего без такой подсказки
ОтветитьУдалить