Добавить в корзинуПозвонить
Найти в Дзене

ОСН_4. Установка сервера оперативного планирования

Итак, возвращаемся к основной теме. В ходе текущей публикации нам предстоит ознакомиться с установкой очередного кусочка комплексной системы управления проектами - сервера оперативного управления проектами. То есть у нас уже установлена программа для планирования и управления проектом в целом (ранее писал об установке ProjetcLibre). Но этого, разумеется, недостаточно для успешного управления проектом. Ибо где-то в теоретической вселенной может быть и возможно один раз все спланировать, а процесс возьмет и пойдет именно в четким соответствием с планом. В реальном же мире руководителю проекта стоит приличных усилий сделать так, чтобы даже качественно проработанный общий план проекта остался в запланированных параметрах (сроках, себестоимости, маржинальности, параметрах качества и др.). И для этого он сам или посредством помощников занимается оперативным управлением проекта, то есть управлением на уровне отдельных групп задач. Это делается как минимум для того, чтобы в случае начала выход
Оглавление

Итак, возвращаемся к основной теме. В ходе текущей публикации нам предстоит ознакомиться с установкой очередного кусочка комплексной системы управления проектами - сервера оперативного управления проектами.

То есть у нас уже установлена программа для планирования и управления проектом в целом (ранее писал об установке ProjetcLibre). Но этого, разумеется, недостаточно для успешного управления проектом. Ибо где-то в теоретической вселенной может быть и возможно один раз все спланировать, а процесс возьмет и пойдет именно в четким соответствием с планом. В реальном же мире руководителю проекта стоит приличных усилий сделать так, чтобы даже качественно проработанный общий план проекта остался в запланированных параметрах (сроках, себестоимости, маржинальности, параметрах качества и др.). И для этого он сам или посредством помощников занимается оперативным управлением проекта, то есть управлением на уровне отдельных групп задач. Это делается как минимум для того, чтобы в случае начала выхода проекта из параметров быстро предпринять меры для как можно более быстрого возврата в исходные параметры. Но пока отложим и процессы управления, и аналитику в сторону (и для того, и для другого придет время, но чуть позже) и займемся техническим аспектом данного вопроса. А именно - развертыванием ПО для оперативного управления.

Итак, напомню, что в качестве серверной операционной системы была определена ОС Debian на базе GNU/Linux. Установка описана - здесь. Также напомню, что потенциально вместо Debian мы могли выбрать другой линукс, в общем и целом процесс установки практически не изменился бы (хотя определенные нюансы могли бы присутствовать). Также мы будем эмитировать ситуацию, как если бы у нас не было установлено графической оболочки, но был установлен консольный проводник Midnight Commander (о нем была публикация - вот ссылка).

В качестве базы для сервера оперативного управления проектами возьмем Redmine. В качестве СУБД будем использовать MySQL, в качестве web-сервера - Apache. Давайте приступим к установке и убедимся, что ничего сложного и страшного в этом нет.

Установка компонент для Redmine

Установка СУБД MySQL

Первым делом, нужно подключиться к репозитариям MySQL, поскольку в репозитариях Debian 12 установочные пакеты MySQL отсутствуют. Да, есть MariaDB, форк MySQL, и его потенциально можно использовать в качестве СУБД для Redmine (эти две СУБД очень схожи), но для наших целей будем использовать именно MySQL.

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

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

https://dev.mysql.com/downloads/repo/apt/

На открывшейся странице сайта, нужно нажать кнопку «Download»:

-2

На следующей странице сайта жмем ссылке «No thanks, just start my download»:

-3

Далее откроется проводник, вы зададите каталог, куда следует скачать файл (это будет deb-пакет). А дальше запустите его установку, как это было показано в публикации про установку ПО в линуксах.

Однако, мы не будем использовать средства графической оболочки. Сегодня в нашем распоряжении только терминал, а из удобств - только Midnight Commander:

-4

Напомню, что Midnight Commander устанавливается командой «sudo apt install mc».

Кстати, в публикации о данном ПО забыл указать одну очень нужную функцию - скрытие/отображение в терминале, сочетание - «Ctrl+o» (добавлю в соответствую публикацию позже). Эта понадобится для данной публикации.

Поэтому мы поступим немного по-другому:

  • переходим в каталог «/tmp»:
-5

  • с любого другого компьютера заходим на официальный сайт MySQL, на страницу, где предлагается авторизоваться или скачать без авторизации («No thanks, just start my download»). Но не переходим по ссылке, а  только смотрим адрес ссылки (например, жмем правой кнопкой мыши, в контекстом меню выбираем «Копировать адрес ссылки», а далее копируем ее куда-нибудь). В результате получим ссылку на файл:

https://dev.mysql.com/get/mysql-apt-config_0.8.36-1_all.deb

Запоминаем эту ссылку.

  • на сервере скрываем Midnight Commander (Ctrl + o) и выполняем следующую команду:

wget https://dev.mysql.com/get/mysql-apt-config_0.8.36-1_all.deb

-6

Файл для подключения репозитария mysql скачан.

  • устанавливаем (sudo не пишем, так как мы и так под root-ом):

apt install ./mysql-apt-config_0.8.36-1_all.deb

  • на экран будет выдан запрос на уточнение, что конкретно мы планируем ставить. Здесь ничего не надо менять, нужны (1) mysql-x.x-lts и (2) коннекторы. Поэтому просто жмем ОК (3). А затем - ОК (4):
-7

  • перечитываем репозитарии:

apt update

-8

Как видно в подключенных репозитариях появились mysql-репозитарии.

Также на скриншоте видно, что 6 пакетов может быть обновлено, поэтому введем команду на обновление:

apt upgrade

-9

  • установим необходимые пакеты для MySQL:

apt install mysql-server mysql-client libmysqlclient-dev

-10

  • в процессе установки MySQL потребует установить root-пароль. Это root-пароль не на ОС, а именно на MySQL, вводим(1), далее выбираем «ОК» (2), после этого MySQL попросит ввести пароль еще раз:
-11

  • далее делаем настройки безопасности, вводим команду (1):

mysql_secure_installation

система будет задавать вопросы, первый - ввести root-пароль:

-12

  • следующий вопрос - требуется ли валидировать пароль (в переводе на общечеловеческий - надо ли сделать так, чтобы требовались пароли имеющие не менее 8 символов + включались цифры + буквы+спецзнаки). Ответим - нет (на реальной установке - лучше ответить «Да» и придумать пароль, несколько более сложным, чем «123456»):
-13

  • следующий вопрос о том, не хотите ли вы сменить пароль. Отвечаю «Нет» (напоминаю, в данном диалоге речь идет о root MySQL, а не ОС):
-14

  • при установке в MySQL создается анонимный пользователь. MySQL интересуется, а не удалить ли его. Здесь отвечаем «Да»:
-15

  • также MySQL интересуется, не запретить ли root-у коннектиться с другого компьютера. Для реальной установки - лучше запретить, так безопаснее будет (для части административных функций можно создать отдельного пользователя и наделить его этими функциями). Но сейчас оставим такую возможность:
-16

  • также при установке создается тестовая база test. MySQL предлагает удалить ее. Соглашаемся:
-17

  • далее MySQL интересуется, не стоит ли после всех этих операций переприменить права. Отвечаем «Да»:
-18

Проверим установку MySQL. Для этого:

  • залогинимся в MySQL, для этого следует ввести команду:

mysql -u root -p

далее ввести пароль

-19

  • посмотрим, какие пользователи есть в MySQL, для этого введем запрос (1)

select host,user from mysql.user;

-20

Как видно, сервер отвечает (2). Значит можно надеяться, что все ОК.

  • выйдем из MySQL. Для этого следует ввести команду:

exit;

-21

С установкой MySQL закончили (но не с настройкой :)).

Установка web-сервера Apache, phusion passenger и прочих пакетов

Для установки следует ввести:

apt install build-essential libssl-dev libyaml-dev ruby ruby-dev imagemagick libmagickwand-dev apache2 libapache2-mod-passenger

-22

Будет установлено порядка 160 пакетов. Как видно, тут нет ничего сложного, просто вводим команду, подтверждаем установку и ждем, пока ОС установит все эти пакеты.

Установка Redmine

Для начала нужно создать каталог git для скачивания Redmine в /home/myname (напоминаю, каталоги в Midnight Commander создаются нажатием клавишей «F7»):

-23

Далее нужно установить git. Если бы я мог пользоваться графической оболочкой, то можно было бы не устанавливать git, а просто скачать Redmine с GitHub-а. Однако по замыслу, в рамках данной публикации я должен сделать установку, не используя при этом (находясь на сервере) ни мышь, ни графическую оболочку. Поэтому для меня только 2 варианта - либо установка git, либо использование консольного браузера. Выбираем более простой способ в сложившихся условиях - установка через git.

Для установки git выполним команду:

apt install git

-24

Для следующего шага нужно с локального компьютера в браузере найти репозиторий Redmine на github.com. Это будет:

https://github.com/redmine/redmine

Заходим по этой ссылке, кликаем по кнопке «Code» (1) и запоминаем эту ссылку (2):

-25

Но это будет «текущая ветка», а нам, во-первых, нужна стабильная ветка, а во-вторых, нам нужна предпоследняя версия. Дело в том, что в репозитариях Debian 12 содержится ruby версии 3.1. Для последней версии требуется ruby 3.2 и выше. Строго говоря, требуемую версию ruby можно установить. При этом нужен менеджер ruby - RVM, при это сам ruby нужно будет компилировать (хоть это и автоматизировано в RVM, но время занимает), плюс passenger тоже компилируется, причем долго. Иными словами - долго, неудобно, да и еще и систему усложняет. Поэтому так делать не будем. Беспокоиться о том, что мы ставим не самую последнюю версию, не стоит. Поддерживаются 3 последних версии.

Таким образом нам нужен Redmine 6.0. Чтобы посмотреть название ветки нужно кликнуть на кнопку c надписью «master» (1) и прокрутить до предпоследней стабильной (2):

-26

Как видно из скриншота, точное название ветки для 6-ой версии - «6.0-stable».

Далее возвращаемся на наш сервер, заходим в каталог «/home/myname/git», скрываем Midnight Commander (напомню, скрытие/возврат в терминал Midnight Commander осуществляется сочетанием клавиш «Ctrl + o»), в терминале запускаем команду исходя из информации, собранной выше:

git clone --branch 6.0-stable https://github.com/redmine/redmine.git

-27

В результате в каталоге git будет создан каталог redmine, а уже в него будет скачено содержимое ветки 6.0-stable.

Пусть данный каталог останется клоном репозитария. А нам нужно создать рабочий каталог. Для этого просто копируем каталог redmine (1) в каталог «/opt» (2). Напомню, смена активной панели осуществляется кнопкой «Tab», копирование осуществляется кнопкой «F5»:

-28
-29

Итак, все компоненты, которые были необходимы, установлены. Теперь все это дело надо настроить.

Настройка Redmine

Подготовка базы данных для redmine

Нам надо создать пользователя mysql, базу для redmine и настроить доступ созданному пользователю к созданной базы. Для этого:

  • заходим в консоль mysql, для этого в терминале выполнить команду:

mysql -u root -p

ввести пароль

-30

  • создадим пользователя redmine, для этого в консоли mysql выполнить команду (для реальной установки, разумеется, нужно придумать нормальный пароль):

create user 'redmine'@'localhost' identified by '123456';

-31

  • создадим базу данных redmine, для этого в консоли mysql нужно выполнить следующую команду:

create database redmine character set utf8mb4;

-32

  • выдать права доступа пользователю redmine к базе данных redmine, для этого в консоли mysql следует выполнить следующую команду:

grant all privileges on redmine.* to 'redmine'@'localhost';

-33

  • применить изменения прав, для этого выполнить:

flush privileges;

-34

  • выйти из mysql, для этого выполнить команду:

exit

-35

Теперь давайте проверим, может ли войти пользователь redmine в mysql и доступна ли ему БД redmine.

  • входим под пользователем redmine:

mysql -u redmine -p

ввести пароль

-36

Как видно, пользователь redmine успешно зашел в mysql.

  • посмотрим, какие БД доступны пользователю redmine, для этого выполним следующую команду:

show databases;

-37

Как видно, база redmine доступна (так как мы давали полные права на эту базу, если база видна, значит и прочие права есть).

Проверка закончена. Выходим из MySQL ( команда «exit»).

Настройка доступа к каталогу redmine для Apache

Web-сервер Apache работает под пользователем «www-data» нужно сделать так, чтобы данному пользователю были доступны полные права на каталог, где развернут Redmine. Группе и прочим пользователям - на чтение и выполнение.

Или по-другому - сделать владельцем каталога «/opt/redmine» пользователя «www-data», присвоить каталогу группу «www-data» и выдать права 755.

К сожалению, в Midnight Commander нет встроенной функции рекурсивной смены владельца/группы и установки прав. Поэтому будем делать из терминала.

Давайте по-порядку:

  • сменить владельца и включить в соответствующую группу (1):

chown -R www-data:www-data /opt/redmine

  • установить права (владелец - полные, группа и все пользователи - чтение и выполнение) (2):

chmod -R 755 /opt/redmine

-38

Также создадим отдельный каталог для pdf «/opt/redmine/tmp/pdf», присвоить ему того же владельца (www-data), ту же группу (www-data) и те же права (755). Для этого:

  • выводим на экран Midnight Commander («Ctrl + o»), заходим в каталог «/opt/redmine/tmp» и с помощью клавиши «F7» создадим каталог pdf:
-39

  • подсвечиваем курсором созданный каталог pdf (1), далее «F9» --> «Файл»(2) --> «Права (расширенные)», в открывшейся форме (3) права не меняем (они и так 755 (4)), а владельца (5) и группу (6) меняем на «www-data», по окончанию выбрать пункт «Установить» (7):
-40

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

Сначала создадим файл подключения из шаблона. Для этого надо на обеих панелях открыть каталог «/opt/redmine/config» (1), на одной из панелей подсвечиваем курсором файл «database.yml.example» (2), жмем кнопку «F5», в открывшейся форме (3), в поле «в» дописываем путь, чтобы в итоге получилось «/opt/redmine/config/database.yml» (4), в завершении выбираем пункт меню «Дальше» (5):

-41

Теперь созданный файл «database.yml» надо отредактировать. Для этого подсвечиваем его курсором и нажимаем кнопку «F4», при этом Midnight Commander может запросить, какой редактор использовать. В этом случае выбрать пункт 2 (mcedit) и нажать Enter:

-42

Далее файл «database.yml» будет открыт на редактирование, сначала надо удалить все, кроме вот этого блока:

-43

Далее редактируем, нужно указать пользователя (1) (redmine вместо root) и пароль (2) (указать пароль в кавычках, в нашем случае «123456»), после этого нажать кнопку «F2» (то есть сохранить):

-44

Настройка ruby gems

Для начала нужно установить bundler. Bundler - это ПО для управления зависимостями gem-ов в ruby - приложениях (а Redmine - это как раз и есть ruby-приложение). Соответственно gem - это аналог пакета, то есть изолированный код (функция, группа функций...), оформленный отдельным файлом (не знаю, как еще проще сказать).

Выходим из-под root-а (просто закрываем Midnight Commander - кнопка «F10»).

Переходим в каталог «/opt/redmine»:

cd /opt/redmine

Ну и собственно теперь устанавливаем bundler:

sudo gem install bundler

-45

Следующим шагом нам нужно подгрузить и установить все необходимые для Redmine-а gem-ы. Выполняем:

sudo bundle install --without development test

-46

Далее генерируем токен для управления сессиями Redmine:

sudo bundle exec rake generate_secret_token

-47

Наполнение БД данными для работы Redmine

Теперь необходимо создать необходимые объекты БД и наполнить первичными данными, необходимыми для работы Redmine.

Первым делом надо создать объекты в БД, для этого выполняем команду:

sudo RAILS_ENV=production bundle exec rake db:migrate

-48

После этого наполняем БД необходимыми данными, для этого надо выполнить следующую команду:

(1) sudo RAILS_ENV=production bundle exec rake redmine:load_default_data

В процессе система запросит выбрать язык, отвечаем «ru» (2):

-49

Настройка Apache

Открываем Midnight Commander под root-ом (sudo mc) и заходим в каталог /etc/apache2/sites-available, жмем Shift + F4 и делаем конфигурационник для Redmine. Он должен содержать следующее:

<VirtualHost *:80>

ServerName redmine.local

DocumentRoot /opt/redmine/public

<Directory "/opt/redmine/public">

Allow from all

Require all granted

Options -MultiViews

</Directory>

ErrorLog ${APACHE_LOG_DIR}/redmine_error.log

CustomLog ${APACHE_LOG_DIR}/redmine_access.log combined

PassengerRuby /usr/bin/ruby

</VirtualHost>

-50

После того, как внесете в конфигурационник данные, приведенные выше, нужно его сохранить (клавиша «F2»). Далее выходим из редактора («F10»), далее - из Midnight Commander (еще раз «F10»), далее переходим в каталог «/etc/apache2/» (команда «cd /etc/apache2/»).

После этого проверяем конфигурационные файлы на наличие ошибок:

sudo apache2ctl configtest

-51

Запоминаем этот ip-адрес (2). Видим, что конфигурационники без ошибок (3).

После этого подгружаем конфигурационник в Apache:

sudo a2ensite redmine.conf

-52

На всякий случай подгружаем модуль passenger (по идее, он должен быть уже подгружен):

sudo a2enmod passenger

-53

Собственно в нашем случае модуль passenger уже был включен, система об этом сообщает (2).

Выгружаем дефолтный конфигурационник:

sudo a2dissite 000-default.conf

-54

И, наконец, перезагружаем Apache:

sudo systemctl restart apache2

-55

При успешной перезагрузке система не должна выдавать никакой дополнительной информации. То есть должно быть ровно так, как отображено на скриншоте. Если есть какая-либо дополнительная информация, то скорее всего Apache не запустился (там надо смотреть, что конкретно система пишет).

Собственно, на этом развертывание Redmine закончено.

Проверка работоспособности Redmine и настройка доступа для пользователей

Теперь, когда развертывание завершено, «вспоминаем», что у нас на сервере установлена графическая оболочка, а также воспоминаем ip-адрес, который система указала при проверке конфигурационных файлов (127.0.1.1).

Запускаем web-браузер и вводим в адресную строку:

http://127.0.1.1

-56

Как видно, Redmine успешно запускается.

Однако нам нужно, чтобы пользователи могли заходить в Redmine со своих компьютеров (да и кто же позволит им заходить на серверы).

Соответственно, в реальных условиях требуется сделать соответствующую запись в DNS, после этого он будет доступен в локальной сети.

Но поскольку у нас нет DNS-сервера, а есть только виртуальные машины, развернутые на гипервизоре, будем выкручиваться из создавшейся ситуации. Условно, у нас получается такая же ситуация, если бы мы развернули «железный» сервер, развернули пользовательские компьютеры и все это воткнули проводами в роутер (ну либо радиоволнами в WI-FI-роутер :)). То есть оборудование может обращаться друг к другу по ip-адресам, а вот о человекочитаемых именах компьютеры ничего не знают.

Разумеется, выход есть. Для начала узнаем IP-адрес сервера:

hostname -I

-57

В результате нам будут выданы IP-адрес (или в нашем случае - адреса, присвоенные серверу). Пусть это будут 192.168.1.2 и 192.168.3.4.

Выбираем один из них наугад и проверяем, доступен ли в браузере redmine по этому адресу (для примера возьмем 192.168.1.2):

-58

Как видим - Redmine доступен по этому адресу. Запомним ip-адрес.

Ранее мы развертывали Linux Mint для рабочего места РП (ссылка на публикацию). Давайте запустим эту машину и сделаем так, чтобы Redmine был доступен с нее при вводе в адресную строку http://redmine.local

На компьютере Linux Mint открываем терминал и запускаем в нем проводник под root-правами (команда - «sudo caja»), терминал сворачиваем, но не закрываем (иначе проводник тоже закроется):

-59

Переходим в каталог «/etc», для этого жмем кнопку с изображение листа бумаги и карандаша (1) и в адресной строке caja вводим «/etc» (2) , жмем Enter:

-60

Жмем по этому файлу правой кнопкой, открываем в текстовом редакторе:

-61

Вносим в данный файл информацию (разумеется не 192.168.1.2, а тот ip который нам показал сервер):

192.168.1.2 redmine.local

-62

Сохраняем и закрываем редактор.

Открываем браузер, в адресной строке вводим:

http://redmine.local

-63

Как видно, браузер пользовательской машины открывает Redmine при вводе в адресную строку «http://redmine.local».

Таким образом, мы подключили рабочее место РП ко второй компоненте системы управления проектами.

Итоги

Мы установили 2-ю (но не последнюю)ы компоненту системы управления проектами. Как видно, нет ничего сложного в установке Redmine на линуксах, даже если у вас не установлена графическая оболочка.

В рамках данной публикации мы:

  • ознакомились, каким образом устанавливается Redmine и его компоненты;
  • узнали, как установить MySQL, несмотря на то, что его пакетов нет в стандартном репозитарии Debian;
  • узнали о элементарных функциях web-сервера Apache;
  • узнали о еще одном источнике приложений (github);
  • посмотрели на применение Midnight Commander на практических задачах.

По ряду пунктов будут дополнительные публикации во «вбоквелах». По MySQL их будет много, так как очередной компонент системы, который будет рассмотрен далее (но не в ближайших публикациях) - это сервер данных и отчетности. А это, в первую очередь, работа с SQL.

Но и работу с репозитариями тоже надо будет рассмотреть. В рамках публикации было рассмотрено автоматизированное подключение. Однако это можно сделать и «ручками». Тем более, что ничего сложного в этом нет.

Ну и об Apache тоже нужно подробнее поговорить, раскрыть более подробно, как он работает.

Ну и само-собой, будет много публикаций о Redmine. Мы же его только установили. И в таком виде он, конечно, еще не готов к работе. Кроме того (и в первую очередь), нужно еще познакомиться с его стандартной функциональностью.