Установка «Redmine» на «Linux Ubuntu» с прозрачной аутентификацией в домене (Apache, Passenger, RVM, MySQL)

от автора

Данным постом хотелось бы начать цикл статей о том, как мы адаптировали под свои нужды трекер задач «Redmine».

Около 2-х лет назад мне пришлось достаточно сильно изменить профиль своей деятельности, и от системного администрирования уйти в разработку на фреймворке «Ruby on Rails». Нужно было адаптировать «Redmine» под нужды достаточно большого IT-отдела, а потом и под нужды компании в целом. Тогда, я столкнулся, с относительной не простотой установки «Redmine». И комплексной статьи для новичков очень не хватало!

Есть несколько способов установки ROR-приложения, которым является «Redmine». В данной статье речь пойдет об установки на web-сервер «Apache», с использованием «Passenger» и «RVM». В качестве сервера баз данных, мы до сих пор используем «MySQL» (вернее MariaDB), хотя и подумываем о переезде на «PostgreSQL».

Apache

Устанавливаем web-сервер Apache:

#apt-get install apache2 

Основная причина, по которой используется «Apache» — это наличие модуля для прозрачной аутентификации в домене «Windows». Мы изначально хотели упростить использование «Redmine». Отсутствие необходимости вводить пароль дважды было большим плюсом.

Сразу настроим виртуальные хосты «Apache». Сперва, настраиваем виртуальные хосты без поддержки «Ruby». Просто чтобы проверить, что «Apache» работает корректно и настроить модуль прозрачной аутентификации в домене «Windows».

Создаем папку где будет лежать дистрибутив «Redmine»:

#mkdir /usr/share/srv-redmine/redmine-2.3 

Создаем ссылку из каталога «/var/www» (каталога, в котором обычно лежат сайты «Apache») на папку с нашим будущим дистрибутивом «Redmine»:

#ln -s /usr/share/srv-redmine/redmine-2.3 /var/www/srv-redmine 

Создаем файл виртуального хоста:

#touch /etc/apache2/sites-available/redmine 

Заполняем файл следующим содержимым (конфигурируем виртуальный хост):

    <VirtualHost *:80>     ServerName redmine.local     ServerAdmin support@redmine.local     DocumentRoot /var/www/srv-redmine/public     Options Indexes ExecCGI FollowSymLinks      <Directory /var/www/srv-redmine/public>         AllowOverride all         Options -MultiViews     </Directory>     </VirtualHost> 

Доменное имя «redmine.local» должно быть определено (разрешаться) в той сети, где вы будите использовать «Redmine».

Включаем наш сайт:

#a2ensite redmine 

Пакет, который реализует команду «a2ensite» может быть не установлен в «Ubuntu». В таком случае, в консоли появиться подсказка, как его установить.

Перезапускаем apache:

#service apache2 restart 

Чтобы проверить, что виртуальный хост настроен правильно. Создадим файл «index.html» c произвольным содержимым в директории виртуального хоста.

#touch /usr/share/srv-redmine/redmine-2.3/public/index.html 

Открыв в браузере страницу «http://redmine.local», мы должны увидеть содержимое нашего файла.

Модуль прозрачной аутентификации в домене

Печально, но такого модуля под «ngix» мы так и не нашли. Наверное, по этой причине, до сих пор используем «Apache».

Качаем модуль, распаковываем куда-нибудь. Я обычно распаковываю в домашнюю директорию:

#cd ~ #wget http://modntlm.sourceforge.net/mod_ntlm2.tar.gz #tar -zxvf ./mod_ntlm2.tar.gz 

Устанавливаем пакет для компиляции модулей:

#apt-get install apache2-prefork-dev 

С этим модулем есть тонкость. Он не аутентифицирует слишком длинные логины. Поэтому, если в компании есть сотрудники с логинами типа «rimsky-korsakov», то перед компиляций модуля нужно изменить максимальную длину логина в файле «ntlmssp.inc.c», отредактировав строку «define MAX_USERLEN 32»

Переходи в разархивированную директорию. Компилируем модуль:

#cd mod_ntlm2 #apxs2 -i -a -c mod_ntlm.c 

В процессе компиляции могут возникнуть ошибки-предупреждения. Это нормально.

В настройках виртуального хоста добавляем директивы которые отвечают за аутентификацию. Файл виртуального хоста теперь должен выглядеть так:

    <VirtualHost *:80>     ServerName redmine.local     ServerAdmin support@redmine.local     DocumentRoot /var/www/srv-redmine/public     Options Indexes ExecCGI FollowSymLinks      <Directory /var/www/srv-redmine/public>         AllowOverride all         Options -MultiViews     </Directory>      <LocationMatch "/login">         AuthType NTLM         NTLMAuth on         NTLMAuthoritative on         NTLMDomain OUR_DOMAIN.LOCAL         NTLMServer dc1.our_domain.local         NTLMBackup dc2.our_domain.local         require valid-user     </Location>     </VirtualHost> 

В процессе эксплуатации наблюдалось, что данный модуль может ощутимо притормаживать отдачу статических данных. Поэтому, мы настроили модуль так, чтобы он подключался только на странице аутентификации в «Redmine». Всю остальную работу по аутентификации реализует наш плагин прозрачной аутентификации.

MySQL (MariaDB)

Устанавливаем сервер баз данных «Mysql».

«MySQL» подустарел, поэтому лучше ставить его форк «MariaDB». На каком-то этапе мы переехали с первого на второе, не испытав проблем. С точки зрения установки и настройки для обоих серверов баз данных все примерно одинаково.

#apt-get install mysql-server 

Соединяемся с сервером с паролем, введенным на этапе установки:

#mysql -uroot -pour_password 

Создаем пустую базу данных для Redmine и назначаем привилегии:

create database redmine character set utf8; create user 'redmine'@'localhost' identified by 'password_for_redmine_user'; grant all privileges on redmine.* to 'redmine'@'localhost'; exit; 

RVM

В двух словах, «RVM» позволяет устанавливать разные версии Ruby на одном компьютере. Мы постоянно спорим с моим коллегой, а нужен ли нам «RVM» на рабочем сервере?

Прямой необходимости в нем нет, но я люблю его за то, что он позволяет сильно упростить установку «Ruby». В «Ubuntu» не всегда есть самые свежие пакеты с «Ruby», а в «RVM» есть! В общем, мы используем «RVM».

Для установки «RVM» нужно установить «Curl»:

#apt-get install curl 

Затем выходим из пользователя «root» и далее под обычным пользователем запускаем:

$curl -L https://get.rvm.io | bash -s stable 

После установки, «RVM» скажет нам, какие еще пакеты нужно доставить в «Ubuntu». На момент написания статьи это были следующие пакеты:

#apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion 

Устанавливаем «ruby-1.9.3», но сперва нужно поставить «ruby-1.8.7», иначе никак.
Если вылетело сообщение «RVM is not a function, selecting rubies with ‘rvm use …’ will not work», то нужно выполнить команду «/bin/bash —login». И тогда можно работать с «RVM»:

$rvm install ruby-1.8.7-head $rvm use ruby-1.8.7-head $rvm install ruby-1.9.3-head  $rvm use ruby 1.9.3-head --default $rvm gemset create rails3 $rvm use 1.9.3-head@rails3 --default 

Когда я осваивал RVM мне очень помог вот этот пост: http://habrahabr.ru/post/120504/.

Passenger

«Passenger» — это модуль «Apache», который позволяет запускать Ruby-приложения. «RVM» позволяет скомпилировать «Passenger» для определенного джемсета. После компиляции, «RVM» посоветует как подключить «Passenger» к «Apache».

#apt-get install libapache2-mod-passenger $gem install passenger $rvmsudo /home/user/.rvm/gems/ruby-1.9.3-head@rails3/gems/passenger-4.0.8/bin/passenger-install-apache2-module #apt-get install libcurl4-openssl-dev 

Версия «Passenger» может меняться. Поэтому, нужно убедиться в правильности пути (в 3-ей команде).

В соответствующих директориях «Apache», создаем файлы конфигурации модуля и файлы загрузки модуля:

#touch /etc/apache2/mods-available/passenger.load 

В файл записываем такое содержимое:

LoadModule passenger_module /home/user/.rvm/gems/ruby-1.9.3-head@rails3/gems/passenger-4.0.8/buildout/apache2/mod_passenger.so 

Файл конфигурации:

#touch /etc/apache2/mods-available/passenger.conf 

Содержимое файла конфигурации:

<IfModule mod_passenger.c> PassengerRoot /home/user/.rvm/gems/ruby-1.9.3-head@rails3/gems/passenger-4.0.8 PassengerDefaultRuby /home/user/.rvm/wrappers/ruby-1.9.3-head@rails3/ruby </IfModule> 

После компиляции «Passenger», «RVM» сгенерирует правильное содержимое данных файлов. Нужно только создать файлы и скопировать содержимое.

Подключаем наш модуль:

#a2enmod passenger 

Сразу меняем конфигурационный файл «Apache». Теперь у нас есть «Passenger»:

   <VirtualHost *:80>     ServerName redmine.local     ServerAdmin support@redmine.local     DocumentRoot /var/www/srv-redmine/public     Options Indexes ExecCGI FollowSymLinks     PassengerResolveSymlinksInDocumentRoot on     RailsEnv production     RailsBaseURI /      <Directory /var/www/srv-redmine/public>         AllowOverride all         Options -MultiViews     </Directory>      <LocationMatch "/login">         AuthType NTLM         NTLMAuth on         NTLMAuthoritative on         NTLMDomain OUR_DOMAIN.LOCAL         NTLMServer dc1.our_domain.local         NTLMBackup dc2.our_domain.local         require valid-user     </Location>     </VirtualHost> 

Перезапускаем «Apache»:

#service apache2 restart 

Redmine

Берем свежую версию «Redmine» из SVN-репозитория. SVN-клиетнт может быть не установлен в «Ubuntu». Тогда нужно его установить.

#cd /usr/share/srv-redmine #svn co http://redmine.rubyforge.org/svn/branches/2.3-stable redmine-2.3 #chmod 775 -R /usr/share/srv-redmine/redmine-2.3 #chown -R www-data:user /usr/share/srv-redmine/redmine-2.3 

user — это тот пользователь под которым мы устанавливали «RVM».

Устанавливаем «Rmagic» и пакет без которого не поставится gem.

#sudo apt-get install librmagick-ruby1.8 #sudo apt-get install libmagick9-dev #sudo apt-get install libmagickcore-dev libmagickwand-dev 

или вот так (зависит от версии «Ubuntu»):

#sudo apt-get install graphicsmagick-libmagick-dev-compat #sudo apt-get install libmagickwand-dev 

Меняем настройки подключения «Redmine» к базе данных. В нашем случае это «MySQL»:

$cd /usr/share/srv-redmine/redmine-2.3/config 

Меняем файл «database.yml»:

production:   adapter: mysql2   database: redmine   host: localhost   username: redmine   password: password_for_redmine_user   encoding: utf8 

Заодно конфигурируем отправку почтовых сообщений из «Redmine». Файл «configuration.yml»:

production:    email_delivery:      delivery_method: :smtp      smtp_settings:        address: "smtp_server"        port: 25        domain: "mail_domain_name"        authentication: none 

У нас настроен почтовый сервер, не требующий аутентификации внутри сети. Поэтому файл такой. У вас файл может быть другим. Подробнее можно прочесть тут: http://www.redmine.org/projects/redmine/wiki/EmailConfiguration

Устанавливаем все джемы, которые необходимы «Redmine»:

$cd /usr/share/srv-redmine/redmine-2.3 $bundle install --without development test 

«Redmine» из коробки позволяет не прозрачно аутентифицироваться в домене. Для этого используется джем «net-ldap». Этот джем содержит одну очень серьезную ошибку.

Нужно отыскать этот джем в джемсете и ручками исправить файл согласно вот этому коммиту.

Иначе, когда из «LDAP» запрашиваются определенные данные в кириллице, могут возникать непредвиденные ошибки.

Дальше все по инструкции установки «Redmine»:

Генерируем секретный ключ:

rake generate_secret_token 

Создаем таблички в нашей базе данных:

RAILS_ENV=production rake db:migrate 

Заполняем базу данных базовыми данными:

RAILS_ENV=production REDMINE_LANG=ru rake redmine:load_default_data 

Собственно это все. Перезапускаем «Apache». Все должно работать.

#service apache restart 

Какие еще есть способы установить «Redmine»

Можно просто скачать «Bitnami Stack».

Можно установить «Redmine» из репозитариев: «apt-get install redmine». В «Ubuntu» он есть, но не всегда свежий.

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

Надеюсь, статья будет полезна.

ссылка на оригинал статьи http://habrahabr.ru/company/monandco/blog/198496/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *