воскресенье, 21 июня 2015 г.

Установка RedMine на Oracle Linux 7, apache, fcgi, postgresql



1.                       Не самый лучший вариант использовать Oracle Linux, если для Вас это не критично, то лучше ставить на более дружелюбную redmine систему.
2.                       Эта статья ни на что не претендует и написана для освежения памяти.
3.                       Основные этапы установки
3.1.                 Установка ruby.
3.2.                 Установка postgresql.
3.3.                 Сборка ну или установка redmine.
3.4.                 Установка fcgi.
3.5.                 Настройка apache.
3.6.                 Наверное это подходит для любого RedMine.

Все действия ниже выполнялись под root. SELinux лучше поставить в режим permissive на время установки и отладки, чтобы не нарваться на ошибки доступа вызванные именно se. После успешного запуска redmine под apache в режиме permissive можно будет перевести в enforcing и отловить ошибки, если такие будут.
Создаём пользователя redmine, потом пригодится, собственно он и будет владельцем католога c redmine
useradd redmine
passwd redmine (redmine123!)

Устанавливаем ruby и сразу с rails, точнее ставим rvm и вместе с ним ruby и rails, это наверное самый простой способ, но не единственный. Подробно и актуальную версию всегда можно взять тут:
Перед инсталляцией генерим ключик, подробности на ресурсе выше.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
\curl -sSL https://get.rvm.io | bash -s stable --rails
RVM поставит ruby, rails и менеджер пакетов для руби gem.
Устанавливаем  пакет bundler
gem install bundler
Устанавливаем  ImageMagick
yum install ImageMagick
yum install ImageMagick-devel

В Oracle Linux devel пакет лежит в репозитории optional_latest, как и многие зависимые, нужно его подключить в yum.
После установки пакетов ImageMagick, можно ставить gem rmagick, если не удалось поставить девел пакеты, то и gem rmagick не станет, во время сборки RedMine нужно будет исключить его.
gem install rmagick
Устанавливаем Postgresql
yum install postgresql postgresql-server
yum install postgresql-devel.x86_64
Настраиваем postgresql сервер, при установке пользователь postgres создался автоматом.
Проверим cat /etc/passwd |grep postgres
Задаём ему пароль passwd postgres (postgres123!)
Работаем от пользователя postgres
su – postgres
создаём кластер или базу
initdb
по умолчанию в /var/lib/… напишет где.
Смотрим и правим конфиг /var/lib/pgsql/data/postgresql.conf
listen_addresses=’*
port = 5432

Правим /var/lib/pgsql/data/pg_hba.conf если вам это необходимо.
host    all             all             192.168.1.110/24          md5
host    redmine         redmine         ::1/128                            md5

Если включен selinux, то нужно выполнить:
setsebool -P httpd_can_network_connect_db on
 
Создаём суперпользователя, вдруг потом пригодится:
su – postgresql
psql
CREATE ROLE sa WITH SUPERUSER LOGIN PASSWORD 'юююю1m';
Создаем базу и пользователя для redmine
CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity';
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;

Качаем нужную нам версию redmain, распаковываем в папку в которой она будет жить
например /opt/redmine-ХХ/) и доустанавливаем все зависимости необходимые ей.
В папке с редмайн выполняем:
bundle install --without rmagic
without используем при отсутсвии rmagick
 
Настраиваем подключение к базе redmine /config/database.yml
Пример для PostgreSQL (порт по-умолчанию):
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username:redmine
  password: “my_password

Генерируем ключ(в корне редмайн), предварительно ставим гемм pg
gem install pg
rake generate_secret_token

Наполняем схему(в корне редмайн)
RAILS_ENV=production rake db:migrate
Загружаем дефолтные данные с русским языком
RAILS_ENV=production REDMINE_LANG=ru rake redmine:load_default_data
Тестируем, пока можно и под админом.
ruby script/rails server webrick -e production
Используйте учетную запись администратора по умолчанию, чтобы войти:
·                     Логин: admin
·                     Пароль: admin
Не забываем раздать права
Можно раздать примерно так:
chmod -R 664 redmine-2.4.2
chown -R redmine:redmine redmine-2.4.2
find redmine-2.4.2 -type d -exec chmod 755 {} \;

Создаём папки для плагинов и прочей бороды(в корне редмайн):
mkdir tmp tmp/pdf public/plugin_assets
chown -R redmine:redmine files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets
chmod 666 log/production.log 

Установка fcgi, необходимый для взаимодействия apache и redmine.
Последняя версия где-то тут: http://www.fastcgi.com/dist/fcgi.tar.gz
Качаем к себе, распаковываем
tar -zxvf fcgi.tar.gz
устанавливаем
./configure
make
make install
если стало корректно можно ставить соответствующий gem:
gem install fcgi
В корне редмайна нужно создать файлик Gemfile.local с содержимым
Gem “fcgi”
Пересобираем bundle install
Если у апача нет модуля mod_fcgi, то ставим – для этого нужен apxs(апачевский сборщик) поэтому ставим apache-devel
yum install httpd-devel
качаем где-то тут:
ставим
./configure
make
make install

Копируем /redmine/public/dispatch.cgi.example и htaccess в соответствующие «боевые» файлы.
cp dispatch.fcgi.example dispatch.fcgi
cp htaccess.fcgi.example .htaccess
На эти файлы нужно дать права на выполнение
Chmod 755 .htaccess dispatch.fcgi

В файле dispatch.fcgi нужно указать откуда будет запускаться руби(первая строка J), в этой папке помимо руби должен быть bundle и setup.rb,
Использую обертки.
#!/usr/local/rvm/wrappers/ruby-2.2.1/ruby
Полный dispatch.fcgi выглядит так:
#!/usr/local/rvm/wrappers/ruby-2.2.1/ruby
require File.dirname(__FILE__) + '/../config/boot'
require File.dirname(__FILE__) + '/../config/environment'

class Rack::PathInfoRewriter
  def initialize(app)
    @app = app
  end

  def call(env)
    env.delete('SCRIPT_NAME')
    parts = env['REQUEST_URI'].split('?')
    env['PATH_INFO'] = parts[0]
    env['QUERY_STRING'] = parts[1].to_s
    @app.call(env)
  end
end

Rack::Handler::FastCGI.run Rack::PathInfoRewriter.new(RedmineApp::Application)

Настраиваем апач, предпологается, что он уже установлен и нам нужно только создать виртуальный хост и настроить его. Обычно конфиги апача лежат где-то тут /etc/httpd/conf/
Добавили в апаче userdir.conf

    AllowOverride FileInfo AuthConfig Limit Indexes

    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

    Require method GET POST OPTIONS


Так может выглядеть секция ыиртуального хоста:  

        ServerName redmine2.dddd.ddd

        ServerAdmin webmaster@dd.ddd

        DocumentRoot /opt/redmine-2.4.2/public/

        ErrorLog logs/redmine_error_log

        #If you are using mod_fcgid and are going to upload files larger than

        #131072 bytes you should consider adding the following line

        #that allows to upload files up to 20 mb

        MaxRequestLen 400971520

       

         Options Indexes ExecCGI FollowSymLinks

         Order allow,deny

         Allow from all

         AllowOverride all

       



       

         FcgidBusyTimeout 3600

         FcgidIOTimeout 300

         FcgidMaxRequestInMem 409715200

       


Лучше переопределить владельца некоторых папок на пользователя под которым запускается апач:
chown -R apache:apache files log tmp public public/plugin_assets
 
После любых изменений рестаруем апач. Если что-то пошло не так смотрим и анализируем логи:
/etc/httpd/logs

/opt/redmine…/log

Для пользующих selinux не лишним будет посмотреть в сторону:
 chcon -R -t httpd_sys_rw_content_t /opt/redmine-2.4.2/log/
 chcon -R -t httpd_sys_rw_content_t /opt/redmine-2.4.2/files
 chcon -R -t httpd_sys_rw_content_t /opt/redmine-2.4.2/public/plugin_assets/
chcon -R -t httpd_sys_rw_content_t /opt/redmine-2.4.2/tmp
и др. каталогов, например хранилищ, если вы их используете.
Если для авторизации пользователей redmain используется ldap, то:
setsebool -P httpd_can_connect_ldap 1
Для подключения к базе:
setsebool -P httpd_can_network_connect_db on 
Для отправки email уведомлений:
setsebool -P httpd_can_sendmail on  

Используемые статьи:

http://www.redmine.org/projects/redmine/wiki/HowTo_configure_Apache_to_run_Redmine