Установка Redmine 3.2 на Ubuntu 16.04 с Nginx и MySQL
Redmine 3.2 устанавливается на Ubuntu 16.04 с использованием RVM/Ruby 2.2, MySQL и Phusion Passenger + Nginx. В статье приведён пошаговый план: подготовка зависимостей, настройка БД, установка Passenger и Nginx, развёртывание Redmine, базовые меры безопасности и проверка работоспособности.
Коротко о Redmine
Redmine — это веб‑приложение для управления проектами и учёта задач, построенное на Ruby on Rails. Поддерживает многоязычные интерфейсы (42 языка), несколько проектов в одном инстансе, вики, управление файлами и REST API. В этой инструкции рассматривается установка Redmine 3.2 на Ubuntu 16.04 (64 бит) с Nginx и MySQL.
Требования
- Ubuntu 16.04 — 64‑бит.
- root‑доступ или эквивалентные привилегии sudo.
- Рекомендуется выделить минимум 1 CPU и 1 ГБ ОЗУ для тестовой установки; для продакшена — больше по нагрузке.
Шаг 1 — Установка зависимостей
Сначала станьте root и обновите списки пакетов. Дальше все команды выполняются от root:
sudo su
apt-get updateУстановите зависимости Redmine через apt:
apt-get install mysql-server mysql-client libmysqlclient-dev imagemagick libmagickwand-dev libcurl4-openssl-dev git-core subversionУстановщик запросит пароль root MySQL — задайте надёжный пароль.
Важно: в продакшен‑окружении используйте актуальные пакеты и обновляйте систему перед установкой.
Шаг 2 — Установка Ruby и RVM
Redmine 3.2 стабильно работает с Ruby 2.2.x, поэтому используем RVM для установки Ruby 2.2.5:
gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -L https://get.rvm.io | bash -s stable --ruby=2.2.5Перезагрузите окружение RVM и добавьте автозагрузку в ~/.bashrc:
source /usr/local/rvm/scripts/rvm
echo '[[ -s "/usr/local/rvm/scripts/rvm" ]] && source "/usr/local/rvm/scripts/rvm"' >> ~/.bashrcСовет: если система использует другую оболочку, добавьте строку в соответствующий профиль пользователя.
Шаг 3 — Настройка MySQL для Redmine
Войдите в MySQL как root:
mysql -u root -p
TYPE YOUR PASSWORDСоздайте базу данных и пользователя (в примере имя и пароль — redmine, замените на безопасные значения):
create database redmine;
create user redmine@localhost identified by 'redmine';
grant all privileges on redmine.* to redmine@localhost identified by 'redmine';
flush privileges;
q\Важно: используйте сложный пароль и, при необходимости, ограничьте доступ по сети (например, bind‑address в my.cnf).
Шаг 4 — Установка Phusion Passenger и Nginx
Phusion Passenger упрощает запуск Ruby‑приложений под Nginx. Установите passenger через gem и запустите установщик модуля Nginx:
gem install passenger --no-ri --no-rdoc
passenger-install-nginx-moduleВ интерактивном установщике выберите поддержку Ruby (и Python при желании), затем вариант установки Nginx: “Yes: download, compile and install Nginx for me. (recommended)” и используйте каталог по умолчанию /opt/nginx/.
Примечание: компиляция Nginx может потребовать дополнительных системных библиотек. Следуйте подсказкам инсталлятора.
Шаг 5 — Конфигурация Nginx
Откройте каталог конфигурации и отредактируйте nginx.conf:
cd /opt/nginx/conf/
vim nginx.confДобавьте строку для подключения виртуальных хостов:
include vhost/*.conf;Создайте каталог для виртуальных хостов и файл конфигурации Redmine:
mkdir -p /opt/nginx/conf/vhost
cd /opt/nginx/conf/vhost/
vim redmine.confВставьте пример виртуального хоста:
server {
listen 80;
server_name www.redmine.me;
root /var/www/redmine/public;
passenger_enabled on;
client_max_body_size 10m; # Max attachemnt size
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}Сохраните файл и создайте unit для systemd, чтобы управлять Nginx как сервисом:
cd /lib/systemd/system/
vim nginx.serviceВставьте сервис‑юнит:
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.targetПерезагрузите systemd и запустите Nginx:
systemctl daemon-reload
systemctl start nginxПроверьте, что Nginx слушает порт 80:
netstat -plntu | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4871/nginxШаг 6 — Установка Redmine
Создайте каталог и загрузите код Redmine из SVN ветки 3.2:
mkdir -p /var/www/
cd /var/www/
svn co https://svn.redmine.org/redmine/branches/3.2-stable redmineСкопируйте пример конфигураций:
cd redmine
cp config/configuration.yml.example config/configuration.yml
cp config/database.yml.example config/database.ymlОтредактируйте config/database.yml, указав данные, созданные на шаге 3:
vim config/database.ymlПример секции production:
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "redmine"
encoding: utf8Создайте временные каталоги и установите права на файлы:
mkdir -p tmp tmp/pdf public/plugin_assets
sudo chown -R www-data:www-data files log tmp public/plugin_assets
sudo chmod -R 775 files log tmp public/plugin_assetsУстановите bundler и гемы приложения:
gem install bundler
bundle install --without development testСгенерируйте секретный токен и примените миграции/данные по умолчанию:
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake redmine:load_default_dataПерезапустите Nginx и откройте сайт в браузере:
systemctl restart nginxОткройте http://www.redmine.me (замените на ваш домен).

Вход в админку: http://www.redmine.me/login — по умолчанию логин и пароль admin.

Создайте тестовый проект через веб‑интерфейс.

Страница проекта будет содержать список задач, wiki и файлы.
Критерии приёмки
- Сайт Redmine доступен по HTTP/HTTPS на заданном домене.
- Вход в админ‑панель по учётным данным admin работает.
- Миграции БД успешно выполнены, нет ошибок в логах (log/production.log).
- Возможность загрузки файлов и создание задач проверены.
Отладка и распространённые ошибки
- “Passenger could not be found” — убедитесь, что passenger установлен в том же Ruby‑окружении, что и Redmine.
- Ошибки bundle install — проверьте наличие dev‑пакетов (libmysqlclient-dev и т. п.).
- Проблемы с правами — убедитесь, что файлы и каталоги принадлежат www-data и имеют корректные права.
- Nginx не стартует — запустите /opt/nginx/sbin/nginx -t для проверки синтаксиса.
Совет: смотрите системные логи (journalctl -u nginx) и логи Redmine в log/ для детальной диагностики.
Резервное копирование и восстановление
- Бекап БД MySQL:
mysqldump -u root -p redmine > redmine_backup.sql- Бекап файлов Redmine (каталоги files, public/plugin_assets, конфиги):
tar czf redmine_files_$(date +%F).tar.gz /var/www/redmine/files /var/www/redmine/public/plugin_assets /var/www/redmine/configВосстановление — вернуть дамп базы и распаковать файлы в исходные пути, затем перезапустить сервисы.
Безопасность и рекомендации по жёсткой конфигурации
- Используйте HTTPS (Let’s Encrypt) — на Nginx настройте SSL‑сертификат и редирект с HTTP на HTTPS.
- Ограничьте доступ к MySQL по сети (bind‑address = 127.0.0.1), используйте сильные пароли.
- Обновляйте гемы и систему, тестируйте обновления на staging перед prod.
- Запускайте Nginx/Passenger под учётной записью с минимальными правами; правильные владельцы и права на файлы обязательны.
Альтернативные подходы
- Apache + Passenger: если вы предпочитаете Apache, Passenger поддерживает интеграцию с ним.
- Docker‑контейнеры: можно упаковать Redmine в Docker с отдельными контейнерами для БД и прокси (Nginx/certbot).
- Использовать системные пакеты для Passenger/Nginx вместо ручной компиляции (зависит от дистрибутива).
Когда этот способ не подходит:
- Если требуется поддержка новейших версий Ruby — ветка 3.2 может требовать других версий, лучше проверить совместимость.
- На ограниченных по ресурсам хостингах компиляция Nginx и сборка гемов может быть затруднительна.
Контрольные списки (роль‑ориентированные)
Администратор:
- Установить OS и обновления.
- Настроить MySQL и создать базу/пользователя.
- Установить RVM и Ruby.
- Настроить systemd unit и SSL.
Разработчик/DevOps:
- Выполнить bundle install, миграции и загрузку данных.
- Настроить мониторинг и бекапы.
- Подготовить миграционный план перед обновлением Redmine.
Пользователь (админ Redmine):
- Сменить пароль admin сразу после входа.
- Создать проекты, роли и права доступа.
- Подключить почтовую отправку задач (если требуется).
Тесты и критерии приёмки
- Прохождение smoke‑test: страница загрузки, создание проекта, создание задачи, загрузка файла.
- Проверка логов на отсутствие ошибок уровня ERROR/FATAL.
- Проверка прав доступа: разные роли видят/не видят ресурсы согласно настройкам.
Совместимость и советы по обновлению
- Redmine 3.2 рассчитан на Ruby 2.2; при переходе на более новые версии Redmine проверяйте требования к Ruby и gem’ам.
- Для миграции данных между версиями используйте стандартные rake‑задачи и тестируйте миграции на копии БД.
Краткая методология развёртывания (шаги для автоматизации)
- Подготовить образ/сервер с Ubuntu 16.04 и обновлениями.
- Установить системные зависимости через apt.
- Установить RVM и Ruby, создать изолированное окружение.
- Настроить MySQL: создать БД и пользователя.
- Установить Passenger и Nginx, настроить виртуальный хост.
- Развернуть код Redmine, установить гемы и выполнить миграции.
- Настроить SSL, бекапы и мониторинг.
Заключение
Установка Redmine 3.2 на Ubuntu 16.04 с Nginx и MySQL — воспроизводимый процесс, включающий настройку окружения Ruby, MySQL, Passenger и Nginx, а также развёртывание приложения и миграции. После установки важно настроить SSL, бекапы и мониторинг, а также проверять совместимость при обновлениях.
Заметки
- В статье приведены команды и примеры конфигураций; заменяйте пароли и доменные имена на ваши реальные значения.
- Для продакшен‑среды рассмотрите использование отдельного сервера БД, балансировщика и автоматических бэкапов.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента