Установка «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» он есть, но не всегда свежий.
Я предпочитаю пройти более сложный путь установки, но зато, иметь более глубокое представление о своем сервере.
Надеюсь, статья будет полезна.
Автор: tdvsdv