четверг, 28 июня 2012 г.

Установка Redmine на CentOS 6.2 (Часть 3)


Продолжение статьи об установке Redmine на сервер под управлением CentOS 6.2. Первую часть вы можете прочитать здесь, вторую часть - здесь.
В этой части мы всё таки доберемся до установки самого Redmine, http-сервера Apache и модуля Passenger, а так же сделаем нужные настройки для полноценной работы всей связки установленных пакетов.
Поехали...

    Содержание:
  1. Проверка текущей версии CentOS.
  2. Подготовка к установке. Установка дополнительных пакетов.
  3. Установка Ruby.
  4. Установка RubyGems.
  5. Установка Rails.
  6. Установка Extra Packages for Enterprise Linux 6 (EPEL).
  7. Установка MySQL.
  8. Конфигурация MySQL.
  9. Первый запуск MySQL.
  10. Создание пароля для root и удаление анонимного подключения к MySQL.
  11. Создание базы данных и пользователя для Redmine.
  12. Установка автоматического запуска MySQL.
  13. Установка ImageMagick.
  14. Установка поддержки шрифтов TrueType.
  15. Установка RMagick.
  16. Установка Redmine.
  17. Установка Apache.
  18. Начальная настройка Redmine.
  19. Установка модуля MySQL для подключения через Ruby.
  20. Настройка файла configuration.yml.
  21. Установка Passenger.
  22. Подключение и настройка модуля Passenger к Apache.
  23. Изменение конфигурации, если используется SELinux.
  24. Запуск Apache и установка его автозагрузки.

16. Установка Redmine.


Скачиваем дистрибутив Redmine версии 2.0.3 с сайта http://rubyforge.org/frs/?group_id=1850.
[root@loginsrv src]# cd ~ebabenko/data/distrib/redmine
[root@loginsrv redmine]# wget http://rubyforge.org/frs/download.php/76259/redmine-2.0.3.tar.gz

[...skipped...]

[root@loginsrv redmine]# cd /var/lib
[root@loginsrv lib]# cp ~ebabenko/data/distrib/redmine/redmine-2.0.3.tar.gz .
[root@loginsrv lib]# tar zxvf redmine-2.0.3.tar.gz

[...skipped...]

[root@loginsrv lib]# rm redmine-2.0.3.tar.gz
rm: remove regular file `redmine-2.0.3.tar.gz'? y
[root@loginsrv lib]# mv redmine-2.0.3 redmine

17. Установка Apache.

[root@loginsrv lib]# yum install httpd httpd-devel

[...skipped...]

Total download size: 1.6 M
Is this ok [y/N]: y

[...skipped...]

Installed:
  httpd-devel.x86_64 0:2.2.15-15.el6.centos.1

Dependency Installed:
  apr-devel.x86_64 0:1.3.9-5.el6_2
  apr-util-devel.x86_64 0:1.3.9-3.el6_0.1
  expat-devel.x86_64 0:2.0.1-11.el6_2

Updated:
  httpd.x86_64 0:2.2.15-15.el6.centos.1

Dependency Updated:
  apr.x86_64 0:1.3.9-5.el6_2
  expat.x86_64 0:2.0.1-11.el6_2
  httpd-tools.x86_64 0:2.2.15-15.el6.centos.1

Complete!

18. Начальная настройка Redmine.

[root@loginsrv lib]# pwd
/var/lib
[root@loginsrv lib]# chown -R apache:apache redmine
Конфигурируем database.yml.
[root@loginsrv lib]# cd redmine/config
[root@loginsrv config]# cp database.yml.example database.yml
[root@loginsrv config]# vi database.yml
Использоваться будет только одна конфигурация - production. Поэтому приводим соответствующую секцию к следующему виду:
production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: RedMinePasswd
  encoding: utf8
Если требуется использовать и другие конфигурации, другие секции этого файла так же требуется привести к подобному виду (а так же не забыть под каждую из них создать соответствующих пользователей и БД в MySQL).
Создаём токен.
[root@loginsrv config]# cd ../
[root@loginsrv redmine]# gem install bundler
Successfully installed bundler-1.1.4
1 gem installed
Installing ri documentation for bundler-1.1.4...
Installing RDoc documentation for bundler-1.1.4...
[root@loginsrv redmine]# bundle install --without development test postgresql sqlite

[...skipped...]

[root@loginsrv redmine]# rake generate_session_store

Note: The rake task generate_session_store has been deprecated, please use the replacement version generate_secret_token
[root@loginsrv redmine]# rake generate_secret_token
[root@loginsrv redmine]# ls config/initializers/secret_token.rb
config/initializers/secret_token.rb

19. Установка модуля MySQL для подключения через Ruby.

[root@loginsrv redmine]# gem install mysql
Fetching: mysql-2.8.1.gem (100%)
Building native extensions.  This could take a while...
Successfully installed mysql-2.8.1
1 gem installed
Installing ri documentation for mysql-2.8.1...
Installing RDoc documentation for mysql-2.8.1...
[root@loginsrv redmine]# whereis ruby
ruby: /usr/local/bin/ruby /usr/local/lib/ruby
[root@loginsrv redmine]# cd /usr/local/lib/ruby/gems/1.9.1/gems/mysql-2.8.1
[root@loginsrv mysql-2.8.1]# whereis mysql_config
mysql_config: /usr/bin/mysql_config /usr/share/man/man1/mysql_config.1.gz
[root@loginsrv mysql-2.8.1]# ruby ext/mysql_api/extconf.rb --with-mysql-config=/usr/bin/mysql_config
checking for mysql_ssl_set()... yes
checking for rb_str_set_len()... yes
checking for rb_thread_start_timer()... no
checking for mysql.h... yes
ext/mysql_api/extconf.rb:67: Use RbConfig instead of obsolete and deprecated Config.
creating Makefile
[root@loginsrv mysql-2.8.1]# make
linking shared-object mysql_api.so
gcc: mysql.o: No such file or directory
make: *** [mysql_api.so] Error 1
К этому моменту, я уже переставал понимать что происходит и думал, когда же уже установится этот злосчастный Redmine. Поэтому долго париться на счет ошибки не стал: откуда взялась, почему криво сконфигурировалась. Просто "забил болт" и отредактировал Makefile следующим образом:
[root@loginsrv mysql-2.8.1]# vi Makefile
[...skipped...]

SRCS = mysql.c
OBJS = $(srcdir)/mysql.o

[...skipped...]
Собираем и устанавливаем.
[root@loginsrv mysql-2.8.1]# make
linking shared-object mysql_api.so
[root@loginsrv mysql-2.8.1]# make install
/usr/bin/install -c -m 0755 mysql_api.so /usr/local/lib/ruby/site_ruby/1.9.1/x86_64-linux
installing default mysql_api libraries
[root@loginsrv mysql-2.8.1]# cd /var/lib/redmine/lib
[root@loginsrv lib]# ln -s /usr/local/lib/ruby/gems/1.9.1/gems/mysql-2.8.1/lib/mysql.rb
[root@loginsrv lib]# cd ../
[root@loginsrv redmine]# rake db:migrate RAILS_ENV=production

[...skipped...]

[root@loginsrv redmine]# rake redmine:load_default_data RAILS_ENV=production

Select language: ar, bg, bs, ca, cs, da, de, el, en, en-GB, es, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] ru
====================================
Default configuration data loaded.

20. Настройка файла configuration.yml.

[root@loginsrv redmine]# cd config
[root@loginsrv config]# cp configuration.yml.example configuration.yml
[root@loginsrv config]# vi configuration.yml
Найдите следующую запись и отредактируйте её в соответствии с вашими параметрами и предпочтениями.
# default configuration options for all environments
default:
  # Outgoing emails configuration (see examples above)
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: smtp.example.net
      port: 25
      domain: example.net
      authentication: :login
      user_name: "redmine@example.net"
      password: "redmine"
В начале файла приводится список различных примеров конфигураций. Я настроил на собственный ящик в GMail.
production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      tls: true
      enable_starttls_auto: true
      address: "smtp.gmail.com"
      port: 587
      domain: "smtp.gmail.com"
      authentication: :plain
      user_name: "patttern@gmail.com"
      password: "****"

21. Установка Passenger.

[root@loginsrv config]# cd /usr/local/src
[root@loginsrv src]# gem install passenger
Fetching: fastthread-1.0.7.gem (100%)
Building native extensions.  This could take a while...
Fetching: daemon_controller-1.0.0.gem (100%)
Fetching: passenger-3.0.13.gem (100%)
Successfully installed fastthread-1.0.7
Successfully installed daemon_controller-1.0.0
Successfully installed passenger-3.0.13
3 gems installed
Installing ri documentation for fastthread-1.0.7...
Installing ri documentation for daemon_controller-1.0.0...
Installing ri documentation for passenger-3.0.13...
Installing RDoc documentation for fastthread-1.0.7...
Installing RDoc documentation for daemon_controller-1.0.0...
Installing RDoc documentation for passenger-3.0.13...
[root@loginsrv src]# yum install curl-devel

[...skipped...]

Total download size: 598 k
Is this ok [y/N]: y

[...skipped...]

Updated:
  libcurl-devel.x86_64 0:7.19.7-26.el6_2.4

Dependency Updated:
  curl.x86_64 0:7.19.7-26.el6_2.4
  libcurl.x86_64 0:7.19.7-26.el6_2.4

Complete!
[root@loginsrv src]# passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v3.0.13.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.
1

--------------------------------------------

Checking for required software...

[...skipped...]

--------------------------------------------
Compiling and installing Apache 2 module...

[...skipped...]

--------------------------------------------
The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13/ext/apache2/mod_passenger.so
   PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13
   PassengerRuby /usr/local/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.


--------------------------------------------
Deploying a Ruby on Rails application: an example

Suppose you have a Rails application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /somewhere/public
      <Directory /somewhere/public>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
      </Directory>
   </VirtualHost>

And that's it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:

  /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13/doc/Users guide Apache.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
http://www.modrails.com/

Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.

22. Подключение и настройка модуля Passenger к Apache.


Для начала требуется создать файл конфигурации Passenger для Apache с содержимым, которое было объявлено при установке модуля + дополнительные настройки, которые я тупо скопировал с источника [1] (если вам требуется).
[root@loginsrv src]# vi /etc/httpd/conf.d/passenger.conf
# Pathes from passenger-install-apache2-module
LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13
PassengerRuby /usr/local/bin/ruby

# Remove HTTP Headers
Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

# Tuning of Passenger
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerUseGlobalQueue on
PassengerHighPerformance on
PassengerStatThrottleRate 10
RailsSpawnMethod smart
RailsAppSpawnerIdleTime 86400
RailsFrameworkSpawnerIdleTime 0

# ServerName Host:Port
ServerName bt.esphere.ru:80
Правим конфигурационный файл Apache.
[root@loginsrv src]# vi /etc/httpd/conf/httpd.conf
Добавляем в конец файла следующие строки.
<VirtualHost *:80>
    ServerName bt.esphere.ru
    DocumentRoot /var/www/html
    RailsEnv production
    RailsBaseURI /redmine
</VirtualHost>
Опция "RailsEnv production" используется опционально. Если вы планируете использовать несколько концигураций, этот параметр можно опустить (или закомментировать). Создаем симлинк на Redmine.
[root@loginsrv src]# ln -s /var/lib/redmine/public /var/www/html/redmine

23. Изменение конфигурации, если используется SELinux.

[root@loginsrv src]# passenger-config --root
/usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13
[root@loginsrv src]# chcon -R -h -t httpd_sys_content_t /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13
[root@loginsrv src]# vi /etc/selinux/config
Параметр
SELINUX=enforcing
меняем на
SELINUX=disabled
Останавливаем и отключаем firewall.
[root@loginsrv src]# /etc/rc.d/init.d/iptables stop
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: nat filter      [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@loginsrv src]# /sbin/chkconfig iptables off

24. Запуск Apache и установка его автозагрузки.

[root@loginsrv src]# /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]
[root@loginsrv src]# /sbin/chkconfig httpd on
[root@loginsrv src]# /sbin/chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
Если ваши нервы выдержали и вы провели все операции от начала и до текущего момента, то в результате по переходу по адресу вашего сервера (в моём случае это адрес http://bt.esphere.ru/redmine) вы должны увидеть главную страницу Redmine. У меня, к сожалению, такого чуда не произошло. Вместо желаемой страницы, я получал список файлов директории redmine.
Я решил перезапустить сервер полностью, чтобы облегчить мозг сервера после таких истязательств, а после уже приступить к поиску проблемы. Однако, после перезапуска как по мановению волшебной палочки, Redmine поднялся.

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

Источники, использованные при написании статьи:
[1] http://kk-openam.blogspot.com/2012/05/redmine.html
[2] http://blog.whatgeek.com.pt/2011/11/install-core-fonts-centos-6/
[3] http://www.redmine.org/projects/redmine/wiki/RedmineInstall