url image

Установка Redmine на CentOS и AlmaLinux

Redmine — инструмент для управления проектами с открытым исходным кодом. В данной статье рассмотрим установку Redmine на VDS с ОС CentOS и AlmaLinux с предустановленной панелью ISPmanager.

CentOS 7

1. Установим Ruby. Нам нужна последняя версия, её нет в репозиториях, поэтому собираем руками:

# yum install openssl-devel zlib-devel gcc gcc-c++ make autoconf readline-devel curl-devel expat-devel gettext-devel patch
# mkdir /usr/src/ror
# cd /usr/src/ror


# wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.7.tar.gz


# tar xf ruby-2.7.7.tar.gz


# cd ruby-2.7.7
# ./configure
# make
# make install

2. Ставим rake:

# gem install rake

и rails:

# gem install rails

3. Ставим дополнительное ПО, иначе не встанут все нужные гемы:

# yum install mysql-devel
# yum install postgresql-devel
# yum install ImageMagick-devel
# yum install sqlite-devel

4. Устанавливаем svn:

# yum install subversion

5. В панели ISPmanager создаём пользователя и домен, принадлежащий данному пользователю. Переходим в корневую директорию домена. Качаем Redmine:

# svn co http://svn.redmine.org/redmine/branches/4.2-stable ./

6. Ставим нужные гемы:

# bundle install

7. Создаем в панели ISPmanager базу данных в кодировке utf8. Конфигурируем Redmine:

# cp ./config/database.yml.example ./config/database.yml

Прописываем в файле ./config/database.yml нужные данные. В блоке production указываем название БД в строке database, меняем при необходимости хост (по умолчанию localhost), имя пользователя базы данных в строке username и указываем пароль пользователя в строке password в кавычках. Далее раскатываем шаблон в нашу базу данных (возможно, сначала потребуется сгенерировать ключи, см. следующий пункт):

# RAILS_ENV=production rake db:migrate

8. Генерируем ключи:

# rake generate_secret_token

9. Осталось сконфигурировать Apache:

# gem install passenger
# yum install httpd-devel
# passenger-install-apache2-module

Во время установки следите за сообщениями. Нажимайте Enter, чтобы продолжить установку. Установка может занять время.

Затем в конфигурационном файле Apache прописываем (предварительно проверив пути, т.к. версии могут отличаться):

LoadModule passenger_module /usr/local/lib/ruby/gems/2.7.0/gems/passenger-6.0.16/buildout/apache2/mod_passenger.so
  <IfModule mod_passenger.c>
    PassengerRoot /usr/local/lib/ruby/gems/2.7.0/gems/passenger-6.0.16 
    PassengerDefaultRuby /usr/local/bin/ruby
  </IfModule>

И в блоке VirtualHost в двух местах меняем корневую директорию домена c directory на directory/public.

DocumentRoot /var/www/имя_пользователя/data/www/название_сайта/public

и

<Directory /var/www/имя_пользователя/data/www/название_сайта/public>

Если установлен NGINX, то в конфигурации домена также добавляем /public в конце пути корня сайта (если есть конфигурация https, то указываем и там).

Добавляем в конфигурацию Apache:

<Directory /var/www/имя_пользователя/data/www/название_сайта/public>
        AllowOverride all
        Options -MultiViews
</Directory>

Готово.

Если возникла ошибка 500 — нужно проверить логи. Вполне вероятно, что потребуется перевести домен на работу по HTTPS, для этого в панели ISPmanager можно подключить бесплатный SSL-сертификат Let’s Encrypt и включить перенаправление с HTTP на HTTPS в настройках домена. После не забудьте проверить пути до корня сайта в файлах конфигурации Apache и NGINX, добавьте /public.

Используйте стандартные логин и пароль (admin/admin) для первого входа в Redmine. После смените пароль администратора на новый.

Alma Linux 8

1. В панели ISPmanager создаем пользователя, базу данных и домен. База данных и домен должны принадлежать созданному пользователю.

Переходим во вкладку Пользователи, нажимаем Создать пользователя.

Придумываем имя пользователя (в целях безопасности рекомендуем создавать пользователей под неочевидными именами), сложный пароль (записываем к себе, т.к. в панели ISPmanager его уже не посмотреть, но в случае утери пароля можно легко создать новый), ставим галочку на Доступ к shell.

Жмем Далее. FTP-пользователь нам не нужен, можно убрать галочку. Сразу же можно создать домен. Почтовый домен также не обязателен. Жмем Далее и Завершить.

Переходим в раздел Базы данных, нажимаем Создать базу данных, придумываем имя БД, владельцем выбираем нашего пользователя, придумываем нового пользователя БД и сложный пароль. Нажимаем Создать.

2. Установим репозиторий epel и обновим список репозиториев:

# dnf install epel-release 
# dnf update

3. Устанавливаем пакеты и нужные библиотеки:

# dnf group install "Development Tools"
# dnf install ruby ruby-devel rpm-build libxml2-devel make automake libtool mariadb-devel gcc httpd-devel libcurl-devel gcc-c++
# dnf install ImageMagick ImageMagick-devel --skip-broken

4. Далее работы будем проводить от созданного нами пользователя пользователя redmine. Потребуется добавить его в sudoers.

# usermod -aG wheel redmine
# su - redmine

5. Теперь мы работаем в домашней директории нашего пользователя. Проверим:

# pwd
/var/www/redmine/data

Созданный нами ранее сайт расположен в директории /var/www/redmine/data/www/redminesite.fvds.ru/, где redminesite.fvds.ru — название сайта. Для дальнейшей работы важно понимать, в какой директории мы находимся.

6. Скачиваем актуальную версию Redmine, после чего распаковываем содержимое в директорию нашего сайта (добавим –strip-components=1, чтобы распаковать содержимое папки, расположенной в архиве).

# wget https://redmine.org/releases/redmine-5.0.4.tar.gz
# tar xzf redmine-5.0.4.tar.gz -C www/myredminesite.fvds.ru/ --strip-components=1

Скачанный архив можно удалить.

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

# cp www/myredminesite.fvds.ru/config/configuration.yml.example www/myredminesite.fvds.ru/config/configuration.yml

# cp www/myredminesite.fvds.ru/public/dispatch.fcgi.example www/myredminesite.fvds.ru/public/dispatch.fcgi

# cp www/myredminesite.fvds.ru/config/database.yml.example www/myredminesite.fvds.ru/config/database.yml

8. Отредактируем блок production в файле конфигурации database.yml, указав в нём информацию о нашей базе данных (можно посмотреть в панели ISPmanager).

Файл будет выглядеть примерно так:

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "super_secret_paswwd"

  # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7

  encoding: utf8mb4

Где localhost — адрес сервера БД, redmine — название БД, redmine — имя пользователя БД, в строке password в кавычках — пароль пользователя redmine БД. Укажите свои данные.

9. Устанавливаем bundler:

# gem install bundler

Здесь может появится ошибка из-за несовместимости версий:

ERROR:  Error installing bundler:

The last version of bundler (>= 0) to support your Ruby & RubyGems was 2.3.26. Try installing it with `gem install bundler -v 2.3.26`

bundler requires Ruby version >= 2.6.0. The current ruby version is 2.5.0.

Можно последовать подсказке и установить bundler, совместимый с версией Ruby, либо обновить Ruby. При работе с Ruby и gem-ами очень важно устанавливать корректные версии пакетов, иначе могут возникнуть проблемы с совместимостью.

Попробуем обновить Ruby. В подсказке выше указано, что у нас Ruby 2.5.0, а нам нужна 2.6.0. Для этого используем sudo, либо выполняем обновление из под root.

# dnf module reset ruby
# dnf module enable ruby:2.6
# dnf install ruby

Возвращаемся к пользователю redmine и пробуем установить bundler:

# gem install bundler
Successfully installed bundler-2.4.5
Parsing documentation for bundler-2.4.5
Installing ri documentation for bundler-2.4.5
Done installing documentation for bundler after 0 seconds
1 gem installed

10. Далее установим зависимости:

# bundle config set --local without 'development test'
# bundle install

Если получите ошибку вида:

-bash: bundle: command not found

то можно использовать полный путь до bundle относительно директории, в которой вы расположены (сейчас вы в домашней директории пользователя redmine):

# ./bin/bundle config set --local without 'development test'
# ./bin/bundle install

Если будет ошибка Could not locate Gemfile, необходимо перейти в директорию сайта:

# cd www/redminesite.fvds.ru/
# ./bin/bundle install

Потребуется ввести пароль нашего пользователя redmine.

Если возникла ошибка, связанная с версиями gem, можно выполнить следующую команду, чтобы восстановить их исходное состояние:

# sudo gem pristine --all

11. Далее необходимо сгенерировать токены, создать структуру базы данных и задать конфигурацию по умолчанию (используем свой путь до bundle и запускаем команды из директории сайта):

# ../../bin/bundle exec rake generate_secret_token
# RAILS_ENV=production ../../bin/bundle exec rake db:migrate
# RAILS_ENV=production REDMINE_LANG=en ../../bin/bundle exec rake redmine:load_default_data

12. Проверяем, что права и владелец директории сайта выставлены правильно. При необходимости указываем владельцем нашего пользователя redmine и права 755.

13. Для работы Redmine под нашим доменом необходимо установить passenger и модуль Apache passenger-install-apache2-module (для модуля, возможно, также потребуется указать его путь относительно нашей директории):

# gem install passenger
…
Successfully installed passenger-6.0.17
Parsing documentation for passenger-6.0.17
Installing ri documentation for passenger-6.0.17
Done installing documentation for passenger after 90 seconds
1 gem installed
# ../../bin/passenger-install-apache2-module

Будет долгая установка. Также потребуется выбрать язык Ruby и нажать Enter.

14. Можно выйти из под пользователя redmine. Далее потребуется отредактировать файл конфигурации Apache нашего домена (можно в терминале, можно в панели ISPmanager, нажав на наш домен и на кнопку Файлы конфигурации). 

В конфигурации Apache добавляем /public в конец путей корня сайта:

DocumentRoot /var/www/redmine/data/www/redminesite.fvds.ru/public
<Directory /var/www/redmine/data/www/redminesite.fvds.ru/public>

Так как Redmine по умолчанию работает на порту 3000, перенастроим конфиг Apache на этот порт и добавим необходимые строки для корректной работы. В целом конфигурация Apache будет выглядеть примерно так:

Listen 3000
<IfModule mod_passenger.c>
  PassengerRoot /var/www/redmine/data/.gem/ruby/gems/passenger-6.0.17 # указываем путь до нашей версии passenger
  PassengerEnabled On
  PassengerDefaultRuby /usr/bin/ruby # путь до Ruby 
</IfModule>
<VirtualHost 127.0.0.1:3000> #здесь меняем стандартный порт 8080 на 3000
    ServerName redmine2.fvds.ru
    DocumentRoot /var/www/redmine/data/www/redminesite.fvds.ru/public
    <Directory /var/www/redmine/data/www/redminesite.fvds.ru> # добавляем блок
    Options Indexes ExecCGI FollowSymLinks
     Require all granted
     AllowOverride all
    </Directory>
    ServerAdmin [email protected]
    AddDefaultCharset off
    SuexecUserGroup redmine redmine
    CustomLog /var/www/httpd-logs/redminesite.fvds.ru.access.log combined
    ErrorLog /var/www/httpd-logs/redminesite.fvds.ru.error.log
…

В конфигурацию NGINX, работающего в качестве прокси, добавляем также /public в конец пути корня сайта.

Перезапускаем Apache и NGINX, предварительно проверив, что в конфигах нет синтаксических ошибок с помощью команд # httpd -t и # nginx -t . Если конфиги правите в панели ISPmanager — она автоматически проверяет синтаксис и в случае ошибки не даст сохранить изменения.

15. Запускаем веб-сервер в фоновом режиме с помощью команды:

# ../../bin/bundle exec rails server webrick -de production

И переходим в браузер по ссылке вашего домена. Порт 3000 в конец добавлять не нужно, т.к. у нас стоит NGINX proxy.

Готово. Вводим стандартные логин и пароль admin/admin, далее меняем на новый пароль и пользуемся.

 

Этот материал был полезен?