В этой статье мы рассмотрим процесс установки Redmine на сервер под управлением Ubuntu. Redmine — это свободная система управления проектами, которая написана на Ruby on Rails. Она позволяет отслеживать задачи, управлять временем, вести базу знаний и многое другое.
Шаг 1: Создание директории для Redmine
Сначала создадим директорию для Redmine:
mkdir /opt/redmine
Шаг 2: Переход в директорию Redmine
Перейдем в созданную директорию:
cd /opt/redmine
Шаг 3: Загрузка файла Redmine
Теперь загрузим последнюю версию Redmine:
wget https://www.redmine.org/releases/redmine-5.1.3.zip
Шаг 4: Распаковка файла
Распакуем загруженный файл:
unzip redmine-5.1.3.zip
Переместим все файлы из папки Redmine в нашу:
mv redmine-5.1.3/* /opt/redmine
Шаг 5: Установка зависимостей
Установим необходимые зависимости:
apt-get install mysql-server mysql-common ruby rails -y
Шаг 6: Создание базы данных для Redmine
Войдем в командную строку MySQL:
mysql -uroot -p
Создадим базу данных для Redmine:
CREATE DATABASE redmine CHARACTER SET utf8mb4;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
Нажмем CTRL+D
чтобы выйти из MySQL или пишем quit
.
Шаг 7: Настройка конфигурации базы данных
Redmine, использующий MySQL 5.6, 5.7, 8.0 и 8.1 в качестве бэкенда базы данных, имеет известные проблемы в случае одновременных модификаций вложенной структуры задачи, то есть при параллельной модификации различных идентификаторов родительских задач. Более подробную информацию можно найти в задаче № 39437 и всех связанных с ней задачах.
Redmine версии 5.1.1 и выше содержит важные исправления для смягчения этой проблемы (r22458, r22459 и r22460), но эти исправления также требуют изменения уровня изоляции транзакций на READ COMMITTED
для правильной работы. По умолчанию уровень изоляции транзакций в MySQL является REPEATABLE READ
согласно официальной документации. Для версий MySQL 5.7.20 и старше используется параметр tx_isolation вместо transaction_isolation.
Изменим уровень изоляции транзакций в файле конфигурации MySQL на сервере:
transaction_isolation="READ-COMMITTED"
Путь к файлу с этой настройкой зависит от операционной системы, например, в Ubuntu это /etc/mysql/conf.d/mysql.cnf
.
Изменение этого параметра требует перезагрузки сервера. Если вы не хотите перезагружать сервер, этот параметр также может быть применен во время выполнения, запустив следующий запрос: SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
, но важно также внести изменения в файл конфигурации, чтобы сохранить настройку после перезапуска.
Все крупные облачные провайдеры позволяют изменять этот параметр со страницы администрирования облака.
Как и любое другое изменение, внесенное в производственную систему, настоятельно рекомендуется протестировать это изменение перед тем, как сделать его в производстве.
В случае более сложной настройки с репликой, это изменение может также изменить формат двоичного журнала вашего сервера, поскольку только строковый двоичный журнал поддерживается на уровне изоляции READ COMMITTED
.
Настроим конфигурацию базы данных:
cp config/database.yml.example config/database.yml
Открываем файл config/database.yml
и добавляем следующие строки:
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "my_password"
variables:
transaction_isolation: "READ-COMMITTED"
Шаг 8: Установка дополнительных пакетов
Откроем файл Gemfile:
nano Gemfile
Приводим к такому виду верх файла, до строки # Ruby Standard Gems
:
source 'https://rubygems.org'
ruby '>= 2.7.0', '< 3.3.0'
gem 'rails', '6.1.7.8'
gem 'rouge', '~> 4.2.0'
gem 'request_store', '~> 1.5.0'
gem 'mini_mime', '~> 1.1.0'
gem "actionpack-xml_parser"
gem 'roadie-rails', '~> 3.1.0'
gem 'marcel'
gem 'mail', '~> 2.8.1'
gem 'nokogiri', '~> 1.15.2'
gem 'i18n', '~> 1.14.1'
gem 'rbpdf', '~> 1.21.3'
gem 'addressable'
gem 'rubyzip', '~> 2.3.0'
gem 'webrick', '~> 1.7'
Без webrick
мы не сможем запустить сервер Redmine.
Шаг 9: Настройка конфигурации Redmine
Настроим конфигурацию Redmine:
cp config/configuration.yml.example config/configuration.yml
Открываем файл config/configuration.yml
и добавляем следующие строки:
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "my_password"
variables:
transaction_isolation: "READ-COMMITTED"
Шаг 10: Установка Bundler
Установим Bundler:
gem install bundler
Шаг 11: Установка пакетов
Установим пакеты:
bundle config set --local without 'development test rmagick'
bundle install
Шаг 12: Генерация секретного токена
Сгенерируем секретный токен:
bundle exec rake generate_secret_token
Шаг 13: Обновление базы данных
Обновим базу данных:
RAILS_ENV=production bundle exec rake db:migrate
Шаг 14: Загрузка начальных данных
Загрузим начальные данные:
RAILS_ENV=production REDMINE_LANG=ru bundle exec rake redmine:load_default_data
Шаг 15: Создание директорий для временных файлов
Создадим директории для временных файлов:
mkdir -p tmp tmp/pdf public/plugin_assets
Шаг 16: Изменение прав доступа к директориям
Изменим права доступа к директориям:
sudo chown -R redmine:redmine files log tmp public/plugin_assets
sudo chmod -R 755 files log tmp public/plugin_assets
Шаг 17: Изменение прав доступа к файлам
Изменим права доступа к файлам:
find files log tmp public/plugin_assets -type f -exec chmod -x {} +
Шаг 18: Запуск сервера
Запустим сервер:
bundle exec rails server -e production
Чтобы остановить сервер, нажмите Ctrl+C.
Шаг 19: Настройка сервиса Systemd
Настроим сервис Systemd:
nano /etc/systemd/system/rails.service
Добавим следующие строки в файл rails.service
:
[Unit]
Description=Rails Server Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/journal
ExecStart=/usr/bin/bundle exec /usr/bin/rails server -e production
Restart=always
[Install]
WantedBy=multi-user.target
Сохраните изменения и закройте редактор.
Шаг 20: Активация и запуск сервиса
Активируем и запустим сервис:
systemctl enable rails
systemctl start rails
Теперь вы можете зайти в Redmine по адресу http://ваш-ип:3000, используя логин admin
и пароль admin
.
Подсказка: порт можно глянуть по команде systemctl status rails
или journalctl -xeu rails
.