как узнать версию redmine
Установка Redmine за 15 минут (RVM + RoR + Unicorn + Nginx)
Эта статья является результатом работы по установке и автономизации работы сервера на базе ОС Linux с Redmine по различным источникам (в том числе и по официальной инструкции), часть команд и последовательность действий были взяты из других источников. Все используемые источники указаны в конце статьи.
Введение
В общем задача звучала так: установить Redmine на сервер, где веб-сервер на nginx.
Так как Redmine написан на RoR, то необходимо иметь RoR среду, но проблема в том, что разные RoR приложения могут требовать разные версии окружения. В моем случае необходимо было предусмотреть возможность установки RoR приложений с разным окружением, а значит нужен менеджер версий, который будет разворачивать нужную среду в нужном месте.
Также хотелось классический вариант веб-сервера на nginx. Однако, nginx не знает как исполнять приложение, и в данном случае выступает в качестве прокси на исполняющий веб-сервер RoR приложения.
Теперь задача становится более ясной: установить Redmine на сервер, развернув стек RoR+Unicorn+Nginx, с автоматическим запуском.
Подготовка
Отключение ipv6
Примечание: необязательно, написал потому что мне надо было решить проблему 🙂
Установив на VPS Ubuntu 16.04 при попытке apt-get install не мог получить данные по ipv6 :
Решение: отключить ipv6 добавив соответствующую информацию в /etc/sysctl.conf:
Установка общего софта
curl для установки RVM (Ruby Version Manager):
Примечание: остальное необязательно если читатель пользуется другим софтом для этих дел 🙂
Установка
Получение Redmine
На данный момент самая свежая стабильная версия Redmine 4.1.1. Заходим в директорию /opt/ скачиваем туда архив, распаковываем переименовываем в redmine и удаляем архив:
Теперь путь до Redmine: /opt/redmine/
PostgreSQL
Этот раздел нужен только если Вы выбрали в качестве СУБД PostgreSQL!
Проверим текущую версию пакета в репозитории:
Если все нормально двигаемся дальше, иначе ищем способ установить нужную версию пакета.
Теперь нужно зайти на сервер PostgreSQL (чтобы зайти надо сменить юзера терминала, потому что только юзер postgres может в psql), создать пользователя и базу данных:
Для выхода надо ввести \q
На работе уже использовалась СУБД PostgreSQL, в тоже место предполагалось ставить GitLab (он работает с PostgreSQL), поэтому здесь сделал так.
My SQL
Этот раздел нужен только если Вы выбрали в качестве СУБД MySQL!
Установка сервера MySQL:
Действия с MySQL = 8.0 для пользователя необходимо использовать старый метод аутентификации mysqlnativepassword (и вот еще ссылка):
У меня в одном проекте уже использовалась СУБД MySQL 8, поэтому решил поставить с использованием MySQL.
Сначала надо установить gnupg2 и установить проверочные ключи для установки RVM:
Теперь в директорию /opt/ надо скачать rvm скрипт:
Затем установка самого RVM (из директории /opt/ ):
Окружение Ruby On Rails для текущей сессии терминала можно установить так (а можно и по другому):
Вывод достаточно большой, но нас интересует именно это:
Создадим окружение для Redmine:
Теперь при входе в директорию /opt/redmine/ через терминал, для этой директории будет установлено окружение ruby-2.6.5@redmine :
Настройка и тестовый запуск Redmine
Настройка базы данных
Файл /opt/redmine/config/database.yml.sample является примером как должен выглядеть конфиг подключения к БД. Создадим конфиг:
Запишем в конфиг данные для работы с БД:
Сборка зависимостей и решение проблем
Теперь надо собрать все зависимости RoR приложения:
При сборке RoR приложения в разных условиях могут возникать разные проблемы.
Используя PostgreSQL в качестве СУБД команда bundle может закончится ошибкой связанной с модулем pg :
Решение нашел здесь, а именно:
Для MySQL тоже возникает проблема с модулем mysql2 (детали ошибки аналогичны как и для PostgreSQL). Решение нашлось здесь, а именно:
Еще была проблема с nokogiri, решение нашел здесь, а именно:
Не забываем опять запустить bundle
Инициализация БД
Теперь нужно сделать 5-ый, 6-ой и 7-ой шаги: сгенерировать случайный ключ для сессий, создать структуру БД и инициализировать данные в БД:
Тестовый запуск
Пробуем запустить Redmine на webrick:
Если запуск прошел успешно, то на 3000 порту можно посмотреть сайт ( localhost:3000 или ip:3000 ).
Unicorn
В /opt/redmine/GemFile запишем зависимость:
Создадим конфигурационный файл для unicorn:
И вставляем туда текст конфига:
Создаем директории в соответствии с конфигом и меняем владельца:
Теперь выполнив bundle (если нет ошибок), можно запускать unicorn (из директории /opt/redmine/ ):
Уничтожить процесс unicorn можно по pid файлу :
Nginx
Пишем в конфиг nginx (у меня путь /etc/nginx/nginx.conf ), в секцию http (при этом виртуальные хосты должны быть отключены):
Или вот полный конфиг (для доступа к Redmine по ip адресу):
Если nginx запустился без ошибок, то пробуем обратится на сайт по ip адресу (или по localhost ), Redmine должно работать.
Автозагрузка
Если перезагрузить сервер (или внезапно уничтожить Unicorn), то сам Unicorn автоматически не поднимется, надо это организовать.
Почитать о том, что происходит ниже можно здесь и здесь.
Идем в /etc/systemd/system/ и создаем файл redmine.service :
Создаем файлы скрипты в /opt/redmine/config/ меняем владельца и группу, и ставим права на запуск:
unicorn_stop для остановки сервиса:
unicorn_reload для перезапуска сервиса (останавливаем и запускаем):
Теперь просмотрев статус сервиса можно увидеть:
Техническая информация Easy Redmine
Каковы требования к оборудованию и ПО для работы на сервере?
Рассказываем о минимальных требованиях для Easy Redmine на 25 пользователей. Если у вас будет больше пользователей, прочитайте статью о конфигурации для корпоративного решения.
Аппаратное обеспечение
Процессор: Intel Xeon E5440 @ 2,83 ГГц
Память: 4 Гбайт
Дисковое пространство: 20 Гбайт (3 Гбайт для файлов БД + место для общих документов с учётом индивидуальных потребностей)
Требуется сетевая карта
Программное обеспечение (сервер)
Easy Redmine работает на платформах UNIX и Linux, официально поддерживаемый дистрибутив — Debian. Ниже представлена подробная информация об операционных системах.
истема Easy Redmine НЕ поддерживает Microsoft SQL Server.
Возможна работа на виртуальной машине VMWare, в таком случае заботы о конфигурации мы берём на себя.
Программное обеспечение (клиент)
Мы не проводили полноценное тестирование других браузеров, но и с ними никаких проблем не должно быть. Чтобы обеспечить стабильность и безопасность работы, не забывайте обновлять браузер.
Подключение к интернету
Скорость подключения к серверу, на котором находится Easy Redmine, должна быть не ниже 10 Мбит/с. Следует учитывать весь маршрут от пользователя к серверу, то есть ответ географически удалённого сервера может идти дольше независимо от скорости интернет-соединения пользователя, заявленной провайдером. Другим немаловажным фактором является пропускная способность.
Операционные системы
Debian | Официально поддерживается |
CentOS Ubuntu | Тестируется, но активно не поддерживается |
Другие дистрибутивы Linux | Тестирование не проводилось, особые требования не исключены — не поддерживается |
Windows Server | Не поддерживается |
OS X | Не поддерживается |
Если ваша система не поддерживается, можем предложить хорошее рабочее решение — виртуальную машину (VM) с предустановленной системой Easy Redmine на сервере Debian в формате OVA. Вы сможете запустить приложение с любой ОС. Этим способом пользуются сотни наших клиентов. Чтобы заказать VM, свяжитесь со своим аккаунт-менеджером или с командой поддержки. Подробности читайте в статье о VM.
Debian — единственная операционная система, которая позволяет установить Easy Redmine напрямую (без виртуализации). Инструкции по установке доступны в инсталляционном пакете (/doc/INSTALL).
CentOS и Ubuntu подходят для развёртывания Easy Redmine (это распространённые дистрибутивы Linux). Однако с некоторыми функциями могут быть проблемы. В таком случае служба поддержки Easy Software сделает всё возможное для поиска решения, но без гарантий.
Другие дистрибутивы Linux (к примеру, Red Hat Enterprise Linux (RHEL), OpenSUSE, SELinux, Mint) могут привести к непредвиденным сложностям с установкой и обслуживанием Easy Redmine. Конечно, служба поддержки будет решать проблемы по мере сил, но не сможет ничего гарантировать. В подобных случаях мы всегда готовы настроить для вас VM.
Docker
Мы знаем несколько компаний, которые развернули Easy Redmine на Docker. Однако, они не получают техническую поддержку с нашей стороны и несут полную ответственность за все потенциальные проблемы. Технические специалисты Easy Software посвящают всё своё время обеспечению стабильности и качества работы приложения и не могут решать проблемы, связанные с технологиями сторонних поставщиков, в том числе Docker.
Развертывание и сопровождение Redmine, правильный путь
Дисклеймер: это не обычное руководство вида «Как установить Redmine». В нем я не буду погружаться в настройку базы данных или установку веб-сервера. Я также не буду рассказывать о настройке Redmine. Документация по Redmine в этом плане является достаточно полной. А для того, что не упоминается в официальной документации, есть общая процедура запуска Rails-приложений, которую можно легко найти в Интернете.
Вместо этого речь пойдет о сопровождении собственной, более или менее кастомизированной версии Redmine, которая может быть развернута с помощью одной команды оболочки, когда это необходимо.
Готовы? Тогда начнём.
Отложите сборки типа «все-в-одном» и готовые к запуску виртуальные машины
Установочные пакеты Bitnami или предварительно установленные виртуальные машины хороши для быстрой пробы Redmine, но не подходят для продуктивного использования. Почему? Потому что у них нет обновления. Ой, секундочку, у Bitnami есть. Правда, оно больше похоже на шутку. «Установите новую версию всего стека в другой каталог и переместите туда свои данные» — это не обновление. Ни слова о настройке, кастомизации и плагинах, которые, вероятно, также нужно сохранить и переустановить. Желаю удачи с таким «обновлением».
Релизы патчей Redmine выходят один или два раза в месяц. Исправления ошибок, связанных с безопасностью, выпускаются по мере необходимости — вы же не хотите пропустить их?
Факт, о котором люди часто забывают: время обновления не всегда зависит от вас. Конечно, можно отложить обновление до выхода следующей младшей версии Redmine — на несколько недель (наверное, даже и на более длительный срок). Но вы же не хотите при обнаружении новых проблем безопасности в Redmine или Rails сидеть с непатченной системой, пока не получится освободить время для установки и настройки нового стека Bitnami и вручную переместить все данные?
Установка — это только верхушка айсберга. Обновление — вот что придется делать регулярно.
Поиск простейшего способа установки определенно перестает быть актуальным, как только принимается решение использовать Redmine в производстве. Простое сопровождение и возможность модернизации — вот на чем нужно заострять внимание, чтобы минимизировать затраты и риски, связанные с использованием собственного Redmine.
Ниже я расскажу, как просто поддерживать Redmine в актуальном состоянии.
Используйте Git
Даже если вы намереваетесь запустить стоковый Redmine без каких-либо настроек или плагинов, всё равно используйте репозиторий Git для хранения копии Redmine. По крайней мере, наличие специализированного репозитория даст вам место хранения всего необходимого для развертывания (позже это будет рассмотрено подробнее). Рано или поздно вы (или ваши пользователи) захотите установить какой-нибудь плагин или настраиваемую тему, и для этого уже будет готова инфраструктура. Эксперименты с изменениями и тестирование плагинов и тем в локальных ветвях без нарушений в производственном коде становятся очень простыми при наличии собственного репозитория git c Redmine. Так что сейчас мы начнем с настройки репозитория.
Хотя основной репозиторий Redmine является экземпляром Subversion, на Github есть полуофициальный репозиторий, который поддерживается основным коммиттером и постоянно обновляется. Используйте его для настройки собственного репозитория:
Настройка локального клона Redmine
Измените номер версии 3.2-stable на номер последней стабильной версии Redmine.
Удаленный репозиторий git@yourserver.com должен быть частным, так как в нем будет храниться конфигурация развертывания (а возможно, и прочая информация, публиковать которую не стоит). Поскольку описанный ниже процесс развертывания будет извлекать из этого репозитория код, то репозиторий должен быть доступен во время развертываний, поэтому не размещайте его на настольных компьютерах. Идеальной будет ситуация, когда репозиторий также будет доступен с веб-сервера, на котором происходит развертывание. Но это при необходимости можно обойти.
Пропатчите обновления версий
Время от времени эта восходящая ветвь будет получать некоторые новые коммиты. Ваша задача — включить новые коммиты в локальную ветвь local/3.2-stable для развертывания.
Хотя возможно и просто регулярно дополнять восходящую ветвь, я предлагаю использовать git rebase для поддержки собственного набора изменений поверх стокового кода Redmine:
Перебазирование локальных изменений поверх «голого» Redmine:
Итогом будет являться чистая история, в которой ваши (локальные) коммиты всегда находятся поверх последних (восходящих) коммитов Redmine.
Младшие и старшие обновления
Теперь, когда есть новая стабильная ветвь (скажем, 3.3-stable ), делайте то же самое — перебазируйте ваши изменения поверх неё. Команды git будут немного отличаться из-за изменения восходящей ветви:
Перенос локальных изменений в новую стабильную ветвь
Для новой старшей версии требуется сделать то же самое.
Бог ты мой, у меня конфликты!
Рано или поздно (вероятно, уже во время первого обновления до новой младшей версии) вы столкнетесь с конфликтами слияния. Во время ребазирования Git применяет коммиты один за другим и останавливается каждый раз, когда применение коммита происходит с ошибками. В этом случае команда git status покажет проблемные файлы.
Что дальше?
Теперь, когда рабочий процесс Git настроен должным образом, пришло время автоматизировать развертывание, о котором я расскажу во второй части этого руководства (примечание: перевод второй части будет доступен в течение нескольких дней).
Миграция Redmine на новую версию и одновременно в Docker
Возникла необходимость поставить на Redmine, которым мы пользуемся уже несколько лет, плагин для agile. Redmine хоть и старый (версия 2.4), но в доке от RedmineUP(redmine_agile) указано, что он поддерживает версии с 2.1 по 3.3. То есть должен встать. Но не тут то было.
Пойдя простым путем, то есть действуя по инструкции, закинул плагин в нужную папку, запустил:
Но каменный цветок не вышел. Rake abort вышел. И еще на две экрана выдал ругательств. Покурив много форумов, помучив гугл, и перепробовав разные способы, так и не смог победить этот аборт. Попробовал обновить Redmine (думал в этом проблема), но и обновляться он не захотел.
Так как на Ruby я не спец, то вникать в проблему можно было очень долго. Тут и пришла спасительная мысль — а не попробовать ли Redmine развернуть в Docker’е? Сказано — сделано. Посмотрел какие есть в репозитории образы Redmine, взял sameersbn/redmine и образ для базы sameersbn/mysql. Очень подробный мануал от автора образа: https://github.com/sameersbn/docker-redmine.
Делаем pull образов, запускаем и проверяем, что все работает.
Подключаем volume на хосте /srv/docker/redmine/mysql для хранения базы. Конфиг для переменных среды выносим в файл «config.mysql»:
Делаем линк в контейнер с базой. Публикуем порты 80 и 443 (можно только 443 оставить). Подключаем volume /srv/docker/redmine/redmine для хранения файлов редмайна на хосте. Конфиг выносим в «config.redmine»:
Переменных довольно много можно использовать, весь список у автора образа подробно расписан (спасибо ему, очень качественный readme сделал).
Заводится все с полпинка, при первом старте обновляется схема базы данных. Логинимся в новый инстанс Redmine как admin/admin. Меняем пароль.
Закидываем в папку /srv/docker/redmine/redmine/plugins на хосте нужный нам agile плагин. Перезапускаем образ редмайна. Плагин подхватывается и замечательно работает. Очень хорошо, можно пить кофе и переносить базу со старого редмайна в новый. Делаем дамп старой базы:
Редактируем дамп redmine_sql (так как название базы у нас поменялось), вставляем первой строкой в файле:
Копируем дамп в расшаренный volume на хосте /srv/docker/redmine/mysql. Импортируем дамп в новый инстанс mysql в контейнере:
Кажется, что победа уже близко. В браузере заходим по нужному адресу. Страница отображается. Логинимся в Redmine под админом. И упс… Error 500.
Ну мы не такие наивные, чтобы верить, будто все заработает с первого раза. Нас этим не обломаешь. Смотрим логи. Снова читаем, что умные люди пишут в интернетах. Ага, надо при миграции на новую версию редмайна обновить схему базы. Делаем:
Частично скрипт отрабатывает успешно, но потом вылетает с ошибкой «не могу создать таблицу такую-то, она уже существует». Смотрим, что за таблица, лезем в контейнер с базой, удаляем вредную таблицу. И так несколько раз подряд. Итого удалил следующие:
После этого снова обновляем схему из контейнера с редмайном:
Обновляется без ошибок. Рестартуем образ редмайна. Заходим на страницу, логинимся и вуаля!
Все работает.
Дальше остается полировка. Настраиваем автозапуск контейнеров при старте ОС. Пишем конфиг запуска в systemd:
Мы запускаем контейнер из образа и после прекращения работы удаляем его.
Контейнер с базой просто стартуем, он у нас не удаляется при выключении.
Рестартуем ОС, проверяем, все поднялось и работает. Миграция с Redmine 2.4 до 3.3 с переездом в Docker и установкой плагина agile завершилась успешно.
Environment:
Redmine version 3.3.2.stable
Ruby version 2.1.9-p490 (2016-03-30) [x86_64-linux-gnu]
Rails version 4.2.7.1
Environment production
Database adapter Mysql2
SCM:
Subversion 1.8.8
Darcs 2.8.4
Mercurial 2.8.2
Cvs 1.12.13
Bazaar 2.7.0
Git 2.11.0
Filesystem
Redmine plugins:
redmine_agile 1.4.3
Redmine
Latest releases¶
Resources¶
Установка Redmine¶
Данная документацию по установке Redmine 1.4.0 и выше. Вы все еще можете прочитать документ для 1.3.x здесь.
Требования¶
Операционная система¶
Redmine должен работать на Unix, Linux, Mac, Mac Server и Windows поскольку Ruby доступен для этих платформ. Конкретные инструкции доступны здесь.
Ruby интерпретатор¶
Соответствие версий Ruby и версий Redmine:
Версия Redmine | Поддерживаемая версия Ruby | Необходимая версия Rails |
---|---|---|
текущий trunk | ruby 1.9.3, 2.0.0, 2.1, 2.2 | Rails 4.2 |
3.0 | ruby 1.9.3, 2.0.0, 2.1, 2.2 | Rails 4.2 |
2.6 | ruby 1.8.7, 1.9.2, 1.9.3, 2.0.0, 2.1, 2.2, jruby-1.7.6 | Rails 3.2 |
База данных¶
Не обязательные компоненты¶
Версии Redmine¶
Установка¶
Получите исходный код Redmine, загрузив архив релиза или получив код из хранилища. См. Download.
Redmine использует Bundler для управления зависимостями gems пакетов.
Вам необходимо вначале установить Bundler:
Затем вы можете установить все зависимости требующиеся Redmine. Для этого распаковываете полученный на первом шаге архив релиза в какую-нибудь папку. Делаете эту папку рабочей и устанавливаете зависимости с помощью следующей команды:
не обязательные зависимости¶
RMagick (позволяет использовать ImageMagick для работы с изображениями в при экспорте в PDF и PNG)¶
Если ImageMagick не установлен в вашей системе, вы должны пропустить установку gem-пакета rmagick используя команду:
Если у вас проблемы с установкой rmagick на Windows, посмотрите это HowTo.
Неиспользуемые адаптеры баз данных¶
Вы также можете пропустить установку адаптеров баз данных, которые вы не используете.
Например, если вы используете MySQL, вы можете пропустить установку пакетов PostgreSQL, SQLite с помощью команды:
Дополнительные зависимости ( Gemfile.local )¶
Создайте пустую базу данных и сопутствующего пользователя¶
MySQL¶
Для версий MySQL до 5.0.2 вместо шага create user используйте:
PostgreSQL¶
Скопируйте файл config/database.yml.example в config/database.yml и отредактируйте этот файл так, чтобы настроить параметры базы данных для «production» окружения(реальное окружения, используемое для работы).
Пример для базы данных MySQL, использующей ruby1.8 или jruby:
Пример для базы данных MySQL, использующей ruby1.9 (адаптер должен быть установлен в mysql2 ):
Если ваш сервер не работает со стандартным портом (3306), используйте эту конфигурацию:
Пример для PostgreSQL (порт по-умолчанию):
Этот шаг генерирует случайный ключ, используемый Rails для шифрования хранилища, содержащего данные сессий, тем самым предотвращая их фальсификацию.
Генерация нового ключа сделает недействительными все существующие сеансы после перезагрузки.
Если вы получите вот такую ошибку:
Установите в базу данных конфигурацию по умолчанию, выполнив следующую команду:
Redmine запросит у вас язык набора данных, которые должны быть загружен. Вы можете также перед запуском команды установить в переменную окружения REDMINE_LANG значение, которое будет автоматически использовано в процессе загрузки.
Пользователи Windows могут пропустить этот шаг.
Предполагается, что вы запустили Redmine от пользователя redmine:
Протестируйте установку путем запуска веб-сервера WEBrick:
После старта WEBrick, откройте в браузере http://localhost:3000/. Теперь вы должны увидеть страницу приветствия приложения.
Примечание: Webrick не подходит для нормальной эксплуатации, пожалуйста, используйте WEBrick только для тестирования установки. Не рекомендуется использовать webrick ни для чего кроме разработки. Используйте одно из многих руководств в этой вики для настройки Passenger(также известного как mod_rails ), FCGI или Rack сервер (Unicorn, Thin, Puma, hellip;) для обслуживания вашего redmine.
Используйте учетную запись администратора по умолчанию, чтобы войти:
Теперь вы можете посетить раздел Administration (Администрирование) для изменения настроек приложения.
Настройка¶
Если вам необходимо изменить настройки по-умолчанию, просто скопируйте config/configuration.yml.example в config/configuration.yml и отредактируйте новый файл. Этот файл хорошо прокомментирован, так что смотрите его.
Эти настройки могут быть определены для каждого окружения Rails ( production / development / test ).
: Не забудьте перезапустить приложение после любого изменения.
Настройка Email / SMTP-серверов¶
Настройка email описана на отдельной странице.
Настройки SCM ¶
Переопределение имени команды:
Настройка хранилища вложений¶
Настройка логирования¶
Для использования последнего, необходимо скопировать config/additional_environment.rb.example в config/additional_environment.rb и в нем добавить следующие строки. Отметим, что по умолчанию в файле установлен высокий уровень журналирования, следовательно, должен быть явно установлен в информацию.
Резервное копирование¶
Вот простой скрипт, который может быть использован для создания ежедневных резервных копий (предположим вы используете базу данных MySQL):
Замечания по установке на Windows¶
Существует готовый инсталлятор Ruby MRI, который можно получить http://rubyinstaller.org.
После его установки, выберите Start Command Prompt with Ruby в меню Пуск.
При выполнении команд, описанных в данном руководстве, вы должны установить переменной окружения RAILS_ENV с помощью отдельной команды.
Например команды со следующим синтаксисом:
должны быть превращены в 2-е последовательные команды:
Вам может понадобиться установить gem mysql с помощью команды:
В некоторых случаях необходимо скопировать libmysql.dll в вашу директорию ruby/bin. Не все libmysql.dll подходят, эта похоже работает http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll
Важное замечание для Win7 и последующих
Альтернатива ручной установке¶
Некоторые пользователи предпочитают пропустить ручную установку и использовать один из сторонних пакетов Redmine со страницы загрузки.