Установка Redmine на Ubuntu 16.04 и 18.04

Это первая статья из небольшого цикла статей про установку, обслуживание и обновление Redmine. Читайте с удовольствием и делитесь с окружающими. В конце вставил видео, вдруг кому-то нужно посмотреть.

Возникла намедни небольшая задача: перевести старый redmine на новые рельсы… тьфу, на новый движок и на другую базу данных. Хотя рельсы (Ruby on rails) здесь тоже будут. И для начала давайте определимся с условиями. Так как это первая статья и она про установку, то здесь я опишу только установку redmine.

UPD от 24.04.2020: Так как у Ubuntu 16.04 через год закончится срок поддержки, да ещё вышла Ubuntu 20.04, то чтобы не захламлять статью, для старой Ubuntu все шаги перенесу вниз, кратеньким скриптом.

UPD от 02.04.2019: Установка будет производиться на Ubuntu 16.04 и на Ubuntu 18.04. Версии redmine 3.4 и 4.0. Основных отличий в установке нет, но для старых версий ПО отличия выделены жирным.

Ставить буду на Ubuntu 16.04 LTS, потому что эта система на первом месте (на 2017 год) по используемости в серверах, и на Ubuntu 18.04 LTS (по состоянию на 2018 год — второе место). База данных, которая будет использоваться редмайном — PostgreSQL. Nginx как прокси к Passenger, который будет отвечать за обработку и показ информации. Имя пользователя пусть будет administrator.

Для начала установим Ubuntu. Каких либо сложностей установка не вызывает, но всегда можно подсмотреть многочисленные инструкции в интернете.

После установки начнём ставить redmine, пользуясь мануалом с сайта. Читать всё же лучше английскую версию — она информативнее и актуальнее. Хотя и не во всём.

Идём по порядку и скачиваем дистрибутив. Можно скачать из раздела Download, а после распаковать на сервере, но лучше выкачать через, например, SVN и иметь всегда возможность легко и быстро обновиться. Так и сделаем. Но предварительно скачаем и установим все необходимые пакеты. Postgres будет версии 12, инструкция по его установке взята с сайта Losst.

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
sudo apt update
sudo apt install postgresql-12 postgresql-contrib \
postgresql-server-dev-12 imagemagick ruby build-essential \
patch ruby-dev zlib1g-dev liblzma-dev libmagick++-dev \
passenger libcurl4-openssl-dev libssl-dev \
python-pip python-dev subversion -y

Переходим в домашнюю директорию

cd ~

И теперь скачиваем redmine

Для версии 3.4

svn co https://svn.redmine.org/redmine/branches/3.4-stable redmine-3.4

Для версии 4.0

svn co https://svn.redmine.org/redmine/branches/4.0-stable redmine-4.0

Для версии 4.1

svn co https://svn.redmine.org/redmine/branches/4.1-stable redmine-4.1
ln -s redmine-* redmine

Продолжаем следовать инструкции с официального сайта и создаём базу данных:

sudo -u postgres psql -c "CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'your_password' NOINHERIT VALID UNTIL 'infinity'"

Здесь мы от пользователя postgres, который был создан при установке PostgreSQL, запускаем утилиту psql и даём команду на создание пользователя или роли redmine с паролем your_password.

Создаём базу redmine, к которой имеет доступ владелец, созданный выше:

sudo -u postgres psql -c "CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine"

Дальше смотрим мануал на сайте. Нужно создать файл конфигурации подключения к базе данных.

Убеждаемся, что мы в папке, где установлен\выкачан redmine и создаём конфигурационный файл.

cd ~/redmine
echo "production:" > config/database.yml
echo " adapter: postgresql" >> config/database.yml
echo " database: redmine" >> config/database.yml
echo " host: localhost" >> config/database.yml
echo " username: redmine" >> config/database.yml
echo " password: your_password" >> config/database.yml

Обратите внимание на пробелы перед строками, они важны для структуры файла. Содержимое файла должно быть таким:

production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine ## роль для доступа к базе
  password: your_password ## Это пароль роли redmine, которую мы создали при назначении прав на базу

Теперь согласно мануалу, надо установить Bundler — менеджер для управления зависимостями gem’ов в ruby приложениях. Эта утилита позволяет легко устанавливать необходимые gem’ы для вашего приложения, при этом вовсе не зависеть от установленных в системе[1].

Для redmine 3.4
sudo gem install bundler --version '1.17.3'
Для redmine 4.0 и 4.1
sudo gem install bundler

Затем разработчики советуют сразу же запустить «bundle install ––without development test«, однако при запуске bundle будет выдано предостережение, что ключ —without признан устаревшим. Поэтому надо сделать небольшую настройку и поставить необходимые bundle-пакеты

Для redmine 3.4 и 4.0
bundle config set without 'development test'
Для redmine 4.1
bundle config set without 'development test rmagick'
bundle install

В процессе установки вводим пароль рута.

Затем генерируем секретный ключ хранилища сеансов (Session store secret generation)

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

Ставим rmagick для обработки картинок (вроде необязательно)

sudo gem install rmagick --no-ri --no-rdoc

Установка redmine завершена и можно проверить его работу, запустив локальный сервер.

ruby bin/rails server -b 0.0.0.0 -e production, 
где ключ "b" задаёт прослушивание порта со всех адресов,
а не только с локального.

Можете зайти на http://localhost:3000 и лицезреть окно авторизации.

Выключаем Webrick, нажав Ctrl+C

Теперь можно установить passenger — некий веб-сервер для приложений, Ruby в том числе.

sudo gem install passenger

Теперь ставим nginx, который будет скомпилирован с поддержкой passenger. Сам nginx из коробки не умеет подключать модули, поэтому если на чистой, свежеустановленной Ubuntu у вас появился nginx… То кто-то свернул явно не туда… 

Ставим с опциями, позволяющими без вопросов скачать и установить nginx в директорию /opt/nginx и использовать язык ruby

sudo passenger-install-nginx-module --auto --prefix=/opt/nginx/ --auto-download --languages ruby

Компиляция займёт примерно 10-15 минут, по окончании выведется сообщение, что необходимые строки уже вставлены в конфигурационный файл nginx. Но к его настройке мы всё же приступим.

Отредактируем файл настроек

sudo nano /opt/nginx/conf/nginx.conf

В секцию http, которая начинается после строки «http {«, вставим строку

include vhost/*.conf;

Сохраним файл и закроем его.

Теперь в папке настроек nginx, расположенной по адресу /opt/nginx/conf создадим папку, хранящую конфигурации виртуальных хостов

sudo mkdir /opt/nginx/conf/vhost

и создадим файл настроек виртуального хоста для redmine.

sudo nano /opt/nginx/conf/vhost/redmine.conf
server {
listen 8443 ssl;
ssl_certificate /home/administrator/cert/server.crt;
ssl_certificate_key /home/administrator/cert/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!RC4:!aNULL:!MD5:!kEDH";
passenger_enabled on;
client_max_body_size 100m; # Max attachment size
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ ^/redmine(/.*|$) {
alias /home/administrator/redmine/public$1;
passenger_base_uri /redmine;
passenger_document_root /home/administrator/redmine/public;
}
}

Директива location объяснена здесь. Можете её не указывать, если не хотите делать доступ к redmine через поддиректорию.

Теперь можно создать сертификаты и расположить в том месте, которое указано в конфиге выше.

mkdir ~/cert
cd ~/cert
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -nodes -days 3650 -subj '/CN=localhost'

Всё готово для запуска и осталось сделать одну небольшую вещь, а именно прописать nginx как сервис в системе.

sudo nano /lib/systemd/system/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
sudo systemctl daemon-reload
sudo systemctl start nginx
sudo systemctl enable nginx.service

Для удобства управления nginx сделаем ссылку на него

sudo ln -s /opt/nginx/sbin/nginx /usr/sbin/nginx

Теперь система готова к работе. Осталось настроить резервное копирование БД и сделать доступ к redmine в подкаталоге. Если раньше у вас стоял redmine на базе MySQL то можете мигрировать с mysql на postgresql.

Добавить комментарий

Ваш адрес email не будет опубликован.