Гид по технологиям

Установка Redmine на Rocky Linux 8

• 8 min read • DevOps • Обновлено 27 Nov 2025
Установка Redmine на Rocky Linux 8
Установка Redmine на Rocky Linux 8

Что такое Redmine

Redmine — это бесплатное и открытое ПО для управления проектами и трекинга задач, написанное на фреймворке Ruby on Rails. Поддерживает интеграцию с системами контроля версий, имеет браузер репозитория, просмотр различий (diff), вики, форумы, учёт времени и ролевой доступ. Совместимо с разными ОС и СУБД, локализовано на 49 языков.

Краткое определение: Redmine — веб‑приложение для совместной работы над проектами и задачами с гибкой конфигурацией прав доступа.

TL;DR (короткий список шагов)

  • Обновите систему и отключите SELinux при необходимости.
  • Откройте порты в firewalld (80/443/3000 для теста).
  • Установите Apache, MySQL, Ruby 2.7 и зависимости.
  • Скачайте Redmine, настройте database.yml и выполните bundle install и миграции.
  • Установите Phusion Passenger и подключите его к Apache.
  • Выпустите SSL-сертификат через Certbot и настройте Nginx как reverse‑proxy с HTTPS.

Основные требования

  • Сервер с Rocky Linux 8.
  • Пользователь без sudo с root‑привилегиями (или привилегии через sudo).
  • SELinux отключён (или настроен корректно для веб‑сервера).
  • Система обновлена.

Пример обновления:

$ sudo dnf update

Шаг 1 — Настройка брандмауэра

Rocky Linux использует firewalld. Проверьте состояние:

$ sudo firewall-cmd --state
running

Откройте порт 3000 (удобно для тестового запуска Rails):

$ sudo firewall-cmd --permanent --add-port=3000

Разрешите HTTP и HTTPS:

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Примените изменения:

$ sudo firewall-cmd --reload

Шаг 2 — Установка Apache

Мы будем использовать Apache для запуска в связке с Passenger.

$ sudo dnf install httpd

Включите и запустите службу Apache:

$ sudo systemctl enable --now httpd.service

Добавьте текущего пользователя в группу apache, чтобы обеспечить доступ к каталогу /var/www/redmine (при необходимости):

$ sudo usermod -aG $USER apache

Примечание: после этой команды возможно потребуется выход и повторный вход в систему, чтобы членство в группе вступило в силу.

Шаг 3 — Установка и настройка MySQL

В качестве СУБД используем MySQL (в AppStream доступна актуальная версия).

$ sudo dnf install mysql-server

Включите и запустите MySQL:

$ sudo systemctl enable mysqld --now

Запустите безопасную настройку:

$ sudo mysql_secure_installation

При настройке вам предложат включить Validate Password Plugin. Рекомендуется выбрать Y, затем уровень 2 (STRONG) — это потребует пароль минимум из 8 символов, с заглавными, строчными, цифрами и спецсимволами.

Пример диалога (сокращённо):

Press y|Y for Yes, any other key for No: Y
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

... Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
... Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
... Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
... Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
All done!

Войдите в MySQL:

$ mysql -u root -p

Создайте пользователя и базу для Redmine (замените пароли на надёжные):

mysql> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'Your_password2';
mysql> CREATE DATABASE redmine CHARACTER SET utf8mb4;
mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
mysql> exit

Совет: используйте парольный менеджер и храните креды в защищённом виде.

Шаг 4 — Установка репозитория EPEL

Некоторые пакеты требуются из EPEL:

$ sudo dnf install epel-release

Включите PowerTools (требуется для сборки некоторых пакетов):

$ sudo dnf config-manager --set-enabled powertools

Шаг 5 — Установка Ruby и зависимостей

Rocky Linux 8 предлагает несколько потоков Ruby. Redmine совместим с версиями 2.5–2.7; в этой инструкции используем Ruby 2.7.

Просмотрите доступные модули:

$ dnf module list ruby

Сбросьте выбранные потоки и включите 2.7:

$ sudo dnf module reset ruby
$ sudo dnf module enable ruby:2.7

Установите Ruby и dev‑пакеты:

$ sudo dnf install ruby ruby-devel

Проверьте версию:

$ ruby -v
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux]

Установите остальные зависимости, требуемые для сборки гемов и работы Redmine:

