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

в 0:19, , рубрики: Без рубрики

Данным постом хотелось бы начать цикл статей о том, как мы адаптировали под свои нужды трекер задач «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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js