2020-04-17

RedMine - Debian (PostgreSQL, Apache, Passenger)

Для производственного (production) применения рекомендуется Debian Way!

Общая логика работы в Redmine  примерно  такова:



 Пользователь открывает в браузере адрес сервера -> запрос обрабатывает Apache -> передает в Passenger -> вызывает Ruby-проект Redmine -> Далее Ruby-Redmine работает с базой и файлами.

ЭТАПЫ УСТАНОВКИ 

1. PostgreSQL — установка, конфигурирование, создание БД...

2. Redmine — установка

Предварительно установите необходимые для Redmine пакеты:
# apt install gcc build-essential zlib1g zlib1g-dev zlibc ruby-zip libssl-dev libyaml-dev \
libcurl4-openssl-dev ruby gem libapr1-dev \
libxslt1-dev checkinstall libxml2-dev ruby-dev vim libmagickwand-dev imagemagick sudo rails
по другой версии - более скромно:
# apt install build-essential ruby-dev libxslt1-dev libmariadb-dev \
libxml2-dev zlib1g-dev imagemagick libmagickwand-dev curl sudo
Список основных зависимостей пакета redmine-pgsql можно попробовать получить так:
apt-rdepends -s=Depends redmine-pgsql
и установить:
apt install $(apt-rdepends -s=Depends redmine-pgsql | grep -v "^") но может не получиться...

Проверьте соответствие версий...  Получите исходный код Redmine, загрузив архив релиза... см. Download.

Создайте пользователя redmine (под которым и будем выполнять все, что не требует root-прав):

        # adduser redmine 

(можно использовать любого другого пользователя)

Установите (распакуйте) Redmine в /opt... -> /opt/redmine/redmine-4.0.2

Необходимо убедиться в наличии подкаталогов, и при отсутствии - создать их (назначение - см. Настройка разрешений файловой системы):

        # mkdir -p files log tmp tmp/pdf public/plugin_assets


Настройка соединения с базой данных

Создайте /opt/redmine/redmine-4.0.2/config/database.yml
    cp /opt/redmine/redmine-4.0.2/config/database.yml.example  /opt/redmine/redmine-4.0.2/config/database.yml
и отредактируйте этот файл, чтобы настроить параметры соединения с базой данных для среды «production».

Пример для базы данных PostgreSQL (порт по умолчанию):
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "my_password" encoding: utf8

Обратите внимание, что интервал важен в этом файле. Под строкой «production» каждая строка должна иметь два пробела, а не табуляцию. Замените your_password на ваш пароль (он д.б. в кавычках!). Имейте в виду, что пароли Postgresql не могут начинаться с символа @ (или других не алфавитных знаков).

3 Установка зависимостей

Redmine использует Bundler для управления gem-зависимостями.
Bundler - это менеджер для управления зависимостями gem'ов в ruby приложениях. Эта утилита позволяет легко устанавливать необходимые gem'ы для вашего приложения, при этом вовсе не зависеть от установленных в системе. Его включили в Rails 3.0 по умолчанию. Если вы используете Ruby 2.5 или более раннюю версию, то вам необходимо сначала установить Bundler:
    # gem install bundler
При установке зависимостей Redmine Ruby необходимо будет запустить команду bundler от имени пользователя без полномочий root (с привилегиями sudo для - bundle install ). Поэтому, предварительно необходимо иметь (создать) пользователя redmine (под которым и будем всегда взаимодействовать с bundler! и в остальных случаях, когда не требуется root-права):
    # adduser redmine
    # usermod -aG sudo redmine
    Позже добавьте пользователя Apache в группу Redmine:
        # usermod -aG redmine www-data
Затем, как непривилегированный пользователь redmine, находясь внутри корневого каталога «Redmine»,  установите все требуемые зависимости - gem-ы (драгоценные камни), необходимые для Redmine, используя следующую команды:
    $ su -l redmine
    cd /opt/redmine/redmine-4.0.2/
    bundle install --without development test
Эта команда решит все зависимости и установит недостающие gem'ы
 в директорию ~/.bundler. Откуда он их и будет подключать. Данную последовательность необходимо выполнить и после изменения версии Ruby (не забудьте передать права на каталог redmine от пользователя www-data пользователю redmine)...

 # deluser redmine sudo - удалить пользователя redmine из группы sudo

    Вы можете увидеть сообщение (в начале вывода): Bundler устанавливается для ruby, но зависимость существует только для x86-mingw32, x64-mingw32, x86-mswin32. Чтобы добавить эти платформы в комплект, запустите `bundle lock --add-platform x86-mingw32 x64-mingw32 x86-mswin32`, выполните?:
    bundle lock --add-platform x86-mingw32 x64-mingw32 x86-mswin32
Каталог ~/.bundler не является обязательным, если вы хотите установить gem'ы в другой каталог, то это легко сделать:
    bundle install --without development test --path ./vendor/bundle
(в последних версиях bundle-ра  -  bundle config set path 'vendor/bundle')
Посмотреть список установленных gem'ов можно с помощью команды:
    bundle show
Если нужный gem уже установлен в системе, то для него будет создана ссылка. После каждого изменения используемых gem'ов (и версииRuby), нужно выполнить команду bundle install...

Адаптеры базы данных
Bundler автоматически устанавливает gem-ы адаптера, необходимые для вашей конфигурации базы данных, читая его из config/database.yml файла.
Не забудьте перезапустить bundle install... после изменения (добавления и/или удаления) адаптеров в config/database.yml файле!
Дополнительные зависимости ( Gemfile.local)
Если вам нужно загрузить gem-ы, которые не нужны ядру Redmine (например, Puma, fcgi) - создайте файл с именем Gemfile.local в корне каталога Redmine. Он будет загружен автоматически при запуске bundle install.
    Пример содержимого файла:
        # Gemfile.local
        gem 'puma'

4 Генерация секрета хранилища сессий

На этом этапе генерируется случайный ключ, используемый Rails для кодирования файлов cookie, хранящих данные сеанса, что предотвращает их подделку. Генерация нового секретного токена делает недействительным все существующие сеансы после перезапуска:
    bundle exec rake generate_secret_token

5 Создание объектов схемы базы данных

Создайте структуру базы данных, выполнив следующую команду в корневом каталоге приложения:
    RAILS_ENV=production bundle exec rake db:migrate
это создаст схему БД, таблицы, выполнив все миграции, а затем создаст набор разрешений и учетную запись администратора приложения с именем admin.  "RAILS_ENV" определяет среду Rails (production, development, test и так далее), под которой будет запущен Rails. RAILS_ENVпеременная окружения, которая должна быть доступна перед запуском вашей задачи rake, RAILS_ENVэто не аргумент rake - это часть среды, доступной для Ruby. Проверить результат можно с помощью:
    rake db:migrate:status
Там все д.б. UP. Пользователь admin в Redmaine будет "суперпользователем" - у него не м.б. отняты права Администратора и его учётную запись невозможно удалить.

6 База данных по умолчанию

Заполняем базу основными начальными данными, выполнив следующую команду:
    RAILS_ENV=production bundle exec rake redmine:load_default_data
Redmine запросит у вас язык набора данных, который должен быть загружен (выбираем ru). Вы также можете определить REDMINE_LANG переменную окружения перед запуском команды, например:
    RAILS_ENV=production REDMINE_LANG=ru bundle exec rake redmine:load_default_data

7 Проверка установки

WEBrick является частью стандартной библиотеки Ruby и используется средой Ruby on Rails для тестирования приложений в среде разработки. В режиме производства он вряд-ли подойдет для использования, т.к. может обрабатывать только 1 http-запрос (1-поточный). Для нас - это хороший способ проверить работоспособность установки перед началом работы с Apache.
Чтобы убедиться, что Redmine работает, запустите web-сервер WEBrick:
cd /opt/redmine/redmine-4.0.2/app        # переходим в каталог, в который установлен redmine
rails server webrick -e production -b 0.0.0.0  # запускаем WEBrick на 3000 порту и на всех сетевых адаптерах сервера
bundle exec passenger start  # команда должна дать тот же эффект (после установки и активации passenger-а)
bundle exec ruby /usr/bin/rails server -b 0.0.0.0 -e production #- в руководстве Redmine
Открываем браузер и переходим по адресу http://your_ip:3000 - мы должны увидеть домашнюю страницу Redmine:

Домашняя страница Redmine


WEB-сервер Apache & Passenger — установка, конфигурирование

    # apt install apache2 libapache2-mod-passenger
Настройка разрешений файловой системы
Учетная запись пользователя, от которого запущено приложение, должна иметь разрешение на запись в следующих подкаталогах:
1) files (хранение вложений)
2) log (файл журнала приложения production.log)
3) tmp и tmp/pdf (для создания PDF-документов... создайте, если каталогов нет)
4) public/plugin_assets (активы плагинов)
 
Redmine запускается от имени www-data, поэтому необходимо выполнить:
    # chown -R www-data:www-data /opt/redmine  # выполнять при любых последующих изменениях
    # cd /opt/redmine/redmine-4.0.2/
    # chmod -R 755 files log tmp public/plugin_assets
При последующих действиях в каталоге redmine: установить владельцем каталога Redmine пользователя Redmine:
    # chown -R redmine:redmine /opt/redmine    # и далее выполнять все под пользователем redmine...
А потом (после всех изменений и настроек) установить 
владельцем каталога Redmine пользователя Apache:
    # chown -R www-data:www-data /opt/redmine

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

    # find files log tmp public/plugin_assets -type f -exec chmod -x {} +
Создайте символическую ссылку, которая указывает из рабочего каталога Apache на каталог redmine/public:
    # ln -s /opt/redmine/redmine-4.0.2/public/ /var/www/html/redmine

далее см. Debian Way - WEB-сервер Apache & Passenger...


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


1.1) Резервное копирование содержимого базы данных PostgreSQL в бинарный файл:
    $ /usr/bin/pg_dump -U <username> -h <hostname> -Fc <redmine_db> > redmine.dump
Вы можете найти <username>, <hostname> и <redmine_db> в файле config/database.yml. <hostname> может не потребоваться в зависимости от вашей установки базы данных. Команда pg_dump предложит вам ввести пароль, при необходимости.

1.2) Резервное копирование вложений
Все загружаемые файлы хранятся в attachments_storage_path (по умолчанию это каталог files/). Вы можете скопировать содержимое этого каталога в другое место, чтобы легко создать резервную копию.

ВНИМАНИЕ: attachments_storage_path может указывать на другой каталог, кроме files/. Обязательно проверьте настройку в config/configuration.yml чтобы избежать бесполезного резервного копирования.

1.3) Резервное копирование конфигурационных файлов (database.yml   configuration.yml   settings.yml).
1.4) Резервное копирование пользовательских плагинов из plugins каталога.

Пример резервного скрипта:
    # Database
    /usr/bin/pg_dump -U <username> -h <hostname> -Fc <redmine_db> >  /path/to/backup/db/redmine_`date +%Y-%m-%d`.dump
    # Attachments - /files
    rsync -a /path/to/redmine/files/ /path/to/backup/files     # Configuration - /config     rsync -a /path/to/redmine/config/*.yml /path/to/backup/config # Plugins - /plugins rsync -a /path/to/redmine/plugins/ /path/to/backup/plugins

2) Восстановление базы данных PostgreSQL из бинарного файла:
    $ pg_restore -с -U <username> -h <hostname> -d <redmine_db> redmine.dump
Восстановить данные в новую базу newdb можно так:
        $ createdb -T template0 newdb
        $ pg_restore -d newdb db.dump

10 Обновление существующей установки


Предварительные шаги
1) Проверьте, что вы соответствуете требованиям для версии, которую собираетесь установить.
2) Рекомендуется сделать резервную копию вашей базы данных и загрузки файлов.

Обновление Redmine
3.1) Загрузите релиз и распакуйте архив новой программы в новый каталог. Убедитесь, что для вновь извлеченных и скопированных файлов и каталогов заданы правильные имя владельца и группы.
3.2) Скопируйте файл настроек вашей базы данных config/database.yml в новый config каталог.
3.3) Скопируйте файл настроек базовой конфигурации config/configuration.yml в новый config каталог.
3.4) Скопируйте содержимое каталога  files в вашу новую установку (этот каталог содержит все ваши загруженные файлы).
3.5) Скопируйте папки своих пользовательских плагинов из своего plugins каталога в новый plugins каталог установки. Убедитесь, что вы копируете только те плагины, которые изначально не были связаны с вашей предыдущей установкой Redmine.
3.6) Установите необходимые gem-ы, выполнив:
    $ su -l redmine
    cd /opt/redmine/redmine-NEW/
    bundle install --without development test

3.7) Создайте новый секрет, выполнив следующую команду в каталоге приложения:
    bundle exec rake generate_secret_token
3.8) Проверьте все темы, которые вы могли установить в public/themes каталоге. Вы можете скопировать их, но лучше проверить на обновление версий.

ОЧЕНЬ ВАЖНО: НЕ заменять новый config/settings.yml старой версией!

4) Обновите базу данных. Этот шаг может изменить содержимое вашей базы данных! Перейдите в новый каталог Redmine и перенесите базу данных:
    bundle exec rake db:migrate RAILS_ENV=production
...эта команда переносит базу данных и таблицы в соответствии с новой версией приложения.
Если у вас есть установленные плагины, вы также должны запустить миграцию их баз данных:
    bundle exec rake redmine:plugins:migrate RAILS_ENV=production
5) Очистка кеша:
    bundle exec rake tmp:cache:clear RAILS_ENV=production
    bundle exec rake tmp:sessions:clear RAILS_ENV=production
6) Выполните:
    # chown -R www-data:www-data /opt/redmine
    # deluser redmine sudo - удалить пользователя redmine из группы sudo

7.1) Скорректируйте путь  PassengerAppRoot в файле /etc/apache2/conf-available/redmine.conf  к новому каталогу установки Redmine
7.2) Замените ссылку /var/www/html/redmine/ к новому каталогу public
7.3) Перезапустите сервер Apache:
    # systemctl reload apache2
    Перейдите в "Admin -> Roles & permissions" , чтобы проверить/установить разрешения для новых функций, если таковые имеются.

11 МИГРАЦИЯ

1.1) Резервное копирование (разд. 9.1)....
1.2) Копируем каталог backup на новый (NEW) сервер.
2.1) Создаем базу данных PgSQL с таким же (OLD) именем... см. разд.1
2.2) Восстанавливаем базы данных PostgreSQL в новую пустую базу (разд. 9.2)....
3) Выполните установку Redmine_NEW (разд.2)...
4.1) Скопируйте (из резервной копии) файлы настроек вашей базы данных config/database.yml, config/configuration.yml в новый config каталог...
4.2) Скопируйте содержимое каталога  files в новую установку (все ваши загруженные файлы).
4.3) Скопируйте папки пользовательских плагинов из plugins каталога резервной копии в новый plugins каталог установки. Убедитесь, что вы копируете только те плагины, которые изначально не были связаны с вашей предыдущей установкой Redmine.
5) Устанавливаем зависимости... разд. 3
6) Генерируем ключ... разд. 4
7) Создаем объекты БД п.2.2... разд. 5
8) Проверяем, чтобы плагины поддерживали новую версию:
    RAILS_ENV=production bundle exec rake redmine:plugins
9) Чистим кэши:
    bundle exec rake tmp:cache:clear RAILS_ENV=production
    bundle exec rake tmp:sessions:clear RAILS_ENV=production
10) Проверяем установку... разд. 7
11) Разбираемся с WEB-сервером... разд. 8


11 Установка плагинов

1. Скачиваем плагин.
2. Распаковываем архив в каталог …/redmine/plugins/. (В каталоге с названием плагина должны быть файлы, а не еще один каталог. Иначе rake не подхватит обновы).
3. Даем права на каталог  /opt/redmine пользователю, от которого будем запускать bundle, включаем его в группу sudo:
    # chown -R redmine:redmine /opt/redmine
    # usermod -aG sudo redmine
4. Переходим в юзера redmine и запускаем bundle install для установки необходимых гемов:
    su -l redmine
    cd /opt/redmine/redmine-4.0.2/
    bundle install --without development test
5. Выполняем миграцию плагина:
    bundle exec rake redmine:plugins:migrate RAILS_ENV=production
6. Возвращаем права пользователю Apache, лишаем прав sudo пользователя redmine:
    # chown -R www-data:www-data /opt/redmine
    # deluser redmine sudo
7. Перезапускаем Apache:
    # systemctl reload apache2

Удаление плагина
1. Если для плагина требовалась миграция, выполните следующую команду в каталоге Redmine, чтобы понизить (downgrade) вашу базу данных (сделайте резервную копию базы данных до этого):
bundle exec rake redmine:plugins:migrate NAME=plugin_name VERSION=0 RAILS_ENV=production
2. Извлеките модуль из папки плагинов - #{RAILS_ROOT}/plugins:
    ruby script/plugin remove _plugin_name_
3. Перезапустите Redmine (см. выше)

PS
Вы всегда можете увидеть список rake-задач, которые поставляются с вашей версией Redmine. Чтобы увидеть их, просто перейдите к своему корню redmine и введите:
    bundle exec rake -T
И там, когда вы прокручиваете, вы найдете список задач rake, связанных с плагинами, так что вы всегда будете использовать правильную команду (удаления).


1. Даем права на каталог  /opt/redmine пользователю redmine
2. Распаковываем тему в ../public/themes/
3. Перезапускаем Redmine:
    touch REDMINE_ROOT/tmp/restart.txt
 - чтобы Passenger перечитал код приложения (Passenger мониторит время обновления файла tmp/restart.txt)... Redmine перезапустится при запросе следующей страницы.

4. Возвращаем права пользователю Apache...


12 Email конфигурирование

Создайте /opt/redmine/redmine-4.0.2/config/configuration.yml
    cp /opt/redmine/redmine-4.0.2/config/configuration.yml.example  /opt/redmine/redmine-4.0.2/config/configuration.yml
и отредактируйте этот файл, чтобы настроить параметры соединения с почтовым сервером.

C версии 4.0.6 Redmine  асинхронный метод отправки почты включен по умолчанию, поэтому метод отправки "async_smtp" исключен. Правим конфигурацию в файле config/configuration.yml - место «async_smtp» прописываем просто «smtp»:
default:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: "smtp.mail.ru" 
      port: 465
      enable_starttls_auto: true
      ssl: true
      domain: "mail.ru" 
      authentication: :login
      user_name: "your_email@mail.ru" 
      password: "your_password" 

Обязательно нужно указать свой email в config/settings.yml, так как он будет использоваться в поле from:
mail_from:
  default: your_email@mail.ru
Если не указать - будет 5хх ошибка.



13  После обновления версии RUBY or RAILS...

# chown -R redmine:redmine /opt/redmine
# usermod -aG sudo redmine
$ su -l redmine
redmine@...$ cd /opt/redmine/redmine-4.0.7/
redmine@...$ bundle install
# deluser redmine sudo
# chown -R www-data:www-data /opt/redmine
# systemctl reload apache2

...надоело каждый раз выстраивать цепочку.

Комментариев нет:

Отправить комментарий