$ sudo dnf install rpm-build wget libxml2-devel make automake libtool ImageMagick ImageMagick-devel mariadb-devel httpd-devel openssl-devel libcurl-devel gcc gcc-c++

Шаг 6 — Установка Redmine

Перейдите на страницу загрузок Redmine и определите последнюю стабильную версию. В примере использована 4.2.3. Скачайте архив:

$ wget https://redmine.org/releases/redmine-4.2.3.tar.gz

Распакуйте и переместите в каталог для веб‑приложений:

$ tar xfz redmine-4.2.3.tar.gz
$ sudo mv redmine-4.2.3 /var/www/redmine

Перейдите в каталог приложения:

$ cd /var/www/redmine

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

$ cp config/configuration.yml.example config/configuration.yml
$ cp config/database.yml.example config/database.yml
$ cp public/dispatch.fcgi.example public/dispatch.fcgi

Откройте config/database.yml и укажите параметры подключения к MySQL (пример):

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "Your_password2"
  # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7
  encoding: utf8mb4

Сохраните файл (в nano: Ctrl+X, затем Y).

Установите Bundler для управления гемами:

$ gem install bundler

Отключите группы development и test при установке зависимостей:

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

Если возникают ошибки из‑за версий гемов, попробуйте восстановить гемы:

$ sudo gem pristine --all

Сгенерируйте секретный ключ для сессий:

$ bundle exec rake generate_secret_token

Выполните миграции базы данных:

$ RAILS_ENV=production bundle exec rake db:migrate

Загрузите стандартные данные (пример на английском):

$ RAILS_ENV=production REDMINE_LANG=en bundle exec rake redmine:load_default_data

Создайте нужные каталоги и установите права (запускайте из /var/www/redmine):

$ mkdir -p tmp/pdf
$ mkdir -p public/plugin_assets
$ chown -R $USER:$USER files log tmp public/plugin_assets
$ chmod -R 755 /var/www/redmine/

Запустите временно локальный сервер WEBrick, чтобы проверить работу:

$ bundle exec rails server webrick -e production
=> Booting WEBrick
=> Rails 5.2.6 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
[2022-01-03 12:58:19] INFO  WEBrick 1.6.1
[2022-01-03 12:58:19] INFO  ruby 2.7.4 (2021-07-07) [x86_64-linux]
[2022-01-03 12:58:19] INFO  WEBrick::HTTPServer#start: pid=117224 port=3000

Откройте http://:3000/login для тестового входа.

Главный экран установки Redmine

Введите учётные данные по умолчанию admin / admin; система предложит сменить пароль.

Экран входа Redmine

После смены пароля вы попадёте в «Мой аккаунт».

Страница «Мой аккаунт» в Redmine

Если всё работает, остановите временный сервер Ctrl+C.

Шаг 7 — Установка Phusion Passenger для Apache

Passenger — это приложение‑сервер для Ruby, которое интегрируется с Apache.

$ gem install passenger

Установите модуль Passenger для Apache:

$ passenger-install-apache2-module

Установщик проведет вас через процесс. Если увидите предупреждение о разрешениях, откройте новый сеанс и скорректируйте права каталога пользователя (при необходимости).

Если во время компиляции вы получите ошибку с cc1plus (Killed), вероятно, не хватает оперативной памяти — добавьте swap или увеличьте RAM.

После успешной установки установщик предложит строки для добавления в конфигурацию Apache. Пример, который нужно вставить в /etc/httpd/conf.modules.d/00-passenger.conf:

 LoadModule passenger_module /home/username/.gem/ruby/gems/passenger-6.0.12/buildout/apache2/mod_passenger.so
   
     PassengerRoot /home/username/.gem/ruby/gems/passenger-6.0.12
     PassengerDefaultRuby /usr/bin/ruby
   

Создайте файл конфигурации для сайта Redmine: /etc/httpd/conf.d/redmine.conf

Listen 3000

  PassengerRoot /home/username/.gem/ruby/gems/passenger-6.0.12
  PassengerDefaultRuby /usr/bin/ruby


    ServerName redmine.example.com
    DocumentRoot "/var/www/redmine/public" 

    CustomLog logs/redmine_access.log combined
    ErrorLog logs/redmine_error_log
    LogLevel warn

    
        Options Indexes ExecCGI FollowSymLinks
        Require all granted
        AllowOverride all
    

Обновите ServerName в /etc/httpd/conf/httpd.conf, если требуется:

ServerName localhost

Проверьте синтаксис Apache:

