Skip to main content

Установка Redmine 5.1.2 на Debian 12 + PostgreSQL + MariaDB (MySQL)

Описание

Redmine - это гибкое веб-приложение для управления проектами.

Оно написано с использованием фреймворка Ruby on Rails и является кросс-платформенным и совместимым с базами данных.

Redmine имеет открытый исходный код и выпускается на условиях GNU General Public License версии 2 (GPL).

В данной статье описаны варианты развёртывания Redmine с базами данных PostgreSQL и MariaDB (MySQL).

Установка

В данной установке используется образ Debian 12 netinstall.

Подготовка ОС для установки

Перед установкой необходимо обновить пакеты:

apt -y update
apt -y upgrade

Настройка локали:

dpkg-reconfigure locales

Добавление пользователя root в группу www-data:

usermod -aG www-data root

Установка дополнительных пакетов:

apt -y install sudo wget mc htop chrony apt-transport-https ca-certificates gnupg2 curl

PostgreSQL

Раздел только для установки Redmine c базой данных PostgreSQL!

Установка Ruby, Apache2, PostgreSQL и других дополнительных пакетов:

apt -y install ruby ruby-dev apache2 apache2-dev libapache2-mod-passenger build-essential libxslt1-dev libxml2-dev zlib1g-dev imagemagick libmagickwand-dev postgresql postgresql-contrib libpq-dev libmariadb-dev

Для работы коннектора требуется установка gem "mysql2", даже если Вы будете использовать PostgreSQL. 
Поэтому требуется установка библиотеки libmariadb-dev.

Заходим под пользователем postgres:

su - postgres

Подключаемся к серверу PostgreSQL:

psql

Задаем пароль для пользователя postgres:

ALTER USER postgres WITH PASSWORD 'Ваш_пароль';

Создаем базу данных с именем redmine и владельцем postgres:

CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=postgres;

Закрываем соединение с Postgres:

\q

Выходим из под пользователя postgres:

exit

MariaDB (MySQL)

Раздел только для установки Redmine c базой данных MySQL!

Установка Ruby, Apache2, MySQL и других дополнительных пакетов:

apt -y install ruby ruby-dev apache2 apache2-dev libapache2-mod-passenger build-essential libxslt1-dev mariadb-server libmariadb-dev-compat libmariadb-dev libmysqld-dev libxml2-dev zlib1g-dev imagemagick libmagickwand-dev

Начиная с версии 5.1.1+ redmine использует в коннекторе transaction_isolation: "READ-COMMITTED".
Поэтому необходимо внести изменение в конфигурацию сервера.

Открываем  файл конфигурации сервера MariaDB:

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Находим раздел [mariadb] и под ним добавляем строку:

[mariadb]
transaction-isolation = READ-COMMITTED

Сохраняем файл конфигурации и перезапускаем сервер:

systemctl restart mysqld

Для подключения к MySQL используем следующую команду:

mysql

Проверяем уровень изоляции транзакций:

select @@session.tx_isolation;

Результат вывода команды должен быть таким:

+------------------------+
| @@session.tx_isolation |
+------------------------+
| READ-COMMITTED         |
+------------------------+

Создаем базу данных и пользователя:

CREATE DATABASE redmine CHARACTER SET utf8mb4;
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost' IDENTIFIED BY 'Ваш_пароль_пользователя_redmine_в_БД';

После создания применяем изменения и выходим из MySQL:

FLUSH PRIVILEGES;
EXIT;

Redmine

Загружаем и распаковываем Redmine:

mkdir /opt/redmine
wget https://www.redmine.org/releases/redmine-5.1.2.tar.gz
tar -xvzf redmine-5.1.2.tar.gz -C /opt/redmine/ --strip-components=1
cd /opt/redmine/

Копируем дефолтный файл конфигурации в текущую конфигурацию:

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

Редактируем файл текущей конфигурации:

nano config/database.yml

Для работы с PostgreSQL приводим раздел конфигурации production к виду:

production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: postgres
  password: "Ваш_пароль_пользователя_postgres_в_БД"

Для работы с MySQL приводим раздел конфигурации production к виду:

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "Ваш_пароль_к_базе_данных"
  # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7
  encoding: utf8mb4
  variables:
    # Recommended `transaction_isolation` for MySQL to avoid concurrency issues is
    # `READ-COMMITTED`.
    # In case of MySQL lower than 8, the variable name is `tx_isolation`.
    # See https://www.redmine.org/projects/redmine/wiki/MySQL_configuration
    tx_isolation: "READ-COMMITTED"

Начиная с версии 5.1.1 redmine использует в коннекторе transaction_isolation: "READ-COMMITTED", в установленной нами MariaDB используется старое значение, поэтому необходимо заменить transaction_isolation на tx_isolation.

Меняем

transaction_isolation: "READ-COMMITTED"

на

tx_isolation: "READ-COMMITTED"

Продолжение установки для всех:

Установка bundler:

gem install bundler

Установка gems необходимых для Redmine:

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

Вариант установки bundler и gems с указанием каталога, пример:

gem install bundle --install-dir /opt/redmine/gems/ --lock
bundle config set --local path '/opt/redmine/gems/'
bundle install

Генерируем секретный токен:

bundle exec rake generate_secret_token

Создаем структуру базы данных:

RAILS_ENV=production bundle exec rake db:migrate

Загружаем данные конфигурации по умолчанию:

RAILS_ENV=production REDMINE_LANG=ru bundle exec rake redmine:load_default_data

Создаем несколько необходимых файлов и каталогов с помощью следующей команды:

for i in tmp tmp/pdf public/plugin_assets; do [ -d $i ] || mkdir -p $i; done

Apache2

Настройка apache2 для redmine.

Необходимо создать файл виртуальной конфигурации Apache2 для Redmine и записать конфигурацию.

Создаем файл:

nano /etc/apache2/sites-available/redmine.conf

Добавляем строки:

<VirtualHost *:80>
	ServerName redmine.example.com
	RailsEnv production
	DocumentRoot /opt/redmine/public

	<Directory "/opt/redmine/public">
	        Allow from all
	        Require all granted
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/redmine_error.log
        CustomLog ${APACHE_LOG_DIR}/redmine_access.log combined
</VirtualHost>

Сохраните и закройте файл конфигурации.

Подключаем файл виртуального хоста Redmine:

a2ensite redmine

Перезапускаем службу apache2:

systemctl restart apache2


SSL-сертификаты

Настройка Apache для работы Redmine по протоколу HTTPS, если требуется.

Включаем mod ssl для apache:

a2enmod ssl

Загружаем и складываем сертификаты в каталог /etc/ssl/

Открываем файл виртуальной конфигурации Apache для Redmine:

nano /etc/apache2/sites-available/redmine.conf

Добавляем блок для работы с SSL, ниже под текущей конфигурацией. В блоке указаны пути расположения SSL-сертификатов.

<VirtualHost *:443>
        DocumentRoot /opt/redmine/public

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on

        SSLCertificateFile      /etc/ssl/certificate.crt
        SSLCertificateKeyFile   /etc/ssl/key.key
        #SSLCertificateChainFile /etc/ssl/chain.crt


        <Directory "/opt/redmine/public">
                Allow from all
                Require all granted
        </Directory>
</VirtualHost>

Переадресация с HTTP на HTTPS

Если необходимо настроить автоматическую переадресацию с HTTP на HTTPS, включаем mod rewrite на apache:

a2enmod rewrite

Открываем файл виртуальной конфигурации Apache для Redmine:

nano /etc/apache2/sites-available/redmine.conf

Внутри блока <VirtualHost *:80> добавляем следующие строки:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

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

<VirtualHost *:80>
        ServerName redmine.example.com
        RailsEnv production
        DocumentRoot /opt/redmine/public

        <Directory "/opt/redmine/public">
                Allow from all
                Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/redmine_error.log
        CustomLog ${APACHE_LOG_DIR}/redmine_access.log combined

        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

</VirtualHost>

Перезапускаем сервис apache2 для применения изменений:

systemctl restart apache2

SMTP

Настройка SMTP для возможности отправки писем Redmine'ом.

cd /opt/redmine/
cp config/configuration.yml.example config/configuration.yml
nano config/configuration.yml

Пример блока настройки SMTP с SSL:

# default configuration options for all environments
default:
  # Outgoing emails configuration
  # See the examples below and the Rails guide for more configuration options:
  # http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration
  email_delivery:
      delivery_method: :smtp
      smtp_settings:
        address: "smtp.yandex.ru"
        port: 465
        ssl: true
        domain: "smtp.yandex.ru"
        authentication: :login
        user_name: "example@yandex.ru"
        password: "Ваш_пароль_или_пароль_приложения"

Открываем Redmine и переходим Администрирование - Настройки - Уведомления по email.

В поле Исходящий email адрес указываем адрес из конфигурационной файла user_name: "example@yandex.ru" и жмём кнопку Сохранить.

image.png

После настройки можно отправить тестовый email.

UFW

Устанавливаем фаервол ufw:

apt -y install ufw

Включаем политики входящих и исходящих соединений по умолчанию:

ufw default deny incoming
ufw default allow outgoing

Открываем необходимые нам порты:

ufw allow ssh
ufw allow http
ufw allow https

Добавляем ufw в автозагрузку:

systemctl enable ufw
systemctl restart ufw

Включаем ufw:

ufw enable

Перечитываем правила:

ufw reload

Проверяем статус и открытые порты:

ufw status

Возможные проблемы

Не открываются некоторые страницы настроек в администрировании:

cd /opt/redmine/
chmod -R 755 files log tmp public/plugin_assets && chown -R www-data:www-data files/ log/ tmp/ public/plugin_assets

Если не помогло, попробуйте изменить права на любые другие например на 777, а потом вернуть 755.

cd /opt/redmine/
chmod -R 777 files log tmp public/plugin_assets && chown -R www-data:www-data files/ log/ tmp/ public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets && chown -R www-data:www-data files/ log/ tmp/ public/plugin_assets