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 webmaster@redminesite.fvds.ru.ru 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, далее меняем на новый пароль и пользуемся.