$ httpd -t
Syntax OK

Затем перезапустите Apache:

$ sudo systemctl restart httpd

Сайт будет доступен по http://redmine.example.com:3000, однако это небезопасно (HTTP + порт). Далее настроим SSL и Nginx.

Шаг 8 — Установка SSL (Let’s Encrypt)

Установите certbot для автоматического получения сертификатов:

$ sudo dnf install certbot

Остановите Apache на время получения сертификата (certbot в режиме standalone захватывает порт 80):

$ sudo systemctl stop httpd

Получите сертификат (замените email и домен):

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d redmine.example.com

Сертификат появится в /etc/letsencrypt/live/redmine.example.com.

Запустите Apache снова:

$ sudo systemctl start httpd

Сгенерируйте Diffie‑Hellman параметры (2048 бит):

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Создайте веб‑корень для ACME challenge автообновления:

$ sudo mkdir -p /var/lib/letsencrypt

Добавьте ежедневный cron‑job для обновления сертификатов: создайте /etc/cron.daily/certbot-renew с содержимым:

#!/bin/sh
certbot renew --cert-name redmine.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl restart nginx"

Сделайте файл исполняемым:

$ sudo chmod +x /etc/cron.daily/certbot-renew

Важно: тестируйте команду renew вручную перед автоматизацией.

Шаг 9 — Установка и настройка Nginx как обратного прокси

Выберите поток Nginx 1.20 и установите его:

$ sudo dnf module reset nginx
$ sudo dnf module enable nginx:1.20
$ sudo dnf install nginx --disablerepo=epel-modular

Проверьте версию:

$ nginx -v
nginx version: nginx/1.20.0

Чтобы избежать конфликта портов, измените Apache на порт 8080. Откройте /etc/httpd/conf/httpd.conf и замените Listen 80 на:

Listen 8080

Перезапустите Apache:

$ sudo systemctl restart httpd

Создайте конфигурацию Nginx /etc/nginx/conf.d/redmine.conf:

# Redirect all non-encrypted to encrypted
server {
    listen 80;
    server_name redmine.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;

    server_name redmine.example.com;

    ssl_certificate     /etc/letsencrypt/live/redmine.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/redmine.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/redmine.example.com/chain.pem;
        
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    access_log /var/log/nginx/redmine.example.com.access.log main;
    error_log  /var/log/nginx/redmine.example.com.error.log;
    
    location / {
        proxy_pass          http://localhost:3000;
        proxy_redirect      off;
        proxy_buffering     off;
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

В /etc/nginx/nginx.conf добавьте перед include строку:

server_names_hash_bucket_size  64;

Проверьте синтаксис и запустите Nginx:

$ sudo nginx -t
$ sudo systemctl start nginx

Теперь Redmine должен быть доступен по https://redmine.example.com.


Критерии приёмки

  • Веб‑интерфейс доступен по HTTPS на домене redmine.example.com.
  • Вход в систему возможен с учётной записью admin, пароль изменён.
  • Миграции базы прошли без ошибок, таблицы созданы.
  • Автоматическое обновление сертификата certbot отрабатывает без ошибок.
  • Логи Apache и Nginx не содержат критических ошибок при старте.

Чек‑лист по ролям

Администратор сервера:

  • Обновил систему и установил требуемые пакеты.
  • Настроил брандмауэр и SELinux.
  • Установил и настроил Apache, Passenger и Nginx.

Администратор БД:

  • Создал базу redmine и пользователя с безопасным паролем.
  • Проверил кодировку utf8mb4.

Разработчик/DevOps:

  • Выполнил bundle install и миграции в production.
  • Протестировал работу приложения через локальный сервер и через Nginx.

Оператор безопасности:

  • Установил SSL и проверил параметры шифрования.
  • Настроил ротацию логов и мониторинг.

Резервное восстановление и откат

  • Резервная копия базы: используйте mysqldump
$ mysqldump -u root -p redmine > redmine_backup.sql
  • Восстановление:
$ mysql -u root -p redmine < redmine_backup.sql
  • Файловая резервная копия: архивируйте каталоги files, public/plugin_assets, log и config.
$ tar czf redmine_files_$(date +%F).tgz files public/plugin_assets log config

Откат обновлений:

  • Снимите бэкап перед обновлением Redmine или гемов.
  • При проблемах — восстановите базу и файлы из бэкапа, откатите изменения в Git (если используете).

Устранение неполадок (быстрые рекомендации)

  • Ошибка компиляции native‑гемов: установите соответствующие -devel пакеты и gcc.
  • Ошибка нехватки памяти при сборке Passenger: добавьте swap или увеличьте RAM.
  • Проблемы с кодировкой: убедитесь, что база создана с CHARACTER SET utf8mb4.
  • 502/504 через Nginx: проверьте, слушает ли backend на localhost:3000 и что Apache/Passenger запущены.
  • Проблемы с HTTPS: проверьте права на файлы сертификата и наличие chain.pem.

Практические советы и безопасная конфигурация

  • Используйте strong TLS настройки (TLSv1.2/1.3), отключите старые шифры.
  • Ограничьте доступ по IP для админских интерфейсов при возможности.
  • Настройте мониторинг доступности (uptime) и логирования ошибок (Sentry/ELK).
  • Планируйте резервное копирование базы и файлов ежедневно.

Мини‑методология внедрения (быстрый SOP)

  1. Подготовка сервера: обновление, создание пользователя, отключение SELinux (или настройка правил).
  2. Установка базовых пакетов (httpd, mysql, ruby, gcc, deps).
  3. Создание БД и пользователя, проверка соединения.
  4. Скачивание и конфигурация Redmine, bundle install, миграции.
  5. Установка Passenger и проверка работы через Apache на тестовом порту.
  6. Выпуск SSL и настройка Nginx как reverse‑proxy.
  7. Тестирование, безопасность, бэкап и документирование.

Таблица совместимости (ключевые версии)

  • Rocky Linux 8 — целевая ОС.
  • Ruby — рекомендуемая ветка 2.7 для Redmine 4.x.
  • MySQL — 5.7+ или MariaDB совместимые версии; используйте utf8mb4.
  • Passenger — совместим с Apache (версия модуля зависит от установленного gem).
  • Nginx 1.20 — стабильный выбор для обратного прокси.

Глоссарий (1‑строчные определения)

  • Passenger: приложение‑сервер для развёртывания Ruby‑приложений под Apache/Nginx.
  • Bundler: менеджер зависимостей (gems) для Ruby.
  • WEBrick: встроенный Ruby HTTP‑сервер, удобен для тестов.
  • Certbot: клиент для автоматизированного получения сертификатов Let’s Encrypt.

Тесты и критерии приёмки

  • Пройти авторизацию под admin и создать новый проект.
  • Создать и закрыть задачу, проверить запись в журнале.
  • Загрузить файл в «Файлы проекта» и убедиться в доступности.
  • Выполнить резервное восстановление из дампа базы и убедиться в целостности.

Безопасность и GDPR (коротко)

  • Храните персональные данные в соответствии с локальным законодательством.
  • Ограничьте доступ к конфиг‑файлам и сертификатам (чтение только root и сервисные аккаунты).
  • Для публичных инстансов включите двухфакторную аутентификацию (плагины Redmine).

Короткое объявление (100–200 слов)

Redmine установлен и настроен на сервере Rocky Linux 8. Мы использовали Apache + Passenger для запуска приложения и Nginx как обратный прокси с TLS‑шифрованием от Let’s Encrypt. База данных — MySQL (utf8mb4). Проведены миграции, загружены дефолтные данные и выполнены базовые тесты: вход в систему, создание проекта и задач. Настроены автоматическое обновление SSL посредством certbot и ежедневный cron для продления сертификата. Рекомендовано настроить мониторинг, регулярные бэкапы и ротацию логов. Если необходима помощь с миграцией существующих данных или кластеризацией, опишите сценарий — подготовим план миграции.

Социальный превью (OG suggestion)

OG-заголовок: Установка Redmine на Rocky Linux 8 — полное руководство OG-описание: Пошаговая инструкция по установке Redmine с Apache+Passenger и Nginx+HTTPS на Rocky Linux 8. Проверенные команды, чек‑листы и рекомендации по безопасности.


Заключение

Эта инструкция покрывает полный цикл установки Redmine на Rocky Linux 8: от подготовки сервера и базы данных до безопасного развёртывания с HTTPS. Следуйте чек‑листу и выполните резервное копирование перед обновлениями. При возникновении ошибок ознакомьтесь с разделом «Устранение неполадок» и прикрепляйте логи при обращении за помощью.

Важно: адаптируйте доменные имена, пароли и пути к файлам под вашу инфраструктуру.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро